@ash-cloud/ash-ai 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1008 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +360 -12
- package/dist/index.d.ts +360 -12
- package/dist/index.js +1007 -42
- package/dist/index.js.map +1 -1
- package/dist/playground.js +689 -684
- package/dist/{schema-DSLyNeoS.d.cts → schema-CAoHu2Rx.d.cts} +159 -2
- package/dist/{schema-DSLyNeoS.d.ts → schema-CAoHu2Rx.d.ts} +159 -2
- package/dist/schema.cjs +36 -1
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +1 -1
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +34 -2
- package/dist/schema.js.map +1 -1
- package/package.json +2 -2
package/dist/schema.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage-postgres/schema.ts"],"names":["pgEnum","pgTable","uuid","text","integer","jsonb","timestamp","index","boolean","relations"],"mappings":"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","file":"schema.cjs","sourcesContent":["/**\n * PostgreSQL Schema for Agent SDK Harness\n *\n * This schema is designed to be:\n * 1. Compatible with @conviction-labs/harness-core types\n * 2. Tenant-agnostic - no multi-tenancy concepts in core\n * 3. Usable standalone for self-hosted deployments\n *\n * Multi-tenancy (organizations, API keys, billing) should be implemented\n * in the cloud layer by:\n * - Creating separate tables that reference these via foreign keys\n * - Or extending these tables in cloud-specific migrations\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uuid,\n jsonb,\n integer,\n index,\n pgEnum,\n boolean,\n} from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\n\n// ============================================================================\n// Enums\n// ============================================================================\n\nexport const sessionStatusEnum = pgEnum('session_status', [\n 'active',\n 'completed',\n 'error',\n 'suspended',\n]);\n\nexport const messageRoleEnum = pgEnum('message_role', [\n 'user',\n 'assistant',\n 'tool',\n 'system',\n]);\n\nexport const agentStatusEnum = pgEnum('agent_status', [\n 'active',\n 'paused',\n 'deleted',\n]);\n\nexport const agentBackendEnum = pgEnum('agent_backend', [\n 'claude',\n 'gemini',\n]);\n\nexport const queueItemStatusEnum = pgEnum('queue_item_status', [\n 'pending',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n]);\n\n// Claude config deployment enums (for .claude directory sync from GitHub)\nexport const configDeploymentStatusEnum = pgEnum('config_deployment_status', [\n 'pending',\n 'success',\n 'failed',\n]);\n\nexport const configDeploymentTriggerEnum = pgEnum('config_deployment_trigger', [\n 'webhook',\n 'manual',\n 'initial',\n 'rollback',\n]);\n\n// Event category enum for session events timeline\nexport const eventCategoryEnum = pgEnum('event_category', [\n 'lifecycle', // session_start, session_end, turn_complete\n 'content', // text_stream (aggregated), thinking_stream\n 'tool', // tool_use, tool_result\n 'system', // mcp_status, sandbox_log\n 'error', // error events\n 'file', // file_push, file_pull, file_sync (file sync operations)\n 'input', // user_input (user prompts/messages)\n 'webhook', // webhook_delivery, webhook_failure (outbound webhook events)\n]);\n\n// ============================================================================\n// Sessions\n// ============================================================================\n\nexport const sessions = pgTable(\n 'sessions',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n agentName: text('agent_name').notNull(),\n status: sessionStatusEnum('status').default('active').notNull(),\n sdkSessionId: text('sdk_session_id'), // Claude Agent SDK session ID for resume\n parentSessionId: uuid('parent_session_id'),\n totalTokens: integer('total_tokens'),\n totalCost: integer('total_cost'), // In cents\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_sessions_tenant').on(table.tenantId),\n index('idx_sessions_agent').on(table.agentName),\n index('idx_sessions_sdk').on(table.sdkSessionId),\n index('idx_sessions_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Messages\n// ============================================================================\n\nexport const messages = pgTable(\n 'messages',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n role: messageRoleEnum('role').notNull(),\n content: jsonb('content').notNull().$type<unknown[]>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_messages_session').on(table.sessionId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Attachments\n// ============================================================================\n\nexport const attachments = pgTable(\n 'attachments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n messageId: uuid('message_id')\n .notNull()\n .references(() => messages.id, { onDelete: 'cascade' }),\n filename: text('filename').notNull(),\n mimeType: text('mime_type').notNull(),\n size: integer('size').notNull(),\n storagePath: text('storage_path').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [index('idx_attachments_message').on(table.messageId)]\n);\n\n// ============================================================================\n// Agents\n// ============================================================================\n\nexport const agents = pgTable(\n 'agents',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n name: text('name').notNull(),\n slug: text('slug').notNull(),\n description: text('description'),\n model: text('model').notNull().default('claude-sonnet-4-5'),\n backend: agentBackendEnum('backend').default('claude').notNull(),\n systemPrompt: text('system_prompt'),\n allowedTools: jsonb('allowed_tools').default([]).$type<string[]>(),\n disallowedTools: jsonb('disallowed_tools').default([]).$type<string[]>(),\n maxTurns: integer('max_turns'),\n permissionMode: text('permission_mode'),\n mcpServers: jsonb('mcp_servers').default({}).$type<Record<string, { command: string; args?: string[] }>>(),\n envVars: jsonb('env_vars').default({}).$type<Record<string, string>>(),\n startupScript: text('startup_script'),\n configFileUrl: text('config_file_url'), // .claude directory zip (skills, commands, agents, hooks, mcp)\n configFileUpdatedAt: timestamp('config_file_updated_at', { withTimezone: true }), // When config was last updated (for cache busting)\n config: jsonb('config').default({}).$type<Record<string, unknown>>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: agentStatusEnum('status').default('active').notNull(),\n // Webhook configuration for execution completion notifications (outbound)\n executionWebhookUrl: text('execution_webhook_url'),\n executionWebhookSecret: text('execution_webhook_secret'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n deletedAt: timestamp('deleted_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_agents_tenant').on(table.tenantId),\n index('idx_agents_slug').on(table.slug),\n index('idx_agents_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Queue Items\n// ============================================================================\n\nexport const queueItems = pgTable(\n 'queue_items',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n sessionId: uuid('session_id').references(() => sessions.id, {\n onDelete: 'cascade',\n }),\n agentName: text('agent_name').notNull(),\n prompt: text('prompt').notNull(),\n files: jsonb('files').$type<Array<{\n filename: string;\n content: string;\n mimeType: string;\n }>>(),\n sessionContext: text('session_context'),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: queueItemStatusEnum('status').default('pending').notNull(),\n priority: integer('priority').default(0).notNull(),\n retryCount: integer('retry_count').default(0).notNull(),\n maxRetries: integer('max_retries').default(3).notNull(),\n error: text('error'),\n resultMessageId: uuid('result_message_id'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_queue_items_tenant').on(table.tenantId),\n index('idx_queue_items_agent').on(table.agentName),\n index('idx_queue_items_session').on(table.sessionId),\n index('idx_queue_items_status').on(table.status),\n index('idx_queue_items_pending').on(table.agentName, table.sessionId, table.status, table.priority, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Config Deployments (history for GitHub-synced .claude directory)\n// ============================================================================\n\nexport const configDeployments = pgTable(\n 'config_deployments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n agentId: uuid('agent_id')\n .notNull()\n .references(() => agents.id, { onDelete: 'cascade' }),\n\n // Git commit info\n commitSha: text('commit_sha').notNull(),\n commitMessage: text('commit_message'),\n commitAuthor: text('commit_author'),\n commitTimestamp: timestamp('commit_timestamp', { withTimezone: true }),\n\n // Deployment status\n status: configDeploymentStatusEnum('status').default('pending').notNull(),\n errorMessage: text('error_message'),\n\n // Config file info (zipped .claude directory)\n configFileUrl: text('config_file_url'),\n configFileSize: integer('config_file_size'),\n\n // Content manifest - what's included in this deployment\n manifest: jsonb('manifest').default({}).$type<{\n hasSkills?: boolean;\n skillsCount?: number;\n hasCommands?: boolean;\n commandsCount?: number;\n hasAgents?: boolean;\n agentsCount?: number;\n hasHooks?: boolean;\n hasMcpConfig?: boolean;\n mcpServersCount?: number;\n }>(),\n\n // Trigger info\n triggeredBy: configDeploymentTriggerEnum('triggered_by').notNull(),\n rollbackFromId: uuid('rollback_from_id'), // If this was a rollback, which deployment it came from\n\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_config_deployments_agent').on(table.agentId),\n index('idx_config_deployments_status').on(table.status),\n index('idx_config_deployments_created').on(table.agentId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Session Events (Timeline)\n// ============================================================================\n\nexport const sessionEvents = pgTable(\n 'session_events',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n category: eventCategoryEnum('category').notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }).notNull(),\n endedAt: timestamp('ended_at', { withTimezone: true }),\n durationMs: integer('duration_ms'),\n eventData: jsonb('event_data').default({}).$type<Record<string, unknown>>(),\n // Tool-specific fields\n toolUseId: text('tool_use_id'),\n toolName: text('tool_name'),\n // Aggregation fields (for text_stream events)\n isAggregated: boolean('is_aggregated').default(false),\n aggregatedCount: integer('aggregated_count'),\n // Ordering\n sequenceNumber: integer('sequence_number').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_session_events_session').on(table.sessionId, table.sequenceNumber),\n index('idx_session_events_category').on(table.sessionId, table.category),\n ]\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const sessionsRelations = relations(sessions, ({ one, many }) => ({\n parentSession: one(sessions, {\n fields: [sessions.parentSessionId],\n references: [sessions.id],\n relationName: 'parentSession',\n }),\n childSessions: many(sessions, {\n relationName: 'parentSession',\n }),\n messages: many(messages),\n events: many(sessionEvents),\n}));\n\nexport const sessionEventsRelations = relations(sessionEvents, ({ one }) => ({\n session: one(sessions, {\n fields: [sessionEvents.sessionId],\n references: [sessions.id],\n }),\n}));\n\nexport const messagesRelations = relations(messages, ({ one, many }) => ({\n session: one(sessions, {\n fields: [messages.sessionId],\n references: [sessions.id],\n }),\n attachments: many(attachments),\n}));\n\nexport const attachmentsRelations = relations(attachments, ({ one }) => ({\n message: one(messages, {\n fields: [attachments.messageId],\n references: [messages.id],\n }),\n}));\n\nexport const configDeploymentsRelations = relations(configDeployments, ({ one }) => ({\n agent: one(agents, {\n fields: [configDeployments.agentId],\n references: [agents.id],\n }),\n}));\n\nexport const agentsRelations = relations(agents, ({ many }) => ({\n configDeployments: many(configDeployments),\n}));\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SessionRow = typeof sessions.$inferSelect;\nexport type NewSessionRow = typeof sessions.$inferInsert;\n\nexport type MessageRow = typeof messages.$inferSelect;\nexport type NewMessageRow = typeof messages.$inferInsert;\n\nexport type AttachmentRow = typeof attachments.$inferSelect;\nexport type NewAttachmentRow = typeof attachments.$inferInsert;\n\nexport type AgentRow = typeof agents.$inferSelect;\nexport type NewAgentRow = typeof agents.$inferInsert;\n\nexport type QueueItemRow = typeof queueItems.$inferSelect;\nexport type NewQueueItemRow = typeof queueItems.$inferInsert;\n\nexport type ConfigDeploymentRow = typeof configDeployments.$inferSelect;\nexport type NewConfigDeploymentRow = typeof configDeployments.$inferInsert;\n\nexport type SessionEventRow = typeof sessionEvents.$inferSelect;\nexport type NewSessionEventRow = typeof sessionEvents.$inferInsert;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage-postgres/schema.ts"],"names":["pgEnum","pgTable","uuid","text","integer","jsonb","timestamp","index","boolean","relations"],"mappings":"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","file":"schema.cjs","sourcesContent":["/**\n * PostgreSQL Schema for Agent SDK Harness\n *\n * This schema is designed to be:\n * 1. Compatible with @conviction-labs/harness-core types\n * 2. Tenant-agnostic - no multi-tenancy concepts in core\n * 3. Usable standalone for self-hosted deployments\n *\n * Multi-tenancy (organizations, API keys, billing) should be implemented\n * in the cloud layer by:\n * - Creating separate tables that reference these via foreign keys\n * - Or extending these tables in cloud-specific migrations\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uuid,\n jsonb,\n integer,\n index,\n pgEnum,\n boolean,\n} from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\n\n// ============================================================================\n// Enums\n// ============================================================================\n\nexport const sessionStatusEnum = pgEnum('session_status', [\n 'active',\n 'completed',\n 'error',\n 'suspended',\n]);\n\nexport const messageRoleEnum = pgEnum('message_role', [\n 'user',\n 'assistant',\n 'tool',\n 'system',\n]);\n\nexport const agentStatusEnum = pgEnum('agent_status', [\n 'active',\n 'paused',\n 'deleted',\n]);\n\nexport const agentBackendEnum = pgEnum('agent_backend', [\n 'claude',\n 'gemini',\n]);\n\nexport const queueItemStatusEnum = pgEnum('queue_item_status', [\n 'pending',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n]);\n\n// Claude config deployment enums (for .claude directory sync from GitHub)\nexport const configDeploymentStatusEnum = pgEnum('config_deployment_status', [\n 'pending',\n 'success',\n 'failed',\n]);\n\nexport const configDeploymentTriggerEnum = pgEnum('config_deployment_trigger', [\n 'webhook',\n 'manual',\n 'initial',\n 'rollback',\n]);\n\n// Event source enum for distinguishing event origins\nexport const eventSourceEnum = pgEnum('event_source', [\n 'agent', // Directly from the agent SDK\n 'system', // Generated by execution layer (lifecycle, user input)\n 'derived', // Transformed/aggregated from agent events\n]);\n\n// Event category enum for session events timeline\nexport const eventCategoryEnum = pgEnum('event_category', [\n 'lifecycle', // session_start, session_end, turn_complete\n 'content', // text_stream (aggregated), thinking_stream\n 'tool', // tool_use, tool_result\n 'system', // mcp_status, sandbox_log\n 'error', // error events\n 'file', // file_push, file_pull, file_sync (file sync operations)\n 'input', // user_input (user prompts/messages)\n 'webhook', // webhook_delivery, webhook_failure (outbound webhook events)\n]);\n\n// ============================================================================\n// Sessions\n// ============================================================================\n\nexport const sessions = pgTable(\n 'sessions',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n agentName: text('agent_name').notNull(),\n status: sessionStatusEnum('status').default('active').notNull(),\n sdkSessionId: text('sdk_session_id'), // Claude Agent SDK session ID for resume\n parentSessionId: uuid('parent_session_id'),\n totalTokens: integer('total_tokens'),\n totalCost: integer('total_cost'), // In cents\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_sessions_tenant').on(table.tenantId),\n index('idx_sessions_agent').on(table.agentName),\n index('idx_sessions_sdk').on(table.sdkSessionId),\n index('idx_sessions_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Messages\n// ============================================================================\n\nexport const messages = pgTable(\n 'messages',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n role: messageRoleEnum('role').notNull(),\n content: jsonb('content').notNull().$type<unknown[]>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_messages_session').on(table.sessionId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Attachments\n// ============================================================================\n\nexport const attachments = pgTable(\n 'attachments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n messageId: uuid('message_id')\n .notNull()\n .references(() => messages.id, { onDelete: 'cascade' }),\n filename: text('filename').notNull(),\n mimeType: text('mime_type').notNull(),\n size: integer('size').notNull(),\n storagePath: text('storage_path').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [index('idx_attachments_message').on(table.messageId)]\n);\n\n// ============================================================================\n// Agents\n// ============================================================================\n\nexport const agents = pgTable(\n 'agents',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n name: text('name').notNull(),\n slug: text('slug').notNull(),\n description: text('description'),\n model: text('model').notNull().default('claude-sonnet-4-5'),\n backend: agentBackendEnum('backend').default('claude').notNull(),\n systemPrompt: text('system_prompt'),\n allowedTools: jsonb('allowed_tools').default([]).$type<string[]>(),\n disallowedTools: jsonb('disallowed_tools').default([]).$type<string[]>(),\n maxTurns: integer('max_turns'),\n permissionMode: text('permission_mode'),\n mcpServers: jsonb('mcp_servers').default({}).$type<Record<string, { command: string; args?: string[] }>>(),\n envVars: jsonb('env_vars').default({}).$type<Record<string, string>>(),\n startupScript: text('startup_script'),\n configFileUrl: text('config_file_url'), // .claude directory zip (skills, commands, agents, hooks, mcp)\n configFileUpdatedAt: timestamp('config_file_updated_at', { withTimezone: true }), // When config was last updated (for cache busting)\n config: jsonb('config').default({}).$type<Record<string, unknown>>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: agentStatusEnum('status').default('active').notNull(),\n // Webhook configuration for execution completion notifications (outbound)\n executionWebhookUrl: text('execution_webhook_url'),\n executionWebhookSecret: text('execution_webhook_secret'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n deletedAt: timestamp('deleted_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_agents_tenant').on(table.tenantId),\n index('idx_agents_slug').on(table.slug),\n index('idx_agents_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Queue Items\n// ============================================================================\n\nexport const queueItems = pgTable(\n 'queue_items',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n sessionId: uuid('session_id').references(() => sessions.id, {\n onDelete: 'cascade',\n }),\n agentName: text('agent_name').notNull(),\n prompt: text('prompt').notNull(),\n files: jsonb('files').$type<Array<{\n filename: string;\n content: string;\n mimeType: string;\n }>>(),\n sessionContext: text('session_context'),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: queueItemStatusEnum('status').default('pending').notNull(),\n priority: integer('priority').default(0).notNull(),\n retryCount: integer('retry_count').default(0).notNull(),\n maxRetries: integer('max_retries').default(3).notNull(),\n error: text('error'),\n resultMessageId: uuid('result_message_id'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_queue_items_tenant').on(table.tenantId),\n index('idx_queue_items_agent').on(table.agentName),\n index('idx_queue_items_session').on(table.sessionId),\n index('idx_queue_items_status').on(table.status),\n index('idx_queue_items_pending').on(table.agentName, table.sessionId, table.status, table.priority, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Config Deployments (history for GitHub-synced .claude directory)\n// ============================================================================\n\nexport const configDeployments = pgTable(\n 'config_deployments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n agentId: uuid('agent_id')\n .notNull()\n .references(() => agents.id, { onDelete: 'cascade' }),\n\n // Git commit info\n commitSha: text('commit_sha').notNull(),\n commitMessage: text('commit_message'),\n commitAuthor: text('commit_author'),\n commitTimestamp: timestamp('commit_timestamp', { withTimezone: true }),\n\n // Deployment status\n status: configDeploymentStatusEnum('status').default('pending').notNull(),\n errorMessage: text('error_message'),\n\n // Config file info (zipped .claude directory)\n configFileUrl: text('config_file_url'),\n configFileSize: integer('config_file_size'),\n\n // Content manifest - what's included in this deployment\n manifest: jsonb('manifest').default({}).$type<{\n hasSkills?: boolean;\n skillsCount?: number;\n hasCommands?: boolean;\n commandsCount?: number;\n hasAgents?: boolean;\n agentsCount?: number;\n hasHooks?: boolean;\n hasMcpConfig?: boolean;\n mcpServersCount?: number;\n }>(),\n\n // Trigger info\n triggeredBy: configDeploymentTriggerEnum('triggered_by').notNull(),\n rollbackFromId: uuid('rollback_from_id'), // If this was a rollback, which deployment it came from\n\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_config_deployments_agent').on(table.agentId),\n index('idx_config_deployments_status').on(table.status),\n index('idx_config_deployments_created').on(table.agentId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Session Events (Timeline)\n// ============================================================================\n\nexport const sessionEvents = pgTable(\n 'session_events',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n category: eventCategoryEnum('category').notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }).notNull(),\n endedAt: timestamp('ended_at', { withTimezone: true }),\n durationMs: integer('duration_ms'),\n eventData: jsonb('event_data').default({}).$type<Record<string, unknown>>(),\n // Tool-specific fields\n toolUseId: text('tool_use_id'),\n toolName: text('tool_name'),\n // Aggregation fields (for text_stream events)\n isAggregated: boolean('is_aggregated').default(false),\n aggregatedCount: integer('aggregated_count'),\n // Event source tagging\n eventSource: eventSourceEnum('event_source').notNull().default('agent'),\n // Ordering\n sequenceNumber: integer('sequence_number').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_session_events_session').on(table.sessionId, table.sequenceNumber),\n index('idx_session_events_category').on(table.sessionId, table.category),\n ]\n);\n\n// ============================================================================\n// Stream Events (SSE Relay)\n// ============================================================================\n\nexport const streamEvents = pgTable(\n 'stream_events',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n sequence: integer('sequence').notNull(),\n eventType: text('event_type').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n batchCount: integer('batch_count').default(1).notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_stream_events_session_seq').on(table.sessionId, table.sequence),\n ]\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const sessionsRelations = relations(sessions, ({ one, many }) => ({\n parentSession: one(sessions, {\n fields: [sessions.parentSessionId],\n references: [sessions.id],\n relationName: 'parentSession',\n }),\n childSessions: many(sessions, {\n relationName: 'parentSession',\n }),\n messages: many(messages),\n events: many(sessionEvents),\n streamEvents: many(streamEvents),\n}));\n\nexport const sessionEventsRelations = relations(sessionEvents, ({ one }) => ({\n session: one(sessions, {\n fields: [sessionEvents.sessionId],\n references: [sessions.id],\n }),\n}));\n\nexport const messagesRelations = relations(messages, ({ one, many }) => ({\n session: one(sessions, {\n fields: [messages.sessionId],\n references: [sessions.id],\n }),\n attachments: many(attachments),\n}));\n\nexport const attachmentsRelations = relations(attachments, ({ one }) => ({\n message: one(messages, {\n fields: [attachments.messageId],\n references: [messages.id],\n }),\n}));\n\nexport const configDeploymentsRelations = relations(configDeployments, ({ one }) => ({\n agent: one(agents, {\n fields: [configDeployments.agentId],\n references: [agents.id],\n }),\n}));\n\nexport const streamEventsRelations = relations(streamEvents, ({ one }) => ({\n session: one(sessions, {\n fields: [streamEvents.sessionId],\n references: [sessions.id],\n }),\n}));\n\nexport const agentsRelations = relations(agents, ({ many }) => ({\n configDeployments: many(configDeployments),\n}));\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SessionRow = typeof sessions.$inferSelect;\nexport type NewSessionRow = typeof sessions.$inferInsert;\n\nexport type MessageRow = typeof messages.$inferSelect;\nexport type NewMessageRow = typeof messages.$inferInsert;\n\nexport type AttachmentRow = typeof attachments.$inferSelect;\nexport type NewAttachmentRow = typeof attachments.$inferInsert;\n\nexport type AgentRow = typeof agents.$inferSelect;\nexport type NewAgentRow = typeof agents.$inferInsert;\n\nexport type QueueItemRow = typeof queueItems.$inferSelect;\nexport type NewQueueItemRow = typeof queueItems.$inferInsert;\n\nexport type ConfigDeploymentRow = typeof configDeployments.$inferSelect;\nexport type NewConfigDeploymentRow = typeof configDeployments.$inferInsert;\n\nexport type SessionEventRow = typeof sessionEvents.$inferSelect;\nexport type NewSessionEventRow = typeof sessionEvents.$inferInsert;\n\nexport type StreamEventRow = typeof streamEvents.$inferSelect;\nexport type NewStreamEventRow = typeof streamEvents.$inferInsert;\n"]}
|
package/dist/schema.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { H as AgentRow, A as AttachmentRow, J as ConfigDeploymentRow, M as MessageRow, I as NewAgentRow, b as NewAttachmentRow, K as NewConfigDeploymentRow, a as NewMessageRow, c as NewQueueItemRow, e as NewSessionEventRow, N as NewSessionRow, g as NewStreamEventRow, Q as QueueItemRow, d as SessionEventRow, S as SessionRow, f as StreamEventRow, j as agentBackendEnum, i as agentStatusEnum, u as agents, G as agentsRelations, t as attachments, D as attachmentsRelations, k as configDeploymentStatusEnum, l as configDeploymentTriggerEnum, w as configDeployments, E as configDeploymentsRelations, o as eventCategoryEnum, n as eventSourceEnum, m as messageRoleEnum, r as messages, C as messagesRelations, q as queueItemStatusEnum, v as queueItems, x as sessionEvents, B as sessionEventsRelations, h as sessionStatusEnum, p as sessions, z as sessionsRelations, y as streamEvents, F as streamEventsRelations } from './schema-CAoHu2Rx.cjs';
|
|
2
2
|
import 'drizzle-orm';
|
|
3
3
|
import 'drizzle-orm/pg-core';
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { H as AgentRow, A as AttachmentRow, J as ConfigDeploymentRow, M as MessageRow, I as NewAgentRow, b as NewAttachmentRow, K as NewConfigDeploymentRow, a as NewMessageRow, c as NewQueueItemRow, e as NewSessionEventRow, N as NewSessionRow, g as NewStreamEventRow, Q as QueueItemRow, d as SessionEventRow, S as SessionRow, f as StreamEventRow, j as agentBackendEnum, i as agentStatusEnum, u as agents, G as agentsRelations, t as attachments, D as attachmentsRelations, k as configDeploymentStatusEnum, l as configDeploymentTriggerEnum, w as configDeployments, E as configDeploymentsRelations, o as eventCategoryEnum, n as eventSourceEnum, m as messageRoleEnum, r as messages, C as messagesRelations, q as queueItemStatusEnum, v as queueItems, x as sessionEvents, B as sessionEventsRelations, h as sessionStatusEnum, p as sessions, z as sessionsRelations, y as streamEvents, F as streamEventsRelations } from './schema-CAoHu2Rx.js';
|
|
2
2
|
import 'drizzle-orm';
|
|
3
3
|
import 'drizzle-orm/pg-core';
|
package/dist/schema.js
CHANGED
|
@@ -41,6 +41,14 @@ var configDeploymentTriggerEnum = pgEnum("config_deployment_trigger", [
|
|
|
41
41
|
"initial",
|
|
42
42
|
"rollback"
|
|
43
43
|
]);
|
|
44
|
+
var eventSourceEnum = pgEnum("event_source", [
|
|
45
|
+
"agent",
|
|
46
|
+
// Directly from the agent SDK
|
|
47
|
+
"system",
|
|
48
|
+
// Generated by execution layer (lifecycle, user input)
|
|
49
|
+
"derived"
|
|
50
|
+
// Transformed/aggregated from agent events
|
|
51
|
+
]);
|
|
44
52
|
var eventCategoryEnum = pgEnum("event_category", [
|
|
45
53
|
"lifecycle",
|
|
46
54
|
// session_start, session_end, turn_complete
|
|
@@ -231,6 +239,8 @@ var sessionEvents = pgTable(
|
|
|
231
239
|
// Aggregation fields (for text_stream events)
|
|
232
240
|
isAggregated: boolean("is_aggregated").default(false),
|
|
233
241
|
aggregatedCount: integer("aggregated_count"),
|
|
242
|
+
// Event source tagging
|
|
243
|
+
eventSource: eventSourceEnum("event_source").notNull().default("agent"),
|
|
234
244
|
// Ordering
|
|
235
245
|
sequenceNumber: integer("sequence_number").notNull(),
|
|
236
246
|
createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull()
|
|
@@ -240,6 +250,21 @@ var sessionEvents = pgTable(
|
|
|
240
250
|
index("idx_session_events_category").on(table.sessionId, table.category)
|
|
241
251
|
]
|
|
242
252
|
);
|
|
253
|
+
var streamEvents = pgTable(
|
|
254
|
+
"stream_events",
|
|
255
|
+
{
|
|
256
|
+
id: uuid("id").defaultRandom().primaryKey(),
|
|
257
|
+
sessionId: uuid("session_id").notNull().references(() => sessions.id, { onDelete: "cascade" }),
|
|
258
|
+
sequence: integer("sequence").notNull(),
|
|
259
|
+
eventType: text("event_type").notNull(),
|
|
260
|
+
payload: jsonb("payload").notNull().$type(),
|
|
261
|
+
batchCount: integer("batch_count").default(1).notNull(),
|
|
262
|
+
createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull()
|
|
263
|
+
},
|
|
264
|
+
(table) => [
|
|
265
|
+
index("idx_stream_events_session_seq").on(table.sessionId, table.sequence)
|
|
266
|
+
]
|
|
267
|
+
);
|
|
243
268
|
var sessionsRelations = relations(sessions, ({ one, many }) => ({
|
|
244
269
|
parentSession: one(sessions, {
|
|
245
270
|
fields: [sessions.parentSessionId],
|
|
@@ -250,7 +275,8 @@ var sessionsRelations = relations(sessions, ({ one, many }) => ({
|
|
|
250
275
|
relationName: "parentSession"
|
|
251
276
|
}),
|
|
252
277
|
messages: many(messages),
|
|
253
|
-
events: many(sessionEvents)
|
|
278
|
+
events: many(sessionEvents),
|
|
279
|
+
streamEvents: many(streamEvents)
|
|
254
280
|
}));
|
|
255
281
|
var sessionEventsRelations = relations(sessionEvents, ({ one }) => ({
|
|
256
282
|
session: one(sessions, {
|
|
@@ -277,10 +303,16 @@ var configDeploymentsRelations = relations(configDeployments, ({ one }) => ({
|
|
|
277
303
|
references: [agents.id]
|
|
278
304
|
})
|
|
279
305
|
}));
|
|
306
|
+
var streamEventsRelations = relations(streamEvents, ({ one }) => ({
|
|
307
|
+
session: one(sessions, {
|
|
308
|
+
fields: [streamEvents.sessionId],
|
|
309
|
+
references: [sessions.id]
|
|
310
|
+
})
|
|
311
|
+
}));
|
|
280
312
|
var agentsRelations = relations(agents, ({ many }) => ({
|
|
281
313
|
configDeployments: many(configDeployments)
|
|
282
314
|
}));
|
|
283
315
|
|
|
284
|
-
export { agentBackendEnum, agentStatusEnum, agents, agentsRelations, attachments, attachmentsRelations, configDeploymentStatusEnum, configDeploymentTriggerEnum, configDeployments, configDeploymentsRelations, eventCategoryEnum, messageRoleEnum, messages, messagesRelations, queueItemStatusEnum, queueItems, sessionEvents, sessionEventsRelations, sessionStatusEnum, sessions, sessionsRelations };
|
|
316
|
+
export { agentBackendEnum, agentStatusEnum, agents, agentsRelations, attachments, attachmentsRelations, configDeploymentStatusEnum, configDeploymentTriggerEnum, configDeployments, configDeploymentsRelations, eventCategoryEnum, eventSourceEnum, messageRoleEnum, messages, messagesRelations, queueItemStatusEnum, queueItems, sessionEvents, sessionEventsRelations, sessionStatusEnum, sessions, sessionsRelations, streamEvents, streamEventsRelations };
|
|
285
317
|
//# sourceMappingURL=schema.js.map
|
|
286
318
|
//# sourceMappingURL=schema.js.map
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage-postgres/schema.ts"],"names":[],"mappings":"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","file":"schema.js","sourcesContent":["/**\n * PostgreSQL Schema for Agent SDK Harness\n *\n * This schema is designed to be:\n * 1. Compatible with @conviction-labs/harness-core types\n * 2. Tenant-agnostic - no multi-tenancy concepts in core\n * 3. Usable standalone for self-hosted deployments\n *\n * Multi-tenancy (organizations, API keys, billing) should be implemented\n * in the cloud layer by:\n * - Creating separate tables that reference these via foreign keys\n * - Or extending these tables in cloud-specific migrations\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uuid,\n jsonb,\n integer,\n index,\n pgEnum,\n boolean,\n} from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\n\n// ============================================================================\n// Enums\n// ============================================================================\n\nexport const sessionStatusEnum = pgEnum('session_status', [\n 'active',\n 'completed',\n 'error',\n 'suspended',\n]);\n\nexport const messageRoleEnum = pgEnum('message_role', [\n 'user',\n 'assistant',\n 'tool',\n 'system',\n]);\n\nexport const agentStatusEnum = pgEnum('agent_status', [\n 'active',\n 'paused',\n 'deleted',\n]);\n\nexport const agentBackendEnum = pgEnum('agent_backend', [\n 'claude',\n 'gemini',\n]);\n\nexport const queueItemStatusEnum = pgEnum('queue_item_status', [\n 'pending',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n]);\n\n// Claude config deployment enums (for .claude directory sync from GitHub)\nexport const configDeploymentStatusEnum = pgEnum('config_deployment_status', [\n 'pending',\n 'success',\n 'failed',\n]);\n\nexport const configDeploymentTriggerEnum = pgEnum('config_deployment_trigger', [\n 'webhook',\n 'manual',\n 'initial',\n 'rollback',\n]);\n\n// Event category enum for session events timeline\nexport const eventCategoryEnum = pgEnum('event_category', [\n 'lifecycle', // session_start, session_end, turn_complete\n 'content', // text_stream (aggregated), thinking_stream\n 'tool', // tool_use, tool_result\n 'system', // mcp_status, sandbox_log\n 'error', // error events\n 'file', // file_push, file_pull, file_sync (file sync operations)\n 'input', // user_input (user prompts/messages)\n 'webhook', // webhook_delivery, webhook_failure (outbound webhook events)\n]);\n\n// ============================================================================\n// Sessions\n// ============================================================================\n\nexport const sessions = pgTable(\n 'sessions',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n agentName: text('agent_name').notNull(),\n status: sessionStatusEnum('status').default('active').notNull(),\n sdkSessionId: text('sdk_session_id'), // Claude Agent SDK session ID for resume\n parentSessionId: uuid('parent_session_id'),\n totalTokens: integer('total_tokens'),\n totalCost: integer('total_cost'), // In cents\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_sessions_tenant').on(table.tenantId),\n index('idx_sessions_agent').on(table.agentName),\n index('idx_sessions_sdk').on(table.sdkSessionId),\n index('idx_sessions_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Messages\n// ============================================================================\n\nexport const messages = pgTable(\n 'messages',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n role: messageRoleEnum('role').notNull(),\n content: jsonb('content').notNull().$type<unknown[]>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_messages_session').on(table.sessionId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Attachments\n// ============================================================================\n\nexport const attachments = pgTable(\n 'attachments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n messageId: uuid('message_id')\n .notNull()\n .references(() => messages.id, { onDelete: 'cascade' }),\n filename: text('filename').notNull(),\n mimeType: text('mime_type').notNull(),\n size: integer('size').notNull(),\n storagePath: text('storage_path').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [index('idx_attachments_message').on(table.messageId)]\n);\n\n// ============================================================================\n// Agents\n// ============================================================================\n\nexport const agents = pgTable(\n 'agents',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n name: text('name').notNull(),\n slug: text('slug').notNull(),\n description: text('description'),\n model: text('model').notNull().default('claude-sonnet-4-5'),\n backend: agentBackendEnum('backend').default('claude').notNull(),\n systemPrompt: text('system_prompt'),\n allowedTools: jsonb('allowed_tools').default([]).$type<string[]>(),\n disallowedTools: jsonb('disallowed_tools').default([]).$type<string[]>(),\n maxTurns: integer('max_turns'),\n permissionMode: text('permission_mode'),\n mcpServers: jsonb('mcp_servers').default({}).$type<Record<string, { command: string; args?: string[] }>>(),\n envVars: jsonb('env_vars').default({}).$type<Record<string, string>>(),\n startupScript: text('startup_script'),\n configFileUrl: text('config_file_url'), // .claude directory zip (skills, commands, agents, hooks, mcp)\n configFileUpdatedAt: timestamp('config_file_updated_at', { withTimezone: true }), // When config was last updated (for cache busting)\n config: jsonb('config').default({}).$type<Record<string, unknown>>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: agentStatusEnum('status').default('active').notNull(),\n // Webhook configuration for execution completion notifications (outbound)\n executionWebhookUrl: text('execution_webhook_url'),\n executionWebhookSecret: text('execution_webhook_secret'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n deletedAt: timestamp('deleted_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_agents_tenant').on(table.tenantId),\n index('idx_agents_slug').on(table.slug),\n index('idx_agents_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Queue Items\n// ============================================================================\n\nexport const queueItems = pgTable(\n 'queue_items',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n sessionId: uuid('session_id').references(() => sessions.id, {\n onDelete: 'cascade',\n }),\n agentName: text('agent_name').notNull(),\n prompt: text('prompt').notNull(),\n files: jsonb('files').$type<Array<{\n filename: string;\n content: string;\n mimeType: string;\n }>>(),\n sessionContext: text('session_context'),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: queueItemStatusEnum('status').default('pending').notNull(),\n priority: integer('priority').default(0).notNull(),\n retryCount: integer('retry_count').default(0).notNull(),\n maxRetries: integer('max_retries').default(3).notNull(),\n error: text('error'),\n resultMessageId: uuid('result_message_id'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_queue_items_tenant').on(table.tenantId),\n index('idx_queue_items_agent').on(table.agentName),\n index('idx_queue_items_session').on(table.sessionId),\n index('idx_queue_items_status').on(table.status),\n index('idx_queue_items_pending').on(table.agentName, table.sessionId, table.status, table.priority, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Config Deployments (history for GitHub-synced .claude directory)\n// ============================================================================\n\nexport const configDeployments = pgTable(\n 'config_deployments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n agentId: uuid('agent_id')\n .notNull()\n .references(() => agents.id, { onDelete: 'cascade' }),\n\n // Git commit info\n commitSha: text('commit_sha').notNull(),\n commitMessage: text('commit_message'),\n commitAuthor: text('commit_author'),\n commitTimestamp: timestamp('commit_timestamp', { withTimezone: true }),\n\n // Deployment status\n status: configDeploymentStatusEnum('status').default('pending').notNull(),\n errorMessage: text('error_message'),\n\n // Config file info (zipped .claude directory)\n configFileUrl: text('config_file_url'),\n configFileSize: integer('config_file_size'),\n\n // Content manifest - what's included in this deployment\n manifest: jsonb('manifest').default({}).$type<{\n hasSkills?: boolean;\n skillsCount?: number;\n hasCommands?: boolean;\n commandsCount?: number;\n hasAgents?: boolean;\n agentsCount?: number;\n hasHooks?: boolean;\n hasMcpConfig?: boolean;\n mcpServersCount?: number;\n }>(),\n\n // Trigger info\n triggeredBy: configDeploymentTriggerEnum('triggered_by').notNull(),\n rollbackFromId: uuid('rollback_from_id'), // If this was a rollback, which deployment it came from\n\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_config_deployments_agent').on(table.agentId),\n index('idx_config_deployments_status').on(table.status),\n index('idx_config_deployments_created').on(table.agentId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Session Events (Timeline)\n// ============================================================================\n\nexport const sessionEvents = pgTable(\n 'session_events',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n category: eventCategoryEnum('category').notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }).notNull(),\n endedAt: timestamp('ended_at', { withTimezone: true }),\n durationMs: integer('duration_ms'),\n eventData: jsonb('event_data').default({}).$type<Record<string, unknown>>(),\n // Tool-specific fields\n toolUseId: text('tool_use_id'),\n toolName: text('tool_name'),\n // Aggregation fields (for text_stream events)\n isAggregated: boolean('is_aggregated').default(false),\n aggregatedCount: integer('aggregated_count'),\n // Ordering\n sequenceNumber: integer('sequence_number').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_session_events_session').on(table.sessionId, table.sequenceNumber),\n index('idx_session_events_category').on(table.sessionId, table.category),\n ]\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const sessionsRelations = relations(sessions, ({ one, many }) => ({\n parentSession: one(sessions, {\n fields: [sessions.parentSessionId],\n references: [sessions.id],\n relationName: 'parentSession',\n }),\n childSessions: many(sessions, {\n relationName: 'parentSession',\n }),\n messages: many(messages),\n events: many(sessionEvents),\n}));\n\nexport const sessionEventsRelations = relations(sessionEvents, ({ one }) => ({\n session: one(sessions, {\n fields: [sessionEvents.sessionId],\n references: [sessions.id],\n }),\n}));\n\nexport const messagesRelations = relations(messages, ({ one, many }) => ({\n session: one(sessions, {\n fields: [messages.sessionId],\n references: [sessions.id],\n }),\n attachments: many(attachments),\n}));\n\nexport const attachmentsRelations = relations(attachments, ({ one }) => ({\n message: one(messages, {\n fields: [attachments.messageId],\n references: [messages.id],\n }),\n}));\n\nexport const configDeploymentsRelations = relations(configDeployments, ({ one }) => ({\n agent: one(agents, {\n fields: [configDeployments.agentId],\n references: [agents.id],\n }),\n}));\n\nexport const agentsRelations = relations(agents, ({ many }) => ({\n configDeployments: many(configDeployments),\n}));\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SessionRow = typeof sessions.$inferSelect;\nexport type NewSessionRow = typeof sessions.$inferInsert;\n\nexport type MessageRow = typeof messages.$inferSelect;\nexport type NewMessageRow = typeof messages.$inferInsert;\n\nexport type AttachmentRow = typeof attachments.$inferSelect;\nexport type NewAttachmentRow = typeof attachments.$inferInsert;\n\nexport type AgentRow = typeof agents.$inferSelect;\nexport type NewAgentRow = typeof agents.$inferInsert;\n\nexport type QueueItemRow = typeof queueItems.$inferSelect;\nexport type NewQueueItemRow = typeof queueItems.$inferInsert;\n\nexport type ConfigDeploymentRow = typeof configDeployments.$inferSelect;\nexport type NewConfigDeploymentRow = typeof configDeployments.$inferInsert;\n\nexport type SessionEventRow = typeof sessionEvents.$inferSelect;\nexport type NewSessionEventRow = typeof sessionEvents.$inferInsert;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/storage-postgres/schema.ts"],"names":[],"mappings":"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","file":"schema.js","sourcesContent":["/**\n * PostgreSQL Schema for Agent SDK Harness\n *\n * This schema is designed to be:\n * 1. Compatible with @conviction-labs/harness-core types\n * 2. Tenant-agnostic - no multi-tenancy concepts in core\n * 3. Usable standalone for self-hosted deployments\n *\n * Multi-tenancy (organizations, API keys, billing) should be implemented\n * in the cloud layer by:\n * - Creating separate tables that reference these via foreign keys\n * - Or extending these tables in cloud-specific migrations\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uuid,\n jsonb,\n integer,\n index,\n pgEnum,\n boolean,\n} from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\n\n// ============================================================================\n// Enums\n// ============================================================================\n\nexport const sessionStatusEnum = pgEnum('session_status', [\n 'active',\n 'completed',\n 'error',\n 'suspended',\n]);\n\nexport const messageRoleEnum = pgEnum('message_role', [\n 'user',\n 'assistant',\n 'tool',\n 'system',\n]);\n\nexport const agentStatusEnum = pgEnum('agent_status', [\n 'active',\n 'paused',\n 'deleted',\n]);\n\nexport const agentBackendEnum = pgEnum('agent_backend', [\n 'claude',\n 'gemini',\n]);\n\nexport const queueItemStatusEnum = pgEnum('queue_item_status', [\n 'pending',\n 'processing',\n 'completed',\n 'failed',\n 'cancelled',\n]);\n\n// Claude config deployment enums (for .claude directory sync from GitHub)\nexport const configDeploymentStatusEnum = pgEnum('config_deployment_status', [\n 'pending',\n 'success',\n 'failed',\n]);\n\nexport const configDeploymentTriggerEnum = pgEnum('config_deployment_trigger', [\n 'webhook',\n 'manual',\n 'initial',\n 'rollback',\n]);\n\n// Event source enum for distinguishing event origins\nexport const eventSourceEnum = pgEnum('event_source', [\n 'agent', // Directly from the agent SDK\n 'system', // Generated by execution layer (lifecycle, user input)\n 'derived', // Transformed/aggregated from agent events\n]);\n\n// Event category enum for session events timeline\nexport const eventCategoryEnum = pgEnum('event_category', [\n 'lifecycle', // session_start, session_end, turn_complete\n 'content', // text_stream (aggregated), thinking_stream\n 'tool', // tool_use, tool_result\n 'system', // mcp_status, sandbox_log\n 'error', // error events\n 'file', // file_push, file_pull, file_sync (file sync operations)\n 'input', // user_input (user prompts/messages)\n 'webhook', // webhook_delivery, webhook_failure (outbound webhook events)\n]);\n\n// ============================================================================\n// Sessions\n// ============================================================================\n\nexport const sessions = pgTable(\n 'sessions',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n agentName: text('agent_name').notNull(),\n status: sessionStatusEnum('status').default('active').notNull(),\n sdkSessionId: text('sdk_session_id'), // Claude Agent SDK session ID for resume\n parentSessionId: uuid('parent_session_id'),\n totalTokens: integer('total_tokens'),\n totalCost: integer('total_cost'), // In cents\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_sessions_tenant').on(table.tenantId),\n index('idx_sessions_agent').on(table.agentName),\n index('idx_sessions_sdk').on(table.sdkSessionId),\n index('idx_sessions_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Messages\n// ============================================================================\n\nexport const messages = pgTable(\n 'messages',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n role: messageRoleEnum('role').notNull(),\n content: jsonb('content').notNull().$type<unknown[]>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_messages_session').on(table.sessionId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Attachments\n// ============================================================================\n\nexport const attachments = pgTable(\n 'attachments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n messageId: uuid('message_id')\n .notNull()\n .references(() => messages.id, { onDelete: 'cascade' }),\n filename: text('filename').notNull(),\n mimeType: text('mime_type').notNull(),\n size: integer('size').notNull(),\n storagePath: text('storage_path').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [index('idx_attachments_message').on(table.messageId)]\n);\n\n// ============================================================================\n// Agents\n// ============================================================================\n\nexport const agents = pgTable(\n 'agents',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n name: text('name').notNull(),\n slug: text('slug').notNull(),\n description: text('description'),\n model: text('model').notNull().default('claude-sonnet-4-5'),\n backend: agentBackendEnum('backend').default('claude').notNull(),\n systemPrompt: text('system_prompt'),\n allowedTools: jsonb('allowed_tools').default([]).$type<string[]>(),\n disallowedTools: jsonb('disallowed_tools').default([]).$type<string[]>(),\n maxTurns: integer('max_turns'),\n permissionMode: text('permission_mode'),\n mcpServers: jsonb('mcp_servers').default({}).$type<Record<string, { command: string; args?: string[] }>>(),\n envVars: jsonb('env_vars').default({}).$type<Record<string, string>>(),\n startupScript: text('startup_script'),\n configFileUrl: text('config_file_url'), // .claude directory zip (skills, commands, agents, hooks, mcp)\n configFileUpdatedAt: timestamp('config_file_updated_at', { withTimezone: true }), // When config was last updated (for cache busting)\n config: jsonb('config').default({}).$type<Record<string, unknown>>(),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: agentStatusEnum('status').default('active').notNull(),\n // Webhook configuration for execution completion notifications (outbound)\n executionWebhookUrl: text('execution_webhook_url'),\n executionWebhookSecret: text('execution_webhook_secret'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n deletedAt: timestamp('deleted_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_agents_tenant').on(table.tenantId),\n index('idx_agents_slug').on(table.slug),\n index('idx_agents_status').on(table.status),\n ]\n);\n\n// ============================================================================\n// Queue Items\n// ============================================================================\n\nexport const queueItems = pgTable(\n 'queue_items',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n // Optional tenant isolation - null for single-tenant, set for multi-tenant\n tenantId: text('tenant_id'),\n sessionId: uuid('session_id').references(() => sessions.id, {\n onDelete: 'cascade',\n }),\n agentName: text('agent_name').notNull(),\n prompt: text('prompt').notNull(),\n files: jsonb('files').$type<Array<{\n filename: string;\n content: string;\n mimeType: string;\n }>>(),\n sessionContext: text('session_context'),\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n status: queueItemStatusEnum('status').default('pending').notNull(),\n priority: integer('priority').default(0).notNull(),\n retryCount: integer('retry_count').default(0).notNull(),\n maxRetries: integer('max_retries').default(3).notNull(),\n error: text('error'),\n resultMessageId: uuid('result_message_id'),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n updatedAt: timestamp('updated_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n },\n (table) => [\n index('idx_queue_items_tenant').on(table.tenantId),\n index('idx_queue_items_agent').on(table.agentName),\n index('idx_queue_items_session').on(table.sessionId),\n index('idx_queue_items_status').on(table.status),\n index('idx_queue_items_pending').on(table.agentName, table.sessionId, table.status, table.priority, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Config Deployments (history for GitHub-synced .claude directory)\n// ============================================================================\n\nexport const configDeployments = pgTable(\n 'config_deployments',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n agentId: uuid('agent_id')\n .notNull()\n .references(() => agents.id, { onDelete: 'cascade' }),\n\n // Git commit info\n commitSha: text('commit_sha').notNull(),\n commitMessage: text('commit_message'),\n commitAuthor: text('commit_author'),\n commitTimestamp: timestamp('commit_timestamp', { withTimezone: true }),\n\n // Deployment status\n status: configDeploymentStatusEnum('status').default('pending').notNull(),\n errorMessage: text('error_message'),\n\n // Config file info (zipped .claude directory)\n configFileUrl: text('config_file_url'),\n configFileSize: integer('config_file_size'),\n\n // Content manifest - what's included in this deployment\n manifest: jsonb('manifest').default({}).$type<{\n hasSkills?: boolean;\n skillsCount?: number;\n hasCommands?: boolean;\n commandsCount?: number;\n hasAgents?: boolean;\n agentsCount?: number;\n hasHooks?: boolean;\n hasMcpConfig?: boolean;\n mcpServersCount?: number;\n }>(),\n\n // Trigger info\n triggeredBy: configDeploymentTriggerEnum('triggered_by').notNull(),\n rollbackFromId: uuid('rollback_from_id'), // If this was a rollback, which deployment it came from\n\n metadata: jsonb('metadata').default({}).$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_config_deployments_agent').on(table.agentId),\n index('idx_config_deployments_status').on(table.status),\n index('idx_config_deployments_created').on(table.agentId, table.createdAt),\n ]\n);\n\n// ============================================================================\n// Session Events (Timeline)\n// ============================================================================\n\nexport const sessionEvents = pgTable(\n 'session_events',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n category: eventCategoryEnum('category').notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }).notNull(),\n endedAt: timestamp('ended_at', { withTimezone: true }),\n durationMs: integer('duration_ms'),\n eventData: jsonb('event_data').default({}).$type<Record<string, unknown>>(),\n // Tool-specific fields\n toolUseId: text('tool_use_id'),\n toolName: text('tool_name'),\n // Aggregation fields (for text_stream events)\n isAggregated: boolean('is_aggregated').default(false),\n aggregatedCount: integer('aggregated_count'),\n // Event source tagging\n eventSource: eventSourceEnum('event_source').notNull().default('agent'),\n // Ordering\n sequenceNumber: integer('sequence_number').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_session_events_session').on(table.sessionId, table.sequenceNumber),\n index('idx_session_events_category').on(table.sessionId, table.category),\n ]\n);\n\n// ============================================================================\n// Stream Events (SSE Relay)\n// ============================================================================\n\nexport const streamEvents = pgTable(\n 'stream_events',\n {\n id: uuid('id').defaultRandom().primaryKey(),\n sessionId: uuid('session_id')\n .notNull()\n .references(() => sessions.id, { onDelete: 'cascade' }),\n sequence: integer('sequence').notNull(),\n eventType: text('event_type').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n batchCount: integer('batch_count').default(1).notNull(),\n createdAt: timestamp('created_at', { withTimezone: true })\n .defaultNow()\n .notNull(),\n },\n (table) => [\n index('idx_stream_events_session_seq').on(table.sessionId, table.sequence),\n ]\n);\n\n// ============================================================================\n// Relations\n// ============================================================================\n\nexport const sessionsRelations = relations(sessions, ({ one, many }) => ({\n parentSession: one(sessions, {\n fields: [sessions.parentSessionId],\n references: [sessions.id],\n relationName: 'parentSession',\n }),\n childSessions: many(sessions, {\n relationName: 'parentSession',\n }),\n messages: many(messages),\n events: many(sessionEvents),\n streamEvents: many(streamEvents),\n}));\n\nexport const sessionEventsRelations = relations(sessionEvents, ({ one }) => ({\n session: one(sessions, {\n fields: [sessionEvents.sessionId],\n references: [sessions.id],\n }),\n}));\n\nexport const messagesRelations = relations(messages, ({ one, many }) => ({\n session: one(sessions, {\n fields: [messages.sessionId],\n references: [sessions.id],\n }),\n attachments: many(attachments),\n}));\n\nexport const attachmentsRelations = relations(attachments, ({ one }) => ({\n message: one(messages, {\n fields: [attachments.messageId],\n references: [messages.id],\n }),\n}));\n\nexport const configDeploymentsRelations = relations(configDeployments, ({ one }) => ({\n agent: one(agents, {\n fields: [configDeployments.agentId],\n references: [agents.id],\n }),\n}));\n\nexport const streamEventsRelations = relations(streamEvents, ({ one }) => ({\n session: one(sessions, {\n fields: [streamEvents.sessionId],\n references: [sessions.id],\n }),\n}));\n\nexport const agentsRelations = relations(agents, ({ many }) => ({\n configDeployments: many(configDeployments),\n}));\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type SessionRow = typeof sessions.$inferSelect;\nexport type NewSessionRow = typeof sessions.$inferInsert;\n\nexport type MessageRow = typeof messages.$inferSelect;\nexport type NewMessageRow = typeof messages.$inferInsert;\n\nexport type AttachmentRow = typeof attachments.$inferSelect;\nexport type NewAttachmentRow = typeof attachments.$inferInsert;\n\nexport type AgentRow = typeof agents.$inferSelect;\nexport type NewAgentRow = typeof agents.$inferInsert;\n\nexport type QueueItemRow = typeof queueItems.$inferSelect;\nexport type NewQueueItemRow = typeof queueItems.$inferInsert;\n\nexport type ConfigDeploymentRow = typeof configDeployments.$inferSelect;\nexport type NewConfigDeploymentRow = typeof configDeployments.$inferInsert;\n\nexport type SessionEventRow = typeof sessionEvents.$inferSelect;\nexport type NewSessionEventRow = typeof sessionEvents.$inferInsert;\n\nexport type StreamEventRow = typeof streamEvents.$inferSelect;\nexport type NewStreamEventRow = typeof streamEvents.$inferInsert;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ash-cloud/ash-ai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"description": "Agent SDK Harness - Complete framework for Claude Agent SDK session management",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"wouter": "^3.0.0",
|
|
58
58
|
"zod": "^3.24.1",
|
|
59
59
|
"chokidar": "^3.6.0",
|
|
60
|
-
"@ash-cloud/ash-ui": "0.2.
|
|
60
|
+
"@ash-cloud/ash-ui": "0.2.3"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"@anthropic-ai/claude-agent-sdk": ">=0.2.0",
|