mirror of https://github.com/kortix-ai/suna.git
70 lines
2.5 KiB
MySQL
70 lines
2.5 KiB
MySQL
|
-- 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);
|