You've already forked agentic-coding-workflow
feat(acp): add migration 0006 up — agent_kinds + sessions + events + workspaces ALTER
This commit is contained in:
@@ -0,0 +1,75 @@
|
|||||||
|
-- ============ AgentKind ============
|
||||||
|
CREATE TABLE acp_agent_kinds (
|
||||||
|
id UUID PRIMARY KEY,
|
||||||
|
name TEXT NOT NULL UNIQUE,
|
||||||
|
display_name TEXT NOT NULL,
|
||||||
|
description TEXT NOT NULL DEFAULT '',
|
||||||
|
binary_path TEXT NOT NULL,
|
||||||
|
args TEXT[] NOT NULL DEFAULT '{}',
|
||||||
|
encrypted_env BYTEA,
|
||||||
|
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
created_by UUID NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
|
||||||
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||||
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_acp_agent_kinds_enabled ON acp_agent_kinds(enabled) WHERE enabled = TRUE;
|
||||||
|
|
||||||
|
-- ============ Prerequisites for composite FK ============
|
||||||
|
ALTER TABLE issues ADD CONSTRAINT issues_project_id_unique UNIQUE (project_id, id);
|
||||||
|
ALTER TABLE requirements ADD CONSTRAINT requirements_project_id_unique UNIQUE (project_id, id);
|
||||||
|
|
||||||
|
-- ============ Sessions ============
|
||||||
|
CREATE TABLE acp_sessions (
|
||||||
|
id UUID PRIMARY KEY,
|
||||||
|
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
|
||||||
|
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||||||
|
agent_kind_id UUID NOT NULL REFERENCES acp_agent_kinds(id) ON DELETE RESTRICT,
|
||||||
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
|
||||||
|
issue_id UUID,
|
||||||
|
requirement_id UUID,
|
||||||
|
agent_session_id TEXT,
|
||||||
|
branch TEXT NOT NULL,
|
||||||
|
cwd_path TEXT NOT NULL,
|
||||||
|
is_main_worktree BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
|
status TEXT NOT NULL,
|
||||||
|
pid INT,
|
||||||
|
exit_code INT,
|
||||||
|
last_error TEXT,
|
||||||
|
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||||
|
ended_at TIMESTAMPTZ,
|
||||||
|
CONSTRAINT acp_sessions_status_check CHECK (status IN ('starting','running','crashed','exited')),
|
||||||
|
CONSTRAINT acp_sessions_issue_project_fk
|
||||||
|
FOREIGN KEY (project_id, issue_id)
|
||||||
|
REFERENCES issues (project_id, id) MATCH SIMPLE ON DELETE SET NULL,
|
||||||
|
CONSTRAINT acp_sessions_req_project_fk
|
||||||
|
FOREIGN KEY (project_id, requirement_id)
|
||||||
|
REFERENCES requirements (project_id, id) MATCH SIMPLE ON DELETE SET NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_acp_sessions_workspace_status ON acp_sessions(workspace_id, status);
|
||||||
|
CREATE INDEX idx_acp_sessions_user_status ON acp_sessions(user_id, status);
|
||||||
|
CREATE INDEX idx_acp_sessions_issue ON acp_sessions(issue_id) WHERE issue_id IS NOT NULL;
|
||||||
|
CREATE INDEX idx_acp_sessions_requirement ON acp_sessions(requirement_id) WHERE requirement_id IS NOT NULL;
|
||||||
|
|
||||||
|
-- ============ Workspaces main worktree mutex ============
|
||||||
|
ALTER TABLE workspaces ADD COLUMN active_main_session_id UUID;
|
||||||
|
ALTER TABLE workspaces
|
||||||
|
ADD CONSTRAINT workspaces_active_main_session_fk
|
||||||
|
FOREIGN KEY (active_main_session_id)
|
||||||
|
REFERENCES acp_sessions(id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
|
||||||
|
|
||||||
|
-- ============ Events ============
|
||||||
|
CREATE TABLE acp_events (
|
||||||
|
id BIGSERIAL PRIMARY KEY,
|
||||||
|
session_id UUID NOT NULL REFERENCES acp_sessions(id) ON DELETE CASCADE,
|
||||||
|
direction TEXT NOT NULL,
|
||||||
|
rpc_kind TEXT NOT NULL,
|
||||||
|
method TEXT,
|
||||||
|
payload JSONB NOT NULL,
|
||||||
|
payload_size INT NOT NULL,
|
||||||
|
truncated BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||||
|
CONSTRAINT acp_events_direction_check CHECK (direction IN ('in','out')),
|
||||||
|
CONSTRAINT acp_events_kind_check CHECK (rpc_kind IN ('request','response','notification','error'))
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_acp_events_session_id ON acp_events(session_id, id);
|
||||||
|
CREATE INDEX idx_acp_events_created_at ON acp_events(created_at);
|
||||||
Reference in New Issue
Block a user