-- Create agents table for storing agent configurations CREATE TABLE IF NOT EXISTS agents ( agent_id UUID PRIMARY KEY DEFAULT gen_random_uuid(), account_id UUID NOT NULL REFERENCES basejump.accounts(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, description TEXT, system_prompt TEXT NOT NULL, configured_mcps JSONB DEFAULT '[]'::jsonb, agentpress_tools JSONB DEFAULT '{}'::jsonb, is_default BOOLEAN DEFAULT false, created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); -- Add indexes for performance CREATE INDEX idx_agents_account_id ON agents(account_id); CREATE INDEX idx_agents_is_default ON agents(is_default); CREATE INDEX idx_agents_created_at ON agents(created_at); -- Add unique constraint to ensure only one default agent per account CREATE UNIQUE INDEX idx_agents_account_default ON agents(account_id, is_default) WHERE is_default = true; -- Create function to update updated_at timestamp CREATE OR REPLACE FUNCTION update_agents_updated_at() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create trigger for updated_at CREATE TRIGGER trigger_agents_updated_at BEFORE UPDATE ON agents FOR EACH ROW EXECUTE FUNCTION update_agents_updated_at(); -- Insert a default agent for each existing account INSERT INTO agents (account_id, name, description, system_prompt, is_default) SELECT id, 'Default Agent', 'Default autonomous development agent', 'You are an autonomous software development agent. You can create, modify, and deploy applications using the tools available to you. Always be helpful, accurate, and efficient in your responses.', true FROM basejump.accounts ON CONFLICT DO NOTHING; -- Add RLS policies ALTER TABLE agents ENABLE ROW LEVEL SECURITY; -- Policy for users to see their own agents CREATE POLICY agents_select_own ON agents FOR SELECT USING (basejump.has_role_on_account(account_id)); -- Policy for users to insert their own agents CREATE POLICY agents_insert_own ON agents FOR INSERT WITH CHECK (basejump.has_role_on_account(account_id, 'owner')); -- Policy for users to update their own agents CREATE POLICY agents_update_own ON agents FOR UPDATE USING (basejump.has_role_on_account(account_id, 'owner')); -- Policy for users to delete their own agents (except default) CREATE POLICY agents_delete_own ON agents FOR DELETE USING (basejump.has_role_on_account(account_id, 'owner') AND is_default = false);