diff --git a/services/gastown/src/db/tables/rig-agents.table.ts b/services/gastown/src/db/tables/rig-agents.table.ts deleted file mode 100644 index cab0311450..0000000000 --- a/services/gastown/src/db/tables/rig-agents.table.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -const AgentRole = z.enum(['polecat', 'refinery', 'mayor']); -const AgentStatus = z.enum(['idle', 'working', 'blocked', 'dead']); - -export const RigAgentRecord = z.object({ - id: z.string(), - rig_id: z.string().nullable(), - role: AgentRole, - name: z.string(), - identity: z.string(), - status: AgentStatus, - current_hook_bead_id: z.string().nullable(), - dispatch_attempts: z.number().default(0), - last_activity_at: z.string().nullable(), - checkpoint: z - .string() - .nullable() - .transform((v): unknown => (v === null ? null : (JSON.parse(v) as unknown))) - .pipe(z.unknown()), - created_at: z.string(), -}); - -export type RigAgentRecord = z.output; - -// TODO: This should be called town_agents -export const rig_agents = getTableFromZodSchema('rig_agents', RigAgentRecord); - -export function createTableRigAgents(): string { - return getCreateTableQueryFromTable(rig_agents, { - id: `text primary key`, - rig_id: `text`, - role: `text not null`, - name: `text not null`, - identity: `text not null unique`, - status: `text not null default 'idle'`, - current_hook_bead_id: `text references rig_beads(id)`, - dispatch_attempts: `integer not null default 0`, - last_activity_at: `text`, - checkpoint: `text`, - created_at: `text not null`, - }); -} diff --git a/services/gastown/src/db/tables/rig-bead-events.table.ts b/services/gastown/src/db/tables/rig-bead-events.table.ts deleted file mode 100644 index 0da2c6f25f..0000000000 --- a/services/gastown/src/db/tables/rig-bead-events.table.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -export const BeadEventType = z.enum([ - 'created', - 'assigned', - 'hooked', - 'unhooked', - 'status_changed', - 'closed', - 'escalated', - 'notification_failed', - 'mail_sent', - 'review_submitted', - 'review_completed', - 'agent_spawned', - 'agent_exited', -]); - -export type BeadEventType = z.infer; - -export const RigBeadEventRecord = z.object({ - id: z.string(), - bead_id: z.string(), - agent_id: z.string().nullable(), - event_type: BeadEventType, - old_value: z.string().nullable(), - new_value: z.string().nullable(), - metadata: z.string().transform((v, ctx): Record => { - try { - return JSON.parse(v) as Record; - } catch { - ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Invalid JSON in metadata' }); - return {}; - } - }), - created_at: z.string(), -}); - -export type RigBeadEventRecord = z.output; - -export const rig_bead_events = getTableFromZodSchema('rig_bead_events', RigBeadEventRecord); - -export function createTableRigBeadEvents(): string { - return getCreateTableQueryFromTable(rig_bead_events, { - id: `text primary key`, - bead_id: `text not null`, - agent_id: `text`, - event_type: `text not null`, - old_value: `text`, - new_value: `text`, - metadata: `text default '{}'`, - created_at: `text not null`, - }); -} - -export function getIndexesRigBeadEvents(): string[] { - return [ - `CREATE INDEX IF NOT EXISTS idx_rig_bead_events_bead ON ${rig_bead_events}(${rig_bead_events.columns.bead_id})`, - `CREATE INDEX IF NOT EXISTS idx_rig_bead_events_created ON ${rig_bead_events}(${rig_bead_events.columns.created_at})`, - `CREATE INDEX IF NOT EXISTS idx_rig_bead_events_type ON ${rig_bead_events}(${rig_bead_events.columns.event_type})`, - ]; -} diff --git a/services/gastown/src/db/tables/rig-beads.table.ts b/services/gastown/src/db/tables/rig-beads.table.ts deleted file mode 100644 index b0e46a2f22..0000000000 --- a/services/gastown/src/db/tables/rig-beads.table.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -const BeadType = z.enum(['issue', 'message', 'escalation', 'merge_request']); -const BeadStatus = z.enum(['open', 'in_progress', 'in_review', 'closed', 'failed']); -const BeadPriority = z.enum(['low', 'medium', 'high', 'critical']); - -export const RigBeadRecord = z.object({ - id: z.string(), - rig_id: z.string().nullable(), - type: BeadType, - status: BeadStatus, - title: z.string(), - body: z.string().nullable(), - assignee_agent_id: z.string().nullable(), - convoy_id: z.string().nullable(), - molecule_id: z.string().nullable(), - priority: BeadPriority, - labels: z.string().transform(v => JSON.parse(v) as string[]), - metadata: z.string().transform(v => JSON.parse(v) as Record), - created_at: z.string(), - updated_at: z.string(), - closed_at: z.string().nullable(), -}); - -export type RigBeadRecord = z.output; - -export const rig_beads = getTableFromZodSchema('rig_beads', RigBeadRecord); - -export function createTableRigBeads(): string { - return getCreateTableQueryFromTable(rig_beads, { - id: `text primary key`, - rig_id: `text`, - type: `text not null`, - status: `text not null default 'open'`, - title: `text not null`, - body: `text`, - assignee_agent_id: `text`, - convoy_id: `text`, - molecule_id: `text`, - priority: `text default 'medium'`, - labels: `text default '[]'`, - metadata: `text default '{}'`, - created_at: `text not null`, - updated_at: `text not null`, - closed_at: `text`, - }); -} - -export function getIndexesRigBeads(): string[] { - return [ - `CREATE INDEX IF NOT EXISTS idx_rig_beads_status ON ${rig_beads}(${rig_beads.columns.status})`, - `CREATE INDEX IF NOT EXISTS idx_rig_beads_type ON ${rig_beads}(${rig_beads.columns.type})`, - `CREATE INDEX IF NOT EXISTS idx_rig_beads_assignee ON ${rig_beads}(${rig_beads.columns.assignee_agent_id})`, - `CREATE INDEX IF NOT EXISTS idx_rig_beads_convoy ON ${rig_beads}(${rig_beads.columns.convoy_id})`, - ]; -} diff --git a/services/gastown/src/db/tables/rig-mail.table.ts b/services/gastown/src/db/tables/rig-mail.table.ts deleted file mode 100644 index c20d4a2393..0000000000 --- a/services/gastown/src/db/tables/rig-mail.table.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -export const RigMailRecord = z.object({ - id: z.string(), - from_agent_id: z.string(), - to_agent_id: z.string(), - subject: z.string(), - body: z.string(), - delivered: z.number().transform(v => Boolean(v)), - created_at: z.string(), - delivered_at: z.string().nullable(), -}); - -export type RigMailRecord = z.output; - -export const rig_mail = getTableFromZodSchema('rig_mail', RigMailRecord); - -export function createTableRigMail(): string { - return getCreateTableQueryFromTable(rig_mail, { - id: `text primary key`, - from_agent_id: `text not null references rig_agents(id)`, - to_agent_id: `text not null references rig_agents(id)`, - subject: `text not null`, - body: `text not null`, - delivered: `integer not null default 0`, - created_at: `text not null`, - delivered_at: `text`, - }); -} - -export function getIndexesRigMail(): string[] { - return [ - `CREATE INDEX IF NOT EXISTS idx_rig_mail_undelivered ON ${rig_mail}(${rig_mail.columns.to_agent_id}) WHERE ${rig_mail.columns.delivered} = 0`, - ]; -} diff --git a/services/gastown/src/db/tables/rig-molecules.table.ts b/services/gastown/src/db/tables/rig-molecules.table.ts deleted file mode 100644 index 663723ae24..0000000000 --- a/services/gastown/src/db/tables/rig-molecules.table.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -const MoleculeStatus = z.enum(['active', 'completed', 'failed']); - -export const RigMoleculeRecord = z.object({ - id: z.string(), - bead_id: z.string(), - formula: z.string().transform(v => JSON.parse(v) as unknown), - current_step: z.number(), - status: MoleculeStatus, - created_at: z.string(), - updated_at: z.string(), -}); - -export type RigMoleculeRecord = z.output; - -export const rig_molecules = getTableFromZodSchema('rig_molecules', RigMoleculeRecord); - -export function createTableRigMolecules(): string { - return getCreateTableQueryFromTable(rig_molecules, { - id: `text primary key`, - bead_id: `text not null references rig_beads(id)`, - formula: `text not null`, - current_step: `integer not null default 0`, - status: `text not null default 'active'`, - created_at: `text not null`, - updated_at: `text not null`, - }); -} diff --git a/services/gastown/src/db/tables/rig-review-queue.table.ts b/services/gastown/src/db/tables/rig-review-queue.table.ts deleted file mode 100644 index 0074fda396..0000000000 --- a/services/gastown/src/db/tables/rig-review-queue.table.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -const ReviewStatus = z.enum(['pending', 'running', 'merged', 'failed']); - -export const RigReviewQueueRecord = z.object({ - id: z.string(), - agent_id: z.string(), - bead_id: z.string(), - branch: z.string(), - pr_url: z.string().nullable(), - status: ReviewStatus, - summary: z.string().nullable(), - created_at: z.string(), - processed_at: z.string().nullable(), -}); - -export type RigReviewQueueRecord = z.output; - -export const rig_review_queue = getTableFromZodSchema('rig_review_queue', RigReviewQueueRecord); - -export function createTableRigReviewQueue(): string { - return getCreateTableQueryFromTable(rig_review_queue, { - id: `text primary key`, - agent_id: `text not null references rig_agents(id)`, - bead_id: `text not null references rig_beads(id)`, - branch: `text not null`, - pr_url: `text`, - status: `text not null default 'pending'`, - summary: `text`, - created_at: `text not null`, - processed_at: `text`, - }); -} diff --git a/services/gastown/src/db/tables/town-escalations.table.ts b/services/gastown/src/db/tables/town-escalations.table.ts deleted file mode 100644 index 88a8449bf1..0000000000 --- a/services/gastown/src/db/tables/town-escalations.table.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { z } from 'zod'; -import { getTableFromZodSchema, getCreateTableQueryFromTable } from '../../util/table'; - -export const EscalationSeverity = z.enum(['low', 'medium', 'high', 'critical']); - -export const TownEscalationRecord = z.object({ - id: z.string(), - source_rig_id: z.string(), - source_agent_id: z.string().nullable(), - severity: EscalationSeverity, - category: z.string().nullable(), - message: z.string(), - acknowledged: z.number(), - re_escalation_count: z.number(), - created_at: z.string(), - acknowledged_at: z.string().nullable(), -}); - -export type TownEscalationRecord = z.output; - -export const town_escalations = getTableFromZodSchema('town_escalations', TownEscalationRecord); - -export function createTableTownEscalations(): string { - return getCreateTableQueryFromTable(town_escalations, { - id: `text primary key`, - source_rig_id: `text not null`, - source_agent_id: `text`, - severity: `text not null`, - category: `text`, - message: `text not null`, - acknowledged: `integer not null default 0`, - re_escalation_count: `integer not null default 0`, - created_at: `text not null`, - acknowledged_at: `text`, - }); -}