@sixb/sqlite 0.1.20 → 0.1.21

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.
Files changed (40) hide show
  1. package/dist/action-run-storage.d.ts +4 -0
  2. package/dist/action-run-storage.d.ts.map +1 -1
  3. package/dist/activity-storage.d.ts +20 -0
  4. package/dist/activity-storage.d.ts.map +1 -0
  5. package/dist/agents/threads.d.ts +4 -0
  6. package/dist/agents/threads.d.ts.map +1 -1
  7. package/dist/artifact-storage.d.ts +22 -0
  8. package/dist/artifact-storage.d.ts.map +1 -0
  9. package/dist/auth-storage/sessions.d.ts +2 -1
  10. package/dist/auth-storage/sessions.d.ts.map +1 -1
  11. package/dist/execution-storage.d.ts +2 -1
  12. package/dist/execution-storage.d.ts.map +1 -1
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +880 -14
  16. package/dist/index.js.map +14 -12
  17. package/dist/migrations.d.ts.map +1 -1
  18. package/dist/ontology-storage/sources.d.ts +2 -1
  19. package/dist/ontology-storage/sources.d.ts.map +1 -1
  20. package/dist/share-grant-storage.d.ts +2 -1
  21. package/dist/share-grant-storage.d.ts.map +1 -1
  22. package/dist/workflow-run-storage.d.ts +4 -0
  23. package/dist/workflow-run-storage.d.ts.map +1 -1
  24. package/package.json +3 -3
  25. package/src/action-run-storage.ts +27 -0
  26. package/src/activity-storage.ts +588 -0
  27. package/src/agents/threads.ts +27 -0
  28. package/src/artifact-storage.ts +356 -0
  29. package/src/auth-storage/sessions.ts +27 -0
  30. package/src/execution-storage.ts +56 -0
  31. package/src/index.ts +10 -0
  32. package/src/migrations/062-artifacts.sql +71 -0
  33. package/src/migrations/063-drop-output-diagnostics.sql +19 -0
  34. package/src/migrations/064-activity.sql +61 -0
  35. package/src/migrations/065-activity-timeline.sql +19 -0
  36. package/src/migrations/066-activity-interactions.sql +20 -0
  37. package/src/migrations.ts +14 -0
  38. package/src/ontology-storage/sources.ts +41 -0
  39. package/src/share-grant-storage.ts +25 -0
  40. package/src/workflow-run-storage.ts +27 -0
package/dist/index.js.map CHANGED
@@ -1,23 +1,25 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/action-run-storage.ts", "../src/transactions.ts", "../src/migrations.ts", "../src/agents/checkpoints.ts", "../src/agents/rows.ts", "../src/agents/messages.ts", "../src/storage-errors.ts", "../src/agents/runs.ts", "../src/run-list-query.ts", "../src/agents/threads.ts", "../src/agents/agent-storage.ts", "../src/ai-cost-storage.ts", "../src/ai-cost-groups.ts", "../src/ai-usage-storage.ts", "../src/ai-limit-storage.ts", "../src/auth-storage/auth-storage.ts", "../src/auth-storage/access-tokens.ts", "../src/auth-storage/rows.ts", "../src/auth-storage/shared.ts", "../src/auth-storage/device-authorizations.ts", "../src/auth-storage/group-memberships.ts", "../src/auth-storage/identities.ts", "../src/auth-storage/invitations.ts", "../src/auth-storage/magic-links.ts", "../src/auth-storage/oidc-attempts.ts", "../src/auth-storage/service-account-group-memberships.ts", "../src/auth-storage/service-accounts.ts", "../src/auth-storage/sessions.ts", "../src/auth-storage/users.ts", "../src/connector-connection-storage.ts", "../src/execution-storage.ts", "../src/file-download-grant-storage.ts", "../src/file-upload-session-storage.ts", "../src/objects/storage.ts", "../src/objects/query-compiler.ts", "../src/vector-encoding.ts", "../src/objects/reader.ts", "../src/objects/rows.ts", "../src/objects/vector-extension.ts", "../src/objects/selected-reader.ts", "../src/objects/read-scope.ts", "../src/ontology-storage/shared.ts", "../src/ontology-storage/commits.ts", "../src/ontology-storage/materializations.ts", "../src/ontology-storage/materialization-session.ts", "../src/ontology-storage/materialization-state.ts", "../src/ontology-storage/source-roots.ts", "../src/ontology-storage/replacement-plans.ts", "../src/ontology-storage/materialization-writer.ts", "../src/ontology-storage/outbox.ts", "../src/ontology-storage/sources.ts", "../src/ontology-storage/source-cleanup.ts", "../src/ontology-storage/vector-indexing.ts", "../src/ontology-storage/vectors.ts", "../src/ontology-storage/index.ts", "../src/pipeline-run-storage.ts", "../src/latest-run-query.ts", "../src/projection-run-storage.ts", "../src/rules-storage.ts", "../src/share-grant-storage.ts", "../src/share-session-storage.ts", "../src/sync-run-storage.ts", "../src/testing.ts", "../src/timeseries-storage.ts", "../src/webhook-run-storage.ts", "../src/workflow-intervention-storage.ts", "../src/workflow-run-storage.ts"],
3
+ "sources": ["../src/index.ts", "../src/action-run-storage.ts", "../src/transactions.ts", "../src/migrations.ts", "../src/activity-storage.ts", "../src/agents/checkpoints.ts", "../src/agents/rows.ts", "../src/agents/messages.ts", "../src/storage-errors.ts", "../src/agents/runs.ts", "../src/run-list-query.ts", "../src/agents/threads.ts", "../src/agents/agent-storage.ts", "../src/ai-cost-storage.ts", "../src/ai-cost-groups.ts", "../src/ai-usage-storage.ts", "../src/ai-limit-storage.ts", "../src/artifact-storage.ts", "../src/auth-storage/auth-storage.ts", "../src/auth-storage/access-tokens.ts", "../src/auth-storage/rows.ts", "../src/auth-storage/shared.ts", "../src/auth-storage/device-authorizations.ts", "../src/auth-storage/group-memberships.ts", "../src/auth-storage/identities.ts", "../src/auth-storage/invitations.ts", "../src/auth-storage/magic-links.ts", "../src/auth-storage/oidc-attempts.ts", "../src/auth-storage/service-account-group-memberships.ts", "../src/auth-storage/service-accounts.ts", "../src/auth-storage/sessions.ts", "../src/auth-storage/users.ts", "../src/connector-connection-storage.ts", "../src/execution-storage.ts", "../src/file-download-grant-storage.ts", "../src/file-upload-session-storage.ts", "../src/objects/storage.ts", "../src/objects/query-compiler.ts", "../src/vector-encoding.ts", "../src/objects/reader.ts", "../src/objects/rows.ts", "../src/objects/vector-extension.ts", "../src/objects/selected-reader.ts", "../src/objects/read-scope.ts", "../src/ontology-storage/shared.ts", "../src/ontology-storage/commits.ts", "../src/ontology-storage/materializations.ts", "../src/ontology-storage/materialization-session.ts", "../src/ontology-storage/materialization-state.ts", "../src/ontology-storage/source-roots.ts", "../src/ontology-storage/replacement-plans.ts", "../src/ontology-storage/materialization-writer.ts", "../src/ontology-storage/outbox.ts", "../src/ontology-storage/sources.ts", "../src/ontology-storage/source-cleanup.ts", "../src/ontology-storage/vector-indexing.ts", "../src/ontology-storage/vectors.ts", "../src/ontology-storage/index.ts", "../src/pipeline-run-storage.ts", "../src/latest-run-query.ts", "../src/projection-run-storage.ts", "../src/rules-storage.ts", "../src/share-grant-storage.ts", "../src/share-session-storage.ts", "../src/sync-run-storage.ts", "../src/testing.ts", "../src/timeseries-storage.ts", "../src/webhook-run-storage.ts", "../src/workflow-intervention-storage.ts", "../src/workflow-run-storage.ts"],
4
4
  "sourcesContent": [
5
- "// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\n/// <reference path=\"./sql.d.ts\" />\n\nimport { AsyncLocalStorage } from \"node:async_hooks\"\nimport type {\n MigrationCapableStorage,\n Storage,\n StorageMigrator,\n StorageTransactionOptions,\n} from \"@sixb/core\"\nimport { ProviderMaterializationTransactionLifecycle } from \"@sixb/core/internal/ontology-storage-provider\"\nimport {\n createTransactionStorageProxy,\n throwNestedStorageTransaction,\n} from \"@sixb/core/internal/storage\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiLimitStorage,\n type AiUsageStorage,\n type ShareGrantStorage,\n type ShareSessionStorage,\n StorageTransactionError,\n} from \"@sixb/core/storage\"\nimport { SqliteActionRunStorage } from \"./action-run-storage\"\nimport { SqliteAgentStorage } from \"./agents\"\nimport { SqliteAiCostStorage } from \"./ai-cost-storage\"\nimport { SqliteAiLimitStorage } from \"./ai-limit-storage\"\nimport { SqliteAiUsageStorage } from \"./ai-usage-storage\"\nimport { SqliteAuthStorage } from \"./auth-storage\"\nimport { SqliteConnectorConnectionStorage } from \"./connector-connection-storage\"\nimport { SqliteExecutionStorage } from \"./execution-storage\"\nimport { SqliteFileDownloadGrantStorage } from \"./file-download-grant-storage\"\nimport { SqliteFileUploadSessionStorage } from \"./file-upload-session-storage\"\nimport { createSqliteStorageMigrators, sqliteStoragePath } from \"./migrations\"\nimport { SqliteObjectStorage } from \"./objects\"\nimport { SqliteOntologyStorage, type SqliteOntologyTransactionContext } from \"./ontology-storage\"\nimport { SqlitePipelineRunStorage } from \"./pipeline-run-storage\"\nimport { SqliteProjectionRunStorage } from \"./projection-run-storage\"\nimport { SqliteRulesStorage } from \"./rules-storage\"\nimport { SqliteShareGrantStorage } from \"./share-grant-storage\"\nimport { SqliteShareSessionStorage } from \"./share-session-storage\"\nimport { SqliteSyncRunStorage } from \"./sync-run-storage\"\nimport { registerSqliteStorageTestingAdapter } from \"./testing\"\nimport { SqliteTimeseriesStorage } from \"./timeseries-storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransactionAsync,\n type SqliteStoreConnection,\n} from \"./transactions\"\nimport { SqliteWebhookRunStorage } from \"./webhook-run-storage\"\nimport { SqliteWorkflowInterventionStorage } from \"./workflow-intervention-storage\"\nimport { SqliteWorkflowRunStorage } from \"./workflow-run-storage\"\n\nexport interface SqliteStorageOptions {\n /** Directory path for the SQLite storage database. */\n path?: string\n}\n\n/**\n * SQLite storage provider for Sixb.\n *\n * Bundles object, timeseries, auth, execution, AI accounting, sync run, pipeline run, projection\n * run, workflow run, webhook run, and connector connection storage backed by SQLite.\n *\n * Usage:\n * ```ts\n * const storage = new SqliteStorage({ path: \".sixb\" })\n *\n * export const sixb = createSixb({\n * broker: new InMemoryBroker(),\n * storage,\n * })\n * ```\n */\nexport class SqliteStorage implements MigrationCapableStorage {\n readonly objects: Storage[\"objects\"]\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: Storage[\"timeseries\"]\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n readonly fileDownloadGrants: SqliteFileDownloadGrantStorage\n readonly migrators: readonly StorageMigrator[]\n\n private readonly connection: SqliteStoreConnection\n private readonly readConnection: SqliteStoreConnection\n private readonly transactionScope = new AsyncLocalStorage<{ active: boolean }>()\n private transactionTail: Promise<void> = Promise.resolve()\n\n constructor(options: SqliteStorageOptions = {}) {\n const path = options.path ? sqliteStoragePath(options.path) : undefined\n this.connection = openSqliteStoreConnection({ path })\n if (path) {\n this.connection.db.run(\"PRAGMA journal_mode = WAL\")\n this.readConnection = openSqliteStoreConnection({ path, readonly: true })\n } else {\n this.readConnection = this.connection\n }\n\n const stores = createSqliteStores(this.connection, {\n runOntologyOperation: async (run) => run(),\n transactionContext: null,\n })\n const assertRootOperationAvailable = () => this.assertRootOperationAvailable()\n const scope = createStorageOperationScope(\n (run) => this.runRootStorageOperation(run),\n assertRootOperationAvailable\n )\n const ontologyScope = createStorageOperationScope(\n (run) => this.runRootOntologyOperation(run),\n assertRootOperationAvailable\n )\n const readScope = path\n ? createStorageOperationScope(async (run) => {\n this.assertRootOperationAvailable()\n return run()\n }, assertRootOperationAvailable)\n : scope\n const readObjects = path\n ? new SqliteObjectStorage({ connection: this.readConnection })\n : stores.objects\n const readTimeseries = path\n ? new SqliteTimeseriesStorage({ connection: this.readConnection })\n : stores.timeseries\n this.objects = createObjectOperationScope(readObjects, readScope)\n this.ontology = createOntologyOperationScope(stores.ontology, ontologyScope)\n this.auth = createAuthOperationScope(stores.auth, scope)\n this.executions = createOperationScopedFacade(stores.executions, scope)\n this.agents = createAgentOperationScope(stores.agents, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.aiCosts = createOperationScopedFacade(stores.aiCosts, scope)\n this.aiLimits = createOperationScopedFacade(stores.aiLimits, scope)\n this.actionRuns = createOperationScopedFacade(stores.actionRuns, scope)\n this.pipelineRuns = createOperationScopedFacade(stores.pipelineRuns, scope)\n this.timeseries = createOperationScopedFacade(readTimeseries, readScope)\n this.syncRuns = createOperationScopedFacade(stores.syncRuns, scope)\n this.projectionRuns = createOperationScopedFacade(stores.projectionRuns, scope)\n this.workflowRuns = createWorkflowRunOperationScope(stores.workflowRuns, scope)\n this.workflowInterventions = createOperationScopedFacade(stores.workflowInterventions, scope)\n this.webhookRuns = createOperationScopedFacade(stores.webhookRuns, scope)\n this.rules = createOperationScopedFacade(stores.rules, scope)\n this.shareGrants = createOperationScopedFacade(stores.shareGrants, scope)\n this.shareSessions = createOperationScopedFacade(stores.shareSessions, scope)\n this.connectorConnections = createOperationScopedFacade(stores.connectorConnections, scope)\n this.fileUploadSessions = createOperationScopedFacade(stores.fileUploadSessions, scope)\n this.fileDownloadGrants = createOperationScopedFacade(stores.fileDownloadGrants, scope)\n this.migrators = options.path ? createSqliteStorageMigrators(options.path) : []\n registerSqliteStorageTestingAdapter(this, {\n advanceConnectorConnectionTime: (durationMs) =>\n stores.connectorConnections.advanceTimeForTesting(durationMs),\n db: this.connection.db,\n })\n }\n\n async ping(): Promise<void> {\n this.assertRootOperationAvailable()\n if (this.readConnection !== this.connection) {\n this.readConnection.db.query(\"SELECT 1\").get()\n return\n }\n await this.runRootStorageOperation(() => {\n this.connection.db.query(\"SELECT 1\").get()\n })\n }\n\n /**\n * The `isolation` option is intentionally ignored. SQLite runs every write transaction through\n * one connection serialized by {@link withTransactionLock} and a `BEGIN IMMEDIATE`, so there is no\n * concurrent writer to isolate against. File-backed object and timeseries reads use a separate WAL\n * snapshot connection; Postgres is where `isolation: \"serializable\"` maps to a real isolation level.\n */\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n _options: StorageTransactionOptions = {}\n ): Promise<T> {\n if (this.transactionScope.getStore()) {\n throwNestedStorageTransaction()\n }\n\n return this.withTransactionLock(async () => {\n let active = true\n const scope = { active: true }\n const transactionContext: SqliteOntologyTransactionContext = {\n id: {},\n materializations: new ProviderMaterializationTransactionLifecycle(),\n active: true,\n }\n const txStorage = this.createTransactionStorage(transactionContext)\n const tx = createTransactionStorageProxy(txStorage, () => active)\n\n try {\n return await runImmediateTransactionAsync(this.connection.db, () =>\n this.transactionScope.run(scope, async () => {\n try {\n const result = await run(tx)\n transactionContext.materializations.assertCommittable()\n return result\n } finally {\n scope.active = false\n transactionContext.active = false\n txStorage.ontology.deactivateSessions()\n transactionContext.materializations.deactivate()\n }\n })\n )\n } finally {\n active = false\n }\n })\n }\n\n close(): void {\n if (this.readConnection !== this.connection) closeSqliteStoreConnection(this.readConnection)\n closeSqliteStoreConnection(this.connection)\n }\n\n private createTransactionStorage(\n transactionContext: SqliteOntologyTransactionContext\n ): Storage & { readonly ontology: SqliteOntologyStorage } {\n return {\n ...createSqliteStores(\n {\n db: this.connection.db,\n ownsConnection: false,\n },\n {\n runOntologyOperation: async (run) => run(),\n transactionContext,\n }\n ),\n ping: async () => {\n this.connection.db.query(\"SELECT 1\").get()\n },\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n\n private runRootStorageOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(async () => run())\n }\n\n private runRootOntologyOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(() => runImmediateTransactionAsync(this.connection.db, run))\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.transactionScope.getStore()?.active) return\n throw new StorageTransactionError(\n \"[SixbSqlite] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n private async withTransactionLock<T>(run: () => Promise<T>): Promise<T> {\n const previous = this.transactionTail\n let release!: () => void\n this.transactionTail = new Promise<void>((resolve) => {\n release = resolve\n })\n\n await previous\n try {\n return await run()\n } finally {\n release()\n }\n }\n}\n\nfunction createSqliteStores(\n connection: SqliteStoreConnection,\n options: {\n readonly runOntologyOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }\n): SqliteStoreSet {\n const auth = new SqliteAuthStorage({ connection })\n const shareGrants = new SqliteShareGrantStorage({ connection })\n const shareSessions = new SqliteShareSessionStorage({ connection })\n const executions = new SqliteExecutionStorage(connection.db, auth, shareSessions)\n return {\n objects: new SqliteObjectStorage({ connection }),\n ontology: new SqliteOntologyStorage({\n db: connection.db,\n runRootOperation: options.runOntologyOperation,\n transactionContext: options.transactionContext,\n }),\n auth,\n executions,\n agents: new SqliteAgentStorage({ connection, executions }),\n aiUsage: new SqliteAiUsageStorage({ connection }),\n aiCosts: new SqliteAiCostStorage(connection),\n aiLimits: new SqliteAiLimitStorage({ connection }),\n actionRuns: new SqliteActionRunStorage({ connection, executions }),\n pipelineRuns: new SqlitePipelineRunStorage({ connection, executions }),\n timeseries: new SqliteTimeseriesStorage({ connection }),\n syncRuns: new SqliteSyncRunStorage({ connection, executions }),\n projectionRuns: new SqliteProjectionRunStorage({ connection, executions }),\n workflowRuns: new SqliteWorkflowRunStorage({ connection, executions }),\n workflowInterventions: new SqliteWorkflowInterventionStorage({ connection }),\n webhookRuns: new SqliteWebhookRunStorage({ connection, executions }),\n rules: new SqliteRulesStorage({ connection }),\n shareGrants,\n shareSessions,\n connectorConnections: new SqliteConnectorConnectionStorage(connection),\n fileUploadSessions: new SqliteFileUploadSessionStorage(connection),\n fileDownloadGrants: new SqliteFileDownloadGrantStorage(connection),\n }\n}\n\ninterface SqliteStoreSet {\n readonly objects: SqliteObjectStorage\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly aiUsage: SqliteAiUsageStorage\n readonly aiCosts: SqliteAiCostStorage\n readonly aiLimits: SqliteAiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: SqliteTimeseriesStorage\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: SqliteShareGrantStorage\n readonly shareSessions: SqliteShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n readonly fileDownloadGrants: SqliteFileDownloadGrantStorage\n}\n\nexport { migrateSqliteStorage } from \"./migrations\"\n",
6
- "import type { Database } from \"bun:sqlite\"\nimport type { ActionSubject, JsonValue } from \"@sixb/core\"\nimport {\n parseActionRunFailure,\n serializeActionRunFailure,\n} from \"@sixb/core/internal/action-run-storage\"\nimport { assertActionRunExecution } from \"@sixb/core/internal/action-run-storage-provider\"\nimport { normalizeRecordActionRunInput, resolveActionRunEffects } from \"@sixb/core/internal/storage\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStatus,\n ActionRunStorage,\n ActionRunWritebackRecord,\n ExecutionStorage,\n ListActionRunsInput,\n ListActionRunsResult,\n RecordActionEffectsInput,\n RecordActionRunInput,\n} from \"@sixb/core/storage\"\nimport { ActionRunError } from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteActionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteActionRunStorage implements ActionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteActionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async record(input: RecordActionRunInput): Promise<ActionRunRecord> {\n const record = normalizeRecordActionRunInput(input)\n await assertActionRunExecution({\n executions: this.executions,\n projectId: record.projectId,\n executionId: record.executionId,\n runId: record.id,\n actionId: record.actionId,\n })\n\n const inserted = this.db\n .query(\n `\n INSERT INTO action_runs (\n project_id,\n id,\n execution_id,\n action_id,\n subject_kind,\n object_type_id,\n primary_id,\n status,\n phase,\n started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n error\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT DO NOTHING\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.actionId,\n record.subject.kind,\n record.subject.kind === \"object\" ? record.subject.objectTypeId : null,\n record.subject.kind === \"object\" ? record.subject.primaryId : null,\n record.status,\n record.phase,\n record.startedAt.toISOString(),\n record.finishedAt.toISOString(),\n JSON.stringify(record.params),\n record.idempotencyKey,\n record.writeback?.status ?? null,\n record.writeback?.completedAt.toISOString() ?? null,\n record.writeback?.status === \"succeeded\" ? JSON.stringify(record.writeback.result) : null,\n record.writeback?.status === \"failed\"\n ? serializeActionRunFailure(record.writeback.error, \"writeback\")\n : null,\n record.status === \"failed\" ? serializeActionRunFailure(record.error) : null\n )\n\n if (inserted.changes === 0) {\n const conflict = this.selectRow(record.projectId, record.id)\n throw new ActionRunError(\n conflict\n ? `[SixbSqlite] Action run '${record.id}' is already recorded for project '${record.projectId}'.`\n : `[SixbSqlite] Execution '${record.executionId}' already belongs to another Action run.`\n )\n }\n return rowToActionRunRecord(this.requireRow(record.projectId, record.id))\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.selectRow(input.projectId, input.id)\n const { run, effects } = resolveActionRunEffects(\n existing ? rowToActionRunRecord(existing) : null,\n input\n )\n if (!effects) return run\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n phase = ?,\n effects_status = ?,\n effects_completed_at = ?,\n effects_error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"effects\",\n effects.status,\n effects.completedAt.toISOString(),\n effects.status === \"failed\" ? serializeActionRunFailure(effects.error, \"effects\") : null,\n input.projectId,\n input.id\n )\n return rowToActionRunRecord(this.requireRow(input.projectId, input.id))\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as DatabaseRow | null\n\n return row ? rowToActionRunRecord(row) : null\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.actionIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.actionId) {\n whereClauses.push(\"action_id = ?\")\n args.push(input.actionId)\n }\n\n if (input.actionIds) {\n whereClauses.push(`action_id IN (${input.actionIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.actionIds)\n }\n\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n whereClauses.push(\"subject_kind <> ?\")\n args.push(\"object\")\n } else {\n whereClauses.push(\n `(subject_kind <> ? OR object_type_id IN (${input.objectTypeIds\n .map(() => \"?\")\n .join(\", \")}))`\n )\n args.push(\"object\", ...input.objectTypeIds)\n }\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n if (input.subject) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(input.subject.kind)\n if (input.subject.kind === \"object\") {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.subject.objectTypeId)\n whereClauses.push(\"primary_id = ?\")\n args.push(input.subject.primaryId)\n }\n }\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.startedAfter) {\n whereClauses.push(\"started_at >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n\n if (input.startedBefore) {\n whereClauses.push(\"started_at <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM action_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM action_runs\n ${where}\n ORDER BY started_at ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map((row) => rowToActionRunRecord(row))\n\n return {\n runs,\n hasMore: offset + runs.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private selectRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n const row = this.selectRow(projectId, id)\n if (!row) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${id}' disappeared from project '${projectId}' while recording it.`\n )\n }\n return row\n }\n}\n\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = new Date(row.writeback_completed_at ?? row.finished_at)\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result:\n row.writeback_result === null ? null : (JSON.parse(row.writeback_result) as JsonValue),\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parseActionRunFailure(row.writeback_error, \"writeback\"),\n }\n}\n\nfunction toActionRunEffectsRecord(row: DatabaseRow): ActionRunEffectsRecord | undefined {\n if (!row.effects_status) {\n return undefined\n }\n\n const completedAt = new Date(row.effects_completed_at ?? row.finished_at)\n if (row.effects_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parseActionRunFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n const writeback = toActionRunWritebackRecord(row)\n const effects = toActionRunEffectsRecord(row)\n const fields = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n phase: row.phase,\n startedAt: new Date(row.started_at),\n finishedAt: new Date(row.finished_at),\n params: JSON.parse(row.params) as ActionRunRecord[\"params\"],\n idempotencyKey: row.idempotency_key,\n ...(writeback === undefined ? {} : { writeback }),\n ...(effects === undefined ? {} : { effects }),\n }\n\n if (row.status === \"succeeded\") return { ...fields, status: \"succeeded\" }\n return { ...fields, status: \"failed\", error: parseActionRunFailure(row.error) }\n}\n\nfunction rowToActionSubject(row: DatabaseRow): ActionSubject {\n if (row.subject_kind === \"none\") {\n return { kind: \"none\" }\n }\n\n if (!row.object_type_id || !row.primary_id) {\n throw new ActionRunError(`[SixbSqlite] Action run '${row.id}' has an invalid object subject.`)\n }\n\n return {\n kind: \"object\",\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n }\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n action_id: string\n subject_kind: ActionSubject[\"kind\"]\n object_type_id: string | null\n primary_id: string | null\n status: ActionRunStatus\n phase: ActionRunPhase\n started_at: string\n finished_at: string\n params: string\n idempotency_key: string\n writeback_status: ActionRunWritebackRecord[\"status\"] | null\n writeback_completed_at: string | null\n writeback_result: string | null\n writeback_error: string | null\n effects_status: ActionRunEffectsRecord[\"status\"] | null\n effects_completed_at: string | null\n effects_error: string | null\n error: string | null\n}\n",
5
+ "// Keep SQL module declarations visible to downstream workspaces that typecheck this package from\n// source.\n/// <reference path=\"./sql.d.ts\" />\n\nimport { AsyncLocalStorage } from \"node:async_hooks\"\nimport type {\n MigrationCapableStorage,\n Storage,\n StorageMigrator,\n StorageTransactionOptions,\n} from \"@sixb/core\"\nimport { ProviderMaterializationTransactionLifecycle } from \"@sixb/core/internal/ontology-storage-provider\"\nimport {\n createTransactionStorageProxy,\n throwNestedStorageTransaction,\n} from \"@sixb/core/internal/storage\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"@sixb/core/internal/storage-operation-scope\"\nimport {\n type AiCostStorage,\n type AiLimitStorage,\n type AiUsageStorage,\n type ShareGrantStorage,\n type ShareSessionStorage,\n StorageTransactionError,\n} from \"@sixb/core/storage\"\nimport { SqliteActionRunStorage } from \"./action-run-storage\"\nimport { SqliteActivityStorage } from \"./activity-storage\"\nimport { SqliteAgentStorage } from \"./agents\"\nimport { SqliteAiCostStorage } from \"./ai-cost-storage\"\nimport { SqliteAiLimitStorage } from \"./ai-limit-storage\"\nimport { SqliteAiUsageStorage } from \"./ai-usage-storage\"\nimport { SqliteArtifactStorage } from \"./artifact-storage\"\nimport { SqliteAuthStorage } from \"./auth-storage\"\nimport { SqliteConnectorConnectionStorage } from \"./connector-connection-storage\"\nimport { SqliteExecutionStorage } from \"./execution-storage\"\nimport { SqliteFileDownloadGrantStorage } from \"./file-download-grant-storage\"\nimport { SqliteFileUploadSessionStorage } from \"./file-upload-session-storage\"\nimport { createSqliteStorageMigrators, sqliteStoragePath } from \"./migrations\"\nimport { SqliteObjectStorage } from \"./objects\"\nimport { SqliteOntologyStorage, type SqliteOntologyTransactionContext } from \"./ontology-storage\"\nimport { SqlitePipelineRunStorage } from \"./pipeline-run-storage\"\nimport { SqliteProjectionRunStorage } from \"./projection-run-storage\"\nimport { SqliteRulesStorage } from \"./rules-storage\"\nimport { SqliteShareGrantStorage } from \"./share-grant-storage\"\nimport { SqliteShareSessionStorage } from \"./share-session-storage\"\nimport { SqliteSyncRunStorage } from \"./sync-run-storage\"\nimport { registerSqliteStorageTestingAdapter } from \"./testing\"\nimport { SqliteTimeseriesStorage } from \"./timeseries-storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransactionAsync,\n type SqliteStoreConnection,\n} from \"./transactions\"\nimport { SqliteWebhookRunStorage } from \"./webhook-run-storage\"\nimport { SqliteWorkflowInterventionStorage } from \"./workflow-intervention-storage\"\nimport { SqliteWorkflowRunStorage } from \"./workflow-run-storage\"\n\nexport interface SqliteStorageOptions {\n /** Directory path for the SQLite storage database. */\n path?: string\n}\n\n/**\n * SQLite storage provider for Sixb.\n *\n * Bundles object, timeseries, auth, execution, AI accounting, sync run, pipeline run, projection\n * run, workflow run, webhook run, and connector connection storage backed by SQLite.\n *\n * Usage:\n * ```ts\n * const storage = new SqliteStorage({ path: \".sixb\" })\n *\n * export const sixb = createSixb({\n * broker: new InMemoryBroker(),\n * storage,\n * })\n * ```\n */\nexport class SqliteStorage implements MigrationCapableStorage {\n readonly objects: Storage[\"objects\"]\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly artifacts: SqliteArtifactStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: Storage[\"timeseries\"]\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n readonly fileDownloadGrants: SqliteFileDownloadGrantStorage\n readonly activity: SqliteActivityStorage\n readonly migrators: readonly StorageMigrator[]\n\n private readonly connection: SqliteStoreConnection\n private readonly readConnection: SqliteStoreConnection\n private readonly transactionScope = new AsyncLocalStorage<{ active: boolean }>()\n private transactionTail: Promise<void> = Promise.resolve()\n\n constructor(options: SqliteStorageOptions = {}) {\n const path = options.path ? sqliteStoragePath(options.path) : undefined\n this.connection = openSqliteStoreConnection({ path })\n if (path) {\n this.connection.db.run(\"PRAGMA journal_mode = WAL\")\n this.readConnection = openSqliteStoreConnection({ path, readonly: true })\n } else {\n this.readConnection = this.connection\n }\n\n const stores = createSqliteStores(this.connection, {\n runOntologyOperation: async (run) => run(),\n transactionContext: null,\n })\n const assertRootOperationAvailable = () => this.assertRootOperationAvailable()\n const scope = createStorageOperationScope(\n (run) => this.runRootStorageOperation(run),\n assertRootOperationAvailable\n )\n const ontologyScope = createStorageOperationScope(\n (run) => this.runRootOntologyOperation(run),\n assertRootOperationAvailable\n )\n const readScope = path\n ? createStorageOperationScope(async (run) => {\n this.assertRootOperationAvailable()\n return run()\n }, assertRootOperationAvailable)\n : scope\n const readObjects = path\n ? new SqliteObjectStorage({ connection: this.readConnection })\n : stores.objects\n const readTimeseries = path\n ? new SqliteTimeseriesStorage({ connection: this.readConnection })\n : stores.timeseries\n this.objects = createObjectOperationScope(readObjects, readScope)\n this.ontology = createOntologyOperationScope(stores.ontology, ontologyScope)\n this.auth = createAuthOperationScope(stores.auth, scope)\n this.executions = createOperationScopedFacade(stores.executions, scope)\n this.agents = createAgentOperationScope(stores.agents, scope)\n this.artifacts = createOperationScopedFacade(stores.artifacts, scope)\n this.aiUsage = createOperationScopedFacade(stores.aiUsage, scope)\n this.aiCosts = createOperationScopedFacade(stores.aiCosts, scope)\n this.aiLimits = createOperationScopedFacade(stores.aiLimits, scope)\n this.actionRuns = createOperationScopedFacade(stores.actionRuns, scope)\n this.pipelineRuns = createOperationScopedFacade(stores.pipelineRuns, scope)\n this.timeseries = createOperationScopedFacade(readTimeseries, readScope)\n this.syncRuns = createOperationScopedFacade(stores.syncRuns, scope)\n this.projectionRuns = createOperationScopedFacade(stores.projectionRuns, scope)\n this.workflowRuns = createWorkflowRunOperationScope(stores.workflowRuns, scope)\n this.workflowInterventions = createOperationScopedFacade(stores.workflowInterventions, scope)\n this.webhookRuns = createOperationScopedFacade(stores.webhookRuns, scope)\n this.rules = createOperationScopedFacade(stores.rules, scope)\n this.shareGrants = createOperationScopedFacade(stores.shareGrants, scope)\n this.shareSessions = createOperationScopedFacade(stores.shareSessions, scope)\n this.connectorConnections = createOperationScopedFacade(stores.connectorConnections, scope)\n this.fileUploadSessions = createOperationScopedFacade(stores.fileUploadSessions, scope)\n this.fileDownloadGrants = createOperationScopedFacade(stores.fileDownloadGrants, scope)\n this.activity = createOperationScopedFacade(stores.activity, scope)\n this.migrators = options.path ? createSqliteStorageMigrators(options.path) : []\n registerSqliteStorageTestingAdapter(this, {\n advanceConnectorConnectionTime: (durationMs) =>\n stores.connectorConnections.advanceTimeForTesting(durationMs),\n db: this.connection.db,\n })\n }\n\n async ping(): Promise<void> {\n this.assertRootOperationAvailable()\n if (this.readConnection !== this.connection) {\n this.readConnection.db.query(\"SELECT 1\").get()\n return\n }\n await this.runRootStorageOperation(() => {\n this.connection.db.query(\"SELECT 1\").get()\n })\n }\n\n /**\n * The `isolation` option is intentionally ignored. SQLite runs every write transaction through\n * one connection serialized by {@link withTransactionLock} and a `BEGIN IMMEDIATE`, so there is no\n * concurrent writer to isolate against. File-backed object and timeseries reads use a separate WAL\n * snapshot connection; Postgres is where `isolation: \"serializable\"` maps to a real isolation level.\n */\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n _options: StorageTransactionOptions = {}\n ): Promise<T> {\n if (this.transactionScope.getStore()) {\n throwNestedStorageTransaction()\n }\n\n return this.withTransactionLock(async () => {\n let active = true\n const scope = { active: true }\n const transactionContext: SqliteOntologyTransactionContext = {\n id: {},\n materializations: new ProviderMaterializationTransactionLifecycle(),\n active: true,\n }\n const txStorage = this.createTransactionStorage(transactionContext)\n const tx = createTransactionStorageProxy(txStorage, () => active)\n\n try {\n return await runImmediateTransactionAsync(this.connection.db, () =>\n this.transactionScope.run(scope, async () => {\n try {\n const result = await run(tx)\n transactionContext.materializations.assertCommittable()\n return result\n } finally {\n scope.active = false\n transactionContext.active = false\n txStorage.ontology.deactivateSessions()\n transactionContext.materializations.deactivate()\n }\n })\n )\n } finally {\n active = false\n }\n })\n }\n\n close(): void {\n if (this.readConnection !== this.connection) closeSqliteStoreConnection(this.readConnection)\n closeSqliteStoreConnection(this.connection)\n }\n\n private createTransactionStorage(\n transactionContext: SqliteOntologyTransactionContext\n ): Storage & { readonly ontology: SqliteOntologyStorage } {\n return {\n ...createSqliteStores(\n {\n db: this.connection.db,\n ownsConnection: false,\n },\n {\n runOntologyOperation: async (run) => run(),\n transactionContext,\n }\n ),\n ping: async () => {\n this.connection.db.query(\"SELECT 1\").get()\n },\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n\n private runRootStorageOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(async () => run())\n }\n\n private runRootOntologyOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(() => runImmediateTransactionAsync(this.connection.db, run))\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.transactionScope.getStore()?.active) return\n throw new StorageTransactionError(\n \"[SixbSqlite] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n private async withTransactionLock<T>(run: () => Promise<T>): Promise<T> {\n const previous = this.transactionTail\n let release!: () => void\n this.transactionTail = new Promise<void>((resolve) => {\n release = resolve\n })\n\n await previous\n try {\n return await run()\n } finally {\n release()\n }\n }\n}\n\nfunction createSqliteStores(\n connection: SqliteStoreConnection,\n options: {\n readonly runOntologyOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }\n): SqliteStoreSet {\n const auth = new SqliteAuthStorage({ connection })\n const shareGrants = new SqliteShareGrantStorage({ connection })\n const shareSessions = new SqliteShareSessionStorage({ connection })\n const executions = new SqliteExecutionStorage(connection.db, auth, shareSessions)\n return {\n objects: new SqliteObjectStorage({ connection }),\n ontology: new SqliteOntologyStorage({\n db: connection.db,\n runRootOperation: options.runOntologyOperation,\n transactionContext: options.transactionContext,\n }),\n auth,\n executions,\n agents: new SqliteAgentStorage({ connection, executions }),\n artifacts: new SqliteArtifactStorage(connection),\n aiUsage: new SqliteAiUsageStorage({ connection }),\n aiCosts: new SqliteAiCostStorage(connection),\n aiLimits: new SqliteAiLimitStorage({ connection }),\n actionRuns: new SqliteActionRunStorage({ connection, executions }),\n pipelineRuns: new SqlitePipelineRunStorage({ connection, executions }),\n timeseries: new SqliteTimeseriesStorage({ connection }),\n syncRuns: new SqliteSyncRunStorage({ connection, executions }),\n projectionRuns: new SqliteProjectionRunStorage({ connection, executions }),\n workflowRuns: new SqliteWorkflowRunStorage({ connection, executions }),\n workflowInterventions: new SqliteWorkflowInterventionStorage({ connection }),\n webhookRuns: new SqliteWebhookRunStorage({ connection, executions }),\n rules: new SqliteRulesStorage({ connection }),\n shareGrants,\n shareSessions,\n connectorConnections: new SqliteConnectorConnectionStorage(connection),\n fileUploadSessions: new SqliteFileUploadSessionStorage(connection),\n fileDownloadGrants: new SqliteFileDownloadGrantStorage(connection),\n activity: new SqliteActivityStorage(connection),\n }\n}\n\ninterface SqliteStoreSet {\n readonly objects: SqliteObjectStorage\n readonly ontology: SqliteOntologyStorage\n readonly auth: SqliteAuthStorage\n readonly executions: SqliteExecutionStorage\n readonly agents: SqliteAgentStorage\n readonly artifacts: SqliteArtifactStorage\n readonly aiUsage: SqliteAiUsageStorage\n readonly aiCosts: SqliteAiCostStorage\n readonly aiLimits: SqliteAiLimitStorage\n readonly actionRuns: SqliteActionRunStorage\n readonly pipelineRuns: SqlitePipelineRunStorage\n readonly syncRuns: SqliteSyncRunStorage\n readonly projectionRuns: SqliteProjectionRunStorage\n readonly workflowRuns: SqliteWorkflowRunStorage\n readonly workflowInterventions: SqliteWorkflowInterventionStorage\n readonly timeseries: SqliteTimeseriesStorage\n readonly webhookRuns: SqliteWebhookRunStorage\n readonly rules: SqliteRulesStorage\n readonly shareGrants: SqliteShareGrantStorage\n readonly shareSessions: SqliteShareSessionStorage\n readonly connectorConnections: SqliteConnectorConnectionStorage\n readonly fileUploadSessions: SqliteFileUploadSessionStorage\n readonly fileDownloadGrants: SqliteFileDownloadGrantStorage\n readonly activity: SqliteActivityStorage\n}\n\nexport { migrateSqliteStorage } from \"./migrations\"\n",
6
+ "import type { Database } from \"bun:sqlite\"\nimport type { ActionSubject, JsonValue } from \"@sixb/core\"\nimport {\n parseActionRunFailure,\n serializeActionRunFailure,\n} from \"@sixb/core/internal/action-run-storage\"\nimport { assertActionRunExecution } from \"@sixb/core/internal/action-run-storage-provider\"\nimport { normalizeRecordActionRunInput, resolveActionRunEffects } from \"@sixb/core/internal/storage\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStatus,\n ActionRunStorage,\n ActionRunWritebackRecord,\n ExecutionStorage,\n ListActionRunsInput,\n ListActionRunsResult,\n RecordActionEffectsInput,\n RecordActionRunInput,\n} from \"@sixb/core/storage\"\nimport { ActionRunError } from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteActionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteActionRunStorage implements ActionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteActionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async record(input: RecordActionRunInput): Promise<ActionRunRecord> {\n const record = normalizeRecordActionRunInput(input)\n await assertActionRunExecution({\n executions: this.executions,\n projectId: record.projectId,\n executionId: record.executionId,\n runId: record.id,\n actionId: record.actionId,\n })\n\n const inserted = this.db\n .query(\n `\n INSERT INTO action_runs (\n project_id,\n id,\n execution_id,\n action_id,\n subject_kind,\n object_type_id,\n primary_id,\n status,\n phase,\n started_at,\n finished_at,\n params,\n idempotency_key,\n writeback_status,\n writeback_completed_at,\n writeback_result,\n writeback_error,\n error\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT DO NOTHING\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.actionId,\n record.subject.kind,\n record.subject.kind === \"object\" ? record.subject.objectTypeId : null,\n record.subject.kind === \"object\" ? record.subject.primaryId : null,\n record.status,\n record.phase,\n record.startedAt.toISOString(),\n record.finishedAt.toISOString(),\n JSON.stringify(record.params),\n record.idempotencyKey,\n record.writeback?.status ?? null,\n record.writeback?.completedAt.toISOString() ?? null,\n record.writeback?.status === \"succeeded\" ? JSON.stringify(record.writeback.result) : null,\n record.writeback?.status === \"failed\"\n ? serializeActionRunFailure(record.writeback.error, \"writeback\")\n : null,\n record.status === \"failed\" ? serializeActionRunFailure(record.error) : null\n )\n\n if (inserted.changes === 0) {\n const conflict = this.selectRow(record.projectId, record.id)\n throw new ActionRunError(\n conflict\n ? `[SixbSqlite] Action run '${record.id}' is already recorded for project '${record.projectId}'.`\n : `[SixbSqlite] Execution '${record.executionId}' already belongs to another Action run.`\n )\n }\n return rowToActionRunRecord(this.requireRow(record.projectId, record.id))\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return this.db.transaction(() => {\n const existing = this.selectRow(input.projectId, input.id)\n const { run, effects } = resolveActionRunEffects(\n existing ? rowToActionRunRecord(existing) : null,\n input\n )\n if (!effects) return run\n\n this.db\n .query(\n `\n UPDATE action_runs\n SET\n phase = ?,\n effects_status = ?,\n effects_completed_at = ?,\n effects_error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"effects\",\n effects.status,\n effects.completedAt.toISOString(),\n effects.status === \"failed\" ? serializeActionRunFailure(effects.error, \"effects\") : null,\n input.projectId,\n input.id\n )\n return rowToActionRunRecord(this.requireRow(input.projectId, input.id))\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as DatabaseRow | null\n\n return row ? rowToActionRunRecord(row) : null\n }\n\n async getByExecutionIds(params: {\n readonly projectId: string\n readonly executionIds: readonly string[]\n }): Promise<readonly ActionRunRecord[]> {\n const executionIds = [...new Set(params.executionIds)]\n if (executionIds.length === 0) {\n return []\n }\n\n const rows = this.db\n .query(\n `\n SELECT *\n FROM action_runs\n WHERE project_id = ?\n AND execution_id IN (SELECT value FROM json_each(?))\n `\n )\n .all(params.projectId, JSON.stringify(executionIds)) as DatabaseRow[]\n\n const byExecution = new Map(rows.map((row) => [row.execution_id, row]))\n return executionIds.flatMap((executionId) => {\n const row = byExecution.get(executionId)\n return row ? [rowToActionRunRecord(row)] : []\n })\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.actionIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.actionId) {\n whereClauses.push(\"action_id = ?\")\n args.push(input.actionId)\n }\n\n if (input.actionIds) {\n whereClauses.push(`action_id IN (${input.actionIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.actionIds)\n }\n\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n whereClauses.push(\"subject_kind <> ?\")\n args.push(\"object\")\n } else {\n whereClauses.push(\n `(subject_kind <> ? OR object_type_id IN (${input.objectTypeIds\n .map(() => \"?\")\n .join(\", \")}))`\n )\n args.push(\"object\", ...input.objectTypeIds)\n }\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(\"object\")\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n if (input.subject) {\n whereClauses.push(\"subject_kind = ?\")\n args.push(input.subject.kind)\n if (input.subject.kind === \"object\") {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.subject.objectTypeId)\n whereClauses.push(\"primary_id = ?\")\n args.push(input.subject.primaryId)\n }\n }\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.startedAfter) {\n whereClauses.push(\"started_at >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n\n if (input.startedBefore) {\n whereClauses.push(\"started_at <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM action_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM action_runs\n ${where}\n ORDER BY started_at ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map((row) => rowToActionRunRecord(row))\n\n return {\n runs,\n hasMore: offset + runs.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private selectRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM action_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n const row = this.selectRow(projectId, id)\n if (!row) {\n throw new ActionRunError(\n `[SixbSqlite] Action run '${id}' disappeared from project '${projectId}' while recording it.`\n )\n }\n return row\n }\n}\n\nfunction toActionRunWritebackRecord(row: DatabaseRow): ActionRunWritebackRecord | undefined {\n if (!row.writeback_status) {\n return undefined\n }\n\n const completedAt = new Date(row.writeback_completed_at ?? row.finished_at)\n if (row.writeback_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result:\n row.writeback_result === null ? null : (JSON.parse(row.writeback_result) as JsonValue),\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parseActionRunFailure(row.writeback_error, \"writeback\"),\n }\n}\n\nfunction toActionRunEffectsRecord(row: DatabaseRow): ActionRunEffectsRecord | undefined {\n if (!row.effects_status) {\n return undefined\n }\n\n const completedAt = new Date(row.effects_completed_at ?? row.finished_at)\n if (row.effects_status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: parseActionRunFailure(row.effects_error, \"effects\"),\n }\n}\n\nfunction rowToActionRunRecord(row: DatabaseRow): ActionRunRecord {\n const writeback = toActionRunWritebackRecord(row)\n const effects = toActionRunEffectsRecord(row)\n const fields = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n actionId: row.action_id,\n subject: rowToActionSubject(row),\n phase: row.phase,\n startedAt: new Date(row.started_at),\n finishedAt: new Date(row.finished_at),\n params: JSON.parse(row.params) as ActionRunRecord[\"params\"],\n idempotencyKey: row.idempotency_key,\n ...(writeback === undefined ? {} : { writeback }),\n ...(effects === undefined ? {} : { effects }),\n }\n\n if (row.status === \"succeeded\") return { ...fields, status: \"succeeded\" }\n return { ...fields, status: \"failed\", error: parseActionRunFailure(row.error) }\n}\n\nfunction rowToActionSubject(row: DatabaseRow): ActionSubject {\n if (row.subject_kind === \"none\") {\n return { kind: \"none\" }\n }\n\n if (!row.object_type_id || !row.primary_id) {\n throw new ActionRunError(`[SixbSqlite] Action run '${row.id}' has an invalid object subject.`)\n }\n\n return {\n kind: \"object\",\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n }\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n action_id: string\n subject_kind: ActionSubject[\"kind\"]\n object_type_id: string | null\n primary_id: string | null\n status: ActionRunStatus\n phase: ActionRunPhase\n started_at: string\n finished_at: string\n params: string\n idempotency_key: string\n writeback_status: ActionRunWritebackRecord[\"status\"] | null\n writeback_completed_at: string | null\n writeback_result: string | null\n writeback_error: string | null\n effects_status: ActionRunEffectsRecord[\"status\"] | null\n effects_completed_at: string | null\n effects_error: string | null\n error: string | null\n}\n",
7
7
  "import type { Database } from \"bun:sqlite\"\nimport { Database as SqliteDatabase } from \"bun:sqlite\"\nimport { mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport { freshSqliteDatabase } from \"./migrations\"\n\nexport interface SqliteStoreConnection {\n readonly db: Database\n readonly ownsConnection: boolean\n}\n\nexport interface SqliteStoreConnectionOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n readonly readonly?: boolean\n}\n\nexport function openSqliteStoreConnection(\n options: SqliteStoreConnectionOptions = {}\n): SqliteStoreConnection {\n if (options.connection) {\n return {\n db: options.connection.db,\n ownsConnection: false,\n }\n }\n\n const path = options.path ?? \":memory:\"\n if (path !== \":memory:\" && !options.readonly) mkdirSync(dirname(path), { recursive: true })\n // A file is brought up to date by its migrators; a writable in-memory database starts with the\n // whole schema.\n const db =\n path === \":memory:\" && !options.readonly\n ? freshSqliteDatabase()\n : new SqliteDatabase(path, options.readonly ? { readonly: true } : undefined)\n db.run(\"PRAGMA foreign_keys = ON\")\n db.run(\"PRAGMA busy_timeout = 5000\")\n return { db, ownsConnection: true }\n}\n\nexport function closeSqliteStoreConnection(connection: SqliteStoreConnection): void {\n if (connection.ownsConnection) {\n connection.db.close()\n }\n}\n\nconst activeImmediateTransactions = new WeakSet<Database>()\nconst activeDeferredReadTransactions = new WeakSet<Database>()\n\nexport function runImmediateTransaction<T>(db: Database, run: () => T): T {\n if (activeImmediateTransactions.has(db)) {\n return run()\n }\n\n db.run(\"BEGIN IMMEDIATE\")\n activeImmediateTransactions.add(db)\n\n try {\n const result = run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeImmediateTransactions.delete(db)\n }\n}\n\n/** Lets timers and request handlers run between bounded synchronous SQLite chunks. */\nexport function yieldSqliteEventLoop(): Promise<void> {\n return new Promise((resolve) => setImmediate(resolve))\n}\n\nexport async function runImmediateTransactionAsync<T>(\n db: Database,\n run: () => Promise<T> | T\n): Promise<T> {\n if (activeImmediateTransactions.has(db)) {\n return run()\n }\n\n db.run(\"BEGIN IMMEDIATE\")\n activeImmediateTransactions.add(db)\n\n try {\n const result = await run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeImmediateTransactions.delete(db)\n }\n}\n\n/**\n * Run a multi-statement read against one proven SQLite snapshot.\n *\n * A provider-owned immediate transaction already has a stable snapshot and may be reused. Any\n * other pre-existing transaction is rejected because this provider cannot prove who owns it or\n * which lifecycle will close it.\n */\nexport function runDeferredReadTransaction<T>(db: Database, run: () => T): T {\n if (activeImmediateTransactions.has(db) || activeDeferredReadTransactions.has(db)) {\n return run()\n }\n if (db.inTransaction) {\n throw new Error(\n \"[SixbSqlite] Selected object reads cannot join an unverified SQLite transaction.\"\n )\n }\n\n db.run(\"BEGIN DEFERRED\")\n activeDeferredReadTransactions.add(db)\n try {\n const result = run()\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n activeDeferredReadTransactions.delete(db)\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Preserve the original SQLite storage failure.\n }\n}\n",
8
- "import { Database } from \"bun:sqlite\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/038-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/040-outbox-publication-order.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\nimport projectionRunSupersessionSql from \"./migrations/051-projection-run-supersession.sql\" with {\n type: \"text\",\n}\nimport compactSourceStorageSql from \"./migrations/052-compact-source-storage.sql\" with {\n type: \"text\",\n}\nimport replacementPlansSql from \"./migrations/053-replacement-plans.sql\" with { type: \"text\" }\nimport slimOntologyOutboxSql from \"./migrations/054-slim-ontology-outbox.sql\" with { type: \"text\" }\nimport commitTouchesSql from \"./migrations/055-commit-touches.sql\" with { type: \"text\" }\nimport audioTranscriptionSql from \"./migrations/056-audio-transcription.sql\" with { type: \"text\" }\nimport rerankingModelKindSql from \"./migrations/057-reranking-model-kind.sql\" with { type: \"text\" }\n\nconst MIGRATIONS_TABLE_SQL = `\n CREATE TABLE IF NOT EXISTS sixb_migrations (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n PRIMARY KEY (adapter_id, version)\n );\n`\n\nexport const SQLITE_STORAGE_ADAPTER_ID = \"SixbSqliteStorage\"\nexport const SQLITE_STORAGE_FILE = \"storage.sqlite\"\n\nexport const sqliteStorageMigrations = defineMigrations({\n adapterId: SQLITE_STORAGE_ADAPTER_ID,\n steps: [\n sqliteSql(\"001-initial-schema\", initialSchemaSql),\n sqliteSql(\"002-workflow-run-output\", workflowRunOutputSql),\n sqliteSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n sqliteSql(\"004-executions\", executionsSql),\n sqliteSql(\"005-workflow-executions\", workflowExecutionsSql),\n sqliteSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n sqliteSql(\"007-split-overrides\", splitOverridesSql),\n sqliteSql(\"008-action-executions\", actionExecutionsSql),\n sqliteSql(\"009-agent-executions\", agentExecutionsSql),\n sqliteSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n sqliteSql(\"011-sync-failure-record\", syncFailureRecordSql),\n sqliteSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n sqliteSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n sqliteSql(\"014-agent-failure-record\", agentFailureRecordSql),\n sqliteSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n sqliteSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n sqliteSql(\"017-action-failure-record\", actionFailureRecordSql),\n sqliteSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n sqliteSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n sqliteSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n sqliteSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n sqliteStep(\n \"022-projection-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM projection_runs LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Projection execution migration cannot preserve legacy runs with unknown authority.\"\n )\n }\n db.run(projectionExecutionsSql)\n },\n { checksum: checksum(projectionExecutionsSql) }\n ),\n sqliteStep(\n \"023-webhook-executions\",\n (db) => {\n const hasRuns = db.query(\"SELECT 1 FROM webhook_runs LIMIT 1\").get()\n const hasDeliveries = db.query(\"SELECT 1 FROM webhook_deliveries LIMIT 1\").get()\n if (hasRuns || hasDeliveries) {\n throw new Error(\n \"[SixbSqliteStorage] Webhook execution migration cannot preserve legacy runs or deliveries with unknown authority.\"\n )\n }\n db.run(webhookExecutionsSql)\n },\n { checksum: checksum(webhookExecutionsSql) }\n ),\n sqliteStep(\n \"024-ontology-commit-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM ontology_commits LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Ontology commit execution migration cannot preserve commits with unknown authority.\"\n )\n }\n db.run(ontologyCommitExecutionsSql)\n },\n { checksum: checksum(ontologyCommitExecutionsSql) }\n ),\n sqliteSql(\"025-connector-connections\", connectorConnectionsSql),\n sqliteSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n sqliteSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n sqliteSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n sqliteSql(\"029-model-accounting\", modelAccountingSql),\n sqliteSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n sqliteSql(\"031-subagent-runs\", subagentRunsSql),\n sqliteSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n sqliteSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n sqliteSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n sqliteSql(\"035-share-grants\", shareGrantsSql),\n sqliteSql(\"036-share-sessions\", shareSessionsSql),\n sqliteSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n sqliteSql(\"038-projection-source-roots\", projectionSourceRootsSql),\n sqliteSql(\"039-connector-optional-pkce\", connectorOptionalPkceSql),\n sqliteSql(\"040-outbox-publication-order\", outboxPublicationOrderSql),\n sqliteSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n sqliteSql(\"042-vector-profiles\", vectorProfilesSql),\n sqliteSql(\"043-vector-indexing\", vectorIndexingSql),\n sqliteSql(\"044-vector-batching\", vectorBatchingSql),\n sqliteSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n sqliteSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n sqliteSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n sqliteSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n sqliteSql(\"049-native-sessions\", nativeSessionsSql),\n sqliteSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n sqliteSql(\"051-projection-run-supersession\", projectionRunSupersessionSql),\n sqliteStep(\n \"052-compact-source-storage\",\n (db) => {\n // SQLite has no procedural block to check the copy in SQL: count around it instead.\n const before = sourceStorageCounts(db)\n db.run(compactSourceStorageSql)\n const after = sourceStorageCounts(db)\n if (\n after.versions !== before.versions ||\n after.roots !== before.roots ||\n after.rows !== before.rows\n ) {\n throw new Error(\n \"[SixbSqliteStorage] Source versions, roots or rows were lost while compacting source storage.\"\n )\n }\n },\n { checksum: checksum(compactSourceStorageSql) }\n ),\n sqliteSql(\"053-replacement-plans\", replacementPlansSql),\n sqliteStep(\n \"054-slim-ontology-outbox\",\n (db) => {\n // SQLite has no procedural block to refuse the conversion in SQL: check before it.\n const mismatched = unrebuildableOutboxEvents(db)\n if (mismatched > 0) {\n throw new Error(\n `[SixbSqliteStorage] ${mismatched} outbox events would not rebuild from their commit.`\n )\n }\n db.run(slimOntologyOutboxSql)\n },\n { checksum: checksum(slimOntologyOutboxSql) }\n ),\n sqliteSql(\"055-commit-touches\", commitTouchesSql),\n sqliteSql(\"056-audio-transcription\", audioTranscriptionSql),\n sqliteSql(\"057-reranking-model-kind\", rerankingModelKindSql),\n sqliteSql(\"058-file-download-grants\", fileDownloadGrantsSql),\n sqliteSql(\"059-drained-source-versions\", drainedSourceVersionsSql),\n sqliteSql(\"060-terminal-action-runs\", terminalActionRunsSql),\n sqliteSql(\"061-drop-auth-audience\", dropAuthAudienceSql),\n ],\n})\n\nexport function sqliteStoragePath(basePath: string): string {\n return `${basePath}/${SQLITE_STORAGE_FILE}`\n}\n\nexport function sqliteSql(id: string, sqlText: string): MigrationStep<Database> {\n return sqliteStep(\n id,\n (db) => {\n db.run(sqlText)\n },\n { checksum: checksum(sqlText) }\n )\n}\n\nexport function sqliteStep(\n id: string,\n up: (db: Database) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<Database> {\n return step<Database>(id, up, options)\n}\n\n// Replaying every migration costs a few hundred milliseconds, and in-memory databases are made\n// often (each test's storage, for one). The schema is built once per process and each new database\n// starts as a copy of it.\nlet freshSchema: Uint8Array | undefined\n\n/** A new in-memory database holding the current schema, as replaying every migration leaves it. */\nexport function freshSqliteDatabase(): Database {\n if (!freshSchema) {\n const template = new Database(\":memory:\")\n try {\n template.run(\"PRAGMA foreign_keys = ON\")\n installFreshSqliteSchema(template)\n freshSchema = template.serialize()\n } finally {\n template.close()\n }\n }\n return Database.deserialize(freshSchema)\n}\n\nexport function installFreshSqliteSchema(db: Database): void {\n for (const migration of sqliteStorageMigrations.steps) {\n const installed = migration.up(db)\n if (installed instanceof Promise) {\n throw new Error(\n `[${sqliteStorageMigrations.adapterId}] Fresh SQLite schema installation must be synchronous`\n )\n }\n }\n}\n\nexport function createSqliteStorageMigrators(basePath: string): readonly StorageMigrator[] {\n return [\n createSqliteMigrator({\n path: sqliteStoragePath(basePath),\n migrations: sqliteStorageMigrations,\n }),\n ]\n}\n\nexport function createSqliteMigrator(params: {\n readonly path: string\n readonly migrations: MigrationSet<Database>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readSqliteHistory(params.path, params.migrations.adapterId),\n })\n },\n async migrate() {\n return withSqliteDatabase(params.path, (db) =>\n runMigrationSet({\n context: db,\n migrations: params.migrations,\n state: sqliteMigrationHistoryStore(db),\n })\n )\n },\n }\n}\n\nexport async function migrateSqliteStorage(basePath: string): Promise<void> {\n mkdirSync(basePath, { recursive: true })\n\n for (const migrator of createSqliteStorageMigrators(basePath)) {\n await migrator.migrate()\n }\n}\n\nfunction sqliteMigrationHistoryStore(db: Database): MigrationHistoryStore {\n return {\n ensure() {\n db.run(MIGRATIONS_TABLE_SQL)\n },\n readHistory(adapterId) {\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n },\n markStarted(adapterId, migration, at) {\n db.query(`\n INSERT INTO sixb_migrations (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES (?, ?, ?, ?, 'started', ?, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `).run(adapterId, migration.version, migration.id, migration.checksum ?? null, at)\n },\n markApplied(adapterId, migration, at) {\n db.query(`\n UPDATE sixb_migrations\n SET status = 'applied', finished_at = ?\n WHERE adapter_id = ? AND version = ?\n `).run(at, adapterId, migration.version)\n },\n async transaction(run) {\n // SQLite cannot rebuild a referenced parent table while foreign-key enforcement is active,\n // even when the replacement satisfies every deferred reference. Migrations therefore run\n // with enforcement paused, validate the complete schema before commit, then restore it.\n db.run(\"PRAGMA foreign_keys = OFF\")\n db.run(\"BEGIN\")\n\n try {\n const result = await run()\n const violations = db.query(\"PRAGMA foreign_key_check\").all()\n if (violations.length > 0) {\n throw new Error(\n `[${SQLITE_STORAGE_ADAPTER_ID}] Migration produced ${violations.length} foreign-key violation(s).`\n )\n }\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n db.run(\"PRAGMA foreign_keys = ON\")\n }\n },\n }\n}\n\nfunction rowToMigrationRecord(row: unknown): MigrationRecord {\n const migration = row as {\n adapter_id: string\n version: number\n id: string\n checksum: string | null\n status: \"started\" | \"applied\"\n started_at: string\n finished_at: string | null\n }\n\n return {\n adapterId: migration.adapter_id,\n version: migration.version,\n id: migration.id,\n checksum: migration.checksum ?? undefined,\n status: migration.status,\n startedAt: migration.started_at,\n finishedAt: migration.finished_at ?? undefined,\n }\n}\n\nfunction sourceStorageCounts(db: Database): {\n readonly versions: number\n readonly roots: number\n readonly rows: number\n} {\n return db\n .query(`SELECT (SELECT count(*) FROM ontology_sources) AS versions,\n (SELECT count(*) FROM ontology_source_roots) AS roots,\n (SELECT count(*) FROM ontology_source_rows) AS rows`)\n .get() as { readonly versions: number; readonly roots: number; readonly rows: number }\n}\n\n/**\n * Stored events that would not rebuild exactly from their commit and execution. Who asked and what\n * wrote are derived from the execution exactly as 047 derived the commit's copies; both sides were\n * written as canonical JSON, so equal JSON compares as equal text.\n */\nfunction unrebuildableOutboxEvents(db: Database): number {\n const row = db\n .query(\n `SELECT COUNT(*) AS mismatched\n FROM ontology_outbox AS outbox\n LEFT JOIN ontology_commits AS commits\n ON commits.project_id = outbox.project_id AND commits.id = outbox.commit_id\n LEFT JOIN executions\n ON executions.project_id = commits.project_id AND executions.id = commits.execution_id\n WHERE executions.id IS NULL\n OR outbox.envelope ->> '$.id' IS NOT outbox.id\n OR outbox.envelope ->> '$.commitOrdinal' IS NOT outbox.commit_ordinal\n OR outbox.envelope ->> '$.commitId' IS NOT commits.id\n OR outbox.envelope ->> '$.projectId' IS NOT commits.project_id\n OR outbox.envelope ->> '$.schemaVersion' IS NOT 1\n OR outbox.envelope ->> '$.occurredAt' IS NOT commits.committed_at\n OR outbox.envelope -> '$.origin' IS NOT json(commits.origin)\n OR outbox.envelope ->> '$.correlationId' IS NOT executions.correlation_id\n OR outbox.envelope -> '$.requestedBy' IS NOT CASE\n WHEN executions.requested_by_user_id IS NOT NULL\n THEN json_object('id', executions.requested_by_user_id, 'type', 'user')\n WHEN executions.requested_by_service_account_id IS NOT NULL\n THEN json_object('id', executions.requested_by_service_account_id, 'type', 'serviceAccount')\n END\n OR outbox.envelope -> '$.executor' IS NOT CASE executions.executor_kind\n WHEN 'request' THEN json_object('requestId', executions.executor_id, 'type', 'request')\n WHEN 'agent' THEN json_object('runId', executions.executor_id, 'type', 'agent')\n WHEN 'kernel' THEN json_object(\n 'operation',\n CASE executions.authority_kernel_operation\n WHEN 'ontology.recover'\n THEN json_object('recoveryId', executions.executor_id, 'type', 'ontology.recover')\n ELSE json_object('indexingId', executions.executor_id, 'type', 'ontology.indexVectors')\n END,\n 'type', 'kernel'\n )\n ELSE json_object(\n 'id', executions.authority_primitive_id,\n 'kind', executions.executor_kind,\n 'runId', executions.executor_id,\n 'type', 'primitive'\n )\n END\n OR outbox.envelope ->> '$.topic' IS NOT CASE substr(outbox.envelope ->> '$.type', 1, 4)\n WHEN 'obje' THEN 'objects'\n WHEN 'link' THEN 'links'\n WHEN 'tele' THEN 'telemetry'\n END\n OR outbox.envelope ->> '$.partitionKey' IS NOT CASE outbox.envelope ->> '$.topic'\n WHEN 'objects' THEN (outbox.envelope ->> '$.payload.objectTypeId') || ':' ||\n (outbox.envelope ->> '$.payload.primaryId')\n WHEN 'links' THEN (outbox.envelope ->> '$.payload.sourceTypeId') || ':' ||\n (outbox.envelope ->> '$.payload.sourceId') || ':' ||\n (outbox.envelope ->> '$.payload.linkId')\n WHEN 'telemetry' THEN (outbox.envelope ->> '$.payload.objectTypeId') || ':' ||\n (outbox.envelope ->> '$.payload.objectId') || ':' ||\n (outbox.envelope ->> '$.payload.propertyId')\n END\n OR (\n outbox.envelope ->> '$.type' IN ('object.created', 'link.created')\n AND (\n (SELECT COUNT(*) FROM json_each(outbox.envelope, '$.payload.propertyChanges'))\n IS NOT (SELECT COUNT(*) FROM json_each(outbox.envelope, '$.payload.properties'))\n OR EXISTS (\n SELECT 1\n FROM json_each(outbox.envelope, '$.payload.propertyChanges') AS change\n LEFT JOIN json_each(outbox.envelope, '$.payload.properties') AS property\n ON property.key = change.key\n WHERE property.key IS NULL\n OR change.value ->> '$.operation' IS NOT 'created'\n OR json_type(change.value, '$.after') IS NOT property.type\n OR change.value ->> '$.after' IS NOT property.value\n OR (SELECT COUNT(*) FROM json_each(change.value)) IS NOT 2\n )\n )\n )`\n )\n .get() as { readonly mismatched: number }\n return row.mismatched\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\n/**\n * Reads migration history without creating anything. `null` means there is no history\n * to read, which is a state and not a failure.\n *\n * `new Database(path)` creates the file, and `withSqliteDatabase` additionally mkdirs\n * its parent — fine on the way to a migration, wrong for a probe. So: `existsSync`\n * first, then open `readonly` so even a mistake below cannot write. `:memory:` is\n * always empty on a fresh connection, so there is nothing to report.\n */\nasync function readSqliteHistory(\n path: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n if (path === \":memory:\" || !existsSync(path)) {\n return null\n }\n\n const db = new Database(path, { readonly: true })\n try {\n const table = db\n .query(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sixb_migrations'\")\n .get()\n if (!table) {\n return null\n }\n\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n } finally {\n db.close()\n }\n}\n\nasync function withSqliteDatabase<T>(path: string, run: (db: Database) => Promise<T>): Promise<T> {\n if (path !== \":memory:\") mkdirSync(dirname(path), { recursive: true })\n const db = new Database(path)\n\n try {\n return await run(db)\n } finally {\n db.close()\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Ignore rollback errors so the original migration failure is preserved.\n }\n}\n\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/039-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\nimport fileDownloadGrantsSql from \"./migrations/058-file-download-grants.sql\" with { type: \"text\" }\nimport drainedSourceVersionsSql from \"./migrations/059-drained-source-versions.sql\" with {\n type: \"text\",\n}\nimport terminalActionRunsSql from \"./migrations/060-terminal-action-runs.sql\" with { type: \"text\" }\nimport dropAuthAudienceSql from \"./migrations/061-drop-auth-audience.sql\" with { type: \"text\" }\n",
8
+ "import { Database } from \"bun:sqlite\"\nimport { createHash } from \"node:crypto\"\nimport { existsSync, mkdirSync } from \"node:fs\"\nimport { dirname } from \"node:path\"\nimport type { StorageMigrator } from \"@sixb/core\"\nimport type {\n MigrationHistoryStore,\n MigrationRecord,\n MigrationSet,\n MigrationStep,\n MigrationStepOptions,\n} from \"@sixb/core/storage\"\nimport {\n defineMigrations,\n describeMigrationHistory,\n runMigrationSet,\n step,\n} from \"@sixb/core/storage\"\nimport initialSchemaSql from \"./migrations/001-initial-schema.sql\" with { type: \"text\" }\nimport workflowRunOutputSql from \"./migrations/002-workflow-run-output.sql\" with { type: \"text\" }\nimport mergeSyncRunsSql from \"./migrations/003-merge-sync-runs.sql\" with { type: \"text\" }\nimport executionsSql from \"./migrations/004-executions.sql\" with { type: \"text\" }\nimport workflowExecutionsSql from \"./migrations/005-workflow-executions.sql\" with { type: \"text\" }\nimport narrowOntologySourceRootIndexSql from \"./migrations/006-narrow-ontology-source-root-index.sql\" with {\n type: \"text\",\n}\nimport splitOverridesSql from \"./migrations/007-split-overrides.sql\" with { type: \"text\" }\nimport actionExecutionsSql from \"./migrations/008-action-executions.sql\" with { type: \"text\" }\nimport agentExecutionsSql from \"./migrations/009-agent-executions.sql\" with { type: \"text\" }\nimport aiUsageAccountingFoundationSql from \"./migrations/010-ai-usage-accounting-foundation.sql\" with {\n type: \"text\",\n}\nimport syncFailureRecordSql from \"./migrations/011-sync-failure-record.sql\" with { type: \"text\" }\nimport pipelineFailureRecordSql from \"./migrations/012-pipeline-failure-record.sql\" with {\n type: \"text\",\n}\nimport workflowFailureRecordSql from \"./migrations/013-workflow-failure-record.sql\" with {\n type: \"text\",\n}\nimport agentFailureRecordSql from \"./migrations/014-agent-failure-record.sql\" with { type: \"text\" }\nimport projectionFailureRecordSql from \"./migrations/015-projection-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookRunFailureRecordSql from \"./migrations/016-webhook-run-failure-record.sql\" with {\n type: \"text\",\n}\nimport actionFailureRecordSql from \"./migrations/017-action-failure-record.sql\" with {\n type: \"text\",\n}\nimport ontologyOutboxFailureRecordSql from \"./migrations/018-ontology-outbox-failure-record.sql\" with {\n type: \"text\",\n}\nimport webhookDeliveryFailureRecordSql from \"./migrations/019-webhook-delivery-failure-record.sql\" with {\n type: \"text\",\n}\nimport dropRunUsageProjectionsSql from \"./migrations/020-drop-run-usage-projections.sql\" with {\n type: \"text\",\n}\nimport syncPipelineExecutionsSql from \"./migrations/021-sync-pipeline-executions.sql\" with {\n type: \"text\",\n}\nimport projectionExecutionsSql from \"./migrations/022-projection-executions.sql\" with {\n type: \"text\",\n}\nimport webhookExecutionsSql from \"./migrations/023-webhook-executions.sql\" with { type: \"text\" }\nimport ontologyCommitExecutionsSql from \"./migrations/024-ontology-commit-executions.sql\" with {\n type: \"text\",\n}\nimport connectorConnectionsSql from \"./migrations/025-connector-connections.sql\" with {\n type: \"text\",\n}\nimport aiCostAccountingSql from \"./migrations/026-ai-cost-accounting.sql\" with { type: \"text\" }\nimport agentContextCheckpointsSql from \"./migrations/027-agent-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport objectOverrideEditTimesSql from \"./migrations/028-object-override-edit-times.sql\" with {\n type: \"text\",\n}\nimport modelAccountingSql from \"./migrations/029-model-accounting.sql\" with { type: \"text\" }\nimport aiUsageLimitsSql from \"./migrations/030-ai-usage-limits.sql\" with { type: \"text\" }\nimport subagentRunsSql from \"./migrations/031-subagent-runs.sql\" with { type: \"text\" }\nimport conversationRunSpecSql from \"./migrations/032-conversation-run-spec.sql\" with {\n type: \"text\",\n}\nimport retireAgentDefinitionsSql from \"./migrations/033-retire-agent-definitions.sql\" with {\n type: \"text\",\n}\nimport deviceAuthorizationsSql from \"./migrations/034-device-authorizations.sql\" with {\n type: \"text\",\n}\nimport shareGrantsSql from \"./migrations/035-share-grants.sql\" with { type: \"text\" }\nimport shareSessionsSql from \"./migrations/036-share-sessions.sql\" with { type: \"text\" }\nimport projectionSourceRootsSql from \"./migrations/038-projection-source-roots.sql\" with {\n type: \"text\",\n}\nimport outboxPublicationOrderSql from \"./migrations/040-outbox-publication-order.sql\" with {\n type: \"text\",\n}\nimport agentThreadWorkspacesSql from \"./migrations/041-agent-thread-workspaces.sql\" with {\n type: \"text\",\n}\nimport vectorProfilesSql from \"./migrations/042-vector-profiles.sql\" with { type: \"text\" }\nimport vectorIndexingSql from \"./migrations/043-vector-indexing.sql\" with { type: \"text\" }\nimport vectorBatchingSql from \"./migrations/044-vector-batching.sql\" with { type: \"text\" }\nimport agentThreadSandboxStateSql from \"./migrations/045-agent-thread-sandbox-state.sql\" with {\n type: \"text\",\n}\nimport workflowInterventionPrincipalsSql from \"./migrations/046-workflow-intervention-principals.sql\" with {\n type: \"text\",\n}\nimport ontologyCommitAttributionSql from \"./migrations/047-ontology-commit-attribution.sql\" with {\n type: \"text\",\n}\nimport nativeSessionsSql from \"./migrations/049-native-sessions.sql\" with { type: \"text\" }\nimport directoryGroupMembershipsSql from \"./migrations/050-directory-group-memberships.sql\" with {\n type: \"text\",\n}\nimport projectionRunSupersessionSql from \"./migrations/051-projection-run-supersession.sql\" with {\n type: \"text\",\n}\nimport compactSourceStorageSql from \"./migrations/052-compact-source-storage.sql\" with {\n type: \"text\",\n}\nimport replacementPlansSql from \"./migrations/053-replacement-plans.sql\" with { type: \"text\" }\nimport slimOntologyOutboxSql from \"./migrations/054-slim-ontology-outbox.sql\" with { type: \"text\" }\nimport commitTouchesSql from \"./migrations/055-commit-touches.sql\" with { type: \"text\" }\nimport audioTranscriptionSql from \"./migrations/056-audio-transcription.sql\" with { type: \"text\" }\nimport rerankingModelKindSql from \"./migrations/057-reranking-model-kind.sql\" with { type: \"text\" }\n\nconst MIGRATIONS_TABLE_SQL = `\n CREATE TABLE IF NOT EXISTS sixb_migrations (\n adapter_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n id TEXT NOT NULL,\n checksum TEXT,\n status TEXT NOT NULL,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n PRIMARY KEY (adapter_id, version)\n );\n`\n\nexport const SQLITE_STORAGE_ADAPTER_ID = \"SixbSqliteStorage\"\nexport const SQLITE_STORAGE_FILE = \"storage.sqlite\"\n\nexport const sqliteStorageMigrations = defineMigrations({\n adapterId: SQLITE_STORAGE_ADAPTER_ID,\n steps: [\n sqliteSql(\"001-initial-schema\", initialSchemaSql),\n sqliteSql(\"002-workflow-run-output\", workflowRunOutputSql),\n sqliteSql(\"003-merge-sync-runs\", mergeSyncRunsSql),\n sqliteSql(\"004-executions\", executionsSql),\n sqliteSql(\"005-workflow-executions\", workflowExecutionsSql),\n sqliteSql(\"006-narrow-ontology-source-root-index\", narrowOntologySourceRootIndexSql),\n sqliteSql(\"007-split-overrides\", splitOverridesSql),\n sqliteSql(\"008-action-executions\", actionExecutionsSql),\n sqliteSql(\"009-agent-executions\", agentExecutionsSql),\n sqliteSql(\"010-ai-usage-accounting-foundation\", aiUsageAccountingFoundationSql),\n sqliteSql(\"011-sync-failure-record\", syncFailureRecordSql),\n sqliteSql(\"012-pipeline-failure-record\", pipelineFailureRecordSql),\n sqliteSql(\"013-workflow-failure-record\", workflowFailureRecordSql),\n sqliteSql(\"014-agent-failure-record\", agentFailureRecordSql),\n sqliteSql(\"015-projection-failure-record\", projectionFailureRecordSql),\n sqliteSql(\"016-webhook-run-failure-record\", webhookRunFailureRecordSql),\n sqliteSql(\"017-action-failure-record\", actionFailureRecordSql),\n sqliteSql(\"018-ontology-outbox-failure-record\", ontologyOutboxFailureRecordSql),\n sqliteSql(\"019-webhook-delivery-failure-record\", webhookDeliveryFailureRecordSql),\n sqliteSql(\"020-drop-run-usage-projections\", dropRunUsageProjectionsSql),\n sqliteSql(\"021-sync-pipeline-executions\", syncPipelineExecutionsSql),\n sqliteStep(\n \"022-projection-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM projection_runs LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Projection execution migration cannot preserve legacy runs with unknown authority.\"\n )\n }\n db.run(projectionExecutionsSql)\n },\n { checksum: checksum(projectionExecutionsSql) }\n ),\n sqliteStep(\n \"023-webhook-executions\",\n (db) => {\n const hasRuns = db.query(\"SELECT 1 FROM webhook_runs LIMIT 1\").get()\n const hasDeliveries = db.query(\"SELECT 1 FROM webhook_deliveries LIMIT 1\").get()\n if (hasRuns || hasDeliveries) {\n throw new Error(\n \"[SixbSqliteStorage] Webhook execution migration cannot preserve legacy runs or deliveries with unknown authority.\"\n )\n }\n db.run(webhookExecutionsSql)\n },\n { checksum: checksum(webhookExecutionsSql) }\n ),\n sqliteStep(\n \"024-ontology-commit-executions\",\n (db) => {\n if (db.query(\"SELECT 1 FROM ontology_commits LIMIT 1\").get()) {\n throw new Error(\n \"[SixbSqliteStorage] Ontology commit execution migration cannot preserve commits with unknown authority.\"\n )\n }\n db.run(ontologyCommitExecutionsSql)\n },\n { checksum: checksum(ontologyCommitExecutionsSql) }\n ),\n sqliteSql(\"025-connector-connections\", connectorConnectionsSql),\n sqliteSql(\"026-ai-cost-accounting\", aiCostAccountingSql),\n sqliteSql(\"027-agent-context-checkpoints\", agentContextCheckpointsSql),\n sqliteSql(\"028-object-override-edit-times\", objectOverrideEditTimesSql),\n sqliteSql(\"029-model-accounting\", modelAccountingSql),\n sqliteSql(\"030-ai-usage-limits\", aiUsageLimitsSql),\n sqliteSql(\"031-subagent-runs\", subagentRunsSql),\n sqliteSql(\"032-conversation-run-spec\", conversationRunSpecSql),\n sqliteSql(\"033-retire-agent-definitions\", retireAgentDefinitionsSql),\n sqliteSql(\"034-device-authorizations\", deviceAuthorizationsSql),\n sqliteSql(\"035-share-grants\", shareGrantsSql),\n sqliteSql(\"036-share-sessions\", shareSessionsSql),\n sqliteSql(\"037-execution-requester-groups\", executionRequesterGroupsSql),\n sqliteSql(\"038-projection-source-roots\", projectionSourceRootsSql),\n sqliteSql(\"039-connector-optional-pkce\", connectorOptionalPkceSql),\n sqliteSql(\"040-outbox-publication-order\", outboxPublicationOrderSql),\n sqliteSql(\"041-agent-thread-workspaces\", agentThreadWorkspacesSql),\n sqliteSql(\"042-vector-profiles\", vectorProfilesSql),\n sqliteSql(\"043-vector-indexing\", vectorIndexingSql),\n sqliteSql(\"044-vector-batching\", vectorBatchingSql),\n sqliteSql(\"045-agent-thread-sandbox-state\", agentThreadSandboxStateSql),\n sqliteSql(\"046-workflow-intervention-principals\", workflowInterventionPrincipalsSql),\n sqliteSql(\"047-ontology-commit-attribution\", ontologyCommitAttributionSql),\n sqliteSql(\"048-file-upload-sessions\", fileUploadSessionsSql),\n sqliteSql(\"049-native-sessions\", nativeSessionsSql),\n sqliteSql(\"050-directory-group-memberships\", directoryGroupMembershipsSql),\n sqliteSql(\"051-projection-run-supersession\", projectionRunSupersessionSql),\n sqliteStep(\n \"052-compact-source-storage\",\n (db) => {\n // SQLite has no procedural block to check the copy in SQL: count around it instead.\n const before = sourceStorageCounts(db)\n db.run(compactSourceStorageSql)\n const after = sourceStorageCounts(db)\n if (\n after.versions !== before.versions ||\n after.roots !== before.roots ||\n after.rows !== before.rows\n ) {\n throw new Error(\n \"[SixbSqliteStorage] Source versions, roots or rows were lost while compacting source storage.\"\n )\n }\n },\n { checksum: checksum(compactSourceStorageSql) }\n ),\n sqliteSql(\"053-replacement-plans\", replacementPlansSql),\n sqliteStep(\n \"054-slim-ontology-outbox\",\n (db) => {\n // SQLite has no procedural block to refuse the conversion in SQL: check before it.\n const mismatched = unrebuildableOutboxEvents(db)\n if (mismatched > 0) {\n throw new Error(\n `[SixbSqliteStorage] ${mismatched} outbox events would not rebuild from their commit.`\n )\n }\n db.run(slimOntologyOutboxSql)\n },\n { checksum: checksum(slimOntologyOutboxSql) }\n ),\n sqliteSql(\"055-commit-touches\", commitTouchesSql),\n sqliteSql(\"056-audio-transcription\", audioTranscriptionSql),\n sqliteSql(\"057-reranking-model-kind\", rerankingModelKindSql),\n sqliteSql(\"058-file-download-grants\", fileDownloadGrantsSql),\n sqliteSql(\"059-drained-source-versions\", drainedSourceVersionsSql),\n sqliteSql(\"060-terminal-action-runs\", terminalActionRunsSql),\n sqliteSql(\"061-drop-auth-audience\", dropAuthAudienceSql),\n sqliteSql(\"062-artifacts\", artifactsSql),\n sqliteSql(\"063-drop-output-diagnostics\", dropOutputDiagnosticsSql),\n sqliteSql(\"064-activity\", activitySql),\n sqliteSql(\"065-activity-timeline\", activityTimelineSql),\n sqliteSql(\"066-activity-interactions\", activityInteractionsSql),\n ],\n})\n\nexport function sqliteStoragePath(basePath: string): string {\n return `${basePath}/${SQLITE_STORAGE_FILE}`\n}\n\nexport function sqliteSql(id: string, sqlText: string): MigrationStep<Database> {\n return sqliteStep(\n id,\n (db) => {\n db.run(sqlText)\n },\n { checksum: checksum(sqlText) }\n )\n}\n\nexport function sqliteStep(\n id: string,\n up: (db: Database) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<Database> {\n return step<Database>(id, up, options)\n}\n\n// Replaying every migration costs a few hundred milliseconds, and in-memory databases are made\n// often (each test's storage, for one). The schema is built once per process and each new database\n// starts as a copy of it.\nlet freshSchema: Uint8Array | undefined\n\n/** A new in-memory database holding the current schema, as replaying every migration leaves it. */\nexport function freshSqliteDatabase(): Database {\n if (!freshSchema) {\n const template = new Database(\":memory:\")\n try {\n template.run(\"PRAGMA foreign_keys = ON\")\n installFreshSqliteSchema(template)\n freshSchema = template.serialize()\n } finally {\n template.close()\n }\n }\n return Database.deserialize(freshSchema)\n}\n\nexport function installFreshSqliteSchema(db: Database): void {\n for (const migration of sqliteStorageMigrations.steps) {\n const installed = migration.up(db)\n if (installed instanceof Promise) {\n throw new Error(\n `[${sqliteStorageMigrations.adapterId}] Fresh SQLite schema installation must be synchronous`\n )\n }\n }\n}\n\nexport function createSqliteStorageMigrators(basePath: string): readonly StorageMigrator[] {\n return [\n createSqliteMigrator({\n path: sqliteStoragePath(basePath),\n migrations: sqliteStorageMigrations,\n }),\n ]\n}\n\nexport function createSqliteMigrator(params: {\n readonly path: string\n readonly migrations: MigrationSet<Database>\n}): StorageMigrator {\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n async status() {\n return describeMigrationHistory({\n migrations: params.migrations,\n rows: await readSqliteHistory(params.path, params.migrations.adapterId),\n })\n },\n async migrate() {\n return withSqliteDatabase(params.path, (db) =>\n runMigrationSet({\n context: db,\n migrations: params.migrations,\n state: sqliteMigrationHistoryStore(db),\n })\n )\n },\n }\n}\n\nexport async function migrateSqliteStorage(basePath: string): Promise<void> {\n mkdirSync(basePath, { recursive: true })\n\n for (const migrator of createSqliteStorageMigrators(basePath)) {\n await migrator.migrate()\n }\n}\n\nfunction sqliteMigrationHistoryStore(db: Database): MigrationHistoryStore {\n return {\n ensure() {\n db.run(MIGRATIONS_TABLE_SQL)\n },\n readHistory(adapterId) {\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n },\n markStarted(adapterId, migration, at) {\n db.query(`\n INSERT INTO sixb_migrations (\n adapter_id, version, id, checksum, status, started_at, finished_at\n ) VALUES (?, ?, ?, ?, 'started', ?, NULL)\n ON CONFLICT(adapter_id, version) DO UPDATE SET\n id = excluded.id,\n checksum = excluded.checksum,\n status = excluded.status,\n started_at = excluded.started_at,\n finished_at = NULL\n `).run(adapterId, migration.version, migration.id, migration.checksum ?? null, at)\n },\n markApplied(adapterId, migration, at) {\n db.query(`\n UPDATE sixb_migrations\n SET status = 'applied', finished_at = ?\n WHERE adapter_id = ? AND version = ?\n `).run(at, adapterId, migration.version)\n },\n async transaction(run) {\n // SQLite cannot rebuild a referenced parent table while foreign-key enforcement is active,\n // even when the replacement satisfies every deferred reference. Migrations therefore run\n // with enforcement paused, validate the complete schema before commit, then restore it.\n db.run(\"PRAGMA foreign_keys = OFF\")\n db.run(\"BEGIN\")\n\n try {\n const result = await run()\n const violations = db.query(\"PRAGMA foreign_key_check\").all()\n if (violations.length > 0) {\n throw new Error(\n `[${SQLITE_STORAGE_ADAPTER_ID}] Migration produced ${violations.length} foreign-key violation(s).`\n )\n }\n db.run(\"COMMIT\")\n return result\n } catch (error) {\n rollbackQuietly(db)\n throw error\n } finally {\n db.run(\"PRAGMA foreign_keys = ON\")\n }\n },\n }\n}\n\nfunction rowToMigrationRecord(row: unknown): MigrationRecord {\n const migration = row as {\n adapter_id: string\n version: number\n id: string\n checksum: string | null\n status: \"started\" | \"applied\"\n started_at: string\n finished_at: string | null\n }\n\n return {\n adapterId: migration.adapter_id,\n version: migration.version,\n id: migration.id,\n checksum: migration.checksum ?? undefined,\n status: migration.status,\n startedAt: migration.started_at,\n finishedAt: migration.finished_at ?? undefined,\n }\n}\n\nfunction sourceStorageCounts(db: Database): {\n readonly versions: number\n readonly roots: number\n readonly rows: number\n} {\n return db\n .query(`SELECT (SELECT count(*) FROM ontology_sources) AS versions,\n (SELECT count(*) FROM ontology_source_roots) AS roots,\n (SELECT count(*) FROM ontology_source_rows) AS rows`)\n .get() as { readonly versions: number; readonly roots: number; readonly rows: number }\n}\n\n/**\n * Stored events that would not rebuild exactly from their commit and execution. Who asked and what\n * wrote are derived from the execution exactly as 047 derived the commit's copies; both sides were\n * written as canonical JSON, so equal JSON compares as equal text.\n */\nfunction unrebuildableOutboxEvents(db: Database): number {\n const row = db\n .query(\n `SELECT COUNT(*) AS mismatched\n FROM ontology_outbox AS outbox\n LEFT JOIN ontology_commits AS commits\n ON commits.project_id = outbox.project_id AND commits.id = outbox.commit_id\n LEFT JOIN executions\n ON executions.project_id = commits.project_id AND executions.id = commits.execution_id\n WHERE executions.id IS NULL\n OR outbox.envelope ->> '$.id' IS NOT outbox.id\n OR outbox.envelope ->> '$.commitOrdinal' IS NOT outbox.commit_ordinal\n OR outbox.envelope ->> '$.commitId' IS NOT commits.id\n OR outbox.envelope ->> '$.projectId' IS NOT commits.project_id\n OR outbox.envelope ->> '$.schemaVersion' IS NOT 1\n OR outbox.envelope ->> '$.occurredAt' IS NOT commits.committed_at\n OR outbox.envelope -> '$.origin' IS NOT json(commits.origin)\n OR outbox.envelope ->> '$.correlationId' IS NOT executions.correlation_id\n OR outbox.envelope -> '$.requestedBy' IS NOT CASE\n WHEN executions.requested_by_user_id IS NOT NULL\n THEN json_object('id', executions.requested_by_user_id, 'type', 'user')\n WHEN executions.requested_by_service_account_id IS NOT NULL\n THEN json_object('id', executions.requested_by_service_account_id, 'type', 'serviceAccount')\n END\n OR outbox.envelope -> '$.executor' IS NOT CASE executions.executor_kind\n WHEN 'request' THEN json_object('requestId', executions.executor_id, 'type', 'request')\n WHEN 'agent' THEN json_object('runId', executions.executor_id, 'type', 'agent')\n WHEN 'kernel' THEN json_object(\n 'operation',\n CASE executions.authority_kernel_operation\n WHEN 'ontology.recover'\n THEN json_object('recoveryId', executions.executor_id, 'type', 'ontology.recover')\n ELSE json_object('indexingId', executions.executor_id, 'type', 'ontology.indexVectors')\n END,\n 'type', 'kernel'\n )\n ELSE json_object(\n 'id', executions.authority_primitive_id,\n 'kind', executions.executor_kind,\n 'runId', executions.executor_id,\n 'type', 'primitive'\n )\n END\n OR outbox.envelope ->> '$.topic' IS NOT CASE substr(outbox.envelope ->> '$.type', 1, 4)\n WHEN 'obje' THEN 'objects'\n WHEN 'link' THEN 'links'\n WHEN 'tele' THEN 'telemetry'\n END\n OR outbox.envelope ->> '$.partitionKey' IS NOT CASE outbox.envelope ->> '$.topic'\n WHEN 'objects' THEN (outbox.envelope ->> '$.payload.objectTypeId') || ':' ||\n (outbox.envelope ->> '$.payload.primaryId')\n WHEN 'links' THEN (outbox.envelope ->> '$.payload.sourceTypeId') || ':' ||\n (outbox.envelope ->> '$.payload.sourceId') || ':' ||\n (outbox.envelope ->> '$.payload.linkId')\n WHEN 'telemetry' THEN (outbox.envelope ->> '$.payload.objectTypeId') || ':' ||\n (outbox.envelope ->> '$.payload.objectId') || ':' ||\n (outbox.envelope ->> '$.payload.propertyId')\n END\n OR (\n outbox.envelope ->> '$.type' IN ('object.created', 'link.created')\n AND (\n (SELECT COUNT(*) FROM json_each(outbox.envelope, '$.payload.propertyChanges'))\n IS NOT (SELECT COUNT(*) FROM json_each(outbox.envelope, '$.payload.properties'))\n OR EXISTS (\n SELECT 1\n FROM json_each(outbox.envelope, '$.payload.propertyChanges') AS change\n LEFT JOIN json_each(outbox.envelope, '$.payload.properties') AS property\n ON property.key = change.key\n WHERE property.key IS NULL\n OR change.value ->> '$.operation' IS NOT 'created'\n OR json_type(change.value, '$.after') IS NOT property.type\n OR change.value ->> '$.after' IS NOT property.value\n OR (SELECT COUNT(*) FROM json_each(change.value)) IS NOT 2\n )\n )\n )`\n )\n .get() as { readonly mismatched: number }\n return row.mismatched\n}\n\nfunction checksum(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\")\n}\n\n/**\n * Reads migration history without creating anything. `null` means there is no history\n * to read, which is a state and not a failure.\n *\n * `new Database(path)` creates the file, and `withSqliteDatabase` additionally mkdirs\n * its parent — fine on the way to a migration, wrong for a probe. So: `existsSync`\n * first, then open `readonly` so even a mistake below cannot write. `:memory:` is\n * always empty on a fresh connection, so there is nothing to report.\n */\nasync function readSqliteHistory(\n path: string,\n adapterId: string\n): Promise<readonly MigrationRecord[] | null> {\n if (path === \":memory:\" || !existsSync(path)) {\n return null\n }\n\n const db = new Database(path, { readonly: true })\n try {\n const table = db\n .query(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'sixb_migrations'\")\n .get()\n if (!table) {\n return null\n }\n\n return db\n .query(\"SELECT * FROM sixb_migrations WHERE adapter_id = ? ORDER BY version\")\n .all(adapterId)\n .map(rowToMigrationRecord)\n } finally {\n db.close()\n }\n}\n\nasync function withSqliteDatabase<T>(path: string, run: (db: Database) => Promise<T>): Promise<T> {\n if (path !== \":memory:\") mkdirSync(dirname(path), { recursive: true })\n const db = new Database(path)\n\n try {\n return await run(db)\n } finally {\n db.close()\n }\n}\n\nfunction rollbackQuietly(db: Database): void {\n try {\n db.run(\"ROLLBACK\")\n } catch {\n // Ignore rollback errors so the original migration failure is preserved.\n }\n}\n\nimport executionRequesterGroupsSql from \"./migrations/037-execution-requester-groups.sql\" with {\n type: \"text\",\n}\n\nimport connectorOptionalPkceSql from \"./migrations/039-connector-optional-pkce.sql\" with {\n type: \"text\",\n}\nimport fileUploadSessionsSql from \"./migrations/048-file-upload-sessions.sql\" with { type: \"text\" }\nimport fileDownloadGrantsSql from \"./migrations/058-file-download-grants.sql\" with { type: \"text\" }\nimport drainedSourceVersionsSql from \"./migrations/059-drained-source-versions.sql\" with {\n type: \"text\",\n}\nimport terminalActionRunsSql from \"./migrations/060-terminal-action-runs.sql\" with { type: \"text\" }\nimport dropAuthAudienceSql from \"./migrations/061-drop-auth-audience.sql\" with { type: \"text\" }\nimport artifactsSql from \"./migrations/062-artifacts.sql\" with { type: \"text\" }\nimport dropOutputDiagnosticsSql from \"./migrations/063-drop-output-diagnostics.sql\" with {\n type: \"text\",\n}\nimport activitySql from \"./migrations/064-activity.sql\" with { type: \"text\" }\nimport activityTimelineSql from \"./migrations/065-activity-timeline.sql\" with { type: \"text\" }\nimport activityInteractionsSql from \"./migrations/066-activity-interactions.sql\" with {\n type: \"text\",\n}\n",
9
+ "import type { Database, SQLQueryBindings } from \"bun:sqlite\"\nimport {\n ACTIVITY_MAX_VISIT_MS,\n type ActivitySourceState,\n activityActor,\n activityCalendarDays,\n parseActivityAttribution,\n planActivityAppend,\n type StoredActivityEvent,\n serializeActivityAttribution,\n validateActivityAppend,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ActivityCalendarInput,\n ActivityCursor,\n ActivityDay,\n ActivityInteraction,\n ActivityPageView,\n ActivityPeriodInput,\n ActivitySessionVisits,\n ActivityStorage,\n ActivitySummary,\n ActivityUsersPage,\n ActivityVisit,\n ActivityVisitsPage,\n AppendActivityInput,\n AppendActivityResult,\n ListActivitySessionVisitsInput,\n ListActivityUsersInput,\n ListActivityVisitsInput,\n ReadActivityVisitInput,\n StoredActivityVisitPage,\n} from \"@sixb/core/storage\"\nimport { runImmediateTransaction, type SqliteStoreConnection } from \"./transactions\"\n\nconst VISIT_COLUMNS = `\n v.id, v.actor_type, v.user_id, v.grant_id, v.started_at, v.last_seen_at, v.page_views,\n v.interactions, v.attribution\n`\n\n// Sorts after every stored timestamp, so a first page starts from the newest row.\nconst NO_CURSOR = { at: \"9999-12-31T23:59:59.999Z\", id: \"\" }\n\n/** SQLite activity. The immediate transaction is the source lock; the policy decides the rest. */\nexport class SqliteActivityStorage implements ActivityStorage {\n private readonly db: Database\n\n constructor(connection: SqliteStoreConnection) {\n this.db = connection.db\n }\n\n async append(input: AppendActivityInput): Promise<AppendActivityResult> {\n validateActivityAppend(input)\n\n return runImmediateTransaction(this.db, () => {\n const plan = planActivityAppend(input, this.source(input), this.storedEvents(input))\n if (plan.status !== \"append\") {\n return { status: plan.status === \"duplicate\" ? \"accepted\" : \"throttled\", accepted: 0 }\n }\n\n const { state } = plan\n const lastSeenAt = iso(state.lastSeenAt)\n\n if (plan.newVisit) {\n this.run(\n `\n INSERT INTO activity_visits (\n project_id, id, actor_type, user_id, grant_id, session_id,\n started_at, last_seen_at, page_views, interactions, attribution\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `,\n input.projectId,\n state.visitId,\n input.actor.type,\n input.actor.type === \"user\" ? input.actor.userId : null,\n input.actor.type === \"share\" ? input.actor.grantId : null,\n input.sessionId,\n lastSeenAt,\n lastSeenAt,\n plan.pageViews.length,\n plan.interactions.length,\n plan.newVisit.attribution === null\n ? null\n : serializeActivityAttribution(plan.newVisit.attribution)\n )\n } else {\n this.run(\n `\n UPDATE activity_visits\n SET\n last_seen_at = ?,\n page_views = page_views + ?,\n interactions = interactions + ?\n WHERE project_id = ? AND id = ?\n `,\n lastSeenAt,\n plan.pageViews.length,\n plan.interactions.length,\n input.projectId,\n state.visitId\n )\n }\n\n for (const pageView of plan.pageViews) {\n this.run(\n `\n INSERT INTO activity_page_views (\n project_id, visit_id, sequence, id, route, received_at, attribution\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n `,\n input.projectId,\n pageView.visitId,\n pageView.sequence,\n pageView.id,\n pageView.route,\n pageView.receivedAt.toISOString(),\n serializeActivityAttribution(pageView.attribution)\n )\n }\n\n for (const interaction of plan.interactions) {\n this.run(\n `\n INSERT INTO activity_interactions (\n project_id, visit_id, sequence, id, name, route, received_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n `,\n input.projectId,\n interaction.visitId,\n interaction.sequence,\n interaction.id,\n interaction.name,\n interaction.route,\n interaction.receivedAt.toISOString()\n )\n }\n\n this.run(\n `\n INSERT INTO activity_sources (\n project_id, actor_type, session_id, visit_id, last_seen_at, sequence,\n window_start, window_count\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, actor_type, session_id) DO UPDATE SET\n visit_id = excluded.visit_id,\n last_seen_at = excluded.last_seen_at,\n sequence = excluded.sequence,\n window_start = excluded.window_start,\n window_count = excluded.window_count\n `,\n input.projectId,\n input.actor.type,\n input.sessionId,\n state.visitId,\n lastSeenAt,\n state.sequence,\n iso(state.windowStart),\n state.windowCount\n )\n\n return { status: \"accepted\", accepted: plan.accepted }\n })\n }\n\n async list(input: ListActivityVisitsInput): Promise<ActivityVisitsPage> {\n const period = overlapping(input)\n const before = cursorOf(input.before)\n const rows = this.all<VisitRow>(\n `\n SELECT ${VISIT_COLUMNS}\n FROM activity_visits v\n WHERE ${period.where}\n AND (v.last_seen_at < ? OR (v.last_seen_at = ? AND v.id < ?))\n ORDER BY v.last_seen_at DESC, v.id DESC\n LIMIT ?\n `,\n ...period.params,\n before.at,\n before.at,\n before.id,\n input.limit + 1\n )\n\n return {\n visits: rows.slice(0, input.limit).map(visitFromRow),\n hasMore: rows.length > input.limit,\n }\n }\n\n async users(input: ListActivityUsersInput): Promise<ActivityUsersPage> {\n const period = overlapping(input)\n const before = cursorOf(input.before)\n const rows = this.all<UserRow>(\n `\n SELECT\n v.user_id,\n MAX(v.last_seen_at) AS last_seen_at,\n COUNT(DISTINCT v.id) AS visits,\n COUNT(p.id) AS page_views\n FROM activity_visits v\n LEFT JOIN activity_page_views p\n ON p.project_id = v.project_id\n AND p.visit_id = v.id\n AND p.received_at >= ?\n AND p.received_at < ?\n WHERE ${period.where} AND v.actor_type = 'user'\n GROUP BY v.user_id\n HAVING MAX(v.last_seen_at) < ? OR (MAX(v.last_seen_at) = ? AND v.user_id < ?)\n ORDER BY last_seen_at DESC, v.user_id DESC\n LIMIT ?\n `,\n input.from.toISOString(),\n input.to.toISOString(),\n ...period.params,\n before.at,\n before.at,\n before.id,\n input.limit + 1\n )\n\n return {\n users: rows.slice(0, input.limit).map((row) => ({\n userId: row.user_id,\n lastSeenAt: new Date(row.last_seen_at),\n visits: Number(row.visits),\n pageViews: Number(row.page_views),\n })),\n hasMore: rows.length > input.limit,\n }\n }\n\n async summarize(input: ActivityPeriodInput): Promise<ActivitySummary> {\n const period = overlapping(input)\n const [row] = this.all<SummaryRow>(\n `\n SELECT\n COUNT(DISTINCT v.user_id) AS users,\n COUNT(DISTINCT v.id) AS visits,\n COUNT(DISTINCT CASE WHEN v.actor_type = 'share' THEN v.id END) AS shared_visits,\n COUNT(p.id) AS page_views\n FROM activity_visits v\n LEFT JOIN activity_page_views p\n ON p.project_id = v.project_id\n AND p.visit_id = v.id\n AND p.received_at >= ?\n AND p.received_at < ?\n WHERE ${period.where}\n `,\n input.from.toISOString(),\n input.to.toISOString(),\n ...period.params\n )\n\n return {\n users: Number(row?.users ?? 0),\n visits: Number(row?.visits ?? 0),\n sharedVisits: Number(row?.shared_visits ?? 0),\n pageViews: Number(row?.page_views ?? 0),\n }\n }\n\n async calendar(input: ActivityCalendarInput): Promise<readonly ActivityDay[]> {\n const period = overlapping(input)\n const visits = this.all<{ started_at: string; last_seen_at: string }>(\n `\n SELECT v.started_at, v.last_seen_at\n FROM activity_visits v\n WHERE ${period.where}\n `,\n ...period.params\n )\n const days = this.all<{ day: string; page_views: number }>(\n `\n SELECT substr(p.received_at, 1, 10) AS day, COUNT(*) AS page_views\n FROM activity_visits v\n JOIN activity_page_views p ON p.project_id = v.project_id AND p.visit_id = v.id\n WHERE ${period.where}\n AND p.received_at >= ?\n AND p.received_at < ?\n GROUP BY day\n `,\n ...period.params,\n input.from.toISOString(),\n input.to.toISOString()\n )\n\n return activityCalendarDays(\n input,\n visits.map((visit) => ({\n startedAt: new Date(visit.started_at),\n lastSeenAt: new Date(visit.last_seen_at),\n })),\n new Map(days.map((row) => [row.day, Number(row.page_views)]))\n )\n }\n\n async read(input: ReadActivityVisitInput): Promise<StoredActivityVisitPage | null> {\n const [visit] = this.all<VisitRow & { readonly session_id: string }>(\n `\n SELECT ${VISIT_COLUMNS}, v.session_id\n FROM activity_visits v\n WHERE v.project_id = ? AND v.id = ?\n `,\n input.projectId,\n input.id\n )\n if (!visit) {\n return null\n }\n\n // Page views and interactions share the visit's sequence, so one bound covers both.\n const rows = this.all<EventRow>(\n `\n SELECT id, visit_id, sequence, route, NULL AS name, received_at\n FROM activity_page_views\n WHERE project_id = ? AND visit_id = ?\n UNION ALL\n SELECT id, visit_id, sequence, route, name, received_at\n FROM activity_interactions\n WHERE project_id = ? AND visit_id = ?\n ORDER BY sequence\n LIMIT ?\n `,\n input.projectId,\n input.id,\n input.projectId,\n input.id,\n input.limit + 1\n )\n\n const pageViews: ActivityPageView[] = []\n const interactions: ActivityInteraction[] = []\n for (const row of rows.slice(0, input.limit)) {\n if (row.name === null) {\n pageViews.push(pageViewFromRow(row))\n } else {\n interactions.push({ ...pageViewFromRow(row), name: row.name })\n }\n }\n\n return {\n visit: visitFromRow(visit),\n sessionId: visit.session_id,\n pageViews,\n interactions,\n hasMore: rows.length > input.limit,\n }\n }\n\n async sessionVisits(\n input: ListActivitySessionVisitsInput\n ): Promise<readonly ActivitySessionVisits[]> {\n if (input.sessionIds.length === 0) {\n return []\n }\n\n // A session opens a visit per return after inactivity, so each has a few to rank.\n const rows = this.all<SessionVisitRow>(\n `\n SELECT *\n FROM (\n SELECT\n ${VISIT_COLUMNS},\n v.session_id,\n ROW_NUMBER() OVER (\n PARTITION BY v.session_id ORDER BY v.started_at DESC, v.id DESC\n ) AS position,\n COUNT(*) OVER (PARTITION BY v.session_id) AS total\n FROM activity_visits v\n WHERE v.project_id = ?\n AND v.actor_type = 'user'\n AND v.session_id IN (SELECT value FROM json_each(?))\n AND v.user_id = ?\n )\n WHERE position <= ?\n ORDER BY session_id, position\n `,\n input.projectId,\n JSON.stringify(input.sessionIds),\n input.userId,\n input.limit\n )\n\n const bySession = new Map<string, { visits: number; latest: ActivityVisit[] }>()\n for (const row of rows) {\n const session = bySession.get(row.session_id) ?? { visits: Number(row.total), latest: [] }\n session.latest.push(visitFromRow(row))\n bySession.set(row.session_id, session)\n }\n\n return [...bySession].map(([sessionId, session]) => ({ sessionId, ...session }))\n }\n\n private source(input: AppendActivityInput): ActivitySourceState | undefined {\n const [row] = this.all<SourceRow>(\n `\n SELECT\n s.visit_id, v.started_at AS visit_started_at, s.last_seen_at, s.sequence,\n s.window_start, s.window_count\n FROM activity_sources s\n LEFT JOIN activity_visits v ON v.project_id = s.project_id AND v.id = s.visit_id\n WHERE s.project_id = ? AND s.actor_type = ? AND s.session_id = ?\n `,\n input.projectId,\n input.actor.type,\n input.sessionId\n )\n if (!row) {\n return undefined\n }\n\n // A deleted visit leaves its source behind; the next batch starts another visit.\n return {\n visitId: row.visit_id,\n visitStartedAt: row.visit_started_at === null ? null : Date.parse(row.visit_started_at),\n lastSeenAt: Date.parse(row.last_seen_at),\n sequence: Number(row.sequence),\n windowStart: Date.parse(row.window_start),\n windowCount: Number(row.window_count),\n }\n }\n\n /** The session's page views and interactions with an id of the batch, to recognize retries. */\n private storedEvents(input: AppendActivityInput): StoredActivityEvent[] {\n const ids = JSON.stringify(input.events.map((event) => event.id))\n const rows = this.all<{\n id: string\n route: string\n name: string | null\n attribution: string | null\n }>(\n `\n SELECT p.id, p.route, NULL AS name, p.attribution\n FROM activity_page_views p\n JOIN activity_visits v ON v.project_id = p.project_id AND v.id = p.visit_id\n WHERE p.project_id = ?\n AND p.id IN (SELECT value FROM json_each(?))\n AND v.actor_type = ?\n AND v.session_id = ?\n UNION ALL\n SELECT i.id, i.route, i.name, NULL AS attribution\n FROM activity_interactions i\n JOIN activity_visits v ON v.project_id = i.project_id AND v.id = i.visit_id\n WHERE i.project_id = ?\n AND i.id IN (SELECT value FROM json_each(?))\n AND v.actor_type = ?\n AND v.session_id = ?\n `,\n input.projectId,\n ids,\n input.actor.type,\n input.sessionId,\n input.projectId,\n ids,\n input.actor.type,\n input.sessionId\n )\n\n return rows.map((row) => {\n if (row.name !== null) {\n return { id: row.id, route: row.route, name: row.name }\n }\n\n const attribution = parseActivityAttribution(row.attribution)\n return { id: row.id, route: row.route, ...(attribution ? { attribution } : {}) }\n })\n }\n\n private run(sql: string, ...params: SQLQueryBindings[]): void {\n this.db.query<unknown, SQLQueryBindings[]>(sql).run(...params)\n }\n\n private all<T>(sql: string, ...params: SQLQueryBindings[]): T[] {\n return this.db.query<T, SQLQueryBindings[]>(sql).all(...params)\n }\n}\n\ninterface SourceRow {\n readonly visit_id: string\n readonly visit_started_at: string | null\n readonly last_seen_at: string\n readonly sequence: number\n readonly window_start: string\n readonly window_count: number\n}\n\ninterface VisitRow {\n readonly id: string\n readonly actor_type: string\n readonly user_id: string | null\n readonly grant_id: string | null\n readonly started_at: string\n readonly last_seen_at: string\n readonly page_views: number\n readonly interactions: number\n readonly attribution: string | null\n}\n\ninterface SessionVisitRow extends VisitRow {\n readonly session_id: string\n readonly total: number\n}\n\ninterface UserRow {\n readonly user_id: string\n readonly last_seen_at: string\n readonly visits: number\n readonly page_views: number\n}\n\ninterface SummaryRow {\n readonly users: number\n readonly visits: number\n readonly shared_visits: number\n readonly page_views: number\n}\n\ninterface PageViewRow {\n readonly id: string\n readonly visit_id: string\n readonly sequence: number\n readonly route: string\n readonly received_at: string\n}\n\n/** A page view or, with a name, an interaction. */\ninterface EventRow extends PageViewRow {\n readonly name: string | null\n}\n\n/**\n * The visits `v` active in the period, and only the account's when one is asked for. A visit lasts\n * less than a day, so it started at most a day before the period: that bounds the index range.\n */\nfunction overlapping(input: ActivityPeriodInput | ActivityCalendarInput): {\n readonly where: string\n readonly params: SQLQueryBindings[]\n} {\n const conditions = [\n \"v.project_id = ?\",\n \"v.started_at >= ?\",\n \"v.started_at < ?\",\n \"v.last_seen_at >= ?\",\n ]\n const params: SQLQueryBindings[] = [\n input.projectId,\n new Date(input.from.getTime() - ACTIVITY_MAX_VISIT_MS).toISOString(),\n input.to.toISOString(),\n input.from.toISOString(),\n ]\n\n if (input.userId !== undefined) {\n conditions.push(\"v.user_id = ?\")\n params.push(input.userId)\n }\n\n return { where: conditions.join(\" AND \"), params }\n}\n\nfunction cursorOf(cursor: ActivityCursor | undefined): { at: string; id: string } {\n return cursor ? { at: cursor.at.toISOString(), id: cursor.id } : NO_CURSOR\n}\n\nfunction visitFromRow(row: VisitRow): ActivityVisit {\n return {\n id: row.id,\n actor: activityActor(row.actor_type, row.user_id, row.grant_id),\n attribution: parseActivityAttribution(row.attribution),\n startedAt: new Date(row.started_at),\n lastSeenAt: new Date(row.last_seen_at),\n pageViews: Number(row.page_views),\n interactions: Number(row.interactions),\n }\n}\n\nfunction pageViewFromRow(row: PageViewRow): ActivityPageView {\n return {\n id: row.id,\n visitId: row.visit_id,\n sequence: Number(row.sequence),\n route: row.route,\n receivedAt: new Date(row.received_at),\n }\n}\n\nfunction iso(epochMs: number): string {\n return new Date(epochMs).toISOString()\n}\n",
9
10
  "import type { Database } from \"bun:sqlite\"\nimport {\n agentContextCheckpointMatchesCreateInput,\n assertAgentContextCheckpointAnchors,\n assertAgentContextCheckpointAuthority,\n assertAgentContextCheckpointReplayState,\n assertCreateAgentContextCheckpointInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AgentContextCheckpointRecord,\n type AgentContextCheckpointStore,\n AgentStorageError,\n type CreateAgentContextCheckpointInput,\n} from \"@sixb/core/storage\"\nimport {\n type AgentContextCheckpointRow,\n type AgentMessageRow,\n type AgentRunRow,\n type AgentThreadRow,\n rowToContextCheckpointRecord,\n rowToMessageRecord,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nconst SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE = 500\n\nexport class SqliteAgentContextCheckpointStore implements AgentContextCheckpointStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord> {\n assertCreateAgentContextCheckpointInput(input, \"SixbSqlite\")\n\n return this.db.transaction(() => {\n const runRow = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.createdByRunId) as AgentRunRow | null\n const threadRow = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as AgentThreadRow | null\n assertAgentContextCheckpointAuthority({\n create: input,\n run: runRow ? rowToRunRecord(runRow) : null,\n thread: threadRow ? rowToThreadRecord(threadRow) : null,\n prefix: \"SixbSqlite\",\n })\n\n const latest = this.findLatest(input.projectId, input.threadId)\n const headRow = this.db\n .query(\n \"SELECT COALESCE(MAX(seq), 0) AS seq FROM agent_messages WHERE project_id = ? AND thread_id = ?\"\n )\n .get(input.projectId, input.threadId) as { seq: number }\n\n const existingForRun = this.db\n .query(\n \"SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND created_by_run_id = ?\"\n )\n .get(input.projectId, input.createdByRunId) as AgentContextCheckpointRow | null\n if (existingForRun) {\n const record = rowToContextCheckpointRecord(existingForRun)\n if (agentContextCheckpointMatchesCreateInput(record, input)) {\n assertAgentContextCheckpointReplayState({\n create: input,\n existing: record,\n latest,\n headSeq: headRow.seq,\n prefix: \"SixbSqlite\",\n })\n return record\n }\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Agent run '${input.createdByRunId}' already created a different context checkpoint.`\n )\n }\n\n const duplicateId = this.db\n .query(\"SELECT 1 FROM agent_context_checkpoints WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id)\n if (duplicateId) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent context checkpoint '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n const firstRetainedRow = this.db\n .query(\n \"SELECT * FROM agent_messages WHERE project_id = ? AND thread_id = ? AND seq > ? ORDER BY seq ASC LIMIT 1\"\n )\n .get(input.projectId, input.threadId, input.summarizedThroughSeq) as AgentMessageRow | null\n assertAgentContextCheckpointAnchors({\n create: input,\n latest,\n headSeq: headRow.seq,\n firstRetained: firstRetainedRow ? rowToMessageRecord(firstRetainedRow) : null,\n prefix: \"SixbSqlite\",\n })\n\n const createdAt = input.createdAt ?? new Date()\n this.db\n .query(\n `\n INSERT INTO agent_context_checkpoints (\n project_id,\n id,\n thread_id,\n created_by_run_id,\n previous_checkpoint_id,\n reason,\n summary,\n summary_format_version,\n summarized_through_seq,\n observed_head_seq,\n estimated_input_tokens_before,\n estimated_input_tokens_after,\n summary_model_id,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.threadId,\n input.createdByRunId,\n input.expectedPreviousCheckpointId,\n input.reason,\n input.summary,\n input.summaryFormatVersion,\n input.summarizedThroughSeq,\n input.observedHeadSeq,\n input.estimatedInputTokensBefore,\n input.estimatedInputTokensAfter,\n input.summaryModelId,\n createdAt.toISOString()\n )\n\n return this.requireById(input.projectId, input.id)\n })()\n }\n\n async getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null> {\n return this.findLatest(input.projectId, input.threadId)\n }\n\n async getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]> {\n const runIds = [...new Set(input.runIds)]\n if (runIds.length === 0) return []\n\n const rows: AgentContextCheckpointRow[] = []\n for (let offset = 0; offset < runIds.length; offset += SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE) {\n const batch = runIds.slice(offset, offset + SQLITE_CHECKPOINT_RUN_ID_BATCH_SIZE)\n const placeholders = batch.map(() => \"?\").join(\", \")\n rows.push(\n ...(this.db\n .query(\n `SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND created_by_run_id IN (${placeholders})`\n )\n .all(input.projectId, ...batch) as AgentContextCheckpointRow[])\n )\n }\n const byRunId = new Map(\n rows.map((row) => [row.created_by_run_id, rowToContextCheckpointRecord(row)] as const)\n )\n return runIds.flatMap((runId) => {\n const checkpoint = byRunId.get(runId)\n return checkpoint ? [checkpoint] : []\n })\n }\n\n private findLatest(projectId: string, threadId: string): AgentContextCheckpointRecord | null {\n const row = this.db\n .query(\n `\n SELECT * FROM agent_context_checkpoints\n WHERE project_id = ? AND thread_id = ?\n ORDER BY summarized_through_seq DESC, created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(projectId, threadId) as AgentContextCheckpointRow | null\n return row ? rowToContextCheckpointRecord(row) : null\n }\n\n private requireById(projectId: string, id: string): AgentContextCheckpointRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_context_checkpoints WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentContextCheckpointRow | null\n if (!row) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Failed to load agent context checkpoint '${id}' for project '${projectId}'.`\n )\n }\n return rowToContextCheckpointRecord(row)\n }\n}\n",
10
11
  "import type { Database } from \"bun:sqlite\"\nimport type { AgentMessagePart, Principal } from \"@sixb/core\"\nimport { snapshotAgentThreadSandboxParams } from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentContextCheckpointRecord,\n type AgentMessageRecord,\n type AgentRunDiagnostic,\n type AgentRunRecord,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type ConversationAgentRunSpec,\n coerceAgentRunFinishReason,\n type SubagentRunResult,\n type SubagentRunSpec,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\n\n// ── row shapes (snake_case, as stored) ──────────────────────────────────────────────────────────\n\nexport interface AgentThreadRow {\n project_id: string\n id: string\n owner_principal_type: Principal[\"type\"]\n owner_principal_id: string\n title: string | null\n sandbox_params: string | null\n sandbox_state: string | null\n status: AgentThreadRecord[\"status\"]\n active_run_id: string | null\n last_message_at: string | null\n message_count: number\n created_at: string\n updated_at: string\n}\n\nexport interface AgentRunRow {\n project_id: string\n id: string\n execution_id: string\n kind: AgentRunRecord[\"kind\"]\n thread_id: string | null\n trigger_message_id: string | null\n parent_run_id: string | null\n spawn_key: string | null\n spec: string | null\n result: string | null\n status: AgentRunRecord[\"status\"]\n model_id: string | null\n finish_reason: string | null\n error: string | null\n diagnostics: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nexport interface AgentMessageRow {\n project_id: string\n id: string\n thread_id: string\n run_id: string | null\n role: AgentMessageRecord[\"role\"]\n author_principal_type: Principal[\"type\"] | null\n author_principal_id: string | null\n seq: number\n parts: string\n metadata: string | null\n content_version: number\n created_at: string\n completed_at: string | null\n}\n\nexport interface AgentContextCheckpointRow {\n project_id: string\n id: string\n thread_id: string\n created_by_run_id: string\n previous_checkpoint_id: string | null\n reason: AgentContextCheckpointRecord[\"reason\"]\n summary: string\n summary_format_version: number\n summarized_through_seq: number\n observed_head_seq: number\n estimated_input_tokens_before: number\n estimated_input_tokens_after: number\n summary_model_id: string\n created_at: string\n}\n\n// ── row → record mappers ────────────────────────────────────────────────────────────────────────\n\nexport function rowToThreadRecord(row: AgentThreadRow): AgentThreadRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },\n title: row.title ?? undefined,\n ...(row.sandbox_state == null\n ? {}\n : {\n sandboxState: JSON.parse(row.sandbox_state) as AgentThreadSandboxState,\n }),\n ...(row.sandbox_params == null\n ? {}\n : { sandboxParams: snapshotAgentThreadSandboxParams(JSON.parse(row.sandbox_params)) }),\n status: row.status,\n activeRunId: row.active_run_id,\n lastMessageAt: row.last_message_at ? new Date(row.last_message_at) : undefined,\n messageCount: row.message_count,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToRunRecord(row: AgentRunRow): AgentRunRecord {\n const base = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n status: row.status,\n modelId: row.model_id ?? undefined,\n finishReason: coerceAgentRunFinishReason(row.finish_reason),\n error: row.error === null ? undefined : parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES),\n diagnostics:\n row.diagnostics === null ? undefined : (JSON.parse(row.diagnostics) as AgentRunDiagnostic[]),\n attempt: row.attempt,\n execution:\n row.execution_token && row.execution_queue_lease_expires_at\n ? {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n }\n : undefined,\n createdAt: new Date(row.created_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n if (row.kind === \"conversation\") {\n if (!row.thread_id || !row.trigger_message_id) {\n throw new Error(\n `[SixbSqlite] Conversational Agent run '${row.id}' has invalid persisted fields.`\n )\n }\n return {\n ...base,\n kind: \"conversation\",\n threadId: row.thread_id,\n triggerMessageId: row.trigger_message_id,\n ...(row.spec === null ? {} : { spec: JSON.parse(row.spec) as ConversationAgentRunSpec }),\n }\n }\n if (!row.parent_run_id || !row.spawn_key || row.spec === null) {\n throw new Error(`[SixbSqlite] Subagent run '${row.id}' has invalid persisted fields.`)\n }\n return {\n ...base,\n kind: \"subagent\",\n parentRunId: row.parent_run_id,\n spawnKey: row.spawn_key,\n spec: JSON.parse(row.spec) as SubagentRunSpec,\n ...(row.result === null ? {} : { result: JSON.parse(row.result) as SubagentRunResult }),\n }\n}\n\nexport function rowToMessageRecord(row: AgentMessageRow): AgentMessageRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n runId: row.run_id,\n role: row.role,\n authorPrincipal: principalFromColumns(row.author_principal_type, row.author_principal_id),\n seq: row.seq,\n parts: JSON.parse(row.parts) as AgentMessagePart[],\n // A null/absent column and an explicit JSON `null` both mean \"no metadata\" (jsonb cannot tell\n // SQL NULL from a json null on read, so both backends normalise to `undefined` for parity).\n metadata: row.metadata === null ? undefined : (JSON.parse(row.metadata) ?? undefined),\n contentVersion: row.content_version,\n createdAt: new Date(row.created_at),\n completedAt: row.completed_at ? new Date(row.completed_at) : undefined,\n }\n}\n\nexport function rowToContextCheckpointRecord(\n row: AgentContextCheckpointRow\n): AgentContextCheckpointRecord {\n if (row.summary_format_version !== 1) {\n throw new Error(\n `[SixbSqlite] Unsupported agent context checkpoint summary format version '${row.summary_format_version}'.`\n )\n }\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n createdByRunId: row.created_by_run_id,\n previousCheckpointId: row.previous_checkpoint_id ?? undefined,\n reason: row.reason,\n summary: row.summary,\n summaryFormatVersion: 1,\n summarizedThroughSeq: row.summarized_through_seq,\n observedHeadSeq: row.observed_head_seq,\n estimatedInputTokensBefore: row.estimated_input_tokens_before,\n estimatedInputTokensAfter: row.estimated_input_tokens_after,\n summaryModelId: row.summary_model_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction principalFromColumns(\n type: Principal[\"type\"] | null | undefined,\n id: string | null | undefined\n): Principal | undefined {\n return type && id ? { type, id } : undefined\n}\n\n// ── offset pagination (threads / messages order by their own column, not started_at) ─────────────\n\nexport function queryAgentList<TRow>(input: {\n readonly db: Database\n readonly table: \"agent_threads\" | \"agent_messages\"\n readonly whereClauses: readonly string[]\n readonly args: readonly SqliteValue[]\n readonly orderBy: string\n readonly limit?: number\n readonly offset?: number\n}): { readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean } {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const offset = input.offset ?? 0\n\n const totalRow = input.db\n .query(`SELECT COUNT(*) AS count FROM ${input.table} ${where}`)\n .get(...input.args) as { count: number }\n\n let query = `SELECT * FROM ${input.table} ${where} ORDER BY ${input.orderBy}`\n const queryArgs = [...input.args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = input.db.query(query).all(...queryArgs) as TRow[]\n const total = totalRow.count\n return { rows, total, hasMore: offset + rows.length < total }\n}\n",
11
12
  "import type { Database } from \"bun:sqlite\"\nimport { AGENT_MESSAGE_CONTENT_VERSION } from \"@sixb/core/internal/agents\"\nimport {\n type AgentMessageRecord,\n type AgentMessageStore,\n AgentStorageError,\n type AppendAgentMessageInput,\n type DeleteAgentMessagesByRunInput,\n type ListAgentMessagesInput,\n type ListAgentMessagesResult,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport { type AgentMessageRow, queryAgentList, rowToMessageRecord } from \"./rows\"\n\nexport class SqliteAgentMessageStore implements AgentMessageStore {\n constructor(private readonly db: Database) {}\n\n async append(input: AppendAgentMessageInput): Promise<AgentMessageRecord> {\n const createdAt = input.createdAt ?? new Date()\n\n return this.db.transaction(() => {\n const thread = this.db\n .query(\"SELECT 1 AS present FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as { present: number } | null\n\n if (!thread) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${input.threadId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (input.runId !== null) {\n const run = this.db\n .query(\"SELECT 1 AS present FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.runId) as { present: number } | null\n\n if (!run) {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbSqlite] Agent run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n }\n\n const seqRow = this.db\n .query(\n \"SELECT COALESCE(MAX(seq), 0) + 1 AS next FROM agent_messages WHERE project_id = ? AND thread_id = ?\"\n )\n .get(input.projectId, input.threadId) as { next: number }\n\n try {\n this.db\n .query(\n `\n INSERT INTO agent_messages (\n project_id,\n id,\n thread_id,\n run_id,\n role,\n author_principal_type,\n author_principal_id,\n seq,\n parts,\n metadata,\n content_version,\n created_at,\n completed_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.threadId,\n input.runId,\n input.role,\n input.authorPrincipal?.type ?? null,\n input.authorPrincipal?.id ?? null,\n seqRow.next,\n JSON.stringify(input.parts),\n input.metadata === undefined ? null : JSON.stringify(input.metadata),\n AGENT_MESSAGE_CONTENT_VERSION,\n createdAt.toISOString(),\n input.completedAt ? input.completedAt.toISOString() : null\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent message '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n this.db\n .query(\n `\n UPDATE agent_threads\n SET message_count = message_count + 1, last_message_at = ?, updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(createdAt.toISOString(), createdAt.toISOString(), input.projectId, input.threadId)\n\n return this.requireMessage(input.projectId, input.id)\n })()\n }\n\n async deleteByRunId(input: DeleteAgentMessagesByRunInput): Promise<number> {\n return this.db.transaction(() => {\n const thread = this.db\n .query(\"SELECT 1 AS present FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as { present: number } | null\n\n if (!thread) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${input.threadId}' not found for project '${input.projectId}'.`\n )\n }\n\n const deleted = this.db\n .query(\"DELETE FROM agent_messages WHERE project_id = ? AND thread_id = ? AND run_id = ?\")\n .run(input.projectId, input.threadId, input.runId)\n if (deleted.changes === 0) {\n return 0\n }\n\n const updatedAt = new Date().toISOString()\n this.db\n .query(\n `\n UPDATE agent_threads\n SET\n message_count = (\n SELECT COUNT(*) FROM agent_messages WHERE project_id = ? AND thread_id = ?\n ),\n last_message_at = (\n SELECT created_at FROM agent_messages\n WHERE project_id = ? AND thread_id = ?\n ORDER BY seq DESC\n LIMIT 1\n ),\n updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.projectId,\n input.threadId,\n input.projectId,\n input.threadId,\n updatedAt,\n input.projectId,\n input.threadId\n )\n\n return deleted.changes\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentMessageRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM agent_messages WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as AgentMessageRow | null\n\n return row ? rowToMessageRecord(row) : null\n }\n\n async list(input: ListAgentMessagesInput): Promise<ListAgentMessagesResult> {\n if (input.roles !== undefined && input.roles.length === 0) {\n return { messages: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\", \"thread_id = ?\"]\n const args: SqliteValue[] = [input.projectId, input.threadId]\n\n if (input.afterSeq !== undefined) {\n whereClauses.push(\"seq > ?\")\n args.push(input.afterSeq)\n }\n\n if (input.roles) {\n whereClauses.push(`role IN (${input.roles.map(() => \"?\").join(\", \")})`)\n args.push(...input.roles)\n }\n\n const dir = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const { rows, total, hasMore } = queryAgentList<AgentMessageRow>({\n db: this.db,\n table: \"agent_messages\",\n whereClauses,\n args,\n orderBy: `seq ${dir}`,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { messages: rows.map(rowToMessageRecord), hasMore, total }\n }\n\n private requireMessage(projectId: string, id: string): AgentMessageRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_messages WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentMessageRow | null\n\n if (!row) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Failed to load agent message '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToMessageRecord(row)\n }\n}\n",
12
13
  "export function isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\nexport function isForeignKeyConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"FOREIGN KEY constraint failed\")\n}\n",
13
14
  "import type { Database } from \"bun:sqlite\"\nimport {\n assertAgentRunExecution,\n assertConversationAgentRunSpec,\n assertCreateSubagentRunInput,\n assertSubagentRunResult,\n subagentRunMatchesCreateInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentRunRecord,\n type AgentRunStore,\n AgentStorageError,\n type ConfirmAgentRunExecutionOwnershipInput,\n type ConversationAgentRunRecord,\n type CreateAgentRunInput,\n type CreateSubagentRunInput,\n type ExecutionStorage,\n type FinishAgentRunInput,\n type FinishQueuedAgentRunInput,\n type ListAgentRunsInput,\n type ListAgentRunsResult,\n type ReclaimAgentRunInput,\n type StartAgentRunInput,\n type SubagentRunRecord,\n} from \"@sixb/core/storage\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"../run-list-query\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport { type AgentRunRow, rowToRunRecord } from \"./rows\"\n\nconst SQLITE_RUN_ID_BATCH_SIZE = 500\n\nexport class SqliteAgentRunStore implements AgentRunStore {\n constructor(\n private readonly db: Database,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord> {\n assertConversationAgentRunSpec(input.spec, \"SixbSqlite\")\n const createdAt = input.createdAt ?? new Date()\n await assertAgentRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n })\n\n return this.db.transaction(() => {\n const thread = this.db\n .query(\"SELECT active_run_id FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as { active_run_id: string | null } | null\n\n if (!thread) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${input.threadId}' not found for project '${input.projectId}'.`\n )\n }\n if (thread.active_run_id !== null) {\n throw new AgentStorageError(\n \"active_run_exists\",\n `[SixbSqlite] Agent thread '${input.threadId}' already has an active run '${thread.active_run_id}'.`\n )\n }\n\n try {\n this.db\n .query(\n `\n INSERT INTO agent_runs (\n project_id,\n id,\n execution_id,\n kind,\n thread_id,\n trigger_message_id,\n spec,\n status,\n attempt,\n created_at\n ) VALUES (?, ?, ?, 'conversation', ?, ?, ?, 'queued', 0, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.threadId,\n input.triggerMessageId,\n JSON.stringify(input.spec),\n createdAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n this.db\n .query(\n \"UPDATE agent_threads SET active_run_id = ?, updated_at = ? WHERE project_id = ? AND id = ?\"\n )\n .run(input.id, createdAt.toISOString(), input.projectId, input.threadId)\n\n const created = this.requireRun(input.projectId, input.id)\n if (created.kind !== \"conversation\") {\n throw new Error(`[SixbSqlite] Agent run insert '${input.id}' returned the wrong run kind.`)\n }\n return created\n })()\n }\n\n async createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord> {\n assertCreateSubagentRunInput(input, \"SixbSqlite\")\n const execution = await assertAgentRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n })\n\n return this.db.transaction(() => {\n const parentRow = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.parentRunId) as AgentRunRow | null\n if (!parentRow || parentRow.kind !== \"conversation\") {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbSqlite] Parent Agent run '${input.parentRunId}' was not found.`\n )\n }\n\n const existingRow = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as AgentRunRow | null\n if (existingRow) {\n const existing = rowToRunRecord(existingRow)\n if (subagentRunMatchesCreateInput(existing, input)) return existing\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Subagent run '${input.id}' already exists with different immutable inputs.`\n )\n }\n if (parentRow.status !== \"running\") {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Parent Agent run '${parentRow.id}' is not running (status '${parentRow.status}').`\n )\n }\n if (\n execution.source.type !== \"execution\" ||\n execution.source.executionId !== parentRow.execution_id\n ) {\n throw new AgentStorageError(\n \"invalid_input\",\n `[SixbSqlite] Subagent execution '${execution.id}' is not a child of parent execution '${parentRow.execution_id}'.`\n )\n }\n if (parentRow.execution_token !== input.parentExecutionToken) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbSqlite] Parent Agent run '${parentRow.id}' is no longer owned by this execution.`\n )\n }\n\n const count = this.db\n .query(\n `SELECT COUNT(*) AS count FROM agent_runs\n WHERE project_id = ? AND parent_run_id = ? AND status IN ('queued', 'running')`\n )\n .get(input.projectId, input.parentRunId) as { count: number }\n if (count.count >= input.maxActiveChildren) {\n throw new AgentStorageError(\n \"active_child_limit\",\n `[SixbSqlite] Agent run '${parentRow.id}' already has ${count.count} active subagents.`\n )\n }\n\n try {\n this.db\n .query(\n `\n INSERT INTO agent_runs (\n project_id, id, execution_id, kind, parent_run_id, spawn_key, spec,\n status, attempt, created_at\n ) VALUES (?, ?, ?, 'subagent', ?, ?, ?, 'queued', 0, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.parentRunId,\n input.spawnKey,\n JSON.stringify(input.spec),\n (input.createdAt ?? new Date()).toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Subagent run '${input.id}' conflicts with an existing durable spawn.`\n )\n }\n throw error\n }\n\n const created = this.requireRun(input.projectId, input.id)\n if (created.kind !== \"subagent\") {\n throw new Error(`[SixbSqlite] Subagent insert '${input.id}' returned the wrong run kind.`)\n }\n return created\n })()\n }\n\n async start(input: StartAgentRunInput): Promise<AgentRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n return this.db.transaction(() => {\n this.requireStatus(input.projectId, input.id, \"queued\")\n this.db\n .query(\n `\n UPDATE agent_runs\n SET\n status = 'running',\n model_id = ?,\n attempt = 1,\n execution_token = ?,\n execution_queue_lease_expires_at = ?,\n started_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.modelId ?? null,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n startedAt.toISOString(),\n input.projectId,\n input.id\n )\n\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n async finishQueued(input: FinishQueuedAgentRunInput): Promise<AgentRunRecord> {\n const completedAt = input.completedAt ?? new Date()\n return this.db.transaction(() => {\n const run = this.requireStatus(input.projectId, input.id, \"queued\")\n this.db\n .query(\n `\n UPDATE agent_runs\n SET status = ?, error = ?, completed_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n completedAt.toISOString(),\n input.projectId,\n input.id\n )\n this.releaseThread(run, completedAt)\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n async reclaim(input: ReclaimAgentRunInput): Promise<AgentRunRecord> {\n return this.db.transaction(() => {\n this.requireRunning(input.projectId, input.id)\n this.db\n .query(\n `\n UPDATE agent_runs\n SET\n attempt = attempt + 1,\n execution_token = ?,\n execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.id\n )\n\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmAgentRunExecutionOwnershipInput\n ): Promise<AgentRunRecord> {\n return this.db.transaction(() => {\n const run = this.requireRunning(input.projectId, input.id)\n if (run.execution_token !== input.executionToken) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbSqlite] Execution token is no longer current on agent run '${input.id}'.`\n )\n }\n this.db\n .query(\n `\n UPDATE agent_runs\n SET execution_queue_lease_expires_at = MAX(execution_queue_lease_expires_at, ?)\n WHERE project_id = ? AND id = ?\n `\n )\n .run(input.queueLeaseExpiresAt.toISOString(), input.projectId, input.id)\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n async finish(input: FinishAgentRunInput): Promise<AgentRunRecord> {\n const completedAt = input.completedAt ?? new Date()\n const errorValue =\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES)\n\n return this.db.transaction(() => {\n const run = this.requireRunning(input.projectId, input.id)\n\n if (run.execution_token !== input.executionToken) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbSqlite] Execution token is no longer current on agent run '${input.id}'.`\n )\n }\n if (input.status === \"succeeded\" && run.kind === \"subagent\") {\n assertSubagentRunResult(input.result, run.id, \"SixbSqlite\")\n }\n if (\n input.status === \"succeeded\" &&\n run.kind === \"conversation\" &&\n input.result !== undefined\n ) {\n throw new AgentStorageError(\n \"invalid_input\",\n `[SixbSqlite] Conversational Agent run '${run.id}' cannot persist a subagent result.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE agent_runs\n SET\n status = ?,\n model_id = COALESCE(?, model_id),\n finish_reason = ?,\n error = ?,\n diagnostics = ?,\n result = ?,\n execution_token = NULL,\n execution_queue_lease_expires_at = NULL,\n completed_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n input.modelId ?? null,\n input.finishReason ?? null,\n errorValue,\n input.diagnostics === undefined ? null : JSON.stringify(input.diagnostics),\n input.status === \"succeeded\" && input.result !== undefined\n ? JSON.stringify(input.result)\n : null,\n completedAt.toISOString(),\n input.projectId,\n input.id\n )\n\n this.releaseThread(run, completedAt)\n\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as AgentRunRow | null\n\n return row ? rowToRunRecord(row) : null\n }\n\n async getByIds(params: {\n projectId: string\n ids: readonly string[]\n }): Promise<readonly AgentRunRecord[]> {\n const ids = [...new Set(params.ids)]\n if (ids.length === 0) {\n return []\n }\n\n const rows: AgentRunRow[] = []\n for (let offset = 0; offset < ids.length; offset += SQLITE_RUN_ID_BATCH_SIZE) {\n const batch = ids.slice(offset, offset + SQLITE_RUN_ID_BATCH_SIZE)\n const placeholders = batch.map(() => \"?\").join(\", \")\n rows.push(\n ...(this.db\n .query(`SELECT * FROM agent_runs WHERE project_id = ? AND id IN (${placeholders})`)\n .all(params.projectId, ...batch) as AgentRunRow[])\n )\n }\n const byId = new Map(rows.map((row) => [row.id, rowToRunRecord(row)]))\n return ids.flatMap((id) => {\n const run = byId.get(id)\n return run ? [run] : []\n })\n }\n\n async list(input: ListAgentRunsInput): Promise<ListAgentRunsResult> {\n if (hasEmptyStatuses(input) || input.kinds?.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.kinds) {\n whereClauses.push(`kind IN (${input.kinds.map(() => \"?\").join(\", \")})`)\n args.push(...input.kinds)\n }\n\n if (input.threadId) {\n whereClauses.push(\"thread_id = ?\")\n args.push(input.threadId)\n }\n\n if (input.parentRunId) {\n whereClauses.push(\"parent_run_id = ?\")\n args.push(input.parentRunId)\n }\n\n appendRunListFilters(whereClauses, args, input, \"COALESCE(started_at, created_at)\")\n\n const { rows, total, hasMore } = queryRunList<AgentRunRow>({\n db: this.db,\n tableName: \"agent_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { runs: rows.map(rowToRunRecord), hasMore, total }\n }\n\n private requireRunning(projectId: string, id: string): AgentRunRow {\n return this.requireStatus(projectId, id, \"running\")\n }\n\n private requireStatus(\n projectId: string,\n id: string,\n status: AgentRunRecord[\"status\"]\n ): AgentRunRow {\n const row = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentRunRow | null\n\n if (!row) {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbSqlite] Agent run '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.status !== status) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Agent run '${id}' is not ${status} (status '${row.status}').`\n )\n }\n\n return row\n }\n\n private releaseThread(run: AgentRunRow, completedAt: Date): void {\n if (run.kind !== \"conversation\") return\n this.db\n .query(\n `\n UPDATE agent_threads\n SET active_run_id = NULL, updated_at = ?\n WHERE project_id = ? AND id = ? AND active_run_id = ?\n `\n )\n .run(completedAt.toISOString(), run.project_id, run.thread_id, run.id)\n }\n\n private requireRun(projectId: string, id: string): AgentRunRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentRunRow | null\n\n if (!row) {\n throw new AgentStorageError(\n \"run_not_found\",\n `[SixbSqlite] Agent run '${id}' not found for project '${projectId}'.`\n )\n }\n\n return rowToRunRecord(row)\n }\n}\n",
14
15
  "import type { Database } from \"bun:sqlite\"\n\nexport type SqliteValue = string | number | null\n\ntype SqliteRunListTable =\n | \"agent_runs\"\n | \"pipeline_runs\"\n | \"pipeline_step_runs\"\n | \"sync_runs\"\n | \"webhook_runs\"\n | \"workflow_runs\"\n | \"workflow_node_runs\"\n | \"workflow_agent_node_runs\"\n\nexport function hasEmptyStatuses(input: { readonly statuses?: readonly unknown[] }): boolean {\n return input.statuses !== undefined && input.statuses.length === 0\n}\n\ntype StartedAtExpression =\n | \"started_at\"\n | \"COALESCE(started_at, created_at)\"\n | \"COALESCE(started_at, queued_at)\"\n\nexport function appendRunListFilters(\n whereClauses: string[],\n args: SqliteValue[],\n input: {\n readonly statuses?: readonly string[]\n readonly startedAfter?: Date\n readonly startedBefore?: Date\n },\n startedAtExpression: StartedAtExpression = \"started_at\"\n): void {\n if (input.statuses) {\n if (input.statuses.length === 0) {\n whereClauses.push(\"1 = 0\")\n } else {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n }\n\n if (input.startedAfter) {\n whereClauses.push(`${startedAtExpression} >= ?`)\n args.push(input.startedAfter.toISOString())\n }\n\n if (input.startedBefore) {\n whereClauses.push(`${startedAtExpression} <= ?`)\n args.push(input.startedBefore.toISOString())\n }\n}\n\nexport function queryRunList<TRow>(input: {\n readonly db: Database\n readonly tableName: SqliteRunListTable\n readonly whereClauses: readonly string[]\n readonly args: readonly SqliteValue[]\n readonly order?: \"asc\" | \"desc\"\n readonly limit?: number\n readonly offset?: number\n}): { readonly rows: readonly TRow[]; readonly total: number; readonly hasMore: boolean } {\n const where = `WHERE ${input.whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n\n const totalRow = input.db\n .query(`SELECT COUNT(*) AS count FROM ${input.tableName} ${where}`)\n .get(...input.args) as { count: number }\n\n const orderColumn =\n input.tableName === \"agent_runs\"\n ? \"COALESCE(started_at, created_at)\"\n : input.tableName === \"sync_runs\" || input.tableName === \"pipeline_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : input.tableName === \"workflow_agent_node_runs\"\n ? \"created_at\"\n : \"started_at\"\n const idColumn = input.tableName === \"workflow_agent_node_runs\" ? \"node_run_id\" : \"id\"\n let query = `\n SELECT * FROM ${input.tableName}\n ${where}\n ORDER BY ${orderColumn} ${order}, ${idColumn} ${order}\n `\n const queryArgs = [...input.args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = input.db.query(query).all(...queryArgs) as TRow[]\n const total = totalRow.count\n\n return {\n rows,\n total,\n hasMore: offset + rows.length < total,\n }\n}\n",
15
- "import type { Database } from \"bun:sqlite\"\nimport {\n snapshotAgentThreadSandboxParams,\n transitionAgentThreadSandbox,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n AgentStorageError,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type AgentThreadStore,\n type CreateAgentThreadInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n type TransitionAgentThreadSandboxInput,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport {\n type AgentRunRow,\n type AgentThreadRow,\n queryAgentList,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nexport class SqliteAgentThreadStore implements AgentThreadStore {\n constructor(private readonly db: Database) {}\n\n async transitionSandbox(\n input: TransitionAgentThreadSandboxInput\n ): Promise<AgentThreadSandboxState> {\n return this.db\n .transaction(() => {\n const run =\n input.action === \"recreate\"\n ? null\n : (this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.runId) as AgentRunRow | null)\n const thread = this.requireThread(input.projectId, input.id)\n const state = transitionAgentThreadSandbox(thread, run ? rowToRunRecord(run) : null, input)\n this.db\n .query(\"UPDATE agent_threads SET sandbox_state = ? WHERE project_id = ? AND id = ?\")\n .run(JSON.stringify(state), input.projectId, input.id)\n return state\n })\n .immediate()\n }\n\n async create(input: CreateAgentThreadInput): Promise<AgentThreadRecord> {\n const sandboxParams =\n input.sandboxParams === undefined\n ? null\n : JSON.stringify(snapshotAgentThreadSandboxParams(input.sandboxParams))\n const createdAt = input.createdAt ?? new Date()\n const updatedAt = input.updatedAt ?? createdAt\n\n try {\n this.db\n .query(\n `\n INSERT INTO agent_threads (\n project_id,\n id,\n owner_principal_type,\n owner_principal_id,\n title,\n sandbox_params,\n status,\n active_run_id,\n last_message_at,\n message_count,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, NULL, NULL, 0, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.ownerPrincipal.type,\n input.ownerPrincipal.id,\n input.title ?? null,\n sandboxParams,\n input.status ?? \"active\",\n createdAt.toISOString(),\n updatedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent thread '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireThread(input.projectId, input.id)\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentThreadRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as AgentThreadRow | null\n\n return row ? rowToThreadRecord(row) : null\n }\n\n async list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult> {\n if (input.statuses !== undefined && input.statuses.length === 0) {\n return { threads: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.ownerPrincipal) {\n whereClauses.push(\"owner_principal_type = ? AND owner_principal_id = ?\")\n args.push(input.ownerPrincipal.type, input.ownerPrincipal.id)\n }\n\n const dir = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const { rows, total, hasMore } = queryAgentList<AgentThreadRow>({\n db: this.db,\n table: \"agent_threads\",\n whereClauses,\n args,\n orderBy: `COALESCE(last_message_at, created_at) ${dir}, id ${dir}`,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { threads: rows.map(rowToThreadRecord), hasMore, total }\n }\n\n private requireThread(projectId: string, id: string): AgentThreadRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentThreadRow | null\n\n if (!row) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Failed to load agent thread '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToThreadRecord(row)\n }\n}\n",
16
+ "import type { Database } from \"bun:sqlite\"\nimport {\n snapshotAgentThreadSandboxParams,\n transitionAgentThreadSandbox,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n AgentStorageError,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type AgentThreadStore,\n type CreateAgentThreadInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n type TransitionAgentThreadSandboxInput,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport {\n type AgentRunRow,\n type AgentThreadRow,\n queryAgentList,\n rowToRunRecord,\n rowToThreadRecord,\n} from \"./rows\"\n\nexport class SqliteAgentThreadStore implements AgentThreadStore {\n constructor(private readonly db: Database) {}\n\n async transitionSandbox(\n input: TransitionAgentThreadSandboxInput\n ): Promise<AgentThreadSandboxState> {\n return this.db\n .transaction(() => {\n const run =\n input.action === \"recreate\"\n ? null\n : (this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.runId) as AgentRunRow | null)\n const thread = this.requireThread(input.projectId, input.id)\n const state = transitionAgentThreadSandbox(thread, run ? rowToRunRecord(run) : null, input)\n this.db\n .query(\"UPDATE agent_threads SET sandbox_state = ? WHERE project_id = ? AND id = ?\")\n .run(JSON.stringify(state), input.projectId, input.id)\n return state\n })\n .immediate()\n }\n\n async create(input: CreateAgentThreadInput): Promise<AgentThreadRecord> {\n const sandboxParams =\n input.sandboxParams === undefined\n ? null\n : JSON.stringify(snapshotAgentThreadSandboxParams(input.sandboxParams))\n const createdAt = input.createdAt ?? new Date()\n const updatedAt = input.updatedAt ?? createdAt\n\n try {\n this.db\n .query(\n `\n INSERT INTO agent_threads (\n project_id,\n id,\n owner_principal_type,\n owner_principal_id,\n title,\n sandbox_params,\n status,\n active_run_id,\n last_message_at,\n message_count,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, NULL, NULL, 0, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.ownerPrincipal.type,\n input.ownerPrincipal.id,\n input.title ?? null,\n sandboxParams,\n input.status ?? \"active\",\n createdAt.toISOString(),\n updatedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent thread '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireThread(input.projectId, input.id)\n }\n\n async getById(params: { projectId: string; id: string }): Promise<AgentThreadRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as AgentThreadRow | null\n\n return row ? rowToThreadRecord(row) : null\n }\n\n async getByIds(params: {\n readonly projectId: string\n readonly ids: readonly string[]\n }): Promise<readonly AgentThreadRecord[]> {\n const ids = [...new Set(params.ids)]\n if (ids.length === 0) {\n return []\n }\n\n const rows = this.db\n .query(\n `\n SELECT *\n FROM agent_threads\n WHERE project_id = ?\n AND id IN (SELECT value FROM json_each(?))\n `\n )\n .all(params.projectId, JSON.stringify(ids)) as AgentThreadRow[]\n\n const byId = new Map(rows.map((row) => [row.id, row]))\n return ids.flatMap((id) => {\n const row = byId.get(id)\n return row ? [rowToThreadRecord(row)] : []\n })\n }\n\n async list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult> {\n if (input.statuses !== undefined && input.statuses.length === 0) {\n return { threads: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.ownerPrincipal) {\n whereClauses.push(\"owner_principal_type = ? AND owner_principal_id = ?\")\n args.push(input.ownerPrincipal.type, input.ownerPrincipal.id)\n }\n\n const dir = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const { rows, total, hasMore } = queryAgentList<AgentThreadRow>({\n db: this.db,\n table: \"agent_threads\",\n whereClauses,\n args,\n orderBy: `COALESCE(last_message_at, created_at) ${dir}, id ${dir}`,\n limit: input.limit,\n offset: input.offset,\n })\n\n return { threads: rows.map(rowToThreadRecord), hasMore, total }\n }\n\n private requireThread(projectId: string, id: string): AgentThreadRecord {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentThreadRow | null\n\n if (!row) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Failed to load agent thread '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToThreadRecord(row)\n }\n}\n",
16
17
  "import type { AgentStorage, ExecutionStorage } from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { SqliteAgentContextCheckpointStore } from \"./checkpoints\"\nimport { SqliteAgentMessageStore } from \"./messages\"\nimport { SqliteAgentRunStore } from \"./runs\"\nimport { SqliteAgentThreadStore } from \"./threads\"\n\nexport interface SqliteAgentStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n /** Execution ledger used to validate immutable run ownership. */\n executions: ExecutionStorage\n}\n\n/**\n * SQLite-backed agent persistence: thread, run, message, and context-checkpoint sub-stores sharing\n * one connection. Cross-table writes run in SQLite transactions; the bundled {@link SqliteStorage}\n * serializes them for single-flight and checkpoint compare-and-swap safety.\n */\nexport class SqliteAgentStorage implements AgentStorage {\n readonly threads: SqliteAgentThreadStore\n readonly runs: SqliteAgentRunStore\n readonly messages: SqliteAgentMessageStore\n readonly checkpoints: SqliteAgentContextCheckpointStore\n\n private readonly connection: SqliteStoreConnection\n\n constructor(options: SqliteAgentStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n\n this.threads = new SqliteAgentThreadStore(this.connection.db)\n this.runs = new SqliteAgentRunStore(this.connection.db, options.executions)\n this.messages = new SqliteAgentMessageStore(this.connection.db)\n this.checkpoints = new SqliteAgentContextCheckpointStore(this.connection.db)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n",
17
18
  "import {\n type AiAccountingAggregateFragment,\n type AiAccountingRecordSetItem,\n aiModelCallCostDetails,\n aiModelCallCostMatchesUsage,\n buildAiAccountingOverviewFromFragments,\n directModelCallAttribution,\n normalizeAiAccountingQuery,\n normalizeAiModelCallAccountingQuery,\n normalizeAiModelCallCostRecord,\n parseAiModelCallCostDetails,\n toAccountingItem,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport { normalizeModelProviderIds } from \"@sixb/core/models\"\nimport type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiAccountingOverview,\n type AiCostStorage,\n AiCostStorageError,\n type AiCostSummary,\n type AiModelCallCostRecord,\n type AiModelCallUsageRecord,\n type ListAiModelCallAccountingInput,\n type ListAiModelCallAccountingResult,\n type ListAiModelCallGroupsInput,\n type ListAiModelCallGroupsResult,\n type QueryAiAccountingOverviewInput,\n type SummarizeAiCostExecutionsInput,\n} from \"@sixb/core/storage\"\nimport { listAiModelCallGroups } from \"./ai-cost-groups\"\nimport { requestedReasoningFromRow } from \"./ai-usage-storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport { runImmediateTransaction, type SqliteStoreConnection } from \"./transactions\"\n\n/** SQLite-backed immutable valuations stored in one append-only table. */\nexport class SqliteAiCostStorage implements AiCostStorage {\n constructor(private readonly connection: SqliteStoreConnection) {}\n\n async listModelCallGroups(\n input: ListAiModelCallGroupsInput\n ): Promise<ListAiModelCallGroupsResult> {\n return listAiModelCallGroups(this.connection, input)\n }\n\n async recordModelCallCost(input: AiModelCallCostRecord): Promise<void> {\n const record = normalizeAiModelCallCostRecord(input)\n runImmediateTransaction(this.connection.db, () => {\n const usage = this.findUsage(record.projectId, record.usageRecordId)\n if (!usage) throw missingUsage(record)\n assertCostMatchesUsage(record, usage)\n if (this.findCost(record.projectId, record.usageRecordId)) return\n try {\n this.insertCost(record)\n } catch (error) {\n if (!isUniqueConstraintError(error)) throw error\n if (!this.findCost(record.projectId, record.usageRecordId)) throw error\n }\n })\n }\n\n async summarizeExecutions(\n input: SummarizeAiCostExecutionsInput\n ): Promise<readonly AiCostSummary[]> {\n assertNonBlank(input.projectId, \"cost summary projectId\")\n for (const id of input.executionIds) assertNonBlank(id, \"cost summary executionId\")\n if (input.executionIds.length === 0) return []\n const rows = this.connection.db\n .query(\n `\n WITH requested AS (SELECT DISTINCT value AS execution_id FROM json_each(?))\n SELECT usage.execution_id,\n cost.status,\n cost.currency,\n CAST(cost.amount_nanos AS TEXT) AS amount_nanos\n FROM requested\n JOIN ai_model_call_usage AS usage\n ON usage.project_id = ? AND usage.execution_id = requested.execution_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n `\n )\n .all(JSON.stringify([...new Set(input.executionIds)]), input.projectId) as SummaryRow[]\n return aggregateSummaryRows(input.executionIds, rows)\n }\n\n async queryProjectOverview(input: QueryAiAccountingOverviewInput): Promise<AiAccountingOverview> {\n const query = normalizeAiAccountingQuery(input)\n const rows = this.connection.db\n .query(SQLITE_ACCOUNTING_OVERVIEW_SQL)\n .all(\n query.projectId,\n query.from.toISOString(),\n query.to.toISOString(),\n query.providerId ?? null,\n query.providerId ?? null,\n query.modelId ?? null,\n query.modelId ?? null,\n input.bucket\n ) as AggregateRow[]\n return buildAiAccountingOverviewFromFragments(input, rows.map(aggregateFragmentFromRow))\n }\n\n async listModelCalls(\n input: ListAiModelCallAccountingInput\n ): Promise<ListAiModelCallAccountingResult> {\n const query = normalizeAiModelCallAccountingQuery(input)\n const parameters = accountingListFilterParameters(query)\n const count = this.connection.db\n .query(SQLITE_ACCOUNTING_LIST_COUNT_SQL)\n .get(...parameters) as CountRow\n const rows = this.connection.db\n .query(SQLITE_ACCOUNTING_LIST_PAGE_SQL)\n .all(...parameters, query.limit, query.offset) as JoinedRow[]\n const items = rows.map((row) => toAccountingItem(accountingItemFromRow(row)))\n const total = safeSqlCount(count.total, \"model-call list total\")\n return structuredClone({\n items,\n total,\n hasMore: query.offset + items.length < total,\n })\n }\n\n private insertCost(record: AiModelCallCostRecord): void {\n const rated = record.status === \"rated\" ? record : undefined\n const details = aiModelCallCostDetails(record)\n this.connection.db\n .query(\n `INSERT INTO ai_model_call_valuations (\n project_id, usage_record_id, status, provider_id, model_id,\n currency, amount_nanos, reason, details, rated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`\n )\n .run(\n record.projectId,\n record.usageRecordId,\n record.status,\n record.billingIdentity?.providerId ?? null,\n record.billingIdentity?.modelId ?? null,\n rated?.money.currency ?? null,\n rated ? BigInt(rated.money.amountNanos) : null,\n record.status === \"unpriceable\" ? record.reason : null,\n JSON.stringify(details),\n record.ratedAt.toISOString()\n )\n }\n\n private findCost(projectId: string, usageId: string): AiModelCallCostRecord | null {\n const row = this.connection.db\n .query(\n `SELECT *, CAST(amount_nanos AS TEXT) AS amount_nanos\n FROM ai_model_call_valuations\n WHERE project_id = ? AND usage_record_id = ?`\n )\n .get(projectId, usageId) as ValuationRow | null\n return row ? rowToCost(row) : null\n }\n\n private findUsage(projectId: string, id: string): AiModelCallUsageRecord | null {\n const row = this.connection.db\n .query(\"SELECT * FROM ai_model_call_usage WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as UsageRow | null\n return row ? usageFromRow(row, []) : null\n }\n}\n\nconst SQLITE_ACCOUNTING_LIST_FILTER = `\n usage.project_id = ? AND usage.occurred_at >= ? AND usage.occurred_at < ?\n AND (? IS NULL OR usage.provider_id = ?)\n AND (? IS NULL OR usage.requested_model_id = ?)\n AND (? IS NULL OR usage.execution_id = ?)\n AND (\n ? IS NULL OR ? = CASE\n WHEN cost.status = 'rated' THEN 'rated'\n WHEN cost.status = 'unpriceable' THEN 'unpriceable'\n ELSE 'unvalued'\n END\n )\n`\n\nconst SQLITE_ACCOUNTING_LIST_COUNT_SQL = `\n SELECT CAST(COUNT(*) AS TEXT) AS total\n FROM ai_model_call_usage AS usage\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE ${SQLITE_ACCOUNTING_LIST_FILTER}\n`\n\nconst SQLITE_ACCOUNTING_LIST_PAGE_SQL = `\n SELECT usage.*,\n CASE\n WHEN direct_agent.kind = 'conversation' THEN 'agent'\n WHEN direct_agent.kind = 'subagent' THEN 'subagent'\n WHEN workflow_agent.node_run_id IS NOT NULL THEN 'workflowAgent'\n ELSE NULL\n END AS attribution_kind,\n workflow_node.node_id AS attribution_agent_step_id,\n direct_agent.id AS attribution_agent_run_id,\n direct_agent.thread_id AS attribution_thread_id,\n direct_agent.parent_run_id AS attribution_parent_run_id,\n workflow_agent.node_run_id AS attribution_node_run_id,\n workflow_node.workflow_id AS attribution_workflow_id,\n workflow_node.workflow_run_id AS attribution_workflow_run_id,\n execution.executor_kind, execution.executor_id, execution.authority_primitive_id AS primitive_id,\n COALESCE((\n SELECT json_group_array(group_id) FROM (\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = usage.project_id AND usage_record_id = usage.id\n ORDER BY group_id\n )\n ), '[]') AS requester_group_ids,\n cost.status AS cost_status,\n cost.provider_id AS cost_provider_id,\n cost.model_id AS cost_model_id,\n cost.currency AS cost_currency,\n CAST(cost.amount_nanos AS TEXT) AS cost_amount_nanos,\n cost.reason AS cost_reason,\n cost.details AS cost_details,\n cost.rated_at AS cost_rated_at\n FROM ai_model_call_usage AS usage\n JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id\n AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id\n AND workflow_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_node_runs AS workflow_node\n ON workflow_node.project_id = workflow_agent.project_id\n AND workflow_node.id = workflow_agent.node_run_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE ${SQLITE_ACCOUNTING_LIST_FILTER}\n ORDER BY usage.occurred_at DESC, usage.id ASC\n LIMIT ? OFFSET ?\n`\n\nconst SQLITE_ACCOUNTING_OVERVIEW_SQL = `\n WITH classified AS (\n SELECT usage.provider_id,\n usage.requested_model_id,\n usage.occurred_at,\n usage.input_tokens,\n usage.output_tokens,\n usage.uncached_input_tokens,\n usage.cache_read_input_tokens,\n usage.cache_write_input_tokens,\n usage.text_output_tokens,\n usage.reasoning_output_tokens,\n usage.audio_duration_ms,\n usage.reporting_status,\n CASE\n WHEN direct_agent.kind = 'conversation' THEN 'agent'\n WHEN workflow_agent.node_run_id IS NOT NULL THEN 'workflowAgent'\n ELSE NULL\n END AS attribution_agent_kind,\n workflow_node.node_id AS attribution_agent_step_id,\n COALESCE(workflow_node.workflow_id,\n CASE WHEN execution.executor_kind = 'workflow' THEN execution.authority_primitive_id END\n ) AS attribution_workflow_id,\n CASE\n WHEN cost.status = 'rated' THEN 'rated'\n WHEN cost.status = 'unpriceable' THEN 'unpriceable'\n ELSE 'unvalued'\n END AS valuation_status,\n CASE WHEN cost.status = 'rated' THEN cost.currency ELSE NULL END AS amount_currency,\n CASE WHEN cost.status = 'rated' THEN cost.amount_nanos ELSE NULL END AS amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id\n AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id\n AND workflow_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_node_runs AS workflow_node\n ON workflow_node.project_id = workflow_agent.project_id\n AND workflow_node.id = workflow_agent.node_run_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE usage.project_id = ? AND usage.occurred_at >= ? AND usage.occurred_at < ?\n AND (? IS NULL OR usage.provider_id = ?)\n AND (? IS NULL OR usage.requested_model_id = ?)\n ), expanded AS (\n SELECT 'totals' AS dimension, NULL AS key_1, NULL AS key_2, NULL AS key_3, NULL AS bucket_start,\n classified.*\n FROM classified\n UNION ALL\n SELECT 'series', NULL, NULL, NULL,\n CASE ?\n WHEN 'hour' THEN strftime('%Y-%m-%dT%H:00:00.000Z', occurred_at)\n WHEN 'day' THEN strftime('%Y-%m-%dT00:00:00.000Z', occurred_at)\n ELSE strftime(\n '%Y-%m-%dT00:00:00.000Z',\n occurred_at,\n printf('-%d days', (CAST(strftime('%w', occurred_at) AS INTEGER) + 6) % 7)\n )\n END,\n classified.*\n FROM classified\n UNION ALL\n SELECT 'model', provider_id, requested_model_id, NULL, NULL, classified.* FROM classified\n UNION ALL\n SELECT 'agent', attribution_agent_kind, attribution_workflow_id, attribution_agent_step_id, NULL, classified.*\n FROM classified WHERE attribution_agent_kind IS NOT NULL\n UNION ALL\n SELECT 'workflow', attribution_workflow_id, NULL, NULL, NULL, classified.*\n FROM classified WHERE attribution_workflow_id IS NOT NULL\n )\n SELECT dimension,\n key_1,\n key_2,\n key_3,\n bucket_start,\n amount_currency,\n CAST(COUNT(*) AS TEXT) AS model_call_count,\n CAST(SUM(CASE WHEN reporting_status <> 'unavailable' THEN 1 ELSE 0 END) AS TEXT)\n AS reported_usage_call_count,\n CAST(SUM(CASE WHEN input_tokens IS NOT NULL AND output_tokens IS NOT NULL THEN 1 ELSE 0 END) AS TEXT)\n AS complete_usage_call_count,\n CAST(COUNT(input_tokens) AS TEXT) AS input_tokens_count,\n CAST(SUM(input_tokens) AS TEXT) AS input_tokens_sum,\n CAST(COUNT(output_tokens) AS TEXT) AS output_tokens_count,\n CAST(SUM(output_tokens) AS TEXT) AS output_tokens_sum,\n CAST(COUNT(uncached_input_tokens) AS TEXT) AS uncached_input_tokens_count,\n CAST(SUM(uncached_input_tokens) AS TEXT) AS uncached_input_tokens_sum,\n CAST(COUNT(cache_read_input_tokens) AS TEXT) AS cache_read_input_tokens_count,\n CAST(SUM(cache_read_input_tokens) AS TEXT) AS cache_read_input_tokens_sum,\n CAST(COUNT(cache_write_input_tokens) AS TEXT) AS cache_write_input_tokens_count,\n CAST(SUM(cache_write_input_tokens) AS TEXT) AS cache_write_input_tokens_sum,\n CAST(COUNT(text_output_tokens) AS TEXT) AS text_output_tokens_count,\n CAST(SUM(text_output_tokens) AS TEXT) AS text_output_tokens_sum,\n CAST(COUNT(reasoning_output_tokens) AS TEXT) AS reasoning_output_tokens_count,\n CAST(SUM(reasoning_output_tokens) AS TEXT) AS reasoning_output_tokens_sum,\n CAST(COUNT(audio_duration_ms) AS TEXT) AS audio_duration_ms_count,\n CAST(SUM(audio_duration_ms) AS TEXT) AS audio_duration_ms_sum,\n CAST(SUM(CASE WHEN valuation_status = 'rated' THEN 1 ELSE 0 END) AS TEXT)\n AS rated_call_count,\n CAST(SUM(CASE WHEN valuation_status = 'unpriceable' THEN 1 ELSE 0 END) AS TEXT)\n AS unpriceable_call_count,\n CAST(SUM(CASE WHEN valuation_status = 'unvalued' THEN 1 ELSE 0 END) AS TEXT)\n AS unvalued_call_count,\n CAST(SUM(amount_nanos / 1000000000000) AS TEXT) AS amount_high,\n CAST(SUM((amount_nanos / 1000000) % 1000000) AS TEXT) AS amount_middle,\n CAST(SUM(amount_nanos % 1000000) AS TEXT) AS amount_low\n FROM expanded\n GROUP BY dimension, key_1, key_2, key_3, bucket_start, amount_currency\n`\n\nfunction accountingListFilterParameters(\n query: ReturnType<typeof normalizeAiModelCallAccountingQuery>\n): readonly (string | null)[] {\n return [\n query.projectId,\n query.from.toISOString(),\n query.to.toISOString(),\n query.providerId ?? null,\n query.providerId ?? null,\n query.modelId ?? null,\n query.modelId ?? null,\n query.executionId ?? null,\n query.executionId ?? null,\n query.valuationStatus ?? null,\n query.valuationStatus ?? null,\n ]\n}\n\ninterface ValuationRow {\n readonly project_id: string\n readonly usage_record_id: string\n readonly status: \"rated\" | \"unpriceable\"\n readonly provider_id: string | null\n readonly model_id: string | null\n readonly currency: string | null\n readonly amount_nanos: string | null\n readonly reason: string | null\n readonly details: string\n readonly rated_at: string\n}\n\ninterface UsageRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly provider_id: string\n readonly requested_model_id: string\n readonly model_kind: AiModelCallUsageRecord[\"modelKind\"] | null\n readonly requested_reasoning: string | null\n readonly response_model_id: string | null\n readonly response_id: string\n readonly input_tokens: number | null\n readonly output_tokens: number | null\n readonly total_tokens: number | null\n readonly uncached_input_tokens: number | null\n readonly cache_read_input_tokens: number | null\n readonly cache_write_input_tokens: number | null\n readonly text_output_tokens: number | null\n readonly reasoning_output_tokens: number | null\n readonly audio_duration_ms: number | null\n readonly reporting_status: AiModelCallUsageRecord[\"usage\"][\"reportingStatus\"]\n readonly raw_usage: string | null\n readonly provider_ids: string | null\n readonly occurred_at: string\n readonly recorded_at: string\n}\n\ninterface JoinedRow extends UsageRow {\n readonly executor_kind: string | null\n readonly executor_id: string | null\n readonly primitive_id: string | null\n readonly attribution_kind: \"agent\" | \"subagent\" | \"workflowAgent\" | null\n readonly attribution_agent_step_id: string | null\n readonly attribution_agent_run_id: string | null\n readonly attribution_thread_id: string | null\n readonly attribution_parent_run_id: string | null\n readonly attribution_node_run_id: string | null\n readonly attribution_workflow_id: string | null\n readonly attribution_workflow_run_id: string | null\n readonly requester_group_ids: string\n readonly cost_status: ValuationRow[\"status\"] | null\n readonly cost_provider_id: string | null\n readonly cost_model_id: string | null\n readonly cost_currency: string | null\n readonly cost_amount_nanos: string | null\n readonly cost_reason: string | null\n readonly cost_details: string | null\n readonly cost_rated_at: string | null\n}\n\ninterface AggregateRow {\n readonly dimension: AiAccountingAggregateFragment[\"dimension\"]\n readonly key_1: string | null\n readonly key_2: string | null\n readonly key_3: string | null\n readonly bucket_start: string | null\n readonly amount_currency: string | null\n readonly model_call_count: string\n readonly reported_usage_call_count: string\n readonly complete_usage_call_count: string\n readonly input_tokens_count: string\n readonly input_tokens_sum: string | null\n readonly output_tokens_count: string\n readonly output_tokens_sum: string | null\n readonly uncached_input_tokens_count: string\n readonly uncached_input_tokens_sum: string | null\n readonly cache_read_input_tokens_count: string\n readonly cache_read_input_tokens_sum: string | null\n readonly cache_write_input_tokens_count: string\n readonly cache_write_input_tokens_sum: string | null\n readonly text_output_tokens_count: string\n readonly text_output_tokens_sum: string | null\n readonly reasoning_output_tokens_count: string\n readonly reasoning_output_tokens_sum: string | null\n readonly audio_duration_ms_count: string\n readonly audio_duration_ms_sum: string | null\n readonly rated_call_count: string\n readonly unpriceable_call_count: string\n readonly unvalued_call_count: string\n readonly amount_high: string | null\n readonly amount_middle: string | null\n readonly amount_low: string | null\n}\n\ninterface CountRow {\n readonly total: string\n}\n\ninterface SummaryRow {\n readonly execution_id: string\n readonly status: ValuationRow[\"status\"] | null\n readonly currency: string | null\n readonly amount_nanos: string | null\n}\n\nfunction aggregateFragmentFromRow(row: AggregateRow): AiAccountingAggregateFragment {\n const dimensionKeys =\n row.dimension === \"model\"\n ? { providerId: required(row.key_1), modelId: required(row.key_2) }\n : row.dimension === \"agent\"\n ? {\n agentKind: required(row.key_1) as \"agent\" | \"workflowAgent\",\n ...(row.key_1 === \"workflowAgent\"\n ? { workflowId: required(row.key_2), agentStepId: required(row.key_3) }\n : {}),\n }\n : row.dimension === \"workflow\"\n ? { workflowId: required(row.key_1) }\n : row.dimension === \"series\"\n ? { start: new Date(required(row.bucket_start)) }\n : {}\n return {\n dimension: row.dimension,\n ...dimensionKeys,\n modelCallCount: row.model_call_count,\n usage: {\n reportedCallCount: row.reported_usage_call_count,\n completeCallCount: row.complete_usage_call_count,\n inputTokens: meterFragment(row.input_tokens_count, row.input_tokens_sum),\n outputTokens: meterFragment(row.output_tokens_count, row.output_tokens_sum),\n uncachedInputTokens: meterFragment(\n row.uncached_input_tokens_count,\n row.uncached_input_tokens_sum\n ),\n cacheReadInputTokens: meterFragment(\n row.cache_read_input_tokens_count,\n row.cache_read_input_tokens_sum\n ),\n cacheWriteInputTokens: meterFragment(\n row.cache_write_input_tokens_count,\n row.cache_write_input_tokens_sum\n ),\n textOutputTokens: meterFragment(row.text_output_tokens_count, row.text_output_tokens_sum),\n reasoningOutputTokens: meterFragment(\n row.reasoning_output_tokens_count,\n row.reasoning_output_tokens_sum\n ),\n audioDurationMs: meterFragment(row.audio_duration_ms_count, row.audio_duration_ms_sum),\n },\n costs: {\n ...(row.amount_currency === null ||\n row.amount_high === null ||\n row.amount_middle === null ||\n row.amount_low === null\n ? {}\n : {\n amount: {\n currency: row.amount_currency,\n amountNanos: sqliteAggregateAmount(row),\n },\n }),\n ratedCallCount: row.rated_call_count,\n unpriceableCallCount: row.unpriceable_call_count,\n unvaluedCallCount: row.unvalued_call_count,\n },\n }\n}\n\nfunction meterFragment(presentCallCount: string, total: string | null) {\n return { presentCallCount, total }\n}\n\nfunction sqliteAggregateAmount(\n row: Pick<AggregateRow, \"amount_high\" | \"amount_middle\" | \"amount_low\">\n): string {\n return (\n BigInt(required(row.amount_high)) * 1_000_000_000_000n +\n BigInt(required(row.amount_middle)) * 1_000_000n +\n BigInt(required(row.amount_low))\n ).toString()\n}\n\nfunction accountingItemFromRow(row: JoinedRow): AiAccountingRecordSetItem {\n const usage = usageFromRow(row, parseStringArray(row.requester_group_ids))\n const cost = row.cost_status === null ? undefined : costFromJoinedRow(row)\n const attribution =\n row.attribution_kind === null\n ? directModelCallAttribution(row.executor_kind, row.executor_id, row.primitive_id)\n : row.attribution_kind === \"agent\"\n ? {\n kind: \"agent\" as const,\n agentRunId: required(row.attribution_agent_run_id),\n threadId: required(row.attribution_thread_id),\n }\n : row.attribution_kind === \"subagent\"\n ? {\n kind: \"subagent\" as const,\n subagentRunId: required(row.attribution_agent_run_id),\n parentRunId: required(row.attribution_parent_run_id),\n }\n : {\n kind: \"workflowAgent\" as const,\n agentStepId: required(row.attribution_agent_step_id),\n nodeRunId: required(row.attribution_node_run_id),\n workflowId: required(row.attribution_workflow_id),\n workflowRunId: required(row.attribution_workflow_run_id),\n }\n return {\n usage,\n ...(attribution ? { attribution } : {}),\n ...(cost ? { cost } : {}),\n }\n}\n\nfunction usageFromRow(row: UsageRow, requesterGroupIds: readonly string[]): AiModelCallUsageRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n requesterGroupIds,\n providerId: row.provider_id,\n ...(row.provider_ids === null\n ? {}\n : { providerIds: normalizeModelProviderIds(JSON.parse(row.provider_ids)) }),\n requestedModelId: row.requested_model_id,\n ...(row.model_kind === null ? {} : { modelKind: row.model_kind }),\n ...(row.requested_reasoning === null\n ? {}\n : { requestedReasoning: requestedReasoningFromRow(row.requested_reasoning) }),\n ...(row.response_model_id === null ? {} : { responseModelId: row.response_model_id }),\n responseId: row.response_id,\n usage: {\n ...(row.input_tokens === null ? {} : { inputTokens: row.input_tokens }),\n ...(row.output_tokens === null ? {} : { outputTokens: row.output_tokens }),\n ...(row.total_tokens === null ? {} : { totalTokens: row.total_tokens }),\n ...(row.uncached_input_tokens === null\n ? {}\n : { uncachedInputTokens: row.uncached_input_tokens }),\n ...(row.cache_read_input_tokens === null\n ? {}\n : { cacheReadInputTokens: row.cache_read_input_tokens }),\n ...(row.cache_write_input_tokens === null\n ? {}\n : { cacheWriteInputTokens: row.cache_write_input_tokens }),\n ...(row.text_output_tokens === null ? {} : { textOutputTokens: row.text_output_tokens }),\n ...(row.reasoning_output_tokens === null\n ? {}\n : { reasoningOutputTokens: row.reasoning_output_tokens }),\n ...(row.audio_duration_ms === null ? {} : { audioDurationMs: row.audio_duration_ms }),\n reportingStatus: row.reporting_status,\n },\n ...(row.raw_usage === null\n ? {}\n : { rawUsage: JSON.parse(row.raw_usage) as ReadonlyJsonObject }),\n occurredAt: new Date(row.occurred_at),\n recordedAt: new Date(row.recorded_at),\n }\n}\n\nfunction rowToCost(row: ValuationRow): AiModelCallCostRecord {\n return costRecord({\n projectId: row.project_id,\n usageId: row.usage_record_id,\n status: row.status,\n providerId: row.provider_id,\n modelId: row.model_id,\n currency: row.currency,\n amountNanos: row.amount_nanos,\n reason: row.reason,\n details: row.details,\n ratedAt: row.rated_at,\n })\n}\n\nfunction costFromJoinedRow(row: JoinedRow): AiModelCallCostRecord {\n return costRecord({\n projectId: row.project_id,\n usageId: row.id,\n status: required(row.cost_status),\n providerId: row.cost_provider_id,\n modelId: row.cost_model_id,\n currency: row.cost_currency,\n amountNanos: row.cost_amount_nanos,\n reason: row.cost_reason,\n details: required(row.cost_details),\n ratedAt: required(row.cost_rated_at),\n })\n}\n\nfunction costRecord(input: {\n projectId: string\n usageId: string\n status: ValuationRow[\"status\"]\n providerId: string | null\n modelId: string | null\n currency: string | null\n amountNanos: string | null\n reason: string | null\n details: string\n ratedAt: string\n}): AiModelCallCostRecord {\n const details = parseAiModelCallCostDetails(input.details)\n const priceSource =\n details.priceSource === undefined\n ? undefined\n : { ...details.priceSource, observedAt: new Date(details.priceSource.observedAt) }\n const base = {\n ...(details.estimate === undefined ? {} : { estimate: details.estimate }),\n projectId: input.projectId,\n usageRecordId: input.usageId,\n pricingContext: details.pricingContext,\n ratedAt: new Date(input.ratedAt),\n }\n if (input.status === \"rated\") {\n return normalizeAiModelCallCostRecord({\n ...base,\n status: \"rated\",\n billingIdentity: { providerId: required(input.providerId), modelId: required(input.modelId) },\n priceSource: required(priceSource),\n money: { currency: required(input.currency), amountNanos: required(input.amountNanos) },\n components: required(details.components),\n })\n }\n return normalizeAiModelCallCostRecord({\n ...base,\n status: \"unpriceable\",\n ...(input.providerId && input.modelId\n ? { billingIdentity: { providerId: input.providerId, modelId: input.modelId } }\n : {}),\n ...(priceSource === undefined ? {} : { priceSource }),\n reason: required(input.reason) as Extract<\n AiModelCallCostRecord,\n { status: \"unpriceable\" }\n >[\"reason\"],\n ...(details.missingMeters ? { missingMeters: details.missingMeters } : {}),\n })\n}\n\nfunction aggregateSummaryRows(\n ids: readonly string[],\n rows: readonly SummaryRow[]\n): AiCostSummary[] {\n const map = new Map(ids.map((id) => [id, accumulator()]))\n for (const row of rows) {\n const value = map.get(row.execution_id)\n if (!value) continue\n if (row.status === null) value.unvaluedCallCount += 1\n else if (row.status === \"unpriceable\") value.unpriceableCallCount += 1\n else {\n value.ratedCallCount += 1\n add(value.amounts, required(row.currency), required(row.amount_nanos))\n }\n }\n return ids.map((id) => finish(map.get(id)!))\n}\n\ninterface Accumulator {\n amounts: Map<string, bigint>\n ratedCallCount: number\n unpriceableCallCount: number\n unvaluedCallCount: number\n}\n\nfunction accumulator(): Accumulator {\n return {\n amounts: new Map(),\n ratedCallCount: 0,\n unpriceableCallCount: 0,\n unvaluedCallCount: 0,\n }\n}\n\nfunction finish(value: Accumulator): AiCostSummary {\n return {\n amounts: [...value.amounts]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),\n ratedCallCount: value.ratedCallCount,\n unpriceableCallCount: value.unpriceableCallCount,\n unvaluedCallCount: value.unvaluedCallCount,\n }\n}\n\nfunction add(amounts: Map<string, bigint>, currency: string, amount: string): void {\n amounts.set(currency, (amounts.get(currency) ?? 0n) + BigInt(amount))\n}\n\nfunction assertCostMatchesUsage(\n record: AiModelCallCostRecord,\n usage: AiModelCallUsageRecord\n): void {\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new AiCostStorageError(\n \"cost_mismatch\",\n `[SixbSqlite] AI valuation for usage '${record.usageRecordId}' does not match its usage record.`\n )\n }\n}\n\nfunction missingUsage(record: { projectId: string; usageRecordId: string }) {\n return new AiCostStorageError(\n \"missing_usage\",\n `[SixbSqlite] AI usage '${record.usageRecordId}' does not exist.`\n )\n}\n\nfunction parseStringArray(value: string): string[] {\n const parsed: unknown = JSON.parse(value)\n if (!Array.isArray(parsed) || parsed.some((item) => typeof item !== \"string\")) {\n throw new Error(\"[SixbSqlite] AI requester group ids are invalid.\")\n }\n return parsed\n}\n\nfunction assertNonBlank(value: string, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI ${field} must be nonblank.`)\n }\n}\n\nfunction safeSqlCount(value: string, field: string): number {\n if (!/^(0|[1-9]\\d*)$/.test(value)) {\n throw new Error(`[SixbSqlite] AI accounting ${field} is invalid.`)\n }\n const count = Number(value)\n if (!Number.isSafeInteger(count)) {\n throw new TypeError(`[Sixb] AI accounting ${field} exceeds the safe integer range.`)\n }\n return count\n}\n\nfunction required<T>(value: T | null | undefined): T {\n if (value === null || value === undefined) {\n throw new Error(\"[SixbSqlite] AI valuation column is unexpectedly null.\")\n }\n return value\n}\n",
18
19
  "import {\n type AiModelCallGroupRow,\n aiModelCallGroupFragmentFromRow,\n buildAiModelCallGroupsFromFragments,\n normalizeAiModelCallAccountingQuery,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport type { ListAiModelCallGroupsInput, ListAiModelCallGroupsResult } from \"@sixb/core/storage\"\nimport type { SqliteStoreConnection } from \"./transactions\"\n\n/** Paginate initiating executions, then aggregate their matching calls without loading usage payloads. */\nexport async function listAiModelCallGroups(\n connection: SqliteStoreConnection,\n input: ListAiModelCallGroupsInput\n): Promise<ListAiModelCallGroupsResult> {\n const query = normalizeAiModelCallAccountingQuery(input)\n const parameters = [\n query.projectId,\n query.from.toISOString(),\n query.to.toISOString(),\n query.providerId ?? null,\n query.modelId ?? null,\n query.valuationStatus ?? null,\n ]\n const count = connection.db.query(COUNT_SQL).get(...parameters) as { total: string }\n const rows = connection.db\n .query(PAGE_SQL)\n .all(...parameters, query.limit, query.offset) as AiModelCallGroupRow[]\n const total = Number(count?.total)\n if (!Number.isSafeInteger(total) || total < 0)\n throw new RangeError(\"[Sixb] Invalid model-call group count.\")\n const items = buildAiModelCallGroupsFromFragments(rows.map(aiModelCallGroupFragmentFromRow))\n return { items, total, hasMore: query.offset + items.length < total }\n}\n\nconst FILTERED_SQL = `\nWITH filtered AS (\n SELECT COALESCE(root_agent.execution_id, usage.execution_id) AS root_execution_id,\n usage.execution_id, usage.provider_id, usage.requested_model_id, usage.occurred_at,\n usage.total_tokens,\n execution.executor_kind, execution.executor_id, execution.authority_primitive_id AS primitive_id,\n COALESCE(cost.status, 'unvalued') AS valuation_status,\n cost.currency AS amount_currency, cost.amount_nanos,\n root_agent.id AS root_agent_run_id,\n root_agent.thread_id AS root_thread_id,\n direct_agent.kind AS direct_kind,\n direct_agent.id AS direct_run_id,\n direct_agent.parent_run_id AS parent_run_id,\n workflow_node.node_id AS workflow_agent_step_id,\n workflow_agent.node_run_id AS workflow_node_run_id,\n workflow_node.workflow_id AS workflow_id,\n workflow_node.workflow_run_id AS workflow_run_id\n FROM ai_model_call_usage AS usage\n JOIN executions AS execution ON execution.project_id = usage.project_id AND execution.id = usage.execution_id\n LEFT JOIN agent_runs AS direct_agent\n ON direct_agent.project_id = usage.project_id AND direct_agent.execution_id = usage.execution_id\n LEFT JOIN agent_runs AS root_agent\n ON root_agent.project_id = usage.project_id\n AND root_agent.id = COALESCE(direct_agent.parent_run_id, direct_agent.id)\n LEFT JOIN workflow_agent_node_runs AS workflow_agent\n ON workflow_agent.project_id = usage.project_id AND workflow_agent.execution_id = usage.execution_id\n LEFT JOIN workflow_node_runs AS workflow_node\n ON workflow_node.project_id = workflow_agent.project_id AND workflow_node.id = workflow_agent.node_run_id\n LEFT JOIN ai_model_call_valuations AS cost\n ON cost.project_id = usage.project_id AND cost.usage_record_id = usage.id\n WHERE usage.project_id = ?1\n AND usage.occurred_at >= ?2\n AND usage.occurred_at < ?3\n AND (?4 IS NULL OR usage.provider_id = ?4)\n AND (?5 IS NULL OR usage.requested_model_id = ?5)\n AND (?6 IS NULL OR COALESCE(cost.status, 'unvalued') = ?6)\n), roots AS (\n SELECT root_execution_id, MAX(occurred_at) AS last_call_at\n FROM filtered GROUP BY root_execution_id\n)\n`\nconst COUNT_SQL = `${FILTERED_SQL} SELECT CAST(COUNT(*) AS TEXT) AS total FROM roots`\nconst PAGE_SQL = `${FILTERED_SQL}, page AS (\n SELECT root_execution_id FROM roots\n ORDER BY last_call_at DESC, root_execution_id ASC LIMIT ?7 OFFSET ?8\n)\nSELECT filtered.root_execution_id, execution_id, provider_id, requested_model_id,\n MIN(occurred_at) AS first_call_at, MAX(occurred_at) AS last_call_at,\n CAST(COUNT(*) AS TEXT) AS call_count,\n CAST(COUNT(total_tokens) AS TEXT) AS token_count,\n CAST(SUM(total_tokens) AS TEXT) AS total_tokens,\n valuation_status, amount_currency,\n CAST(SUM(amount_nanos / 1000000000000) AS TEXT) AS amount_high,\n CAST(SUM((amount_nanos / 1000000) % 1000000) AS TEXT) AS amount_middle,\n CAST(SUM(amount_nanos % 1000000) AS TEXT) AS amount_low,\n MAX(root_agent_run_id) AS root_agent_run_id,\n MAX(executor_kind) AS executor_kind, MAX(executor_id) AS executor_id, MAX(primitive_id) AS primitive_id,\n MAX(root_thread_id) AS root_thread_id,\n MAX(direct_kind) AS direct_kind,\n MAX(direct_run_id) AS direct_run_id,\n MAX(parent_run_id) AS parent_run_id,\n MAX(workflow_agent_step_id) AS workflow_agent_step_id,\n MAX(workflow_node_run_id) AS workflow_node_run_id,\n MAX(workflow_id) AS workflow_id,\n MAX(workflow_run_id) AS workflow_run_id\nFROM filtered JOIN page ON page.root_execution_id = filtered.root_execution_id\nGROUP BY filtered.root_execution_id, execution_id, provider_id, requested_model_id,\n valuation_status, amount_currency\n`\n",
19
20
  "import { assertAiUsageExecutionId, normalizeAiModelCallRecord } from \"@sixb/core/internal/storage\"\nimport { isModelReasoning, normalizeModelProviderIds } from \"@sixb/core/models\"\nimport type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiModelCallUsageInput,\n type AiModelCallUsageRecord,\n type AiUsageExecutionSummary,\n type AiUsageStorage,\n AiUsageStorageError,\n aggregateAiModelCallUsage,\n type GetLatestAiModelCallForExecutionInput,\n type RecordAiModelCallInput,\n type RecordAiModelCallResult,\n type SummarizeAiUsageExecutionInput,\n type SummarizeAiUsageExecutionsInput,\n} from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteAiUsageStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite-backed append-only model-call usage ledger. */\nexport class SqliteAiUsageStorage implements AiUsageStorage {\n private readonly connection: SqliteStoreConnection\n\n constructor(options: SqliteAiUsageStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n }\n\n async recordModelCall(input: RecordAiModelCallInput): Promise<RecordAiModelCallResult> {\n const record = normalizeAiModelCallRecord(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.findByIdempotencyKey(record)\n if (existing) return { record: existing, created: false }\n this.assertExecutionExists(record.projectId, record.executionId)\n\n try {\n this.insertRecord(record)\n } catch (error) {\n if (!isUniqueConstraintError(error)) throw error\n\n const concurrent = this.findByIdempotencyKey(record)\n if (concurrent) return { record: concurrent, created: false }\n throw new AiUsageStorageError(\n \"duplicate_id\",\n `[SixbSqlite] AI usage record '${record.id}' already exists for project '${record.projectId}'.`\n )\n }\n\n for (const groupId of record.requesterGroupIds) {\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_usage_groups (\n project_id, usage_record_id, group_id, occurred_at\n ) VALUES (?, ?, ?, ?)\n `\n )\n .run(record.projectId, record.id, groupId, record.occurredAt.toISOString())\n }\n\n return { record: this.requireById(record.projectId, record.id), created: true }\n })\n }\n\n async summarizeExecution(\n input: SummarizeAiUsageExecutionInput\n ): Promise<AiUsageExecutionSummary> {\n const [summary] = await this.summarizeExecutions({\n projectId: input.projectId,\n executionIds: [input.executionId],\n })\n return summary!\n }\n\n async getLatestForExecution(\n input: GetLatestAiModelCallForExecutionInput\n ): Promise<AiModelCallUsageRecord | null> {\n assertNonBlankProjectId(input.projectId)\n assertAiUsageExecutionId(input.executionId)\n const row = this.connection.db\n .query(\n `\n SELECT * FROM ai_model_call_usage\n WHERE project_id = ? AND execution_id = ?\n ORDER BY occurred_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(input.projectId, input.executionId) as AiUsageRow | null\n return row ? this.rowToRecord(row) : null\n }\n\n async summarizeExecutions(\n input: SummarizeAiUsageExecutionsInput\n ): Promise<readonly AiUsageExecutionSummary[]> {\n assertNonBlankProjectId(input.projectId)\n for (const executionId of input.executionIds) assertAiUsageExecutionId(executionId)\n if (input.executionIds.length === 0) return []\n\n const rows = this.executionRows(input)\n return aggregateExecutionRows(input.executionIds, rows)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private insertRecord(record: AiModelCallUsageRecord): void {\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_usage (\n project_id,\n id,\n execution_id,\n attempt,\n call_id,\n provider_id,\n provider_ids,\n requested_model_id,\n model_kind,\n requested_reasoning,\n response_model_id,\n response_id,\n input_tokens,\n output_tokens,\n total_tokens,\n uncached_input_tokens,\n cache_read_input_tokens,\n cache_write_input_tokens,\n text_output_tokens,\n reasoning_output_tokens,\n audio_duration_ms,\n reporting_status,\n raw_usage,\n occurred_at,\n recorded_at\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.attempt,\n record.callId,\n record.providerId,\n record.providerIds === undefined ? null : JSON.stringify(record.providerIds),\n record.requestedModelId,\n record.modelKind ?? null,\n record.requestedReasoning === undefined ? null : JSON.stringify(record.requestedReasoning),\n record.responseModelId ?? null,\n record.responseId,\n record.usage.inputTokens ?? null,\n record.usage.outputTokens ?? null,\n record.usage.totalTokens ?? null,\n record.usage.uncachedInputTokens ?? null,\n record.usage.cacheReadInputTokens ?? null,\n record.usage.cacheWriteInputTokens ?? null,\n record.usage.textOutputTokens ?? null,\n record.usage.reasoningOutputTokens ?? null,\n record.usage.audioDurationMs ?? null,\n record.usage.reportingStatus,\n record.rawUsage === undefined ? null : JSON.stringify(record.rawUsage),\n record.occurredAt.toISOString(),\n record.recordedAt.toISOString()\n )\n }\n\n private findByIdempotencyKey(\n record: Pick<\n AiModelCallUsageRecord,\n \"projectId\" | \"executionId\" | \"attempt\" | \"callId\" | \"responseId\"\n >\n ): AiModelCallUsageRecord | null {\n const row = this.connection.db\n .query(\n `\n SELECT * FROM ai_model_call_usage\n WHERE project_id = ?\n AND execution_id = ?\n AND attempt = ?\n AND call_id = ?\n AND response_id = ?\n `\n )\n .get(\n record.projectId,\n record.executionId,\n record.attempt,\n record.callId,\n record.responseId\n ) as AiUsageRow | null\n return row ? this.rowToRecord(row) : null\n }\n\n private requireById(projectId: string, id: string): AiModelCallUsageRecord {\n const row = this.connection.db\n .query(\"SELECT * FROM ai_model_call_usage WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AiUsageRow | null\n if (!row) throw new Error(`[SixbSqlite] AI usage record '${id}' disappeared after insert.`)\n return this.rowToRecord(row)\n }\n\n private rowToRecord(row: AiUsageRow): AiModelCallUsageRecord {\n const groupRows = this.connection.db\n .query(\n `\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = ? AND usage_record_id = ?\n ORDER BY group_id\n `\n )\n .all(row.project_id, row.id) as Array<{ group_id: string }>\n\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n requesterGroupIds: groupRows.map((group) => group.group_id),\n providerId: row.provider_id,\n ...(row.provider_ids === null\n ? {}\n : { providerIds: normalizeModelProviderIds(JSON.parse(row.provider_ids)) }),\n requestedModelId: row.requested_model_id,\n ...(row.model_kind === null ? {} : { modelKind: row.model_kind }),\n ...(row.requested_reasoning === null\n ? {}\n : { requestedReasoning: requestedReasoningFromRow(row.requested_reasoning) }),\n ...(row.response_model_id === null ? {} : { responseModelId: row.response_model_id }),\n responseId: row.response_id,\n usage: {\n ...usageFromRow(row),\n ...(row.total_tokens === null ? {} : { totalTokens: row.total_tokens }),\n reportingStatus: row.reporting_status,\n },\n ...(row.raw_usage === null\n ? {}\n : { rawUsage: JSON.parse(row.raw_usage) as ReadonlyJsonObject }),\n occurredAt: new Date(row.occurred_at),\n recordedAt: new Date(row.recorded_at),\n }\n }\n\n private executionRows(input: SummarizeAiUsageExecutionsInput): AiUsageRow[] {\n const requested = JSON.stringify([...new Set(input.executionIds)])\n return this.connection.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT value AS execution_id\n FROM json_each(?)\n )\n SELECT usage.* FROM requested\n JOIN ai_model_call_usage AS usage\n ON usage.project_id = ?\n AND usage.execution_id = requested.execution_id\n `\n )\n .all(requested, input.projectId) as AiUsageRow[]\n }\n\n private assertExecutionExists(projectId: string, executionId: string): void {\n const execution = this.connection.db\n .query(\"SELECT 1 FROM executions WHERE project_id = ? AND id = ?\")\n .get(projectId, executionId)\n if (execution) return\n throw new AiUsageStorageError(\n \"missing_execution\",\n `[SixbSqlite] AI usage execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\ninterface AiUsageRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly provider_id: string\n readonly provider_ids: string | null\n readonly requested_model_id: string\n readonly model_kind: AiModelCallUsageRecord[\"modelKind\"] | null\n readonly requested_reasoning: string | null\n readonly response_model_id: string | null\n readonly response_id: string\n readonly input_tokens: number | null\n readonly output_tokens: number | null\n readonly total_tokens: number | null\n readonly uncached_input_tokens: number | null\n readonly cache_read_input_tokens: number | null\n readonly cache_write_input_tokens: number | null\n readonly text_output_tokens: number | null\n readonly reasoning_output_tokens: number | null\n readonly audio_duration_ms: number | null\n readonly reporting_status: AiModelCallUsageRecord[\"usage\"][\"reportingStatus\"]\n readonly raw_usage: string | null\n readonly occurred_at: string\n readonly recorded_at: string\n}\n\nfunction aggregateExecutionRows(\n executionIds: readonly string[],\n rows: readonly AiUsageRow[]\n): readonly AiUsageExecutionSummary[] {\n const usageByExecutionId = new Map<string, AiModelCallUsageInput[]>()\n for (const executionId of executionIds) usageByExecutionId.set(executionId, [])\n for (const row of rows) {\n usageByExecutionId.get(row.execution_id)?.push(usageFromRow(row))\n }\n return executionIds.map((executionId) => {\n const usages = usageByExecutionId.get(executionId) ?? []\n return {\n modelCallCount: usages.length,\n usage: aggregateAiModelCallUsage(usages),\n }\n })\n}\n\nfunction usageFromRow(row: AiUsageRow): AiModelCallUsageInput {\n return {\n ...(row.input_tokens === null ? {} : { inputTokens: row.input_tokens }),\n ...(row.output_tokens === null ? {} : { outputTokens: row.output_tokens }),\n ...(row.uncached_input_tokens === null\n ? {}\n : { uncachedInputTokens: row.uncached_input_tokens }),\n ...(row.cache_read_input_tokens === null\n ? {}\n : { cacheReadInputTokens: row.cache_read_input_tokens }),\n ...(row.cache_write_input_tokens === null\n ? {}\n : { cacheWriteInputTokens: row.cache_write_input_tokens }),\n ...(row.text_output_tokens === null ? {} : { textOutputTokens: row.text_output_tokens }),\n ...(row.reasoning_output_tokens === null\n ? {}\n : { reasoningOutputTokens: row.reasoning_output_tokens }),\n ...(row.audio_duration_ms === null ? {} : { audioDurationMs: row.audio_duration_ms }),\n }\n}\n\nexport function requestedReasoningFromRow(\n value: string\n): AiModelCallUsageRecord[\"requestedReasoning\"] {\n const parsed: unknown = JSON.parse(value)\n if (!isModelReasoning(parsed)) {\n throw new Error(\"[SixbSqlite] Stored AI usage requested reasoning is invalid.\")\n }\n return parsed\n}\n\nfunction assertNonBlankProjectId(projectId: string): void {\n if (typeof projectId !== \"string\" || projectId.trim().length === 0) {\n throw new TypeError(\"[Sixb] AI usage projectId must be nonblank.\")\n }\n}\n",
20
21
  "import type { SQLQueryBindings } from \"bun:sqlite\"\nimport {\n type AiLimitAccountingEntry,\n aiLimitAmountKey,\n aiLimitMeterApplies,\n aiLimitQuantityFromAmount,\n aiLimitReservationBuckets,\n aiLimitReservationRequestKey,\n aiLimitReservationRequestMatches,\n aiLimitSubjectFromParts,\n aiLimitSubjectKey,\n aiLimitSubjectParts,\n aiLimitSubjectsFromAccountingEntry,\n assertAiLimitAccountingMatchesReservation,\n assertNonBlank,\n cloneValidDate,\n type NormalizedAiLimitAmount,\n normalizeAiLimitAmount,\n normalizeAiLimitQuantities,\n normalizeAiModelCallReservationIdentity,\n normalizeCreateAiLimitPolicy,\n normalizeReserveAiModelCall,\n normalizeUpdateAiLimitPolicy,\n resolveAiLimitActual,\n} from \"@sixb/core/internal/ai-limit-storage-provider\"\nimport type {\n AiLimitPeriod,\n AiLimitPolicy,\n AiLimitPolicyStatus,\n AiLimitQuantity,\n AiLimitReservationBucket,\n AiLimitStorage,\n AiLimitSubject,\n AiModelCallReservation,\n CreateAiLimitPolicyInput,\n DeleteAiLimitPolicyInput,\n GetAiLimitPolicyInput,\n ListAiLimitPoliciesInput,\n ListAiLimitPolicyStatusesInput,\n MarkAiModelCallReservationUnknownInput,\n ReconcileAiModelCallInput,\n RecordAiModelCallLimitActualsInput,\n ReserveAiModelCallInput,\n ReserveAiModelCallResult,\n UpdateAiLimitPolicyInput,\n} from \"@sixb/core/storage\"\nimport { AiLimitStorageError, aiLimitCalendarMonth } from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteAiLimitStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite-backed editable AI limits and atomic model-call reservations. */\nexport class SqliteAiLimitStorage implements AiLimitStorage {\n private readonly connection: SqliteStoreConnection\n\n constructor(options: SqliteAiLimitStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n }\n\n async createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n const policy = normalizeCreateAiLimitPolicy(input)\n return runImmediateTransaction(this.connection.db, () => {\n const subject = aiLimitSubjectParts(policy.subject)\n const limit = normalizeAiLimitAmount(policy.limit)\n try {\n this.connection.db\n .query(\n `\n INSERT INTO ai_usage_limits (\n project_id, id, subject_type, subject_id, meter, currency, limit_amount,\n period_kind, enabled, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n policy.projectId,\n policy.id,\n subject.type,\n subject.id,\n limit.meter,\n limit.currency,\n limit.amount.toString(),\n policy.period,\n policy.enabled ? 1 : 0,\n policy.createdAt.toISOString(),\n policy.updatedAt.toISOString()\n )\n } catch (error) {\n if (!isConstraintError(error)) throw error\n throw duplicatePolicy(policy)\n }\n return this.requirePolicy(policy.projectId, policy.id)\n })\n }\n\n async updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n const update = normalizeUpdateAiLimitPolicy(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.requirePolicy(update.projectId, update.id)\n if (update.limit !== undefined) assertSameDimension(existing.limit, update.limit)\n const limit = normalizeAiLimitAmount(update.limit ?? existing.limit)\n this.connection.db\n .query(\n `\n UPDATE ai_usage_limits\n SET limit_amount = ?, enabled = ?, updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n limit.amount.toString(),\n (update.enabled ?? existing.enabled) ? 1 : 0,\n update.updatedAt.toISOString(),\n update.projectId,\n update.id\n )\n return this.requirePolicy(update.projectId, update.id)\n })\n }\n\n async deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean> {\n validatePolicyIdentity(input)\n return runImmediateTransaction(this.connection.db, () => {\n const result = this.connection.db\n .query(\"DELETE FROM ai_usage_limits WHERE project_id = ? AND id = ?\")\n .run(input.projectId, input.id)\n return result.changes > 0\n })\n }\n\n async getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null> {\n validatePolicyIdentity(input)\n const row = this.connection.db\n .query(\"SELECT * FROM ai_usage_limits WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as AiLimitPolicyRow | null\n return row ? policyFromRow(row) : null\n }\n\n async listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]> {\n assertNonBlank(input.projectId, \"projectId\")\n return this.policyRows(input.projectId, input.includeDisabled ?? false).map(policyFromRow)\n }\n\n async listPolicyStatuses(\n input: ListAiLimitPolicyStatusesInput\n ): Promise<readonly AiLimitPolicyStatus[]> {\n assertNonBlank(input.projectId, \"projectId\")\n const period = aiLimitCalendarMonth(input.at ?? new Date())\n const existingGroups =\n input.existingGroupIds === undefined ? undefined : new Set(input.existingGroupIds)\n return runImmediateTransaction(this.connection.db, () =>\n this.policyRows(input.projectId, input.includeDisabled ?? false).map((row) =>\n this.statusForPolicy(policyFromRow(row), period, existingGroups)\n )\n )\n }\n\n async reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult> {\n const request = normalizeReserveAiModelCall(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.findReservation(request.identity)\n if (existing) {\n if (!aiLimitReservationRequestMatches(existing, request)) {\n throw new AiLimitStorageError(\n \"reservation_conflict\",\n `[SixbSqlite] AI model-call reservation '${input.callId}' was replayed with different subjects, estimates, or period.`\n )\n }\n if (existing.state !== \"active\") {\n return { status: \"terminal\", reservation: existing, created: false }\n }\n return { status: \"reserved\", reservation: existing, created: false }\n }\n this.assertExecutionExists(request.identity.projectId, request.identity.executionId)\n\n const subjectKeys = new Set(request.subjects.map(aiLimitSubjectKey))\n const estimates = new Map(\n request.estimates.map((quantity) => {\n const amount = normalizeAiLimitAmount(quantity)\n return [aiLimitAmountKey(amount), amount] as const\n })\n )\n const enabledPolicies = this.policyRows(request.identity.projectId, false).map(policyFromRow)\n const exhaustedPolicies: AiLimitPolicyStatus[] = []\n const unavailablePolicies: AiLimitPolicyStatus[] = []\n const unavailableReasons = new Set<\"missingEstimate\" | \"incompleteAccounting\">()\n for (const policy of enabledPolicies) {\n if (\n !subjectKeys.has(aiLimitSubjectKey(policy.subject)) ||\n !aiLimitMeterApplies(policy.limit.meter, request.modelKind)\n ) {\n continue\n }\n const limit = normalizeAiLimitAmount(policy.limit)\n const estimate = estimates.get(aiLimitAmountKey(limit))\n const status = this.statusForPolicy(policy, request.period)\n if (!estimate || status.accountingStatus === \"unavailable\") {\n unavailablePolicies.push(status)\n if (!estimate) unavailableReasons.add(\"missingEstimate\")\n if (status.accountingStatus === \"unavailable\") {\n unavailableReasons.add(\"incompleteAccounting\")\n }\n continue\n }\n const consumption = status.consumption\n const consumed =\n normalizeAiLimitAmount(consumption.actual).amount +\n normalizeAiLimitAmount(consumption.reserved).amount +\n normalizeAiLimitAmount(consumption.unknown).amount\n if (consumed + estimate.amount > limit.amount) exhaustedPolicies.push(status)\n }\n if (unavailablePolicies.length > 0) {\n unavailablePolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"unavailable\",\n unavailablePolicies,\n reasons: [...unavailableReasons].sort(),\n }\n }\n if (exhaustedPolicies.length > 0) {\n exhaustedPolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"denied\",\n exhaustedPolicies,\n resetAt: new Date(\n Math.min(...exhaustedPolicies.map((status) => status.period.resetAt.getTime()))\n ),\n }\n }\n\n const buckets = aiLimitReservationBuckets(\n enabledPolicies,\n request.subjects,\n request.estimates,\n request.modelKind\n )\n if (buckets.length === 0) return { status: \"notRequired\" }\n for (const bucket of buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n this.changeCounters(\n request.identity.projectId,\n bucket.subject,\n amount,\n request.period,\n { reserved: amount.amount },\n request.reservedAt\n )\n }\n const reservation: AiModelCallReservation = {\n ...request.identity,\n buckets,\n requestKey: aiLimitReservationRequestKey(request),\n period: request.period,\n state: \"active\",\n reservedAt: request.reservedAt,\n updatedAt: new Date(request.reservedAt),\n }\n this.insertReservation(reservation)\n return { status: \"reserved\", reservation: structuredClone(reservation), created: true }\n })\n }\n\n async recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void> {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), \"recordedAt\")\n runImmediateTransaction(this.connection.db, () => {\n const entry = this.requireAccountingEntry(input.projectId, input.usageRecordId)\n const period = aiLimitCalendarMonth(entry.occurredAt)\n for (const subjectValue of aiLimitSubjectsFromAccountingEntry(entry)) {\n const subject = aiLimitSubjectParts(subjectValue)\n const rows = this.connection.db\n .query(\n `\n SELECT meter, currency, actual_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND period_start = ?\n `\n )\n .all(\n input.projectId,\n subject.type,\n subject.id,\n period.start.toISOString()\n ) as AiLimitActualStateRow[]\n for (const row of rows) {\n const actual = resolveAiLimitActual([entry], row)\n this.connection.db\n .query(\n `\n UPDATE ai_usage_limit_periods\n SET actual_amount = ?, accounting_status = ?, updated_at = ?\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND meter = ? AND currency = ? AND period_start = ?\n `\n )\n .run(\n (BigInt(row.actual_amount) + actual.amount).toString(),\n row.accounting_status === \"unavailable\" || actual.accountingStatus === \"unavailable\"\n ? \"unavailable\"\n : \"complete\",\n recordedAt.toISOString(),\n input.projectId,\n subject.type,\n subject.id,\n row.meter,\n row.currency,\n period.start.toISOString()\n )\n }\n }\n })\n }\n\n async reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation> {\n const identity = normalizeAiModelCallReservationIdentity(input)\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const reconciledAt = cloneValidDate(input.reconciledAt ?? new Date(), \"reconciledAt\")\n return runImmediateTransaction(this.connection.db, () => {\n const reservation = this.findReservation(identity)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"reconciled\") {\n if (reservation.usageRecordId === input.usageRecordId) {\n return reservation\n }\n throw reconciliationConflict(identity.callId)\n }\n const accounting = this.requireAccountingEntry(identity.projectId, input.usageRecordId)\n assertAiLimitAccountingMatchesReservation(reservation, accounting)\n this.reconcileEstimateCounters(reservation, accounting, reconciledAt)\n const reconciled: AiModelCallReservation = {\n ...reservation,\n state: \"reconciled\",\n usageRecordId: input.usageRecordId,\n updatedAt: reconciledAt,\n }\n this.updateReservation(reconciled)\n return structuredClone(reconciled)\n })\n }\n\n async markReservationUnknown(\n input: MarkAiModelCallReservationUnknownInput\n ): Promise<AiModelCallReservation> {\n const identity = normalizeAiModelCallReservationIdentity(input)\n const markedAt = cloneValidDate(input.markedAt ?? new Date(), \"markedAt\")\n return runImmediateTransaction(this.connection.db, () => {\n const reservation = this.findReservation(identity)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"unknown\") return reservation\n if (reservation.state !== \"active\") throw invalidState(reservation, \"mark unknown\")\n this.moveEstimateCounters(reservation, { reserved: -1n, unknown: 1n }, markedAt)\n const unknown = { ...reservation, state: \"unknown\" as const, updatedAt: markedAt }\n this.updateReservation(unknown)\n return structuredClone(unknown)\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private policyRows(projectId: string, includeDisabled: boolean): AiLimitPolicyRow[] {\n return this.connection.db\n .query(\n `\n SELECT * FROM ai_usage_limits\n WHERE project_id = ? AND (? = 1 OR enabled = 1)\n ORDER BY id\n `\n )\n .all(projectId, includeDisabled ? 1 : 0) as AiLimitPolicyRow[]\n }\n\n private requirePolicy(projectId: string, id: string): AiLimitPolicy {\n const row = this.connection.db\n .query(\"SELECT * FROM ai_usage_limits WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AiLimitPolicyRow | null\n if (row) return policyFromRow(row)\n throw new AiLimitStorageError(\n \"missing_policy\",\n `[SixbSqlite] AI limit policy '${id}' does not exist in project '${projectId}'.`\n )\n }\n\n private statusForPolicy(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n existingGroups?: ReadonlySet<string>\n ): AiLimitPolicyStatus {\n const subject = aiLimitSubjectParts(policy.subject)\n const limit = normalizeAiLimitAmount(policy.limit)\n let row = this.connection.db\n .query(\n `\n SELECT actual_amount, reserved_amount, unknown_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND meter = ? AND currency = ? AND period_start = ?\n `\n )\n .get(\n policy.projectId,\n subject.type,\n subject.id,\n limit.meter,\n limit.currency,\n period.start.toISOString()\n ) as AiLimitPeriodStateRow | null\n // Re-read incomplete accounting inside the transaction; retain in-flight estimates.\n if (!row || row.accounting_status === \"unavailable\") {\n const actual = resolveAiLimitActual(this.accountingEntries(policy, period), limit)\n row = {\n actual_amount: actual.amount.toString(),\n reserved_amount: row?.reserved_amount ?? \"0\",\n unknown_amount: row?.unknown_amount ?? \"0\",\n accounting_status: actual.accountingStatus,\n }\n this.connection.db\n .query(\n `\n INSERT INTO ai_usage_limit_periods (\n project_id, subject_type, subject_id, meter, currency, period_start, period_end,\n actual_amount, reserved_amount, unknown_amount, accounting_status, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, '0', '0', ?, ?)\n ON CONFLICT (project_id, subject_type, subject_id, meter, currency, period_start)\n DO UPDATE SET\n actual_amount = excluded.actual_amount,\n accounting_status = excluded.accounting_status,\n updated_at = excluded.updated_at\n `\n )\n .run(\n policy.projectId,\n subject.type,\n subject.id,\n limit.meter,\n limit.currency,\n period.start.toISOString(),\n period.end.toISOString(),\n row.actual_amount,\n row.accounting_status,\n new Date().toISOString()\n )\n }\n return policyStatus(policy, period, row, existingGroups)\n }\n\n private changeCounters(\n projectId: string,\n subjectValue: AiLimitSubject,\n amount: NormalizedAiLimitAmount,\n period: AiLimitPeriod,\n changes: { readonly reserved?: bigint; readonly unknown?: bigint },\n updatedAt: Date\n ): void {\n const subject = aiLimitSubjectParts(subjectValue)\n const row = this.connection.db\n .query(\n `\n SELECT actual_amount, reserved_amount, unknown_amount, accounting_status\n FROM ai_usage_limit_periods\n WHERE project_id = ? AND subject_type = ? AND subject_id = ?\n AND meter = ? AND currency = ? AND period_start = ?\n `\n )\n .get(\n projectId,\n subject.type,\n subject.id,\n amount.meter,\n amount.currency,\n period.start.toISOString()\n ) as AiLimitPeriodStateRow | null\n const reserved = BigInt(row?.reserved_amount ?? \"0\") + (changes.reserved ?? 0n)\n const unknown = BigInt(row?.unknown_amount ?? \"0\") + (changes.unknown ?? 0n)\n if (reserved < 0n || unknown < 0n) {\n throw new Error(\"[SixbSqlite] AI limit period counter became negative.\")\n }\n this.connection.db\n .query(\n `\n INSERT INTO ai_usage_limit_periods (\n project_id, subject_type, subject_id, meter, currency, period_start, period_end,\n actual_amount, reserved_amount, unknown_amount, accounting_status, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, subject_type, subject_id, meter, currency, period_start)\n DO UPDATE SET\n period_end = excluded.period_end,\n actual_amount = excluded.actual_amount,\n reserved_amount = excluded.reserved_amount,\n unknown_amount = excluded.unknown_amount,\n accounting_status = excluded.accounting_status,\n updated_at = excluded.updated_at\n `\n )\n .run(\n projectId,\n subject.type,\n subject.id,\n amount.meter,\n amount.currency,\n period.start.toISOString(),\n period.end.toISOString(),\n row?.actual_amount ?? \"0\",\n reserved.toString(),\n unknown.toString(),\n row?.accounting_status ?? \"complete\",\n updatedAt.toISOString()\n )\n }\n\n private moveEstimateCounters(\n reservation: AiModelCallReservation,\n directions: { readonly reserved?: bigint; readonly unknown?: bigint },\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n this.changeCounters(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n {\n ...(directions.reserved === undefined\n ? {}\n : { reserved: directions.reserved * amount.amount }),\n ...(directions.unknown === undefined\n ? {}\n : { unknown: directions.unknown * amount.amount }),\n },\n updatedAt\n )\n }\n }\n\n private reconcileEstimateCounters(\n reservation: AiModelCallReservation,\n entry: AiLimitAccountingEntry,\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const actual = resolveAiLimitActual([entry], amount)\n if (actual.accountingStatus === \"complete\") {\n this.changeCounters(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n reservation.state === \"active\"\n ? { reserved: -amount.amount }\n : { unknown: -amount.amount },\n updatedAt\n )\n } else if (reservation.state === \"active\") {\n this.changeCounters(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period,\n { reserved: -amount.amount, unknown: amount.amount },\n updatedAt\n )\n }\n }\n }\n\n private insertReservation(reservation: AiModelCallReservation): void {\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_reservations (\n project_id, execution_id, attempt, call_id, buckets, request_key,\n period_start, period_end, state, usage_record_id, reserved_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(...reservationSqlValues(reservation))\n }\n\n private updateReservation(reservation: AiModelCallReservation): void {\n this.connection.db\n .query(\n `\n UPDATE ai_model_call_reservations\n SET state = ?, usage_record_id = ?, updated_at = ?\n WHERE project_id = ? AND execution_id = ? AND attempt = ? AND call_id = ?\n `\n )\n .run(\n reservation.state,\n reservation.usageRecordId ?? null,\n reservation.updatedAt.toISOString(),\n reservation.projectId,\n reservation.executionId,\n reservation.attempt,\n reservation.callId\n )\n }\n\n private findReservation(input: {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n }): AiModelCallReservation | null {\n const row = this.connection.db\n .query(\n `\n SELECT * FROM ai_model_call_reservations\n WHERE project_id = ? AND execution_id = ? AND attempt = ? AND call_id = ?\n `\n )\n .get(\n input.projectId,\n input.executionId,\n input.attempt,\n input.callId\n ) as AiModelCallReservationRow | null\n return row ? reservationFromRow(row) : null\n }\n\n private accountingEntries(\n policy: AiLimitPolicy,\n period: AiLimitPeriod\n ): readonly AiLimitAccountingEntry[] {\n const subject = aiLimitSubjectParts(policy.subject)\n const rows = this.connection.db\n .query(\n `\n SELECT usage.project_id, usage.id AS usage_record_id, usage.execution_id,\n usage.attempt, usage.call_id, usage.occurred_at,\n CAST(usage.total_tokens AS TEXT) AS total_tokens,\n usage.model_kind,\n executions.requested_by_user_id,\n executions.requested_by_service_account_id,\n valuations.status AS valuation_status,\n valuations.currency AS valuation_currency,\n CAST(valuations.amount_nanos AS TEXT) AS valuation_amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions\n ON executions.project_id = usage.project_id AND executions.id = usage.execution_id\n LEFT JOIN ai_model_call_valuations AS valuations\n ON valuations.project_id = usage.project_id\n AND valuations.usage_record_id = usage.id\n WHERE usage.project_id = ? AND usage.occurred_at >= ? AND usage.occurred_at < ?\n AND (\n ? = 'project'\n OR (\n ? = 'group'\n AND EXISTS (\n SELECT 1 FROM ai_model_call_usage_groups AS usage_groups\n WHERE usage_groups.project_id = usage.project_id\n AND usage_groups.usage_record_id = usage.id\n AND usage_groups.group_id = ?\n )\n )\n OR (? = 'user' AND executions.requested_by_user_id = ?)\n OR (\n ? = 'serviceAccount'\n AND executions.requested_by_service_account_id = ?\n )\n )\n ORDER BY usage.occurred_at, usage.id\n `\n )\n .all(\n policy.projectId,\n period.start.toISOString(),\n period.end.toISOString(),\n subject.type,\n subject.type,\n subject.id,\n subject.type,\n subject.id,\n subject.type,\n subject.id\n ) as AiLimitAccountingRow[]\n return rows.map((row) => accountingEntryFromRow(row, policy.subject))\n }\n\n private requireAccountingEntry(projectId: string, usageRecordId: string): AiLimitAccountingEntry {\n const row = this.connection.db\n .query(\n `\n SELECT usage.project_id, usage.id AS usage_record_id, usage.execution_id,\n usage.attempt, usage.call_id, usage.occurred_at,\n CAST(usage.total_tokens AS TEXT) AS total_tokens,\n usage.model_kind,\n executions.requested_by_user_id,\n executions.requested_by_service_account_id,\n valuations.status AS valuation_status,\n valuations.currency AS valuation_currency,\n CAST(valuations.amount_nanos AS TEXT) AS valuation_amount_nanos\n FROM ai_model_call_usage AS usage\n JOIN executions\n ON executions.project_id = usage.project_id AND executions.id = usage.execution_id\n LEFT JOIN ai_model_call_valuations AS valuations\n ON valuations.project_id = usage.project_id\n AND valuations.usage_record_id = usage.id\n WHERE usage.project_id = ? AND usage.id = ?\n `\n )\n .get(projectId, usageRecordId) as AiLimitAccountingRow | null\n if (row) {\n const groups = this.connection.db\n .query(\n `\n SELECT group_id FROM ai_model_call_usage_groups\n WHERE project_id = ? AND usage_record_id = ?\n ORDER BY group_id\n `\n )\n .all(projectId, usageRecordId) as { readonly group_id: string }[]\n return accountingEntryFromRow(\n row,\n undefined,\n groups.map((group) => group.group_id)\n )\n }\n throw new AiLimitStorageError(\n \"missing_usage_record\",\n `[SixbSqlite] AI usage record '${usageRecordId}' does not exist in project '${projectId}'.`\n )\n }\n\n private assertExecutionExists(projectId: string, executionId: string): void {\n const row = this.connection.db\n .query(\"SELECT 1 FROM executions WHERE project_id = ? AND id = ?\")\n .get(projectId, executionId)\n if (row) return\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[SixbSqlite] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\ninterface AiLimitPolicyRow {\n readonly project_id: string\n readonly id: string\n readonly subject_type: AiLimitSubject[\"type\"]\n readonly subject_id: string\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly limit_amount: string\n readonly period_kind: \"calendarMonth\"\n readonly enabled: number\n readonly created_at: string\n readonly updated_at: string\n}\n\ninterface AiLimitPeriodStateRow {\n readonly actual_amount: string\n readonly reserved_amount: string\n readonly unknown_amount: string\n readonly accounting_status: \"complete\" | \"unavailable\"\n}\n\ninterface AiLimitActualStateRow {\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly actual_amount: string\n readonly accounting_status: \"complete\" | \"unavailable\"\n}\n\ninterface AiLimitAccountingRow {\n readonly project_id: string\n readonly usage_record_id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly occurred_at: string\n readonly total_tokens: string | null\n readonly model_kind: AiLimitAccountingEntry[\"modelKind\"] | null\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly valuation_status: \"rated\" | \"unpriceable\" | null\n readonly valuation_currency: string | null\n readonly valuation_amount_nanos: string | null\n}\n\ninterface AiModelCallReservationRow {\n readonly project_id: string\n readonly execution_id: string\n readonly attempt: number\n readonly call_id: string\n readonly buckets: string\n readonly request_key: string\n readonly period_start: string\n readonly period_end: string\n readonly state: AiModelCallReservation[\"state\"]\n readonly usage_record_id: string | null\n readonly reserved_at: string\n readonly updated_at: string\n}\n\nfunction policyFromRow(row: AiLimitPolicyRow): AiLimitPolicy {\n return {\n id: row.id,\n projectId: row.project_id,\n subject: aiLimitSubjectFromParts(row.subject_type, row.subject_id),\n limit: aiLimitQuantityFromAmount({\n meter: row.meter,\n currency: row.currency,\n amount: BigInt(row.limit_amount),\n }),\n period: row.period_kind,\n enabled: row.enabled === 1,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction policyStatus(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n row: AiLimitPeriodStateRow,\n existingGroups?: ReadonlySet<string>\n): AiLimitPolicyStatus {\n const limit = normalizeAiLimitAmount(policy.limit)\n const actual = BigInt(row.actual_amount)\n const reserved = BigInt(row.reserved_amount)\n const unknown = BigInt(row.unknown_amount)\n const consumed = actual + reserved + unknown\n const quantity = (amount: bigint) => aiLimitQuantityFromAmount({ ...limit, amount })\n return {\n policy,\n period: structuredClone(period),\n consumption: {\n actual: quantity(actual),\n reserved: quantity(reserved),\n unknown: quantity(unknown),\n remaining: quantity(limit.amount > consumed ? limit.amount - consumed : 0n),\n },\n accountingStatus: row.accounting_status,\n exhausted: consumed >= limit.amount,\n orphaned:\n policy.subject.type === \"group\" &&\n existingGroups !== undefined &&\n !existingGroups.has(policy.subject.id),\n }\n}\n\nfunction accountingEntryFromRow(\n row: AiLimitAccountingRow,\n subject?: AiLimitSubject,\n requesterGroupIds = subject?.type === \"group\" ? [subject.id] : []\n): AiLimitAccountingEntry {\n const totalTokens = row.total_tokens === null ? undefined : Number(row.total_tokens)\n const requester = row.requested_by_user_id\n ? ({ type: \"user\", id: row.requested_by_user_id } as const)\n : row.requested_by_service_account_id\n ? ({ type: \"serviceAccount\", id: row.requested_by_service_account_id } as const)\n : undefined\n return {\n projectId: row.project_id,\n usageRecordId: row.usage_record_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n occurredAt: new Date(row.occurred_at),\n ...(row.model_kind === null ? {} : { modelKind: row.model_kind }),\n ...(totalTokens !== undefined && Number.isSafeInteger(totalTokens) ? { totalTokens } : {}),\n requesterGroupIds,\n ...(requester ? { requester } : {}),\n ...(row.valuation_status === \"rated\" &&\n row.valuation_currency !== null &&\n row.valuation_amount_nanos !== null\n ? {\n valuation: {\n status: \"rated\" as const,\n money: {\n currency: row.valuation_currency,\n amountNanos: row.valuation_amount_nanos,\n },\n },\n }\n : row.valuation_status === \"unpriceable\"\n ? { valuation: { status: \"unavailable\" as const } }\n : {}),\n }\n}\n\nfunction reservationFromRow(row: AiModelCallReservationRow): AiModelCallReservation {\n return {\n projectId: row.project_id,\n executionId: row.execution_id,\n attempt: row.attempt,\n callId: row.call_id,\n buckets: normalizeBucketsJson(row.buckets),\n requestKey: row.request_key,\n period: {\n kind: \"calendarMonth\",\n start: new Date(row.period_start),\n end: new Date(row.period_end),\n resetAt: new Date(row.period_end),\n },\n state: row.state,\n ...(row.usage_record_id === null ? {} : { usageRecordId: row.usage_record_id }),\n reservedAt: new Date(row.reserved_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction normalizeBucketsJson(value: string): readonly AiLimitReservationBucket[] {\n const buckets = JSON.parse(value) as readonly AiLimitReservationBucket[]\n return buckets.map((bucket) => ({\n subject: structuredClone(bucket.subject),\n estimate: normalizeAiLimitQuantities([bucket.estimate], \"stored bucket\")[0]!,\n }))\n}\n\nfunction reservationSqlValues(reservation: AiModelCallReservation): SQLQueryBindings[] {\n return [\n reservation.projectId,\n reservation.executionId,\n reservation.attempt,\n reservation.callId,\n JSON.stringify(reservation.buckets),\n reservation.requestKey,\n reservation.period.start.toISOString(),\n reservation.period.end.toISOString(),\n reservation.state,\n reservation.usageRecordId ?? null,\n reservation.reservedAt.toISOString(),\n reservation.updatedAt.toISOString(),\n ]\n}\n\nfunction assertSameDimension(previous: AiLimitQuantity, next: AiLimitQuantity): void {\n if (\n aiLimitAmountKey(normalizeAiLimitAmount(previous)) !==\n aiLimitAmountKey(normalizeAiLimitAmount(next))\n ) {\n throw new TypeError(\"[Sixb] AI limit policy meter and cost currency are immutable.\")\n }\n}\n\nfunction validatePolicyIdentity(input: GetAiLimitPolicyInput): void {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.id, \"policy id\")\n}\n\nfunction duplicatePolicy(policy: AiLimitPolicy): AiLimitStorageError {\n return new AiLimitStorageError(\n \"duplicate_policy\",\n `[SixbSqlite] An AI limit policy already exists for policy ID or subject-meter dimension '${policy.id}'.`\n )\n}\n\nfunction missingReservation(input: {\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n}): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_reservation\",\n `[SixbSqlite] AI model-call reservation '${input.callId}' does not exist for execution '${input.executionId}' attempt ${input.attempt}.`\n )\n}\n\nfunction reconciliationConflict(callId: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"reconciliation_conflict\",\n `[SixbSqlite] AI model-call reservation '${callId}' was reconciled with a different usage record.`\n )\n}\n\nfunction invalidState(reservation: AiModelCallReservation, operation: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"invalid_reservation_state\",\n `[SixbSqlite] Cannot ${operation} AI model-call reservation '${reservation.callId}' in state '${reservation.state}'.`\n )\n}\n\nfunction isConstraintError(error: unknown): boolean {\n return error instanceof Error && /constraint/i.test(error.message)\n}\n",
22
+ "import type { Database, SQLQueryBindings } from \"bun:sqlite\"\nimport {\n artifactStorageErrors,\n parseArtifactFrameGrantRow,\n parseArtifactRow,\n parseArtifactVersionRow,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ArtifactFrameGrantRecord,\n ArtifactRecord,\n ArtifactStorage,\n ArtifactVersionInput,\n ArtifactVersionRecord,\n CreateArtifactInput,\n DeleteArtifactInput,\n DeleteArtifactVersionsByOriginInput,\n DeleteExpiredArtifactFrameGrantsInput,\n FindArtifactFrameGrantInput,\n GetArtifactInput,\n GetArtifactVersionInput,\n ListArtifactsInput,\n ListArtifactsResult,\n ListArtifactVersionsInput,\n ListArtifactVersionsResult,\n ListReferencingVersionsInput,\n PublishArtifactVersionInput,\n PublishedArtifactVersion,\n} from \"@sixb/core/storage\"\nimport { runImmediateTransaction, type SqliteStoreConnection } from \"./transactions\"\n\nconst ARTIFACT_COLUMNS = `\n project_id AS projectId, id, kind, title,\n owner_principal_type AS ownerPrincipalType, owner_principal_id AS ownerPrincipalId,\n latest_version AS latestVersion, created_at AS createdAt, updated_at AS updatedAt\n`\n\nconst VERSION_COLUMNS = `\n project_id AS projectId, artifact_id AS artifactId, version, title, entry, files, outline, refs,\n author_principal_type AS authorPrincipalType, author_principal_id AS authorPrincipalId,\n origin_thread_id AS originThreadId, origin_run_id AS originRunId, created_at AS createdAt\n`\n\nconst FRAME_GRANT_COLUMNS = `\n project_id AS projectId, token_hash AS tokenHash, artifact_id AS artifactId, version, targets,\n created_at AS createdAt, expires_at AS expiresAt\n`\n\ntype Row = Record<string, unknown>\n\nexport class SqliteArtifactStorage implements ArtifactStorage {\n private readonly db: Database\n\n constructor(connection: SqliteStoreConnection) {\n this.db = connection.db\n }\n\n async create(input: CreateArtifactInput): Promise<PublishedArtifactVersion> {\n return runImmediateTransaction(this.db, () => {\n const createdAt = input.version.createdAt.toISOString()\n const artifact = this.db\n .query(\n `INSERT INTO artifacts (\n project_id, id, kind, title, owner_principal_type, owner_principal_id,\n latest_version, next_version, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 1, 2, ?, ?)\n ON CONFLICT (project_id, id) DO NOTHING\n RETURNING ${ARTIFACT_COLUMNS}`\n )\n .get(\n input.projectId,\n input.id,\n input.kind,\n input.version.title,\n input.owner.type,\n input.owner.id,\n createdAt,\n createdAt\n ) as Row | null\n if (!artifact) throw artifactStorageErrors.exists(input.id)\n return {\n artifact: parseArtifactRow(artifact),\n version: this.insertVersion(input.projectId, input.id, 1, input.version),\n }\n })\n }\n\n async publish(input: PublishArtifactVersionInput): Promise<PublishedArtifactVersion> {\n return runImmediateTransaction(this.db, () => {\n const current = this.db\n .query(\n \"SELECT kind, next_version AS nextVersion FROM artifacts WHERE project_id = ? AND id = ?\"\n )\n .get(input.projectId, input.artifactId) as {\n readonly kind: ArtifactRecord[\"kind\"]\n readonly nextVersion: number\n } | null\n if (!current) throw artifactStorageErrors.notFound(input.artifactId)\n if (current.kind !== input.kind) {\n throw artifactStorageErrors.kindMismatch(input.artifactId, current.kind, input.kind)\n }\n const version = this.insertVersion(\n input.projectId,\n input.artifactId,\n current.nextVersion,\n input.version\n )\n const artifact = this.db\n .query(\n `UPDATE artifacts\n SET title = ?, latest_version = ?, next_version = ?, updated_at = ?\n WHERE project_id = ? AND id = ?\n RETURNING ${ARTIFACT_COLUMNS}`\n )\n .get(\n input.version.title,\n version.version,\n version.version + 1,\n input.version.createdAt.toISOString(),\n input.projectId,\n input.artifactId\n ) as Row\n return { artifact: parseArtifactRow(artifact), version }\n })\n }\n\n async get(input: GetArtifactInput): Promise<ArtifactRecord | null> {\n const row = this.db\n .query(`SELECT ${ARTIFACT_COLUMNS} FROM artifacts WHERE project_id = ? AND id = ?`)\n .get(input.projectId, input.id) as Row | null\n return row ? parseArtifactRow(row) : null\n }\n\n async list(input: ListArtifactsInput): Promise<ListArtifactsResult> {\n const where = [\"a.project_id = ?\"]\n const params: SQLQueryBindings[] = [input.projectId]\n if (input.owner) {\n where.push(\"a.owner_principal_type = ? AND a.owner_principal_id = ?\")\n params.push(input.owner.type, input.owner.id)\n }\n if (input.originThreadId !== undefined) {\n where.push(\n `EXISTS (\n SELECT 1 FROM artifact_versions v\n WHERE v.project_id = a.project_id AND v.artifact_id = a.id AND v.origin_thread_id = ?\n )`\n )\n params.push(input.originThreadId)\n }\n if (input.kind !== undefined) {\n where.push(\"a.kind = ?\")\n params.push(input.kind)\n }\n const clause = where.join(\" AND \")\n const { total } = this.db\n .query(`SELECT COUNT(*) AS total FROM artifacts a WHERE ${clause}`)\n .get(...params) as { readonly total: number }\n const offset = input.offset ?? 0\n const rows = this.db\n .query(\n `SELECT ${ARTIFACT_COLUMNS} FROM artifacts a WHERE ${clause}\n ORDER BY a.updated_at DESC, a.id ASC LIMIT ? OFFSET ?`\n )\n .all(...params, input.limit ?? -1, offset) as Row[]\n return {\n artifacts: rows.map(parseArtifactRow),\n hasMore: offset + rows.length < total,\n total,\n }\n }\n\n async getVersion(input: GetArtifactVersionInput): Promise<ArtifactVersionRecord | null> {\n const row = this.db\n .query(\n `SELECT ${VERSION_COLUMNS} FROM artifact_versions\n WHERE project_id = ? AND artifact_id = ? AND version = ?`\n )\n .get(input.projectId, input.artifactId, input.version) as Row | null\n return row ? parseArtifactVersionRow(row) : null\n }\n\n async listVersions(input: ListArtifactVersionsInput): Promise<ListArtifactVersionsResult> {\n const { total } = this.db\n .query(\n \"SELECT COUNT(*) AS total FROM artifact_versions WHERE project_id = ? AND artifact_id = ?\"\n )\n .get(input.projectId, input.artifactId) as { readonly total: number }\n const offset = input.offset ?? 0\n const rows = this.db\n .query(\n `SELECT ${VERSION_COLUMNS} FROM artifact_versions\n WHERE project_id = ? AND artifact_id = ?\n ORDER BY version DESC LIMIT ? OFFSET ?`\n )\n .all(input.projectId, input.artifactId, input.limit ?? -1, offset) as Row[]\n return {\n versions: rows.map(parseArtifactVersionRow),\n hasMore: offset + rows.length < total,\n total,\n }\n }\n\n async listReferencingVersions(\n input: ListReferencingVersionsInput\n ): Promise<ArtifactVersionRecord[]> {\n // An address names the artifact when the id is followed by nothing, a version, a file, or a\n // part.\n const prefix = `artifact:${input.artifactId}`\n const rows = this.db\n .query(\n `SELECT ${VERSION_COLUMNS} FROM artifact_versions v\n WHERE (project_id, artifact_id, version) IN (\n SELECT project_id, id, latest_version FROM artifacts WHERE project_id = ?\n ) AND EXISTS (\n SELECT 1 FROM json_each(v.refs) r\n WHERE substr(json_extract(r.value, '$.address'), 1, ?) = ?\n AND substr(json_extract(r.value, '$.address'), ? + 1, 1) IN ('', '@', '/', '#')\n )\n ORDER BY artifact_id`\n )\n .all(input.projectId, prefix.length, prefix, prefix.length) as Row[]\n return rows.map(parseArtifactVersionRow)\n }\n\n async createFrameGrant(record: ArtifactFrameGrantRecord): Promise<void> {\n runImmediateTransaction(this.db, () => {\n const exists = this.db\n .query(\"SELECT 1 FROM artifacts WHERE project_id = ? AND id = ?\")\n .get(record.projectId, record.artifactId)\n if (!exists) throw artifactStorageErrors.notFound(record.artifactId)\n this.db\n .query(\n `INSERT INTO artifact_frame_grants\n (project_id, token_hash, artifact_id, version, targets, created_at, expires_at)\n VALUES (?, ?, ?, ?, ?, ?, ?)`\n )\n .run(\n record.projectId,\n record.tokenHash,\n record.artifactId,\n record.version,\n JSON.stringify(record.targets),\n record.createdAt.toISOString(),\n record.expiresAt.toISOString()\n )\n })\n }\n\n async findFrameGrant(\n input: FindArtifactFrameGrantInput\n ): Promise<ArtifactFrameGrantRecord | null> {\n const row = this.db\n .query(\n `SELECT ${FRAME_GRANT_COLUMNS} FROM artifact_frame_grants\n WHERE project_id = ? AND token_hash = ?`\n )\n .get(input.projectId, input.tokenHash) as Row | null\n return row ? parseArtifactFrameGrantRow(row) : null\n }\n\n async deleteExpiredFrameGrants(input: DeleteExpiredArtifactFrameGrantsInput): Promise<number> {\n return this.db\n .query(\n `DELETE FROM artifact_frame_grants WHERE rowid IN (\n SELECT rowid FROM artifact_frame_grants\n WHERE project_id = ? AND expires_at < ?\n ORDER BY expires_at LIMIT ?\n )`\n )\n .run(input.projectId, input.expiredBefore.toISOString(), input.limit).changes\n }\n\n async delete(input: DeleteArtifactInput): Promise<boolean> {\n // Versions and frame grants go with the artifact through ON DELETE CASCADE.\n return (\n this.db\n .query(\"DELETE FROM artifacts WHERE project_id = ? AND id = ?\")\n .run(input.projectId, input.id).changes > 0\n )\n }\n\n async deleteVersionsByOrigin(input: DeleteArtifactVersionsByOriginInput): Promise<number> {\n return runImmediateTransaction(this.db, () => {\n const affected = this.db\n .query(\n `SELECT DISTINCT artifact_id AS artifactId FROM artifact_versions\n WHERE project_id = ? AND origin_run_id = ?`\n )\n .all(input.projectId, input.runId) as { readonly artifactId: string }[]\n const deleted = this.db\n .query(\"DELETE FROM artifact_versions WHERE project_id = ? AND origin_run_id = ?\")\n .run(input.projectId, input.runId).changes\n for (const { artifactId } of affected) {\n this.repointLatest(input.projectId, artifactId)\n }\n return deleted\n })\n }\n\n /** Point an artifact at its newest remaining version, or delete it when none remains. */\n private repointLatest(projectId: string, artifactId: string): void {\n const latest = this.db\n .query(\n `SELECT version, title, created_at AS createdAt FROM artifact_versions\n WHERE project_id = ? AND artifact_id = ? ORDER BY version DESC LIMIT 1`\n )\n .get(projectId, artifactId) as {\n readonly version: number\n readonly title: string\n readonly createdAt: string\n } | null\n if (!latest) {\n this.db\n .query(\"DELETE FROM artifacts WHERE project_id = ? AND id = ?\")\n .run(projectId, artifactId)\n return\n }\n this.db\n .query(\n `UPDATE artifacts SET title = ?, latest_version = ?, updated_at = ?\n WHERE project_id = ? AND id = ?`\n )\n .run(latest.title, latest.version, latest.createdAt, projectId, artifactId)\n }\n\n private insertVersion(\n projectId: string,\n artifactId: string,\n version: number,\n input: ArtifactVersionInput\n ): ArtifactVersionRecord {\n const row = this.db\n .query(\n `INSERT INTO artifact_versions (\n project_id, artifact_id, version, title, entry, files, outline, refs,\n author_principal_type, author_principal_id, origin_thread_id, origin_run_id, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n RETURNING ${VERSION_COLUMNS}`\n )\n .get(\n projectId,\n artifactId,\n version,\n input.title,\n input.entry,\n JSON.stringify(input.files),\n JSON.stringify(input.outline),\n JSON.stringify(input.references),\n input.author.type,\n input.author.id,\n input.origin?.threadId ?? null,\n input.origin?.runId ?? null,\n input.createdAt.toISOString()\n ) as Row\n return parseArtifactVersionRow(row)\n }\n}\n",
21
23
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthStorage,\n CompleteDeviceAuthorizationInput,\n CompleteDeviceAuthorizationResult,\n CompleteMagicLinkSignInInput,\n CompleteOidcSignInInput,\n CompleteSignInResult,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n SessionRecord,\n SuspendUserAndRevokeSessionsInput,\n UserIdentityRecord,\n UserRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { SqliteAuthAccessTokenStore } from \"./access-tokens\"\nimport {\n getDeviceAuthorizationById,\n SqliteAuthDeviceAuthorizationStore,\n} from \"./device-authorizations\"\nimport { SqliteAuthGroupMembershipStore } from \"./group-memberships\"\nimport { SqliteAuthUserIdentityStore } from \"./identities\"\nimport { SqliteAuthInvitationStore } from \"./invitations\"\nimport { SqliteAuthMagicLinkStore } from \"./magic-links\"\nimport { SqliteAuthOidcAuthorizationAttemptStore } from \"./oidc-attempts\"\nimport type { SqliteAuthMagicLinkRow, SqliteAuthOidcAttemptRow } from \"./rows\"\nimport { rowToIdentityRecord, rowToUserRecord, serializeOptionalRecord } from \"./rows\"\nimport { SqliteAuthServiceAccountGroupMembershipStore } from \"./service-account-group-memberships\"\nimport { SqliteAuthServiceAccountStore } from \"./service-accounts\"\nimport { SqliteAuthSessionStore } from \"./sessions\"\nimport {\n assertNonEmpty,\n consumeMagicLink,\n consumeOidcAttempt,\n createSession,\n getActiveInvitationByEmail,\n getIdentityRowBySubject,\n getMagicLinkRowById,\n getOidcAttemptRowById,\n getUserRowByEmail,\n getUserRowById,\n mapUniqueConstraintError,\n normalizeEmail,\n normalizeGroupIds,\n revokeActiveSessionsForUser,\n toIso,\n upsertGroupMembership,\n validateCompleteSessionInput,\n} from \"./shared\"\nimport { SqliteAuthUserStore } from \"./users\"\n\ninterface AuthTransactionError {\n readonly error: AuthStorageError\n}\n\nexport interface SqliteAuthStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteAuthStorage implements AuthStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n readonly users: SqliteAuthUserStore\n readonly identities: SqliteAuthUserIdentityStore\n readonly serviceAccounts: SqliteAuthServiceAccountStore\n readonly serviceAccountGroupMemberships: SqliteAuthServiceAccountGroupMembershipStore\n readonly sessions: SqliteAuthSessionStore\n readonly accessTokens: SqliteAuthAccessTokenStore\n readonly invitations: SqliteAuthInvitationStore\n readonly groupMemberships: SqliteAuthGroupMembershipStore\n readonly magicLinks: SqliteAuthMagicLinkStore\n readonly oidcAuthorizationAttempts: SqliteAuthOidcAuthorizationAttemptStore\n readonly deviceAuthorizations: SqliteAuthDeviceAuthorizationStore\n\n constructor(options: SqliteAuthStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n\n this.users = new SqliteAuthUserStore(this.db)\n this.identities = new SqliteAuthUserIdentityStore(this.db)\n this.serviceAccounts = new SqliteAuthServiceAccountStore(this.db)\n this.serviceAccountGroupMemberships = new SqliteAuthServiceAccountGroupMembershipStore(this.db)\n this.sessions = new SqliteAuthSessionStore(this.db)\n this.accessTokens = new SqliteAuthAccessTokenStore(this.db)\n this.invitations = new SqliteAuthInvitationStore(this.db)\n this.groupMemberships = new SqliteAuthGroupMembershipStore(this.db)\n this.magicLinks = new SqliteAuthMagicLinkStore(this.db)\n this.oidcAuthorizationAttempts = new SqliteAuthOidcAuthorizationAttemptStore(this.db)\n this.deviceAuthorizations = new SqliteAuthDeviceAuthorizationStore(this.db)\n }\n\n async completeDeviceAuthorization(\n input: CompleteDeviceAuthorizationInput\n ): Promise<CompleteDeviceAuthorizationResult> {\n return runImmediateTransaction(this.db, () => {\n const authorization = getDeviceAuthorizationById(this.db, input.projectId, input.id)\n if (!authorization) {\n throw new AuthStorageError(\n \"missing_device_authorization\",\n `[Sixb] Device authorization '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n assertCompletableDeviceAuthorization(authorization, input)\n const session = createSession(this.db, input.session)\n this.db\n .query(`\n UPDATE auth_device_authorizations\n SET status = 'consumed', consumed_at = ?\n WHERE project_id = ? AND id = ? AND status = 'approved'\n `)\n .run(toIso(input.completedAt), input.projectId, input.id)\n return {\n authorization: {\n ...authorization,\n status: \"consumed\",\n consumedAt: new Date(input.completedAt),\n },\n session,\n }\n })\n }\n\n async completeMagicLinkSignIn(\n input: CompleteMagicLinkSignInInput\n ): Promise<CompleteSignInResult> {\n const result = runImmediateTransaction(\n this.db,\n (): CompleteSignInResult | AuthTransactionError => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const magicLink = getMagicLinkRowById(this.db, {\n projectId,\n id: input.magicLinkId,\n })\n\n this.assertMagicLinkUsable(\n projectId,\n input.magicLinkId,\n input.tokenHash,\n completedAt,\n magicLink\n )\n\n const existingUserRow = getUserRowByEmail(this.db, {\n projectId,\n email: magicLink.email,\n })\n const activeInvitation = getActiveInvitationByEmail(this.db, {\n projectId,\n email: magicLink.email,\n now: completedAt,\n })\n const shouldCreateUser = !existingUserRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (existingUserRow?.status === \"suspended\") {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${existingUserRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] Magic link '${input.magicLinkId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n validateCompleteSessionInput(this.db, projectId, input.session)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (getUserRowById(this.db, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n consumeMagicLink(this.db, {\n projectId,\n id: input.magicLinkId,\n tokenHash: input.tokenHash,\n consumedAt: completedAt,\n })\n\n const user = existingUserRow\n ? rowToUserRecord(existingUserRow)\n : this.insertUser({\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email: magicLink.email,\n displayName: input.newUserDisplayName,\n avatarUrl: input.newUserAvatarUrl,\n createdAt: completedAt,\n })\n\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = this.applyGroups({\n completedAt,\n source: \"manual\",\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n })\n const session = this.createSignInSession({\n projectId,\n strategyId: magicLink.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async completeOidcSignIn(input: CompleteOidcSignInInput): Promise<CompleteSignInResult> {\n const result = runImmediateTransaction(\n this.db,\n (): CompleteSignInResult | AuthTransactionError => {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const completedAt = new Date(input.completedAt)\n const attempt = getOidcAttemptRowById(this.db, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n })\n\n this.assertOidcAttemptUsable(\n projectId,\n input.oidcAuthorizationAttemptId,\n input.stateHash,\n completedAt,\n attempt\n )\n\n const subject = assertNonEmpty(input.subject, \"Subject\")\n const email = normalizeEmail(input.email)\n const identity = getIdentityRowBySubject(this.db, {\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n })\n const activeInvitation = identity\n ? null\n : getActiveInvitationByEmail(this.db, {\n projectId,\n email,\n now: completedAt,\n })\n let userRow = identity\n ? getUserRowById(this.db, { projectId, id: identity.user_id })\n : getUserRowByEmail(this.db, { projectId, email })\n const shouldCreateUser = !identity && !userRow\n const manualGroupIds = normalizeGroupIds(input.manualGroupIds)\n\n if (identity && !userRow) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${identity.user_id}' not found for linked OIDC identity.`\n ),\n }\n }\n\n if (userRow?.status === \"suspended\") {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"suspended_user\",\n `[Sixb] User '${userRow.id}' is suspended for project '${projectId}'.`\n ),\n }\n }\n\n if (shouldCreateUser && !activeInvitation && !input.allowUserCreationWithoutInvitation) {\n this.consumeOidcAttempt(input, completedAt, projectId)\n return {\n error: new AuthStorageError(\n \"user_creation_not_allowed\",\n `[Sixb] OIDC authorization attempt '${input.oidcAuthorizationAttemptId}' cannot create a user for project '${projectId}'.`\n ),\n }\n }\n\n validateCompleteSessionInput(this.db, projectId, input.session)\n\n let newUserId: string | undefined\n if (shouldCreateUser) {\n newUserId = assertNonEmpty(input.newUserId, \"User id\")\n if (getUserRowById(this.db, { projectId, id: newUserId })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${newUserId}' already exists for project '${projectId}'.`\n )\n }\n }\n\n this.consumeOidcAttempt(input, completedAt, projectId)\n\n if (!userRow) {\n const user = this.insertUser({\n id: newUserId ?? assertNonEmpty(input.newUserId, \"User id\"),\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n createdAt: completedAt,\n })\n userRow = {\n project_id: user.projectId,\n id: user.id,\n email: user.email,\n display_name: user.displayName ?? null,\n avatar_url: user.avatarUrl ?? null,\n status: user.status,\n created_at: toIso(user.createdAt),\n updated_at: toIso(user.updatedAt),\n }\n }\n\n const user = rowToUserRecord(userRow)\n const invitation = this.acceptInvitationAndApplyGroups({\n activeInvitation,\n completedAt,\n projectId,\n user,\n })\n const groupMemberships = this.syncDirectoryGroups({\n completedAt,\n existing: this.applyGroups({\n completedAt,\n source: \"manual\",\n existing: invitation.groupMemberships,\n groupIds: manualGroupIds,\n projectId,\n userId: user.id,\n }),\n groupIds: input.directoryGroupIds,\n projectId,\n userId: user.id,\n })\n const nextIdentity = this.upsertIdentity({\n projectId,\n strategyId: attempt.strategy_id,\n subject,\n userId: user.id,\n claims: input.claims,\n createdAt: identity ? new Date(identity.created_at) : completedAt,\n updatedAt: completedAt,\n })\n const session = this.createSignInSession({\n projectId,\n strategyId: attempt.strategy_id,\n session: input.session,\n userId: user.id,\n })\n\n return {\n user,\n session,\n identity: nextIdentity,\n invitation: invitation.invitation,\n groupMemberships,\n }\n }\n )\n\n if (\"error\" in result) {\n throw result.error\n }\n\n return result\n }\n\n async suspendUserAndRevokeSessions(\n input: SuspendUserAndRevokeSessionsInput\n ): Promise<UserRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = getUserRowById(this.db, {\n projectId: input.projectId,\n id: input.userId,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.userId}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_users\n SET status = 'suspended',\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(input.suspendedAt), input.projectId, input.userId)\n revokeActiveSessionsForUser(this.db, {\n projectId: input.projectId,\n userId: input.userId,\n revokedAt: input.suspendedAt,\n })\n\n return rowToUserRecord({\n ...existing,\n status: \"suspended\",\n updated_at: toIso(input.suspendedAt),\n })\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertMagicLinkUsable(\n projectId: string,\n id: string,\n tokenHash: string,\n completedAt: Date,\n row: SqliteAuthMagicLinkRow | null\n ): asserts row is SqliteAuthMagicLinkRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_magic_link\",\n `[Sixb] Magic link '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.token_hash !== tokenHash || row.consumed_at || row.revoked_at) {\n throw new AuthStorageError(\n \"invalid_magic_link\",\n `[Sixb] Magic link '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= completedAt) {\n throw new AuthStorageError(\n \"expired_magic_link\",\n `[Sixb] Magic link '${id}' is expired for project '${projectId}'.`\n )\n }\n }\n\n private assertOidcAttemptUsable(\n projectId: string,\n id: string,\n stateHash: string,\n completedAt: Date,\n row: SqliteAuthOidcAttemptRow | null\n ): asserts row is SqliteAuthOidcAttemptRow {\n if (!row) {\n throw new AuthStorageError(\n \"missing_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.state_hash !== stateHash || row.consumed_at) {\n throw new AuthStorageError(\n \"invalid_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is not valid for project '${projectId}'.`\n )\n }\n\n if (new Date(row.expires_at) <= completedAt) {\n throw new AuthStorageError(\n \"expired_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' is expired for project '${projectId}'.`\n )\n }\n }\n\n private insertUser(input: {\n readonly id: string\n readonly projectId: string\n readonly email: string\n readonly displayName?: string\n readonly avatarUrl?: string\n readonly createdAt: Date\n }): UserRecord {\n try {\n this.db\n .query(\n `\n INSERT INTO auth_users (\n project_id,\n id,\n email,\n display_name,\n avatar_url,\n status,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, 'active', ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.email,\n input.displayName ?? null,\n input.avatarUrl ?? null,\n toIso(input.createdAt),\n toIso(input.createdAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_user\",\n `[Sixb] User '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n return {\n id: input.id,\n projectId: input.projectId,\n email: input.email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n status: \"active\",\n createdAt: new Date(input.createdAt),\n updatedAt: new Date(input.createdAt),\n }\n }\n\n private acceptInvitationAndApplyGroups(input: {\n readonly activeInvitation: InvitationRecord | null\n readonly completedAt: Date\n readonly projectId: string\n readonly user: UserRecord\n }): {\n readonly invitation?: InvitationRecord\n readonly groupMemberships: readonly GroupMembershipRecord[]\n } {\n if (!input.activeInvitation) {\n return { groupMemberships: [] }\n }\n\n this.db\n .query(\n `\n UPDATE auth_invitations\n SET status = 'accepted',\n accepted_at = ?,\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(\n toIso(input.completedAt),\n toIso(input.completedAt),\n input.projectId,\n input.activeInvitation.id\n )\n\n const invitation: InvitationRecord = {\n ...input.activeInvitation,\n status: \"accepted\",\n acceptedAt: new Date(input.completedAt),\n updatedAt: new Date(input.completedAt),\n }\n const groupMemberships = input.activeInvitation.groupIds.map((groupId) =>\n upsertGroupMembership(this.db, {\n projectId: input.projectId,\n userId: input.user.id,\n groupId,\n source: \"invitation\",\n createdAt: input.completedAt,\n })\n )\n\n return { invitation, groupMemberships }\n }\n\n private applyGroups(input: {\n readonly completedAt: Date\n readonly existing: readonly GroupMembershipRecord[]\n readonly groupIds: readonly string[]\n readonly projectId: string\n readonly source: GroupMembershipSource\n readonly userId: string\n }): readonly GroupMembershipRecord[] {\n const groupMemberships = [...input.existing]\n\n for (const groupId of input.groupIds) {\n groupMemberships.push(\n upsertGroupMembership(this.db, {\n projectId: input.projectId,\n userId: input.userId,\n groupId,\n source: input.source,\n createdAt: input.completedAt,\n })\n )\n }\n\n return groupMemberships\n }\n // Directory memberships become exactly `groupIds`. A group the user already holds from another\n // source keeps that source, and memberships from other sources are never removed.\n private syncDirectoryGroups(input: {\n readonly completedAt: Date\n readonly existing: readonly GroupMembershipRecord[]\n readonly groupIds?: readonly string[]\n readonly projectId: string\n readonly userId: string\n }): readonly GroupMembershipRecord[] {\n if (!input.groupIds) {\n return input.existing\n }\n\n const groupIds = normalizeGroupIds(input.groupIds)\n this.db\n .query(\n `\n DELETE FROM auth_group_memberships\n WHERE project_id = ?\n AND user_id = ?\n AND source = 'directory'\n AND group_id NOT IN (${groupIds.map(() => \"?\").join(\", \")})\n `\n )\n .run(input.projectId, input.userId, ...groupIds)\n\n return this.applyGroups({ ...input, groupIds, source: \"directory\" })\n }\n\n private createSignInSession(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly session: CompleteMagicLinkSignInInput[\"session\"]\n readonly userId: string\n }): SessionRecord {\n return createSession(this.db, {\n id: input.session.id,\n projectId: input.projectId,\n userId: input.userId,\n strategyId: input.strategyId,\n tokenHash: input.session.tokenHash,\n createdAt: input.session.createdAt,\n expiresAt: input.session.expiresAt,\n absoluteExpiresAt: input.session.absoluteExpiresAt,\n userAgent: input.session.userAgent,\n ipAddress: input.session.ipAddress,\n })\n }\n\n private consumeOidcAttempt(\n input: CompleteOidcSignInInput,\n completedAt: Date,\n projectId: string\n ): void {\n consumeOidcAttempt(this.db, {\n projectId,\n id: input.oidcAuthorizationAttemptId,\n stateHash: input.stateHash,\n consumedAt: completedAt,\n })\n }\n\n private upsertIdentity(input: {\n readonly projectId: string\n readonly strategyId: string\n readonly subject: string\n readonly userId: string\n readonly claims?: Readonly<Record<string, unknown>>\n readonly createdAt: Date\n readonly updatedAt: Date\n }): UserIdentityRecord {\n this.db\n .query(\n `\n INSERT INTO auth_user_identities (\n project_id,\n strategy_id,\n subject,\n user_id,\n claims,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(project_id, strategy_id, subject)\n DO UPDATE SET\n user_id = excluded.user_id,\n claims = excluded.claims,\n updated_at = excluded.updated_at\n `\n )\n .run(\n input.projectId,\n input.strategyId,\n input.subject,\n input.userId,\n serializeOptionalRecord(input.claims),\n toIso(input.createdAt),\n toIso(input.updatedAt)\n )\n\n return rowToIdentityRecord({\n project_id: input.projectId,\n strategy_id: input.strategyId,\n subject: input.subject,\n user_id: input.userId,\n claims: serializeOptionalRecord(input.claims),\n created_at: toIso(input.createdAt),\n updated_at: toIso(input.updatedAt),\n })\n }\n}\n\nfunction assertCompletableDeviceAuthorization(\n authorization: DeviceAuthorizationRecord,\n input: CompleteDeviceAuthorizationInput\n): void {\n if (authorization.deviceCodeHash !== input.deviceCodeHash) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Invalid device authorization.\"\n )\n }\n if (authorization.status === \"pending\") {\n throw new AuthStorageError(\n \"pending_device_authorization\",\n \"[Sixb] Device authorization is pending.\"\n )\n }\n if (authorization.status === \"denied\") {\n throw new AuthStorageError(\n \"device_authorization_denied\",\n \"[Sixb] Device authorization was denied.\"\n )\n }\n if (\n authorization.status !== \"approved\" ||\n authorization.expiresAt <= input.completedAt ||\n !authorization.approvedUserId ||\n !authorization.approvedSessionId ||\n input.session.projectId !== input.projectId ||\n input.session.userId !== authorization.approvedUserId\n ) {\n throw new AuthStorageError(\n \"invalid_device_authorization\",\n \"[Sixb] Device authorization is invalid.\"\n )\n }\n}\n",
22
24
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AccessTokenRecord,\n AuthAccessTokenStore,\n CreateAuthAccessTokenInput,\n ListAuthAccessTokensInput,\n ListAuthAccessTokensResult,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type {\n SqliteAuthAccessTokenRow,\n SqliteAuthServiceAccountRow,\n SqliteAuthUserRow,\n} from \"./rows\"\nimport { rowToAccessTokenRecord, serializeOptionalStringArray } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n mapUniqueConstraintError,\n normalizeGroupIds,\n type SqliteValue,\n toIso,\n} from \"./shared\"\n\nfunction createAuthAccessToken(db: Database, input: CreateAuthAccessTokenInput): AccessTokenRecord {\n const id = assertNonEmpty(input.id, \"Access token id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Access token name\")\n const subjectId = assertNonEmpty(input.subject.id, \"Access token subject id\")\n const tokenHash = assertNonEmpty(input.tokenHash, \"Access token hash\")\n assertKindMatchesSubject(input)\n assertSubjectExists(db, projectId, input.subject.type, subjectId)\n const groupIds = input.groupIds === undefined ? undefined : normalizeGroupIds(input.groupIds)\n\n try {\n db.query(\n `\n INSERT INTO auth_access_tokens (\n project_id,\n id,\n name,\n kind,\n subject_type,\n subject_id,\n token_hash,\n group_ids,\n created_by_principal_type,\n created_by_principal_id,\n created_by_session_id,\n created_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n ).run(\n projectId,\n id,\n name,\n input.kind,\n input.subject.type,\n subjectId,\n tokenHash,\n serializeOptionalStringArray(groupIds),\n input.createdByPrincipal?.type ?? null,\n input.createdByPrincipal?.id ?? null,\n input.createdBySessionId ?? null,\n toIso(input.createdAt),\n toIso(input.expiresAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_access_token\",\n `[Sixb] Access token '${id}' already exists for project '${projectId}'.`\n )\n }\n\n const row = db\n .query(\"SELECT * FROM auth_access_tokens WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteAuthAccessTokenRow | null\n const token = row ? rowToAccessTokenRecord(row) : null\n if (!token) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${id}' not found for project '${projectId}'.`\n )\n }\n return token\n}\n\nexport class SqliteAuthAccessTokenStore implements AuthAccessTokenStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAuthAccessTokenInput): Promise<AccessTokenRecord> {\n return createAuthAccessToken(this.db, input)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AccessTokenRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM auth_access_tokens WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthAccessTokenRow | null\n return row ? rowToAccessTokenRecord(row) : null\n }\n\n async list(input: ListAuthAccessTokensInput): Promise<ListAuthAccessTokensResult> {\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.kind) {\n whereClauses.push(\"kind = ?\")\n args.push(input.kind)\n }\n if (input.subject) {\n whereClauses.push(\"subject_type = ?\", \"subject_id = ?\")\n args.push(input.subject.type, input.subject.id)\n }\n if (!input.includeRevoked) {\n whereClauses.push(\"revoked_at IS NULL\")\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM auth_access_tokens ${where}`)\n .get(...args) as { readonly count: number }\n const queryArgs = [...args]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_access_tokens\n ${where}\n ORDER BY created_at ${order}, id ${order}\n `,\n queryArgs,\n input\n )\n const rows = this.db.query(query).all(...queryArgs) as SqliteAuthAccessTokenRow[]\n\n return {\n accessTokens: rows.map(rowToAccessTokenRecord),\n hasMore:\n input.limit === undefined ? false : (input.offset ?? 0) + input.limit < totalRow.count,\n total: totalRow.count,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly tokenHash: string\n readonly now: Date\n }): Promise<AccessTokenRecord | null> {\n const row = this.db\n .query(\n `\n SELECT *\n FROM auth_access_tokens\n WHERE project_id = ?\n AND id = ?\n AND kind = ?\n AND token_hash = ?\n AND revoked_at IS NULL\n AND expires_at > ?\n `\n )\n .get(\n params.projectId,\n params.id,\n params.kind,\n params.tokenHash,\n toIso(params.now)\n ) as SqliteAuthAccessTokenRow | null\n\n return row ? rowToAccessTokenRecord(row) : null\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<AccessTokenRecord> {\n const existing = await this.getById(params)\n if (!existing) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_access_tokens\n SET revoked_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(params.revokedAt), params.projectId, params.id)\n\n return { ...existing, revokedAt: new Date(params.revokedAt) }\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastUsedAt: Date\n readonly userAgent?: string\n readonly ipAddress?: string\n }): Promise<AccessTokenRecord> {\n const existing = await this.getById(params)\n if (!existing) {\n throw new AuthStorageError(\n \"missing_access_token\",\n `[Sixb] Access token '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n const lastUsedUserAgent = params.userAgent ?? existing.lastUsedUserAgent\n const lastUsedIpAddress = params.ipAddress ?? existing.lastUsedIpAddress\n\n this.db\n .query(\n `\n UPDATE auth_access_tokens\n SET last_used_at = ?,\n last_used_user_agent = ?,\n last_used_ip_address = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(\n toIso(params.lastUsedAt),\n lastUsedUserAgent ?? null,\n lastUsedIpAddress ?? null,\n params.projectId,\n params.id\n )\n\n return {\n ...existing,\n lastUsedAt: new Date(params.lastUsedAt),\n lastUsedUserAgent,\n lastUsedIpAddress,\n }\n }\n}\n\nfunction assertSubjectExists(\n db: Database,\n projectId: string,\n subjectType: CreateAuthAccessTokenInput[\"subject\"][\"type\"],\n subjectId: string\n): void {\n if (subjectType === \"user\") {\n const row = db\n .query(\"SELECT * FROM auth_users WHERE project_id = ? AND id = ?\")\n .get(projectId, subjectId) as SqliteAuthUserRow | null\n if (row) return\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${subjectId}' not found for project '${projectId}'.`\n )\n }\n\n const row = db\n .query(\"SELECT * FROM auth_service_accounts WHERE project_id = ? AND id = ?\")\n .get(projectId, subjectId) as SqliteAuthServiceAccountRow | null\n if (row) return\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${subjectId}' not found for project '${projectId}'.`\n )\n}\n\nfunction assertKindMatchesSubject(input: CreateAuthAccessTokenInput): void {\n if (\n (input.kind === \"personal\" && input.subject.type === \"user\") ||\n (input.kind === \"serviceAccount\" && input.subject.type === \"serviceAccount\")\n ) {\n return\n }\n\n throw new AuthStorageError(\n \"invalid_input\",\n `[Sixb] Access token kind '${input.kind}' cannot target subject type '${input.subject.type}'.`\n )\n}\n",
23
25
  "import type { Principal } from \"@sixb/core\"\nimport type {\n AccessTokenRecord,\n DeviceAuthorizationRecord,\n GroupMembershipRecord,\n GroupMembershipSource,\n InvitationRecord,\n InvitationStatus,\n MagicLinkRecord,\n OidcAuthorizationAttemptRecord,\n ServiceAccountGroupMembershipRecord,\n ServiceAccountRecord,\n ServiceAccountStatus,\n SessionRecord,\n UserIdentityRecord,\n UserRecord,\n UserStatus,\n} from \"@sixb/core/storage\"\n\nexport interface SqliteAuthUserRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly display_name: string | null\n readonly avatar_url: string | null\n readonly status: UserStatus\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthUserIdentityRow {\n readonly project_id: string\n readonly strategy_id: string\n readonly subject: string\n readonly user_id: string\n readonly claims: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthServiceAccountRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly description: string | null\n readonly status: ServiceAccountStatus\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\nexport interface SqliteAuthServiceAccountGroupMembershipRow {\n readonly project_id: string\n readonly service_account_id: string\n readonly group_id: string\n readonly source: ServiceAccountGroupMembershipRecord[\"source\"]\n readonly created_at: string\n}\n\nexport interface SqliteAuthSessionRow {\n readonly project_id: string\n readonly id: string\n readonly user_id: string\n readonly strategy_id: string\n readonly token_hash: string\n readonly created_at: string\n readonly expires_at: string\n readonly absolute_expires_at: string | null\n readonly revoked_at: string | null\n readonly last_seen_at: string | null\n readonly user_agent: string | null\n readonly ip_address: string | null\n readonly client_name: string | null\n readonly access_expires_at: string | null\n readonly refresh_token_hash: string | null\n readonly previous_refresh_token_hash: string | null\n readonly refreshed_at: string | null\n}\n\nexport interface SqliteAuthAccessTokenRow {\n readonly project_id: string\n readonly id: string\n readonly name: string\n readonly kind: AccessTokenRecord[\"kind\"]\n readonly subject_type: AccessTokenRecord[\"subject\"][\"type\"]\n readonly subject_id: string\n readonly token_hash: string\n readonly group_ids: string | null\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly revoked_at: string | null\n readonly last_used_at: string | null\n readonly last_used_user_agent: string | null\n readonly last_used_ip_address: string | null\n}\n\nexport interface SqliteAuthInvitationRow {\n readonly project_id: string\n readonly id: string\n readonly email: string\n readonly status: InvitationStatus\n readonly created_by_principal_type: Principal[\"type\"] | null\n readonly created_by_principal_id: string | null\n readonly created_by_session_id: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly expires_at: string\n readonly accepted_at: string | null\n readonly revoked_at: string | null\n}\n\nexport interface SqliteAuthGroupMembershipRow {\n readonly project_id: string\n readonly user_id: string\n readonly group_id: string\n readonly source: GroupMembershipSource\n readonly created_at: string\n}\n\nexport interface SqliteAuthMagicLinkRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly email: string\n readonly token_hash: string\n readonly return_to: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly consumed_at: string | null\n readonly revoked_at: string | null\n}\n\nexport interface SqliteAuthOidcAttemptRow {\n readonly project_id: string\n readonly id: string\n readonly strategy_id: string\n readonly state_hash: string\n readonly nonce_hash: string\n readonly code_verifier: string\n readonly return_to: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly consumed_at: string | null\n}\n\nexport interface SqliteAuthDeviceAuthorizationRow {\n readonly project_id: string\n readonly id: string\n readonly device_code_hash: string\n readonly user_code: string\n readonly client_name: string\n readonly status: DeviceAuthorizationRecord[\"status\"]\n readonly approved_user_id: string | null\n readonly approved_session_id: string | null\n readonly created_at: string\n readonly expires_at: string\n readonly approved_at: string | null\n readonly denied_at: string | null\n readonly consumed_at: string | null\n}\n\nexport function rowToUserRecord(row: SqliteAuthUserRow): UserRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n displayName: row.display_name ?? undefined,\n avatarUrl: row.avatar_url ?? undefined,\n status: row.status,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToIdentityRecord(row: SqliteAuthUserIdentityRow): UserIdentityRecord {\n return {\n projectId: row.project_id,\n strategyId: row.strategy_id,\n subject: row.subject,\n userId: row.user_id,\n claims: parseOptionalRecord(row.claims),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountRecord(row: SqliteAuthServiceAccountRow): ServiceAccountRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n description: row.description ?? undefined,\n status: row.status,\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nexport function rowToServiceAccountGroupMembershipRecord(\n row: SqliteAuthServiceAccountGroupMembershipRow\n): ServiceAccountGroupMembershipRecord {\n return {\n projectId: row.project_id,\n serviceAccountId: row.service_account_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport function rowToSessionRecord(row: SqliteAuthSessionRow): SessionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n userId: row.user_id,\n strategyId: row.strategy_id,\n tokenHash: row.token_hash,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n absoluteExpiresAt: row.absolute_expires_at ? new Date(row.absolute_expires_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n lastSeenAt: row.last_seen_at ? new Date(row.last_seen_at) : undefined,\n userAgent: row.user_agent ?? undefined,\n ipAddress: row.ip_address ?? undefined,\n bearer:\n row.refresh_token_hash !== null && row.client_name !== null && row.access_expires_at !== null\n ? {\n clientName: row.client_name,\n accessExpiresAt: new Date(row.access_expires_at),\n refreshTokenHash: row.refresh_token_hash,\n previousRefreshTokenHash: row.previous_refresh_token_hash ?? undefined,\n refreshedAt: row.refreshed_at ? new Date(row.refreshed_at) : undefined,\n }\n : undefined,\n }\n}\n\nexport function rowToAccessTokenRecord(row: SqliteAuthAccessTokenRow): AccessTokenRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n name: row.name,\n kind: row.kind,\n subject: { type: row.subject_type, id: row.subject_id },\n tokenHash: row.token_hash,\n groupIds: parseOptionalStringArray(row.group_ids),\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n lastUsedAt: row.last_used_at ? new Date(row.last_used_at) : undefined,\n lastUsedUserAgent: row.last_used_user_agent ?? undefined,\n lastUsedIpAddress: row.last_used_ip_address ?? undefined,\n }\n}\n\nexport function rowToInvitationRecord(\n row: SqliteAuthInvitationRow,\n groupIds: readonly string[]\n): InvitationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n email: row.email,\n groupIds,\n status: row.status,\n createdByPrincipal:\n row.created_by_principal_type && row.created_by_principal_id\n ? {\n type: row.created_by_principal_type,\n id: row.created_by_principal_id,\n }\n : undefined,\n createdBySessionId: row.created_by_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n expiresAt: new Date(row.expires_at),\n acceptedAt: row.accepted_at ? new Date(row.accepted_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToGroupMembershipRecord(\n row: SqliteAuthGroupMembershipRow\n): GroupMembershipRecord {\n return {\n projectId: row.project_id,\n userId: row.user_id,\n groupId: row.group_id,\n source: row.source,\n createdAt: new Date(row.created_at),\n }\n}\n\nexport function rowToMagicLinkRecord(row: SqliteAuthMagicLinkRow): MagicLinkRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n email: row.email,\n tokenHash: row.token_hash,\n returnTo: row.return_to ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n revokedAt: row.revoked_at ? new Date(row.revoked_at) : undefined,\n }\n}\n\nexport function rowToOidcAuthorizationAttemptRecord(\n row: SqliteAuthOidcAttemptRow\n): OidcAuthorizationAttemptRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n strategyId: row.strategy_id,\n stateHash: row.state_hash,\n nonceHash: row.nonce_hash,\n codeVerifier: row.code_verifier,\n returnTo: row.return_to ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n }\n}\n\nexport function rowToDeviceAuthorizationRecord(\n row: SqliteAuthDeviceAuthorizationRow\n): DeviceAuthorizationRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n deviceCodeHash: row.device_code_hash,\n userCode: row.user_code,\n clientName: row.client_name,\n status: row.status,\n approvedUserId: row.approved_user_id ?? undefined,\n approvedSessionId: row.approved_session_id ?? undefined,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n approvedAt: row.approved_at ? new Date(row.approved_at) : undefined,\n deniedAt: row.denied_at ? new Date(row.denied_at) : undefined,\n consumedAt: row.consumed_at ? new Date(row.consumed_at) : undefined,\n }\n}\n\nexport function serializeOptionalRecord(\n value: Readonly<Record<string, unknown>> | undefined\n): string | null {\n return value ? JSON.stringify(value) : null\n}\n\nexport function serializeOptionalStringArray(value: readonly string[] | undefined): string | null {\n return value === undefined ? null : JSON.stringify(value)\n}\n\nfunction parseOptionalRecord(value: string | null): Readonly<Record<string, unknown>> | undefined {\n return value ? (JSON.parse(value) as Readonly<Record<string, unknown>>) : undefined\n}\n\nfunction parseOptionalStringArray(value: string | null): readonly string[] | undefined {\n return value === null ? undefined : (JSON.parse(value) as readonly string[])\n}\n",
@@ -30,10 +32,10 @@
30
32
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthOidcAuthorizationAttemptStore,\n CreateOidcAuthorizationAttemptInput,\n OidcAuthorizationAttemptRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\nimport {\n assertNonEmpty,\n consumeOidcAttempt,\n getOidcAttemptById,\n getOidcAttemptRowById,\n mapUniqueConstraintError,\n toIso,\n} from \"./shared\"\n\nexport class SqliteAuthOidcAuthorizationAttemptStore implements AuthOidcAuthorizationAttemptStore {\n constructor(private readonly db: Database) {}\n\n async create(\n input: CreateOidcAuthorizationAttemptInput\n ): Promise<OidcAuthorizationAttemptRecord> {\n return runImmediateTransaction(this.db, () => {\n const id = assertNonEmpty(input.id, \"OIDC authorization attempt id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const strategyId = assertNonEmpty(input.strategyId, \"Strategy id\")\n const stateHash = assertNonEmpty(input.stateHash, \"OIDC state hash\")\n const nonceHash = assertNonEmpty(input.nonceHash, \"OIDC nonce hash\")\n const codeVerifier = assertNonEmpty(input.codeVerifier, \"OIDC code verifier\")\n\n if (getOidcAttemptRowById(this.db, { projectId, id })) {\n throw new AuthStorageError(\n \"duplicate_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' already exists for project '${projectId}'.`\n )\n }\n\n try {\n this.db\n .query(\n `\n INSERT INTO auth_oidc_authorization_attempts (\n project_id,\n id,\n strategy_id,\n state_hash,\n nonce_hash,\n code_verifier,\n return_to,\n created_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n projectId,\n id,\n strategyId,\n stateHash,\n nonceHash,\n codeVerifier,\n input.returnTo ?? null,\n toIso(input.createdAt),\n toIso(input.expiresAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_oidc_attempt\",\n `[Sixb] OIDC authorization attempt '${id}' already exists for project '${projectId}'.`\n )\n }\n\n return {\n id,\n projectId,\n strategyId,\n stateHash,\n nonceHash,\n codeVerifier,\n returnTo: input.returnTo,\n createdAt: new Date(input.createdAt),\n expiresAt: new Date(input.expiresAt),\n }\n })\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<OidcAuthorizationAttemptRecord | null> {\n return getOidcAttemptById(this.db, params)\n }\n\n async consume(params: {\n readonly projectId: string\n readonly id: string\n readonly stateHash: string\n readonly consumedAt: Date\n }): Promise<OidcAuthorizationAttemptRecord> {\n return runImmediateTransaction(this.db, () => consumeOidcAttempt(this.db, params))\n }\n}\n",
31
33
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthServiceAccountGroupMembershipStore,\n ReconcileAuthServiceAccountGroupMembershipsInput,\n ServiceAccountGroupMembershipRecord,\n UpsertAuthServiceAccountGroupMembershipInput,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type {\n SqliteAuthServiceAccountGroupMembershipRow,\n SqliteAuthServiceAccountRow,\n} from \"./rows\"\nimport { rowToServiceAccountGroupMembershipRecord } from \"./rows\"\nimport { assertNonEmpty, dateOrNow, normalizeGroupIds, toIso } from \"./shared\"\n\nexport class SqliteAuthServiceAccountGroupMembershipStore\n implements AuthServiceAccountGroupMembershipStore\n{\n constructor(private readonly db: Database) {}\n\n async upsert(\n input: UpsertAuthServiceAccountGroupMembershipInput\n ): Promise<ServiceAccountGroupMembershipRecord> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const serviceAccountId = assertNonEmpty(input.serviceAccountId, \"Service account id\")\n const groupId = assertNonEmpty(input.groupId, \"Group id\")\n const serviceAccount = this.db\n .query(\"SELECT * FROM auth_service_accounts WHERE project_id = ? AND id = ?\")\n .get(projectId, serviceAccountId) as SqliteAuthServiceAccountRow | null\n if (!serviceAccount) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${serviceAccountId}' not found for project '${projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n INSERT OR IGNORE INTO auth_service_account_group_memberships (\n project_id,\n service_account_id,\n group_id,\n source,\n created_at\n ) VALUES (?, ?, ?, ?, ?)\n `\n )\n .run(projectId, serviceAccountId, groupId, input.source, toIso(dateOrNow(input.createdAt)))\n\n const row = this.db\n .query(\n `\n SELECT *\n FROM auth_service_account_group_memberships\n WHERE project_id = ?\n AND service_account_id = ?\n AND group_id = ?\n `\n )\n .get(projectId, serviceAccountId, groupId) as SqliteAuthServiceAccountGroupMembershipRow\n return rowToServiceAccountGroupMembershipRecord(row)\n }\n\n async reconcileForServiceAccount(\n input: ReconcileAuthServiceAccountGroupMembershipsInput\n ): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const serviceAccountId = assertNonEmpty(input.serviceAccountId, \"Service account id\")\n const serviceAccount = this.db\n .query(\"SELECT * FROM auth_service_accounts WHERE project_id = ? AND id = ?\")\n .get(projectId, serviceAccountId) as SqliteAuthServiceAccountRow | null\n if (!serviceAccount) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${serviceAccountId}' not found for project '${projectId}'.`\n )\n }\n\n const groupIds = normalizeGroupIds(input.groupIds)\n const desired = new Set(groupIds)\n const existing = await this.listForServiceAccount({ projectId, serviceAccountId })\n for (const membership of existing) {\n if (membership.source === input.source && !desired.has(membership.groupId)) {\n this.db\n .query(\n `\n DELETE FROM auth_service_account_group_memberships\n WHERE project_id = ?\n AND service_account_id = ?\n AND group_id = ?\n AND source = ?\n `\n )\n .run(projectId, serviceAccountId, membership.groupId, input.source)\n }\n }\n\n const updatedAt = toIso(dateOrNow(input.updatedAt))\n for (const groupId of groupIds) {\n this.db\n .query(\n `\n INSERT INTO auth_service_account_group_memberships (\n project_id,\n service_account_id,\n group_id,\n source,\n created_at\n ) VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(project_id, service_account_id, group_id) DO UPDATE\n SET source = excluded.source\n `\n )\n .run(projectId, serviceAccountId, groupId, input.source, updatedAt)\n }\n\n return this.listForServiceAccount({ projectId, serviceAccountId })\n }\n\n async listForServiceAccount(params: {\n readonly projectId: string\n readonly serviceAccountId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const rows = this.db\n .query(\n `\n SELECT *\n FROM auth_service_account_group_memberships\n WHERE project_id = ?\n AND service_account_id = ?\n ORDER BY group_id ASC\n `\n )\n .all(\n params.projectId,\n params.serviceAccountId\n ) as SqliteAuthServiceAccountGroupMembershipRow[]\n\n return rows.map(rowToServiceAccountGroupMembershipRecord)\n }\n\n async listForGroup(params: {\n readonly projectId: string\n readonly groupId: string\n }): Promise<readonly ServiceAccountGroupMembershipRecord[]> {\n const rows = this.db\n .query(\n `\n SELECT *\n FROM auth_service_account_group_memberships\n WHERE project_id = ?\n AND group_id = ?\n ORDER BY service_account_id ASC\n `\n )\n .all(params.projectId, params.groupId) as SqliteAuthServiceAccountGroupMembershipRow[]\n\n return rows.map(rowToServiceAccountGroupMembershipRecord)\n }\n}\n",
32
34
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthServiceAccountStore,\n CreateAuthServiceAccountInput,\n ListAuthServiceAccountsInput,\n ListAuthServiceAccountsResult,\n ServiceAccountRecord,\n UpdateAuthServiceAccountInput,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { SqliteAuthServiceAccountRow } from \"./rows\"\nimport { rowToServiceAccountRecord } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n dateOrNow,\n hasEmptyFilter,\n mapUniqueConstraintError,\n type SqliteValue,\n toIso,\n} from \"./shared\"\n\nexport class SqliteAuthServiceAccountStore implements AuthServiceAccountStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAuthServiceAccountInput): Promise<ServiceAccountRecord> {\n const id = assertNonEmpty(input.id, \"Service account id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const name = assertNonEmpty(input.name, \"Service account name\")\n const createdAt = dateOrNow(input.createdAt)\n const updatedAt = input.updatedAt ? new Date(input.updatedAt) : createdAt\n\n try {\n this.db\n .query(\n `\n INSERT INTO auth_service_accounts (\n project_id,\n id,\n name,\n description,\n status,\n created_by_principal_type,\n created_by_principal_id,\n created_by_session_id,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n projectId,\n id,\n name,\n input.description ?? null,\n input.status ?? \"active\",\n input.createdByPrincipal?.type ?? null,\n input.createdByPrincipal?.id ?? null,\n input.createdBySessionId ?? null,\n toIso(createdAt),\n toIso(updatedAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_service_account\",\n `[Sixb] Service account '${id}' already exists for project '${projectId}'.`\n )\n }\n\n return {\n id,\n projectId,\n name,\n description: input.description,\n status: input.status ?? \"active\",\n createdByPrincipal: input.createdByPrincipal,\n createdBySessionId: input.createdBySessionId,\n createdAt,\n updatedAt,\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ServiceAccountRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM auth_service_accounts WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as SqliteAuthServiceAccountRow | null\n return row ? rowToServiceAccountRecord(row) : null\n }\n\n async update(input: UpdateAuthServiceAccountInput): Promise<ServiceAccountRecord> {\n const id = assertNonEmpty(input.id, \"Service account id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const updatedAt = dateOrNow(input.updatedAt)\n const name =\n input.name === undefined ? null : assertNonEmpty(input.name, \"Service account name\")\n this.db\n .query(\n `\n UPDATE auth_service_accounts\n SET name = COALESCE(?, name),\n description = COALESCE(?, description),\n status = COALESCE(?, status),\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(name, input.description ?? null, input.status ?? null, toIso(updatedAt), projectId, id)\n\n const updated = await this.getById({ projectId, id })\n if (!updated) {\n throw new AuthStorageError(\n \"missing_service_account\",\n `[Sixb] Service account '${id}' not found for project '${projectId}'.`\n )\n }\n return updated\n }\n\n async list(input: ListAuthServiceAccountsInput): Promise<ListAuthServiceAccountsResult> {\n if (hasEmptyFilter(input.statuses)) {\n return { serviceAccounts: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM auth_service_accounts ${where}`)\n .get(...args) as { readonly count: number }\n const queryArgs = [...args]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_service_accounts\n ${where}\n ORDER BY created_at ${order}, id ${order}\n `,\n queryArgs,\n input\n )\n const rows = this.db.query(query).all(...queryArgs) as SqliteAuthServiceAccountRow[]\n\n return {\n serviceAccounts: rows.map(rowToServiceAccountRecord),\n hasMore:\n input.limit === undefined ? false : (input.offset ?? 0) + input.limit < totalRow.count,\n total: totalRow.count,\n }\n }\n}\n",
33
- "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthSessionStore,\n CreateAuthSessionInput,\n RotateSessionRefreshTokenResult,\n SessionRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\nimport type { SqliteAuthSessionRow } from \"./rows\"\nimport { rowToSessionRecord } from \"./rows\"\nimport {\n createSession,\n getSessionById,\n getSessionRowById,\n requireSessionById,\n revokeActiveSessionsForUser,\n toIso,\n} from \"./shared\"\n\nexport class SqliteAuthSessionStore implements AuthSessionStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAuthSessionInput): Promise<SessionRecord> {\n return runImmediateTransaction(this.db, () => createSession(this.db, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null> {\n return getSessionById(this.db, params)\n }\n\n async listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]> {\n const rows = this.db\n .query(\n `\n SELECT *\n FROM auth_sessions\n WHERE project_id = ?\n AND user_id = ?\n AND revoked_at IS NULL\n AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n ORDER BY COALESCE(last_seen_at, created_at) DESC, created_at DESC, id DESC\n `\n )\n .all(\n params.projectId,\n params.userId,\n toIso(params.now),\n toIso(params.now)\n ) as SqliteAuthSessionRow[]\n\n return rows.map(rowToSessionRecord)\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = getSessionRowById(this.db, params)\n\n if (\n !row ||\n row.refresh_token_hash !== null ||\n row.token_hash !== params.tokenHash ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = getSessionRowById(this.db, params)\n if (\n !row ||\n row.access_expires_at === null ||\n row.token_hash !== params.tokenHash ||\n new Date(row.access_expires_at) <= params.now ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async rotateRefreshToken(\n params: Parameters<AuthSessionStore[\"rotateRefreshToken\"]>[0]\n ): Promise<RotateSessionRefreshTokenResult> {\n return runImmediateTransaction(this.db, (): RotateSessionRefreshTokenResult => {\n const row = getSessionRowById(this.db, params)\n if (!row?.refresh_token_hash || !isLiveSessionRow(row, params.now)) {\n return { status: \"invalid\" }\n }\n\n const replacedRecently =\n row.previous_refresh_token_hash === params.refreshTokenHash &&\n row.refreshed_at !== null &&\n params.now.getTime() - new Date(row.refreshed_at).getTime() <= params.reuseGraceMs\n if (row.refresh_token_hash !== params.refreshTokenHash && !replacedRecently) {\n if (row.previous_refresh_token_hash !== params.refreshTokenHash) {\n return { status: \"invalid\" }\n }\n this.db\n .query(\"UPDATE auth_sessions SET revoked_at = ? WHERE project_id = ? AND id = ?\")\n .run(toIso(params.now), params.projectId, params.id)\n return { status: \"reused\" }\n }\n\n const expiresAt = toIso(params.next.expiresAt)\n this.db\n .query(`\n UPDATE auth_sessions\n SET token_hash = ?,\n access_expires_at = ?,\n previous_refresh_token_hash = refresh_token_hash,\n refresh_token_hash = ?,\n refreshed_at = ?,\n last_seen_at = ?,\n expires_at = MAX(expires_at, MIN(?, COALESCE(absolute_expires_at, ?)))\n WHERE project_id = ? AND id = ?\n `)\n .run(\n params.next.tokenHash,\n toIso(params.next.accessExpiresAt),\n params.next.refreshTokenHash,\n toIso(params.now),\n toIso(params.now),\n expiresAt,\n expiresAt,\n params.projectId,\n params.id\n )\n const session = getSessionById(this.db, params)\n return session ? { status: \"rotated\", session } : { status: \"invalid\" }\n })\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null> {\n return runImmediateTransaction(this.db, () => {\n const now = toIso(params.now)\n const expiresAt = toIso(params.expiresAt)\n const result = this.db\n .query(\n `\n UPDATE auth_sessions\n SET expires_at = MAX(\n expires_at,\n MIN(?, COALESCE(absolute_expires_at, ?))\n ),\n last_seen_at = ?\n WHERE project_id = ?\n AND id = ?\n AND token_hash = ?\n AND refresh_token_hash IS NULL\n AND revoked_at IS NULL\n AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n `\n )\n .run(expiresAt, expiresAt, now, params.projectId, params.id, params.tokenHash, now, now)\n\n return result.changes === 0 ? null : getSessionById(this.db, params)\n })\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = getSessionRowById(this.db, params)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_sessions\n SET revoked_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(params.revokedAt), params.projectId, params.id)\n\n return rowToSessionRecord({\n ...existing,\n revoked_at: toIso(params.revokedAt),\n })\n })\n }\n\n async revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return runImmediateTransaction(this.db, () => revokeActiveSessionsForUser(this.db, params))\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord> {\n return runImmediateTransaction(this.db, () => {\n requireSessionById(this.db, params)\n\n this.db\n .query(\n `\n UPDATE auth_sessions\n SET last_seen_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(params.lastSeenAt), params.projectId, params.id)\n\n const updated = getSessionById(this.db, params)\n if (!updated) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n return updated\n })\n }\n}\n\nfunction isLiveSessionRow(row: SqliteAuthSessionRow, now: Date): boolean {\n return (\n row.revoked_at === null &&\n new Date(row.expires_at) > now &&\n (row.absolute_expires_at === null || new Date(row.absolute_expires_at) > now)\n )\n}\n",
35
+ "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthSessionStore,\n CreateAuthSessionInput,\n ListAuthSessionsInput,\n ListAuthSessionsResult,\n RotateSessionRefreshTokenResult,\n SessionRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\nimport type { SqliteAuthSessionRow } from \"./rows\"\nimport { rowToSessionRecord } from \"./rows\"\nimport {\n createSession,\n getSessionById,\n getSessionRowById,\n requireSessionById,\n revokeActiveSessionsForUser,\n toIso,\n} from \"./shared\"\n\nexport class SqliteAuthSessionStore implements AuthSessionStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAuthSessionInput): Promise<SessionRecord> {\n return runImmediateTransaction(this.db, () => createSession(this.db, input))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<SessionRecord | null> {\n return getSessionById(this.db, params)\n }\n\n async listActiveByUserId(params: {\n readonly projectId: string\n readonly userId: string\n readonly now: Date\n }): Promise<readonly SessionRecord[]> {\n const rows = this.db\n .query(\n `\n SELECT *\n FROM auth_sessions\n WHERE project_id = ?\n AND user_id = ?\n AND revoked_at IS NULL\n AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n ORDER BY COALESCE(last_seen_at, created_at) DESC, created_at DESC, id DESC\n `\n )\n .all(\n params.projectId,\n params.userId,\n toIso(params.now),\n toIso(params.now)\n ) as SqliteAuthSessionRow[]\n\n return rows.map(rowToSessionRecord)\n }\n\n async listByUserId(params: ListAuthSessionsInput): Promise<ListAuthSessionsResult> {\n const rows = this.db\n .query(\n `\n SELECT *\n FROM auth_sessions\n WHERE project_id = ? AND user_id = ? AND created_at <= ?\n ORDER BY created_at DESC, id DESC\n LIMIT ? OFFSET ?\n `\n )\n .all(\n params.projectId,\n params.userId,\n params.before ? toIso(params.before.createdAt) : \"9999-12-31T23:59:59.999Z\",\n params.limit + 1,\n params.before?.skip ?? 0\n ) as SqliteAuthSessionRow[]\n\n return {\n sessions: rows.slice(0, params.limit).map(rowToSessionRecord),\n hasMore: rows.length > params.limit,\n }\n }\n\n async findValidByTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = getSessionRowById(this.db, params)\n\n if (\n !row ||\n row.refresh_token_hash !== null ||\n row.token_hash !== params.tokenHash ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async findValidByAccessTokenHash(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n }): Promise<SessionRecord | null> {\n const row = getSessionRowById(this.db, params)\n if (\n !row ||\n row.access_expires_at === null ||\n row.token_hash !== params.tokenHash ||\n new Date(row.access_expires_at) <= params.now ||\n !isLiveSessionRow(row, params.now)\n ) {\n return null\n }\n\n return rowToSessionRecord(row)\n }\n\n async rotateRefreshToken(\n params: Parameters<AuthSessionStore[\"rotateRefreshToken\"]>[0]\n ): Promise<RotateSessionRefreshTokenResult> {\n return runImmediateTransaction(this.db, (): RotateSessionRefreshTokenResult => {\n const row = getSessionRowById(this.db, params)\n if (!row?.refresh_token_hash || !isLiveSessionRow(row, params.now)) {\n return { status: \"invalid\" }\n }\n\n const replacedRecently =\n row.previous_refresh_token_hash === params.refreshTokenHash &&\n row.refreshed_at !== null &&\n params.now.getTime() - new Date(row.refreshed_at).getTime() <= params.reuseGraceMs\n if (row.refresh_token_hash !== params.refreshTokenHash && !replacedRecently) {\n if (row.previous_refresh_token_hash !== params.refreshTokenHash) {\n return { status: \"invalid\" }\n }\n this.db\n .query(\"UPDATE auth_sessions SET revoked_at = ? WHERE project_id = ? AND id = ?\")\n .run(toIso(params.now), params.projectId, params.id)\n return { status: \"reused\" }\n }\n\n const expiresAt = toIso(params.next.expiresAt)\n this.db\n .query(`\n UPDATE auth_sessions\n SET token_hash = ?,\n access_expires_at = ?,\n previous_refresh_token_hash = refresh_token_hash,\n refresh_token_hash = ?,\n refreshed_at = ?,\n last_seen_at = ?,\n expires_at = MAX(expires_at, MIN(?, COALESCE(absolute_expires_at, ?)))\n WHERE project_id = ? AND id = ?\n `)\n .run(\n params.next.tokenHash,\n toIso(params.next.accessExpiresAt),\n params.next.refreshTokenHash,\n toIso(params.now),\n toIso(params.now),\n expiresAt,\n expiresAt,\n params.projectId,\n params.id\n )\n const session = getSessionById(this.db, params)\n return session ? { status: \"rotated\", session } : { status: \"invalid\" }\n })\n }\n\n async renewIfValid(params: {\n readonly projectId: string\n readonly id: string\n readonly tokenHash: string\n readonly now: Date\n readonly expiresAt: Date\n }): Promise<SessionRecord | null> {\n return runImmediateTransaction(this.db, () => {\n const now = toIso(params.now)\n const expiresAt = toIso(params.expiresAt)\n const result = this.db\n .query(\n `\n UPDATE auth_sessions\n SET expires_at = MAX(\n expires_at,\n MIN(?, COALESCE(absolute_expires_at, ?))\n ),\n last_seen_at = ?\n WHERE project_id = ?\n AND id = ?\n AND token_hash = ?\n AND refresh_token_hash IS NULL\n AND revoked_at IS NULL\n AND expires_at > ?\n AND (absolute_expires_at IS NULL OR absolute_expires_at > ?)\n `\n )\n .run(expiresAt, expiresAt, now, params.projectId, params.id, params.tokenHash, now, now)\n\n return result.changes === 0 ? null : getSessionById(this.db, params)\n })\n }\n\n async revoke(params: {\n readonly projectId: string\n readonly id: string\n readonly revokedAt: Date\n }): Promise<SessionRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = getSessionRowById(this.db, params)\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE auth_sessions\n SET revoked_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(params.revokedAt), params.projectId, params.id)\n\n return rowToSessionRecord({\n ...existing,\n revoked_at: toIso(params.revokedAt),\n })\n })\n }\n\n async revokeActiveForUser(params: {\n readonly projectId: string\n readonly userId: string\n readonly revokedAt: Date\n }): Promise<readonly SessionRecord[]> {\n return runImmediateTransaction(this.db, () => revokeActiveSessionsForUser(this.db, params))\n }\n\n async touch(params: {\n readonly projectId: string\n readonly id: string\n readonly lastSeenAt: Date\n }): Promise<SessionRecord> {\n return runImmediateTransaction(this.db, () => {\n requireSessionById(this.db, params)\n\n this.db\n .query(\n `\n UPDATE auth_sessions\n SET last_seen_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(toIso(params.lastSeenAt), params.projectId, params.id)\n\n const updated = getSessionById(this.db, params)\n if (!updated) {\n throw new AuthStorageError(\n \"missing_session\",\n `[Sixb] Session '${params.id}' not found for project '${params.projectId}'.`\n )\n }\n return updated\n })\n }\n}\n\nfunction isLiveSessionRow(row: SqliteAuthSessionRow, now: Date): boolean {\n return (\n row.revoked_at === null &&\n new Date(row.expires_at) > now &&\n (row.absolute_expires_at === null || new Date(row.absolute_expires_at) > now)\n )\n}\n",
34
36
  "import type { Database } from \"bun:sqlite\"\nimport type {\n AuthUserStore,\n CreateAuthUserInput,\n ListAuthUsersInput,\n ListAuthUsersResult,\n UpdateAuthUserProfileInput,\n UpdateAuthUserStatusInput,\n UserRecord,\n} from \"@sixb/core/storage\"\nimport { AuthStorageError } from \"@sixb/core/storage\"\nimport type { SqliteAuthUserRow } from \"./rows\"\nimport { rowToUserRecord } from \"./rows\"\nimport {\n appendPagination,\n assertNonEmpty,\n dateOrNow,\n getUserRowByEmail,\n getUserRowById,\n hasEmptyFilter,\n mapUniqueConstraintError,\n normalizeEmail,\n type SqliteValue,\n toIso,\n} from \"./shared\"\n\nexport class SqliteAuthUserStore implements AuthUserStore {\n constructor(private readonly db: Database) {}\n\n async create(input: CreateAuthUserInput): Promise<UserRecord> {\n const id = assertNonEmpty(input.id, \"User id\")\n const projectId = assertNonEmpty(input.projectId, \"Project id\")\n const email = normalizeEmail(input.email)\n\n if (getUserRowById(this.db, { projectId, id })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User '${id}' already exists for project '${projectId}'.`\n )\n }\n\n if (getUserRowByEmail(this.db, { projectId, email })) {\n throw new AuthStorageError(\n \"duplicate_user\",\n `[Sixb] User email '${email}' already exists for project '${projectId}'.`\n )\n }\n\n const createdAt = dateOrNow(input.createdAt)\n const updatedAt = input.updatedAt ? new Date(input.updatedAt) : createdAt\n\n try {\n this.db\n .query(\n `\n INSERT INTO auth_users (\n project_id,\n id,\n email,\n display_name,\n avatar_url,\n status,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n projectId,\n id,\n email,\n input.displayName ?? null,\n input.avatarUrl ?? null,\n input.status ?? \"active\",\n toIso(createdAt),\n toIso(updatedAt)\n )\n } catch (error) {\n mapUniqueConstraintError(\n error,\n \"duplicate_user\",\n `[Sixb] User '${id}' already exists for project '${projectId}'.`\n )\n }\n\n return {\n id,\n projectId,\n email,\n displayName: input.displayName,\n avatarUrl: input.avatarUrl,\n status: input.status ?? \"active\",\n createdAt,\n updatedAt,\n }\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<UserRecord | null> {\n const row = getUserRowById(this.db, params)\n return row ? rowToUserRecord(row) : null\n }\n\n async getByEmail(params: {\n readonly projectId: string\n readonly email: string\n }): Promise<UserRecord | null> {\n const row = getUserRowByEmail(this.db, params)\n return row ? rowToUserRecord(row) : null\n }\n\n async updateProfile(input: UpdateAuthUserProfileInput): Promise<UserRecord> {\n const existing = getUserRowById(this.db, {\n projectId: input.projectId,\n id: input.id,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const updatedAt = dateOrNow(input.updatedAt)\n this.db\n .query(\n `\n UPDATE auth_users\n SET display_name = ?,\n avatar_url = ?,\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(\n input.displayName ?? null,\n input.avatarUrl ?? null,\n toIso(updatedAt),\n input.projectId,\n input.id\n )\n\n return rowToUserRecord({\n ...existing,\n display_name: input.displayName ?? null,\n avatar_url: input.avatarUrl ?? null,\n updated_at: toIso(updatedAt),\n })\n }\n\n async updateStatus(input: UpdateAuthUserStatusInput): Promise<UserRecord> {\n const existing = getUserRowById(this.db, {\n projectId: input.projectId,\n id: input.id,\n })\n\n if (!existing) {\n throw new AuthStorageError(\n \"missing_user\",\n `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const updatedAt = dateOrNow(input.updatedAt)\n this.db\n .query(\n `\n UPDATE auth_users\n SET status = ?,\n updated_at = ?\n WHERE project_id = ?\n AND id = ?\n `\n )\n .run(input.status, toIso(updatedAt), input.projectId, input.id)\n\n return rowToUserRecord({\n ...existing,\n status: input.status,\n updated_at: toIso(updatedAt),\n })\n }\n\n async list(input: ListAuthUsersInput): Promise<ListAuthUsersResult> {\n if (hasEmptyFilter(input.statuses)) {\n return { users: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM auth_users ${where}`)\n .get(...args) as { readonly count: number }\n\n const queryArgs = [...args]\n const query = appendPagination(\n `\n SELECT *\n FROM auth_users\n ${where}\n ORDER BY created_at ${order}, id ${order}\n `,\n queryArgs,\n input\n )\n const rows = this.db.query(query).all(...queryArgs) as SqliteAuthUserRow[]\n\n return {\n users: rows.map(rowToUserRecord),\n hasMore: (input.offset ?? 0) + rows.length < totalRow.count,\n total: totalRow.count,\n }\n }\n}\n",
35
37
  "import type { Database, SQLQueryBindings } from \"bun:sqlite\"\nimport {\n type ConnectorConnectionPersistence,\n type ConnectorConnectionPersistenceBackend,\n type ConnectorConnectionPersistenceScope,\n DurableConnectorConnectionStorage,\n} from \"@sixb/core/internal/connector-connection-storage-provider\"\nimport type {\n ConnectorAuthorizationAttemptRecord,\n ConnectorAuthorizationRecord,\n ConnectorConnectionRecord,\n ConnectorConnectionRunRecord,\n ConnectorCredentialMutation,\n} from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport { runImmediateTransactionAsync, type SqliteStoreConnection } from \"./transactions\"\n\nexport class SqliteConnectorConnectionStorage extends DurableConnectorConnectionStorage {\n private readonly clock: ConnectorConnectionTestClock\n\n constructor(connection: SqliteStoreConnection) {\n const clock = { offsetMs: 0 }\n super(new SqliteConnectorConnectionPersistenceBackend(connection.db, clock))\n this.clock = clock\n }\n\n /** Internal deterministic clock control used only by the provider contract suite. */\n advanceTimeForTesting(durationMs: number): void {\n this.clock.offsetMs += durationMs\n }\n}\n\nclass SqliteConnectorConnectionPersistenceBackend implements ConnectorConnectionPersistenceBackend {\n constructor(\n private readonly db: Database,\n private readonly clock: ConnectorConnectionTestClock\n ) {}\n\n read<T>(\n scope: ConnectorConnectionPersistenceScope,\n run: (persistence: ConnectorConnectionPersistence) => Promise<T>\n ): Promise<T> {\n return run(new SqliteConnectorConnectionPersistence(this.db, scope, this.clock))\n }\n\n transaction<T>(\n scope: ConnectorConnectionPersistenceScope,\n run: (persistence: ConnectorConnectionPersistence) => Promise<T>\n ): Promise<T> {\n return runImmediateTransactionAsync(this.db, () =>\n run(new SqliteConnectorConnectionPersistence(this.db, scope, this.clock))\n )\n }\n}\n\nclass SqliteConnectorConnectionPersistence implements ConnectorConnectionPersistence {\n constructor(\n private readonly db: Database,\n private readonly scope: ConnectorConnectionPersistenceScope,\n private readonly clock: ConnectorConnectionTestClock\n ) {}\n\n async now(): Promise<Date> {\n const row = this.db.query(\"SELECT strftime('%Y-%m-%dT%H:%M:%fZ', 'now') AS now\").get() as {\n readonly now: string\n }\n return new Date(new Date(row.now).getTime() + this.clock.offsetMs)\n }\n\n async insertAuthorizationAttempt(record: ConnectorAuthorizationAttemptRecord): Promise<boolean> {\n try {\n this.db\n .query(\n `\n INSERT INTO connector_authorization_attempts (\n project_id, connector_id, id, slot, initiated_by_execution_id,\n state_hash, code_verifier, redirect_uri, connection_run_id, return_to,\n callback_binding_hash, reauthorization_id, reauthorization_revision,\n reauthorization_connection_ids, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.connectorId,\n record.id,\n record.slot,\n record.initiatedByExecutionId,\n record.stateHash,\n record.codeVerifier === undefined ? null : json(record.codeVerifier),\n record.redirectUri,\n record.connectionRunId ?? null,\n record.returnTo ?? null,\n record.callbackBindingHash ?? null,\n record.reauthorizationId ?? null,\n record.reauthorizationRevision ?? null,\n record.reauthorizationConnectionIds ? json(record.reauthorizationConnectionIds) : null,\n iso(record.createdAt),\n iso(record.expiresAt)\n )\n return true\n } catch (error) {\n if (isUniqueConstraintError(error)) return false\n throw error\n }\n }\n\n async getAuthorizationAttempt(id: string): Promise<ConnectorAuthorizationAttemptRecord | null> {\n const row = this.getById<SqliteAuthorizationAttemptRow>(\"connector_authorization_attempts\", id)\n return row ? authorizationAttemptFromRow(row) : null\n }\n\n async getAuthorizationAttemptByConnectionRunId(\n connectionRunId: string\n ): Promise<ConnectorAuthorizationAttemptRecord | null> {\n if (!this.scope.connectorId) return null\n const row = this.db\n .query(\n `\n SELECT * FROM connector_authorization_attempts\n WHERE project_id = ? AND connector_id = ? AND connection_run_id = ?\n `\n )\n .get(\n this.scope.projectId,\n this.scope.connectorId,\n connectionRunId\n ) as SqliteAuthorizationAttemptRow | null\n return row ? authorizationAttemptFromRow(row) : null\n }\n\n async deleteAuthorizationAttempt(id: string): Promise<boolean> {\n return this.deleteById(\"connector_authorization_attempts\", id)\n }\n\n async insertConnectionRun(record: ConnectorConnectionRunRecord): Promise<boolean> {\n try {\n this.insertRun(record)\n return true\n } catch (error) {\n if (isUniqueConstraintError(error)) return false\n throw error\n }\n }\n\n async listPendingConnectionRuns(): Promise<readonly ConnectorConnectionRunRecord[]> {\n if (!this.scope.connectorId) return []\n const rows = this.db\n .query(`SELECT * FROM connector_connection_runs\n WHERE project_id = ? AND connector_id = ?\n AND (status = 'running' OR (status = 'waiting' AND waiting_for = 'account_selection'))`)\n .all(this.scope.projectId, this.scope.connectorId) as SqliteConnectionRunRow[]\n return rows.map(connectionRunFromRow)\n }\n\n async getConnectionRun(id: string): Promise<ConnectorConnectionRunRecord | null> {\n const row = this.getById<SqliteConnectionRunRow>(\"connector_connection_runs\", id)\n return row ? connectionRunFromRow(row) : null\n }\n\n async updateConnectionRun(record: ConnectorConnectionRunRecord): Promise<void> {\n const values = runValues(record)\n const result = this.db\n .query(\n `\n UPDATE connector_connection_runs\n SET kind = ?, slot = ?, initiated_by_execution_id = ?, status = ?,\n waiting_for = ?, processing_id = ?,\n callback_started_at = ?, expires_at = ?, authorization_id = ?,\n cleanup_authorization_id = ?, connections = ?, error = ?, updated_at = ?, finished_at = ?\n WHERE project_id = ? AND connector_id = ? AND id = ?\n `\n )\n .run(...values, record.projectId, record.connectorId, record.id)\n assertChanged(result.changes, \"connector connection run\", record.id)\n }\n\n async insertAuthorization(record: ConnectorAuthorizationRecord): Promise<boolean> {\n try {\n this.insertAuthorizationRow(record)\n return true\n } catch (error) {\n if (isUniqueConstraintError(error)) return false\n throw error\n }\n }\n\n async getAuthorization(id: string): Promise<ConnectorAuthorizationRecord | null> {\n const row = this.getById<SqliteAuthorizationRow>(\"connector_authorizations\", id)\n return row ? authorizationFromRow(row) : null\n }\n\n async updateAuthorization(record: ConnectorAuthorizationRecord): Promise<void> {\n const result = this.db\n .query(\n `\n UPDATE connector_authorizations\n SET authorized_by = ?, credentials = ?, credential_expires_at = ?, scopes = ?, accounts = ?,\n status = ?, selection_expires_at = ?, revision = ?, mutation_id = ?, mutation_kind = ?,\n mutation_phase = ?, mutation_holder_id = ?, mutation_expires_at = ?,\n mutation_deadline_at = ?, mutation_expected_connection_ids = ?, staged_credentials = ?,\n staged_credential_expires_at = ?, staged_scopes = ?, updated_at = ?\n WHERE project_id = ? AND connector_id = ? AND id = ?\n `\n )\n .run(...authorizationValues(record), record.projectId, record.connectorId, record.id)\n assertChanged(result.changes, \"connector authorization\", record.id)\n }\n\n async insertConnection(record: ConnectorConnectionRecord): Promise<boolean> {\n try {\n this.db\n .query(\n `\n INSERT INTO connector_connections (\n project_id, connector_id, id, authorization_id, slot, account,\n account_id, status, disconnected_at, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.connectorId,\n record.id,\n record.authorizationId,\n record.slot,\n json(record.account),\n record.account.id,\n record.status,\n optionalIso(record.disconnectedAt),\n iso(record.createdAt),\n iso(record.updatedAt)\n )\n return true\n } catch (error) {\n if (isUniqueConstraintError(error)) return false\n throw error\n }\n }\n\n async getConnectionById(id: string): Promise<ConnectorConnectionRecord | null> {\n const row = this.getById<SqliteConnectionRow>(\"connector_connections\", id)\n return row ? connectionFromRow(row) : null\n }\n\n async getConnectionBySelector(input: {\n readonly owner: { readonly type: \"project\" }\n readonly slot: string\n }): Promise<ConnectorConnectionRecord | null> {\n if (!this.scope.connectorId) return null\n const row = this.db\n .query(\n `\n SELECT * FROM connector_connections\n WHERE project_id = ? AND connector_id = ? AND slot = ?\n `\n )\n .get(this.scope.projectId, this.scope.connectorId, input.slot) as SqliteConnectionRow | null\n return row ? connectionFromRow(row) : null\n }\n\n async listConnections(): Promise<readonly ConnectorConnectionRecord[]> {\n if (!this.scope.connectorId) return []\n const rows = this.db\n .query(\n `\n SELECT * FROM connector_connections\n WHERE project_id = ? AND connector_id = ?\n ORDER BY id\n `\n )\n .all(this.scope.projectId, this.scope.connectorId) as SqliteConnectionRow[]\n return rows.map(connectionFromRow)\n }\n\n async listConnectionsByAuthorization(\n authorizationId: string,\n options: { readonly connectedOnly?: boolean } = {}\n ): Promise<readonly ConnectorConnectionRecord[]> {\n if (!this.scope.connectorId) return []\n const rows = options.connectedOnly\n ? (this.db\n .query(\n `\n SELECT * FROM connector_connections\n WHERE project_id = ? AND connector_id = ? AND authorization_id = ?\n AND status = 'connected'\n ORDER BY id\n `\n )\n .all(\n this.scope.projectId,\n this.scope.connectorId,\n authorizationId\n ) as SqliteConnectionRow[])\n : (this.db\n .query(\n `\n SELECT * FROM connector_connections\n WHERE project_id = ? AND connector_id = ? AND authorization_id = ?\n ORDER BY id\n `\n )\n .all(\n this.scope.projectId,\n this.scope.connectorId,\n authorizationId\n ) as SqliteConnectionRow[])\n return rows.map(connectionFromRow)\n }\n\n async updateConnection(record: ConnectorConnectionRecord): Promise<void> {\n const result = this.db\n .query(\n `\n UPDATE connector_connections\n SET authorization_id = ?, slot = ?, account = ?, account_id = ?,\n status = ?, disconnected_at = ?, updated_at = ?\n WHERE project_id = ? AND connector_id = ? AND id = ?\n `\n )\n .run(\n record.authorizationId,\n record.slot,\n json(record.account),\n record.account.id,\n record.status,\n optionalIso(record.disconnectedAt),\n iso(record.updatedAt),\n record.projectId,\n record.connectorId,\n record.id\n )\n assertChanged(result.changes, \"connector connection\", record.id)\n }\n\n private insertRun(record: ConnectorConnectionRunRecord): void {\n const values = runValues(record)\n this.db\n .query(\n `\n INSERT INTO connector_connection_runs (\n project_id, connector_id, id, kind, slot, initiated_by_execution_id,\n status, waiting_for, processing_id, callback_started_at,\n expires_at, authorization_id, cleanup_authorization_id, connections, error,\n created_at, updated_at, finished_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.connectorId,\n record.id,\n ...values.slice(0, -2),\n iso(record.createdAt),\n ...values.slice(-2)\n )\n }\n\n private insertAuthorizationRow(record: ConnectorAuthorizationRecord): void {\n const values = authorizationValues(record)\n this.db\n .query(\n `\n INSERT INTO connector_authorizations (\n project_id, connector_id, id, authorized_by, credentials, credential_expires_at,\n scopes, accounts, status, selection_expires_at, revision, mutation_id, mutation_kind,\n mutation_phase, mutation_holder_id, mutation_expires_at, mutation_deadline_at,\n mutation_expected_connection_ids, staged_credentials, staged_credential_expires_at,\n staged_scopes, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.connectorId,\n record.id,\n ...values.slice(0, -1),\n iso(record.createdAt),\n ...values.slice(-1)\n )\n }\n\n private getById<TRow>(table: ConnectorTable, id: string): TRow | null {\n if (this.scope.connectorId) {\n return this.db\n .query(`SELECT * FROM ${table} WHERE project_id = ? AND connector_id = ? AND id = ?`)\n .get(this.scope.projectId, this.scope.connectorId, id) as TRow | null\n }\n return this.db\n .query(`SELECT * FROM ${table} WHERE project_id = ? AND id = ?`)\n .get(this.scope.projectId, id) as TRow | null\n }\n\n private deleteById(table: ConnectorTable, id: string): boolean {\n const result = this.scope.connectorId\n ? this.db\n .query(`DELETE FROM ${table} WHERE project_id = ? AND connector_id = ? AND id = ?`)\n .run(this.scope.projectId, this.scope.connectorId, id)\n : this.db\n .query(`DELETE FROM ${table} WHERE project_id = ? AND id = ?`)\n .run(this.scope.projectId, id)\n return result.changes === 1\n }\n}\n\ntype ConnectorTable =\n | \"connector_authorization_attempts\"\n | \"connector_connection_runs\"\n | \"connector_authorizations\"\n | \"connector_connections\"\n\nfunction authorizationAttemptFromRow(\n row: SqliteAuthorizationAttemptRow\n): ConnectorAuthorizationAttemptRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n owner: { type: \"project\" },\n slot: row.slot,\n initiatedByExecutionId: row.initiated_by_execution_id,\n stateHash: row.state_hash,\n ...(row.code_verifier === null ? {} : { codeVerifier: parseJson(row.code_verifier) }),\n redirectUri: row.redirect_uri,\n ...(row.connection_run_id === null ? {} : { connectionRunId: row.connection_run_id }),\n ...(row.return_to === null ? {} : { returnTo: row.return_to }),\n ...(row.callback_binding_hash === null\n ? {}\n : { callbackBindingHash: row.callback_binding_hash }),\n ...(row.reauthorization_id === null ? {} : { reauthorizationId: row.reauthorization_id }),\n ...(row.reauthorization_revision === null\n ? {}\n : { reauthorizationRevision: row.reauthorization_revision }),\n ...(row.reauthorization_connection_ids === null\n ? {}\n : { reauthorizationConnectionIds: parseJson(row.reauthorization_connection_ids) }),\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n }\n}\n\nfunction runValues(record: ConnectorConnectionRunRecord): readonly SQLQueryBindings[] {\n const waitingFor = record.status === \"waiting\" ? record.waitingFor : null\n const processingId = record.status === \"running\" ? record.processingId : null\n const callbackStartedAt = record.status === \"running\" ? iso(record.callbackStartedAt) : null\n const expiresAt =\n record.status === \"waiting\" || record.status === \"running\" ? iso(record.expiresAt) : null\n const authorizationId = \"authorizationId\" in record ? (record.authorizationId ?? null) : null\n const cleanupAuthorizationId =\n record.status === \"succeeded\" ? (record.cleanupAuthorizationId ?? null) : null\n const connections = record.status === \"succeeded\" ? json(record.connections) : null\n const error = record.status === \"failed\" ? json(record.error) : null\n const finishedAt =\n record.status === \"succeeded\" ||\n record.status === \"failed\" ||\n record.status === \"cancelled\" ||\n record.status === \"expired\"\n ? iso(record.finishedAt)\n : null\n return [\n record.kind,\n record.slot,\n record.initiatedByExecutionId,\n record.status,\n waitingFor,\n processingId,\n callbackStartedAt,\n expiresAt,\n authorizationId,\n cleanupAuthorizationId,\n connections,\n error,\n iso(record.updatedAt),\n finishedAt,\n ]\n}\n\nfunction connectionRunFromRow(row: SqliteConnectionRunRow): ConnectorConnectionRunRecord {\n const base = {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n kind: row.kind,\n owner: { type: \"project\" as const },\n slot: row.slot,\n initiatedByExecutionId: row.initiated_by_execution_id,\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n if (row.status === \"waiting\" && row.waiting_for === \"provider_authorization\") {\n return {\n ...base,\n status: \"waiting\",\n waitingFor: \"provider_authorization\",\n expiresAt: new Date(required(row.expires_at, \"run expiry\")),\n }\n }\n if (row.status === \"waiting\" && row.waiting_for === \"account_selection\") {\n return {\n ...base,\n status: \"waiting\",\n waitingFor: \"account_selection\",\n authorizationId: required(row.authorization_id, \"authorization id\"),\n expiresAt: new Date(required(row.expires_at, \"run expiry\")),\n }\n }\n if (row.status === \"running\") {\n return {\n ...base,\n status: \"running\",\n processingId: required(row.processing_id, \"processing id\"),\n callbackStartedAt: new Date(required(row.callback_started_at, \"callback start\")),\n expiresAt: new Date(required(row.expires_at, \"run expiry\")),\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n }\n }\n const finishedAt = new Date(required(row.finished_at, \"run finish\"))\n if (row.status === \"succeeded\") {\n return {\n ...base,\n status: \"succeeded\",\n authorizationId: required(row.authorization_id, \"authorization id\"),\n ...(row.cleanup_authorization_id === null\n ? {}\n : { cleanupAuthorizationId: row.cleanup_authorization_id }),\n connections: parseJson<readonly SerializedConnectorConnection[]>(\n required(row.connections, \"connections\")\n ).map(connectionFromSerialized),\n finishedAt,\n }\n }\n if (row.status === \"failed\") {\n return {\n ...base,\n status: \"failed\",\n error: parseJson(required(row.error, \"run error\")),\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n finishedAt,\n }\n }\n if (row.status === \"cancelled\") {\n return {\n ...base,\n status: \"cancelled\",\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n finishedAt,\n }\n }\n if (row.status === \"expired\") {\n return {\n ...base,\n status: \"expired\",\n ...(row.authorization_id === null ? {} : { authorizationId: row.authorization_id }),\n finishedAt,\n }\n }\n throw invalidStoredValue(\"connector connection run status\", row.status)\n}\n\nfunction authorizationValues(record: ConnectorAuthorizationRecord): readonly SQLQueryBindings[] {\n const mutation = record.credentialMutation\n const staged = mutation?.stagedCredentials\n return [\n json(record.authorizedBy),\n record.credentials ? json(record.credentials) : null,\n optionalIso(record.credentialExpiresAt),\n json(record.scopes),\n json(record.accounts),\n record.status,\n optionalIso(record.selectionExpiresAt),\n record.revision,\n mutation?.id ?? null,\n mutation?.kind ?? null,\n mutation?.phase ?? null,\n mutation?.holderId ?? null,\n optionalIso(mutation?.expiresAt),\n optionalIso(mutation?.deadlineAt),\n mutation?.expectedConnectionIds ? json(mutation.expectedConnectionIds) : null,\n staged ? json(staged.credentials) : null,\n optionalIso(staged?.credentialExpiresAt),\n staged ? json(staged.scopes) : null,\n iso(record.updatedAt),\n ]\n}\n\nfunction authorizationFromRow(row: SqliteAuthorizationRow): ConnectorAuthorizationRecord {\n const mutation = mutationFromRow(row)\n return {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n authorizedBy: parseJson(row.authorized_by),\n ...(row.credentials === null ? {} : { credentials: parseJson(row.credentials) }),\n ...(row.credential_expires_at === null\n ? {}\n : { credentialExpiresAt: new Date(row.credential_expires_at) }),\n scopes: parseJson(row.scopes),\n accounts: parseJson(row.accounts),\n status: row.status,\n ...(row.selection_expires_at === null\n ? {}\n : { selectionExpiresAt: new Date(row.selection_expires_at) }),\n revision: row.revision,\n ...(mutation === undefined ? {} : { credentialMutation: mutation }),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\nfunction mutationFromRow(row: SqliteAuthorizationRow): ConnectorCredentialMutation | undefined {\n if (row.mutation_id === null) return undefined\n const kind = required(row.mutation_kind, \"credential mutation kind\")\n const phase = required(row.mutation_phase, \"credential mutation phase\")\n const stagedCredentials: ConnectorCredentialMutation[\"stagedCredentials\"] =\n row.staged_credentials === null\n ? undefined\n : {\n credentials: parseJson<\n NonNullable<ConnectorCredentialMutation[\"stagedCredentials\"]>[\"credentials\"]\n >(row.staged_credentials),\n ...(row.staged_credential_expires_at === null\n ? {}\n : { credentialExpiresAt: new Date(row.staged_credential_expires_at) }),\n scopes: parseJson<readonly string[]>(\n required(row.staged_scopes, \"staged credential scopes\")\n ),\n }\n return {\n id: row.mutation_id,\n kind,\n phase,\n holderId: required(row.mutation_holder_id, \"credential mutation holder\"),\n expiresAt: new Date(required(row.mutation_expires_at, \"credential mutation expiry\")),\n deadlineAt: new Date(required(row.mutation_deadline_at, \"credential mutation deadline\")),\n ...(row.mutation_expected_connection_ids === null\n ? {}\n : {\n expectedConnectionIds: parseJson<readonly string[]>(row.mutation_expected_connection_ids),\n }),\n ...(stagedCredentials === undefined ? {} : { stagedCredentials }),\n }\n}\n\nfunction connectionFromRow(row: SqliteConnectionRow): ConnectorConnectionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n connectorId: row.connector_id,\n authorizationId: row.authorization_id,\n owner: { type: \"project\" },\n slot: row.slot,\n account: parseJson(row.account),\n status: row.status,\n ...(row.disconnected_at === null ? {} : { disconnectedAt: new Date(row.disconnected_at) }),\n createdAt: new Date(row.created_at),\n updatedAt: new Date(row.updated_at),\n }\n}\n\ntype SerializedConnectorConnection = Omit<\n ConnectorConnectionRecord,\n \"createdAt\" | \"updatedAt\" | \"disconnectedAt\"\n> & {\n readonly createdAt: string\n readonly updatedAt: string\n readonly disconnectedAt?: string\n}\n\nfunction connectionFromSerialized(\n record: SerializedConnectorConnection\n): ConnectorConnectionRecord {\n const { createdAt, updatedAt, disconnectedAt, ...connection } = record\n return {\n ...connection,\n createdAt: new Date(createdAt),\n updatedAt: new Date(updatedAt),\n ...(disconnectedAt === undefined ? {} : { disconnectedAt: new Date(disconnectedAt) }),\n }\n}\n\nfunction json(value: unknown): string {\n return JSON.stringify(value)\n}\n\nfunction parseJson<T>(value: string): T {\n return JSON.parse(value) as T\n}\n\nfunction iso(value: Date): string {\n return value.toISOString()\n}\n\nfunction optionalIso(value: Date | undefined): string | null {\n return value?.toISOString() ?? null\n}\n\nfunction required<T>(value: T | null, label: string): T {\n if (value !== null) return value\n throw new Error(`[SixbSqlite] Stored ${label} is missing.`)\n}\n\nfunction invalidStoredValue(label: string, value: unknown): Error {\n return new Error(`[SixbSqlite] Stored ${label} '${String(value)}' is invalid.`)\n}\n\nfunction assertChanged(changes: number, label: string, id: string): void {\n if (changes === 1) return\n throw new Error(`[SixbSqlite] Stored ${label} '${id}' is unavailable.`)\n}\n\ninterface SqliteAuthorizationAttemptRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly slot: string\n readonly initiated_by_execution_id: string\n readonly state_hash: string\n readonly code_verifier: string | null\n readonly redirect_uri: string\n readonly connection_run_id: string | null\n readonly return_to: string | null\n readonly callback_binding_hash: string | null\n readonly reauthorization_id: string | null\n readonly reauthorization_revision: number | null\n readonly reauthorization_connection_ids: string | null\n readonly created_at: string\n readonly expires_at: string\n}\n\ninterface SqliteConnectionRunRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly kind: ConnectorConnectionRunRecord[\"kind\"]\n readonly slot: string\n readonly initiated_by_execution_id: string\n readonly status: ConnectorConnectionRunRecord[\"status\"]\n readonly waiting_for: \"provider_authorization\" | \"account_selection\" | null\n readonly processing_id: string | null\n readonly callback_started_at: string | null\n readonly expires_at: string | null\n readonly authorization_id: string | null\n readonly cleanup_authorization_id: string | null\n readonly connections: string | null\n readonly error: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly finished_at: string | null\n}\n\ninterface SqliteAuthorizationRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly authorized_by: string\n readonly credentials: string | null\n readonly credential_expires_at: string | null\n readonly scopes: string\n readonly accounts: string\n readonly status: ConnectorAuthorizationRecord[\"status\"]\n readonly selection_expires_at: string | null\n readonly revision: number\n readonly mutation_id: string | null\n readonly mutation_kind: ConnectorCredentialMutation[\"kind\"] | null\n readonly mutation_phase: ConnectorCredentialMutation[\"phase\"] | null\n readonly mutation_holder_id: string | null\n readonly mutation_expires_at: string | null\n readonly mutation_deadline_at: string | null\n readonly mutation_expected_connection_ids: string | null\n readonly staged_credentials: string | null\n readonly staged_credential_expires_at: string | null\n readonly staged_scopes: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\ninterface SqliteConnectionRow {\n readonly project_id: string\n readonly connector_id: string\n readonly id: string\n readonly authorization_id: string\n readonly slot: string\n readonly account: string\n readonly account_id: string\n readonly status: ConnectorConnectionRecord[\"status\"]\n readonly disconnected_at: string | null\n readonly created_at: string\n readonly updated_at: string\n}\n\ninterface ConnectorConnectionTestClock {\n offsetMs: number\n}\n",
36
- "import type { Database } from \"bun:sqlite\"\nimport {\n type ExecutionStorageRow,\n executionRecordFromStorageRow,\n executionRecordToStorageRow,\n prepareExecutionRecord,\n} from \"@sixb/core/internal/execution-storage\"\nimport type {\n CreateExecutionInput,\n ExecutionRecord,\n ExecutionStorage,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ExecutionStorageError } from \"@sixb/core/storage\"\nimport type { SqliteAuthStorage } from \"./auth-storage\"\n\nexport class SqliteExecutionStorage implements ExecutionStorage {\n constructor(\n private readonly db: Database,\n private readonly auth: SqliteAuthStorage,\n private readonly shareSessions: Pick<ShareSessionStorage, \"getById\">\n ) {}\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n const record = await prepareExecutionRecord(input, {\n auth: this.auth,\n getExecution: (params) => this.getById(params),\n getShareSession: (params) => this.shareSessions.getById(params),\n })\n const row = executionRecordToStorageRow(record)\n\n try {\n this.db\n .query(\n `\n INSERT INTO executions (\n project_id,\n id,\n executor_kind,\n executor_id,\n source_kind,\n source_id,\n requested_by_user_id,\n requested_by_service_account_id,\n requester_group_ids,\n correlation_id,\n parent_execution_id,\n authority_kind,\n authority_user_id,\n authority_service_account_id,\n authority_session_id,\n authority_access_token_id,\n authority_primitive_kind,\n authority_primitive_id,\n authority_kernel_operation,\n authority_delegation_kind,\n authority_delegation_id,\n authority_delegation_session_id,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n row.projectId,\n row.id,\n row.executorKind,\n row.executorId,\n row.sourceKind,\n row.sourceId,\n row.requestedByUserId,\n row.requestedByServiceAccountId,\n JSON.stringify(row.requesterGroupIds),\n row.correlationId,\n row.parentExecutionId,\n row.authorityKind,\n row.authorityUserId,\n row.authorityServiceAccountId,\n row.authoritySessionId,\n row.authorityAccessTokenId,\n row.authorityPrimitiveKind,\n row.authorityPrimitiveId,\n row.authorityKernelOperation,\n row.authorityDelegationKind,\n row.authorityDelegationId,\n row.authorityDelegationSessionId,\n row.createdAt.toISOString()\n )\n } catch (error) {\n if (isDuplicateExecutionError(error)) {\n throw new ExecutionStorageError(\n \"duplicate_execution\",\n `[SixbSqlite] Execution '${record.id}' already exists in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n\n return executionRecordFromStorageRow(row)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ExecutionRecord | null> {\n const row = this.db\n .query(\n `\n SELECT *\n FROM executions\n WHERE project_id = ? AND id = ?\n `\n )\n .get(params.projectId, params.id) as SqliteExecutionRow | null\n\n return row ? sqliteExecutionRecord(row) : null\n }\n}\n\n/** An `executions` row as its record, for any store that reads executions alongside its own rows. */\nexport function sqliteExecutionRecord(row: SqliteExecutionRow): ExecutionRecord {\n return executionRecordFromStorageRow(toStorageRow(row))\n}\n\nfunction toStorageRow(row: SqliteExecutionRow): ExecutionStorageRow {\n return {\n projectId: row.project_id,\n id: row.id,\n executorKind: row.executor_kind,\n executorId: row.executor_id,\n sourceKind: row.source_kind,\n sourceId: row.source_id,\n requestedByUserId: row.requested_by_user_id,\n requestedByServiceAccountId: row.requested_by_service_account_id,\n requesterGroupIds: JSON.parse(row.requester_group_ids),\n correlationId: row.correlation_id,\n parentExecutionId: row.parent_execution_id,\n authorityKind: row.authority_kind,\n authorityUserId: row.authority_user_id,\n authorityServiceAccountId: row.authority_service_account_id,\n authoritySessionId: row.authority_session_id,\n authorityAccessTokenId: row.authority_access_token_id,\n authorityPrimitiveKind: row.authority_primitive_kind,\n authorityPrimitiveId: row.authority_primitive_id,\n authorityKernelOperation: row.authority_kernel_operation,\n authorityDelegationKind: row.authority_delegation_kind,\n authorityDelegationId: row.authority_delegation_id,\n authorityDelegationSessionId: row.authority_delegation_session_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction isDuplicateExecutionError(error: unknown): boolean {\n return (\n error instanceof Error &&\n error.message.includes(\"UNIQUE constraint failed: executions.project_id, executions.id\")\n )\n}\n\nexport interface SqliteExecutionRow {\n readonly project_id: string\n readonly id: string\n readonly executor_kind: ExecutionStorageRow[\"executorKind\"]\n readonly executor_id: string\n readonly source_kind: ExecutionStorageRow[\"sourceKind\"]\n readonly source_id: string\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly requester_group_ids: string\n readonly correlation_id: string\n readonly parent_execution_id: string | null\n readonly authority_kind: ExecutionStorageRow[\"authorityKind\"]\n readonly authority_user_id: string | null\n readonly authority_service_account_id: string | null\n readonly authority_session_id: string | null\n readonly authority_access_token_id: string | null\n readonly authority_primitive_kind: ExecutionStorageRow[\"authorityPrimitiveKind\"]\n readonly authority_primitive_id: string | null\n readonly authority_kernel_operation: ExecutionStorageRow[\"authorityKernelOperation\"]\n readonly authority_delegation_kind: ExecutionStorageRow[\"authorityDelegationKind\"]\n readonly authority_delegation_id: string | null\n readonly authority_delegation_session_id: string | null\n readonly created_at: string\n}\n",
38
+ "import type { Database } from \"bun:sqlite\"\nimport {\n compareExecutionCreation,\n type ExecutionStorageRow,\n executionRecordFromStorageRow,\n executionRecordToStorageRow,\n prepareExecutionRecord,\n} from \"@sixb/core/internal/execution-storage\"\nimport type {\n CreateExecutionInput,\n ExecutionRecord,\n ExecutionStorage,\n ListSessionExecutionsInput,\n SessionExecutions,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ExecutionStorageError } from \"@sixb/core/storage\"\nimport type { SqliteAuthStorage } from \"./auth-storage\"\n\nexport class SqliteExecutionStorage implements ExecutionStorage {\n constructor(\n private readonly db: Database,\n private readonly auth: SqliteAuthStorage,\n private readonly shareSessions: Pick<ShareSessionStorage, \"getById\">\n ) {}\n\n async create(input: CreateExecutionInput): Promise<ExecutionRecord> {\n const record = await prepareExecutionRecord(input, {\n auth: this.auth,\n getExecution: (params) => this.getById(params),\n getShareSession: (params) => this.shareSessions.getById(params),\n })\n const row = executionRecordToStorageRow(record)\n\n try {\n this.db\n .query(\n `\n INSERT INTO executions (\n project_id,\n id,\n executor_kind,\n executor_id,\n source_kind,\n source_id,\n requested_by_user_id,\n requested_by_service_account_id,\n requester_group_ids,\n correlation_id,\n parent_execution_id,\n authority_kind,\n authority_user_id,\n authority_service_account_id,\n authority_session_id,\n authority_access_token_id,\n authority_primitive_kind,\n authority_primitive_id,\n authority_kernel_operation,\n authority_delegation_kind,\n authority_delegation_id,\n authority_delegation_session_id,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n row.projectId,\n row.id,\n row.executorKind,\n row.executorId,\n row.sourceKind,\n row.sourceId,\n row.requestedByUserId,\n row.requestedByServiceAccountId,\n JSON.stringify(row.requesterGroupIds),\n row.correlationId,\n row.parentExecutionId,\n row.authorityKind,\n row.authorityUserId,\n row.authorityServiceAccountId,\n row.authoritySessionId,\n row.authorityAccessTokenId,\n row.authorityPrimitiveKind,\n row.authorityPrimitiveId,\n row.authorityKernelOperation,\n row.authorityDelegationKind,\n row.authorityDelegationId,\n row.authorityDelegationSessionId,\n row.createdAt.toISOString()\n )\n } catch (error) {\n if (isDuplicateExecutionError(error)) {\n throw new ExecutionStorageError(\n \"duplicate_execution\",\n `[SixbSqlite] Execution '${record.id}' already exists in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n\n return executionRecordFromStorageRow(row)\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<ExecutionRecord | null> {\n const row = this.db\n .query(\n `\n SELECT *\n FROM executions\n WHERE project_id = ? AND id = ?\n `\n )\n .get(params.projectId, params.id) as SqliteExecutionRow | null\n\n return row ? sqliteExecutionRecord(row) : null\n }\n\n async listBySession(input: ListSessionExecutionsInput): Promise<SessionExecutions> {\n const sessionColumn =\n input.session.type === \"user\" ? \"authority_session_id\" : \"authority_delegation_session_id\"\n\n // The queue is ordered by depth, so the walk takes roots, then their children level by level,\n // the earliest first, and the limit stops it: a large tree costs no more than the rows\n // returned. CROSS JOIN keeps the walk driven by the rows found: statistics taken on a small\n // ledger choose to scan every child.\n const rows = this.db\n .query(\n `\n WITH RECURSIVE tree AS (\n SELECT roots.*, 0 AS depth\n FROM (\n SELECT *\n FROM executions\n WHERE project_id = ?\n AND ${sessionColumn} = ?\n AND parent_execution_id IS NULL\n AND created_at >= ?\n AND created_at < ?\n ORDER BY created_at, id\n LIMIT ?\n ) roots\n UNION ALL\n SELECT child.*, tree.depth + 1\n FROM tree\n CROSS JOIN executions child\n ON child.project_id = tree.project_id\n AND child.parent_execution_id = tree.id\n ORDER BY depth, created_at, id\n LIMIT ?\n )\n SELECT * FROM tree\n `\n )\n .all(\n input.projectId,\n input.session.id,\n input.from.toISOString(),\n input.to.toISOString(),\n input.limit + 1,\n input.limit + 1\n ) as SqliteExecutionRow[]\n\n // Rows come out in walk order, so the first `limit` are the ones the contract keeps.\n const kept = rows.slice(0, input.limit).map(sqliteExecutionRecord)\n return {\n executions: kept.sort(compareExecutionCreation),\n truncated: rows.length > input.limit,\n }\n }\n}\n\n/** An `executions` row as its record, for any store that reads executions alongside its own rows. */\nexport function sqliteExecutionRecord(row: SqliteExecutionRow): ExecutionRecord {\n return executionRecordFromStorageRow(toStorageRow(row))\n}\n\nfunction toStorageRow(row: SqliteExecutionRow): ExecutionStorageRow {\n return {\n projectId: row.project_id,\n id: row.id,\n executorKind: row.executor_kind,\n executorId: row.executor_id,\n sourceKind: row.source_kind,\n sourceId: row.source_id,\n requestedByUserId: row.requested_by_user_id,\n requestedByServiceAccountId: row.requested_by_service_account_id,\n requesterGroupIds: JSON.parse(row.requester_group_ids),\n correlationId: row.correlation_id,\n parentExecutionId: row.parent_execution_id,\n authorityKind: row.authority_kind,\n authorityUserId: row.authority_user_id,\n authorityServiceAccountId: row.authority_service_account_id,\n authoritySessionId: row.authority_session_id,\n authorityAccessTokenId: row.authority_access_token_id,\n authorityPrimitiveKind: row.authority_primitive_kind,\n authorityPrimitiveId: row.authority_primitive_id,\n authorityKernelOperation: row.authority_kernel_operation,\n authorityDelegationKind: row.authority_delegation_kind,\n authorityDelegationId: row.authority_delegation_id,\n authorityDelegationSessionId: row.authority_delegation_session_id,\n createdAt: new Date(row.created_at),\n }\n}\n\nfunction isDuplicateExecutionError(error: unknown): boolean {\n return (\n error instanceof Error &&\n error.message.includes(\"UNIQUE constraint failed: executions.project_id, executions.id\")\n )\n}\n\nexport interface SqliteExecutionRow {\n readonly project_id: string\n readonly id: string\n readonly executor_kind: ExecutionStorageRow[\"executorKind\"]\n readonly executor_id: string\n readonly source_kind: ExecutionStorageRow[\"sourceKind\"]\n readonly source_id: string\n readonly requested_by_user_id: string | null\n readonly requested_by_service_account_id: string | null\n readonly requester_group_ids: string\n readonly correlation_id: string\n readonly parent_execution_id: string | null\n readonly authority_kind: ExecutionStorageRow[\"authorityKind\"]\n readonly authority_user_id: string | null\n readonly authority_service_account_id: string | null\n readonly authority_session_id: string | null\n readonly authority_access_token_id: string | null\n readonly authority_primitive_kind: ExecutionStorageRow[\"authorityPrimitiveKind\"]\n readonly authority_primitive_id: string | null\n readonly authority_kernel_operation: ExecutionStorageRow[\"authorityKernelOperation\"]\n readonly authority_delegation_kind: ExecutionStorageRow[\"authorityDelegationKind\"]\n readonly authority_delegation_id: string | null\n readonly authority_delegation_session_id: string | null\n readonly created_at: string\n}\n",
37
39
  "import type { Database } from \"bun:sqlite\"\nimport { parseFileDownloadGrantRow } from \"@sixb/core/internal/storage\"\nimport type {\n DeleteExpiredFileDownloadGrantsInput,\n FileDownloadGrantRecord,\n FileDownloadGrantStorage,\n FindFileDownloadGrantInput,\n RevokeFileDownloadGrantInput,\n} from \"@sixb/core/storage\"\nimport type { SqliteStoreConnection } from \"./transactions\"\n\nconst GRANT_COLUMNS = `\n project_id AS projectId, id, token_hash AS tokenHash, file, execution_id AS executionId,\n created_at AS createdAt, expires_at AS expiresAt, revoked_at AS revokedAt\n`\n\nexport class SqliteFileDownloadGrantStorage implements FileDownloadGrantStorage {\n private readonly db: Database\n\n constructor(connection: SqliteStoreConnection) {\n this.db = connection.db\n }\n\n async create(record: FileDownloadGrantRecord): Promise<void> {\n this.db\n .query(\n `INSERT INTO file_download_grants (\n project_id, id, token_hash, file, execution_id, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)`\n )\n .run(\n record.projectId,\n record.id,\n record.tokenHash,\n JSON.stringify(record.file),\n record.executionId,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString()\n )\n }\n\n async findByTokenHash(\n input: FindFileDownloadGrantInput\n ): Promise<FileDownloadGrantRecord | null> {\n const row = this.db\n .query(\n `SELECT ${GRANT_COLUMNS} FROM file_download_grants WHERE project_id = ? AND token_hash = ?`\n )\n .get(input.projectId, input.tokenHash)\n return row ? parseFileDownloadGrantRow(row as Record<string, unknown>) : null\n }\n\n async revoke(input: RevokeFileDownloadGrantInput): Promise<FileDownloadGrantRecord | null> {\n const row = this.db\n .query(\n `UPDATE file_download_grants SET revoked_at = COALESCE(revoked_at, ?)\n WHERE project_id = ? AND id = ?\n RETURNING ${GRANT_COLUMNS}`\n )\n .get(input.revokedAt.toISOString(), input.projectId, input.id)\n return row ? parseFileDownloadGrantRow(row as Record<string, unknown>) : null\n }\n\n async deleteExpired(input: DeleteExpiredFileDownloadGrantsInput): Promise<number> {\n return this.db\n .query(\n `DELETE FROM file_download_grants WHERE rowid IN (\n SELECT rowid FROM file_download_grants\n WHERE project_id = ? AND expires_at < ?\n ORDER BY expires_at\n LIMIT ?\n )`\n )\n .run(input.projectId, input.expiredBefore.toISOString(), input.limit).changes\n }\n}\n",
38
40
  "import type { Database } from \"bun:sqlite\"\nimport {\n DurableFileUploadSessions,\n type FileUploadSessionPersistence,\n type FileUploadSessionPersistenceBackend,\n fileUploadSessionReapAt,\n parseFileUploadSessionRow,\n} from \"@sixb/core/internal/file-upload-session-storage-provider\"\nimport type { FileUploadSession, ListAbandonedFileUploadSessionsInput } from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport { runImmediateTransactionAsync, type SqliteStoreConnection } from \"./transactions\"\n\nexport class SqliteFileUploadSessionStorage extends DurableFileUploadSessions {\n constructor(connection: SqliteStoreConnection) {\n super(new SqliteFileUploadSessionBackend(connection.db))\n }\n}\n\nclass SqliteFileUploadSessionBackend implements FileUploadSessionPersistenceBackend {\n private readonly persistence: FileUploadSessionPersistence\n\n constructor(private readonly db: Database) {\n this.persistence = new SqliteFileUploadSessionPersistence(db)\n }\n\n read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return run(this.persistence)\n }\n\n transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {\n return runImmediateTransactionAsync(this.db, () => run(this.persistence))\n }\n}\n\nclass SqliteFileUploadSessionPersistence implements FileUploadSessionPersistence {\n constructor(private readonly db: Database) {}\n\n async now(): Promise<Date> {\n const row = this.db.query(\"SELECT strftime('%Y-%m-%dT%H:%M:%fZ', 'now') AS now\").get() as {\n readonly now: string\n }\n return new Date(row.now)\n }\n\n async insert(session: FileUploadSession): Promise<boolean> {\n try {\n this.db\n .query(\n `INSERT INTO file_upload_sessions (\n id, project_id, owner_principal_type, owner_principal_id, strategy, status, file_name,\n media_type, logical_path, expected_size_bytes, expected_digest, provider_upload, signed_parts, file_ref,\n created_at, expires_at, completed_at, aborted_at, reap_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`\n )\n .run(\n session.id,\n session.projectId,\n session.principal.type,\n session.principal.id,\n session.strategy,\n session.status,\n session.fileName ?? null,\n session.mediaType ?? null,\n session.logicalPath ?? null,\n session.expectedSizeBytes ?? null,\n session.expectedDigest ?? null,\n ...mutableColumns(session)\n )\n return true\n } catch (error) {\n if (isUniqueConstraintError(error)) return false\n throw error\n }\n }\n\n async get(uploadId: string): Promise<FileUploadSession | null> {\n const row = this.db.query(`${SELECT_SESSION} WHERE id = ?`).get(uploadId)\n return row ? parseFileUploadSessionRow(row as Record<string, unknown>) : null\n }\n\n async update(session: FileUploadSession): Promise<void> {\n this.db\n .query(\n `UPDATE file_upload_sessions\n SET status = ?, provider_upload = ?, signed_parts = ?, file_ref = ?, created_at = ?,\n expires_at = ?, completed_at = ?, aborted_at = ?, reap_at = ?\n WHERE id = ?`\n )\n .run(session.status, ...mutableColumns(session), session.id)\n }\n\n async listAbandoned(\n input: ListAbandonedFileUploadSessionsInput\n ): Promise<readonly FileUploadSession[]> {\n const rows = this.db\n .query(\n `${SELECT_SESSION}\n WHERE project_id = ? AND status = 'pending' AND provider_upload IS NOT NULL\n AND expires_at <= ?\n ORDER BY expires_at, id\n LIMIT ?`\n )\n .all(input.projectId, input.now.toISOString(), input.limit)\n return rows.map((row) => parseFileUploadSessionRow(row as Record<string, unknown>))\n }\n\n async deleteReapable(now: Date): Promise<number> {\n return this.db\n .query(\"DELETE FROM file_upload_sessions WHERE reap_at IS NOT NULL AND reap_at <= ?\")\n .run(now.toISOString()).changes\n }\n}\n\nconst SELECT_SESSION = `\n SELECT id, project_id AS projectId, owner_principal_type AS ownerPrincipalType,\n owner_principal_id AS ownerPrincipalId, strategy, status,\n file_name AS fileName, media_type AS mediaType, logical_path AS logicalPath,\n expected_size_bytes AS expectedSizeBytes, expected_digest AS expectedDigest,\n provider_upload AS providerUpload, signed_parts AS signedParts, file_ref AS fileRef,\n created_at AS createdAt, expires_at AS expiresAt, completed_at AS completedAt,\n aborted_at AS abortedAt\n FROM file_upload_sessions`\n\n/** Columns a transition may change, in insert/update order after `expected_digest`/`status`. */\nfunction mutableColumns(session: FileUploadSession) {\n return [\n session.providerUpload === undefined ? null : JSON.stringify(session.providerUpload),\n JSON.stringify(session.signedParts),\n session.fileRef === undefined ? null : JSON.stringify(session.fileRef),\n session.createdAt.toISOString(),\n session.expiresAt.toISOString(),\n session.completedAt?.toISOString() ?? null,\n session.abortedAt?.toISOString() ?? null,\n fileUploadSessionReapAt(session)?.toISOString() ?? null,\n ] as const\n}\n",
39
41
  "import type { Database } from \"bun:sqlite\"\nimport { hasVectorProfile } from \"@sixb/core/internal/query\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkBatchKey,\n LinkDirection,\n ObjectBatchKey,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n ObjectRow,\n ObjectStorage,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runDeferredReadTransaction,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { DEFAULT_OBJECT_QUERY_SOURCE } from \"./query-compiler\"\nimport { assertLinkQueryLimit, SqliteObjectReader } from \"./reader\"\nimport { type DatabaseRow, type LinkDatabaseRow, rowToLink, rowToObject } from \"./rows\"\nimport { createSqliteSelectedReader } from \"./selected-reader\"\n\nexport interface SqliteObjectStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nconst SQLITE_OBJECT_QUERY_CAPABILITIES: ObjectQueryCapabilities = {\n queryObjects: true,\n countObjects: true,\n existsObjects: true,\n facetObjects: true,\n nodes: {\n start: true,\n refs: true,\n filter: true,\n text: true,\n vector: true,\n sort: true,\n limit: true,\n page: true,\n traverse: true,\n set: true,\n project: true,\n expand: true,\n },\n predicateOps: {\n and: true,\n or: true,\n not: true,\n eq: true,\n neq: true,\n lt: true,\n lte: true,\n gt: true,\n gte: true,\n in: true,\n exists: true,\n contains: true,\n },\n sortKinds: {\n property: true,\n },\n traversalDirections: {\n outgoing: true,\n incoming: true,\n },\n setOps: {\n union: true,\n intersect: true,\n subtract: true,\n },\n scalarOperations: {\n string: { equality: true, ordering: true },\n uuid: { equality: true, ordering: true },\n boolean: { equality: true },\n integer: { equality: true, ordering: true },\n double: { equality: true, ordering: true },\n decimal: { equality: true },\n date: { equality: true, ordering: true },\n timestamp: { equality: true, ordering: true },\n userRef: { equality: true },\n },\n limits: {\n totalCount: true,\n stablePageTokens: true,\n },\n notes: [\n \"SQLite object query pushdown supports start/refs/filter/text/sort/limit/page/traverse/set/project/expand over JSON properties and object links.\",\n \"expand hydrates linked objects in-database (top-N per parent via row_number() + json_group_array); core resolves each expansion's cardinality before pushdown, and a mixed/unresolved one stays on the fallback.\",\n \"Ordered decimal predicates and sorting use the bounded core fallback because SQLite has no native exact decimal type; canonical decimal equality remains pushdown-safe.\",\n \"Relevance sorting and unresolved start.includeSubtypes remain planner fallback or rejection cases.\",\n ],\n}\n\n/**\n * SQLite-based ObjectStorage implementation.\n *\n * Stores object projections and links. V1 object-query IR pushdown covers the\n * scalar JSON-property and link-traversal subset declared by queryCapabilities().\n */\nexport class SqliteObjectStorage implements ObjectStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly reader: SqliteObjectReader\n\n constructor(options: SqliteObjectStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.reader = new SqliteObjectReader(this.db, DEFAULT_OBJECT_QUERY_SOURCE)\n }\n\n queryCapabilities(): ObjectQueryCapabilities {\n return SQLITE_OBJECT_QUERY_CAPABILITIES\n }\n\n createSelectedReadScope(params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n }): ObjectReadStorage {\n return createSqliteSelectedReader(this.db, params, () => this.queryCapabilities())\n }\n\n async queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.queryObjects(params))\n return this.reader.queryObjects(params)\n }\n\n async countObjects(params: CountObjectsInput): Promise<CountObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.countObjects(params))\n return this.reader.countObjects(params)\n }\n\n async existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult> {\n if (hasVectorProfile(params.query))\n return runDeferredReadTransaction(this.db, () => this.reader.existsObjects(params))\n return this.reader.existsObjects(params)\n }\n\n async facetObjects(params: FacetObjectsInput): Promise<FacetObjectsResult> {\n return runDeferredReadTransaction(this.db, () => this.reader.facetObjects(params))\n }\n\n async getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): Promise<ObjectRow | null> {\n return this.reader.getByPrimaryId(params)\n }\n\n async selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): Promise<readonly boolean[]> {\n return this.reader.selectsObjectProperties(params)\n }\n\n async listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): Promise<readonly ObjectLinkRow[]> {\n return this.reader.listLinks(params)\n }\n\n async getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Promise<Map<ObjectBatchKey, ObjectRow>> {\n return this.reader.getByPrimaryIdBatch(params)\n }\n\n async listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Promise<Map<LinkBatchKey, ObjectLinkRow[]>> {\n return this.reader.listLinksBatch(params)\n }\n\n async queryLinks(params: QueryObjectLinksInput): Promise<QueryObjectLinksResult> {\n assertLinkQueryLimit(params.limit)\n return this.reader.queryLinks(params)\n }\n\n async listIncidentLinksBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; objectId: string }[]\n }): Promise<readonly ObjectLinkRow[]> {\n if (params.items.length === 0) return []\n\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id\n FROM json_each(?)\n )\n SELECT link.*\n FROM links AS link\n JOIN requested\n ON requested.object_type_id = link.source_type_id\n AND requested.object_id = link.source_id\n WHERE link.project_id = ?\n UNION\n SELECT link.*\n FROM links AS link\n JOIN requested\n ON requested.object_type_id = link.target_type_id\n AND requested.object_id = link.target_id\n WHERE link.project_id = ?\n `\n )\n .all(JSON.stringify(params.items), params.projectId, params.projectId) as LinkDatabaseRow[]\n\n return rows.map((row) => rowToLink(row))\n }\n\n async listByPrimaryIdPage(params: {\n projectId: string\n objectTypeId: string\n afterPrimaryId?: string\n limit: number\n }): Promise<{ objects: readonly ObjectRow[]; nextPrimaryId?: string }> {\n assertReconciliationPageLimit(params.limit)\n // A cursor written as `? IS NULL OR …` cannot seek, so every page would rescan from the start.\n const cursor = params.afterPrimaryId === undefined ? [] : [params.afterPrimaryId]\n const rows = this.db\n .query(\n `\n SELECT * FROM objects\n WHERE project_id = ? AND object_type_id = ?\n ${cursor.length > 0 ? \"AND primary_id > ?\" : \"\"}\n ORDER BY primary_id ASC\n LIMIT ?\n `\n )\n .all(params.projectId, params.objectTypeId, ...cursor, params.limit + 1) as DatabaseRow[]\n const hasMore = rows.length > params.limit\n const objects = rows.slice(0, params.limit).map((row) => rowToObject(row))\n const last = objects.at(-1)\n return {\n objects,\n ...(hasMore && last ? { nextPrimaryId: last.primaryId } : {}),\n }\n }\n\n async list(params: {\n projectId: string\n objectTypeId?: string | readonly string[]\n primaryIdPrefix?: string\n primaryIdSuffix?: string\n updatedAfter?: Date\n updatedBefore?: Date\n createdAfter?: Date\n createdBefore?: Date\n limit?: number\n offset?: number\n orderBy?: \"createdAt\" | \"updatedAt\" | \"primaryId\"\n order?: \"asc\" | \"desc\"\n }): Promise<{ objects: readonly ObjectRow[]; hasMore: boolean; total: number }> {\n return this.reader.list(params)\n }\n\n /** Close the connection only when this provider owns it. */\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction assertReconciliationPageLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object reconciliation page limit must be a positive safe integer.\")\n }\n}\n",
@@ -53,7 +55,7 @@
53
55
  "import type { Database } from \"bun:sqlite\"\nimport {\n type EffectiveChangeCounts,\n MaterializationConflictError,\n MaterializationValidationError,\n type OntologyLinkRef,\n type OntologyObjectRef,\n objectRefKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertNonblank,\n assertPageRows,\n assertPositiveInteger,\n assertReplacementPlanCommit,\n canonicalJson,\n duplicateMaterializationWork,\n invalidCorrelation,\n materializationWorkColumns,\n prepareReplacementIdentities,\n workUniquenessKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationObjectExistence,\n OntologyCommitWrite,\n OntologyReplacementPlanStorage,\n OpenedReplacementPlan,\n OpenReplacementPlanInput,\n PurgeReplacementPlansInput,\n ReplacementPlanRef,\n ReplacementPlanStatePage,\n ReplacementPlanStatus,\n StageReplacementPlanInput,\n StreamReplacementPlanStateInput,\n} from \"@sixb/core/storage\"\nimport { SqliteMaterializationStateReader } from \"./materialization-state\"\nimport {\n assertProjectionExecution,\n isSqliteConstraintError,\n parseJson,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n} from \"./shared\"\nimport { PUBLISHED, replacementSourceRows } from \"./source-roots\"\n\nexport const SQLITE_PLAN_WORK_TABLE = \"ontology_replacement_plan_work\"\n\n/** The plan a session applies: its work rows carry the candidate's source version as `work_id`. */\nexport interface SqliteReplacementPlan {\n readonly versionId: number\n readonly projectionKind: \"object\" | \"link\"\n}\n\ninterface PlanRow {\n readonly version_id: number\n readonly commit_id: string\n readonly committed_at: string\n readonly replaced_materialization_id: string | null\n readonly replaced_last_commit_id: string | null\n readonly watermark: number\n}\n\ninterface IdentityRow {\n readonly identity_key: string\n readonly sort_key: string\n readonly diff_required: number\n}\n\nconst IDENTITIES = \"ontology_replacement_plan_identities\"\n/** An identity's planning order: its key's UTF-8 bytes, as `objectRefSortKey`/`linkRefSortKey`. */\nconst SORT_KEY = \"LOWER(HEX(CAST(identity_key AS BLOB)))\"\n\n/**\n * The revision of an object identity: its effective row, its override and the latest point of each\n * telemetry property. `type` and `id` are SQL expressions; `$projectId` is bound.\n */\nfunction objectRevision(type: string, id: string): string {\n const series = (alias: string) =>\n `${alias}.project_id = $projectId AND ${alias}.object_type_id = ${type} AND ${alias}.object_id = ${id}`\n // One seek per property for its next name and one for its latest point: never the history.\n return `json_array(\n (SELECT json_array(version, last_commit_id) FROM objects\n WHERE project_id = $projectId AND object_type_id = ${type} AND primary_id = ${id}),\n (SELECT last_commit_id FROM ontology_object_overrides\n WHERE project_id = $projectId AND object_type_id = ${type} AND primary_id = ${id}),\n (WITH RECURSIVE properties(property_id) AS (\n SELECT MIN(first.property_id) FROM timeseries AS first WHERE ${series(\"first\")}\n UNION ALL\n SELECT (SELECT MIN(next.property_id) FROM timeseries AS next\n WHERE ${series(\"next\")} AND next.property_id > properties.property_id)\n FROM properties WHERE properties.property_id IS NOT NULL\n )\n SELECT json_group_array(json((\n SELECT json_array(points.property_id, points.at, points.last_commit_id)\n FROM timeseries AS points\n WHERE ${series(\"points\")} AND points.property_id = properties.property_id\n ORDER BY points.at DESC LIMIT 1\n ))) FROM properties WHERE properties.property_id IS NOT NULL)\n )`\n}\n\n/**\n * The revision of a link endpoint, which a link plan reads only for its existence. One this plan\n * decides exists as planned, which follows its whole object revision; any other exists as it is.\n * `$versionId` is bound.\n */\nfunction endpointRevision(type: string, id: string): string {\n return `CASE WHEN EXISTS (\n SELECT 1 FROM ${IDENTITIES} AS endpoint\n WHERE endpoint.version_id = $versionId AND endpoint.entity_kind = 'object'\n AND endpoint.identity_key = json_array(${type}, ${id})\n ) THEN ${objectRevision(type, id)}\n ELSE json(CASE WHEN EXISTS (\n SELECT 1 FROM objects\n WHERE project_id = $projectId AND object_type_id = ${type} AND primary_id = ${id}\n ) THEN 'true' ELSE 'false' END)\n END`\n}\n\n/**\n * The revision of a link identity, from its qualified key column `key`: its effective row, its\n * edge and slot overrides, the live source root asserting it, and the existence of both\n * endpoints. A live root that asserts a link is keyed by the link or by its source object.\n */\nfunction linkRevision(key: string): string {\n const part = (index: number) => `json_extract(${key}, '$[${index}]')`\n return `json_array(\n (SELECT last_commit_id FROM links\n WHERE project_id = $projectId AND source_type_id = ${part(0)} AND source_id = ${part(1)}\n AND link_id = ${part(2)} AND target_type_id = ${part(3)} AND target_id = ${part(4)}),\n (SELECT overrides.last_commit_id FROM ontology_link_overrides AS overrides\n WHERE overrides.project_id = $projectId AND overrides.identity_kind = 'edge'\n AND overrides.identity_key = ${key}),\n (SELECT overrides.last_commit_id FROM ontology_link_overrides AS overrides\n WHERE overrides.project_id = $projectId AND overrides.identity_kind = 'slot'\n AND overrides.identity_key = json_array(${part(0)}, ${part(1)}, ${part(2)})),\n (SELECT MAX(roots.id) FROM ontology_source_roots AS roots\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}\n WHERE roots.project_id = $projectId AND roots.retired_at IS NULL AND roots.deleted = 0\n AND roots.root_key IN (\n '[\"link\",' || substr(${key}, 2),\n '[\"object\",' || substr(json_array(${part(0)}, ${part(1)}), 2)\n )\n AND EXISTS (\n -- \\`+\\` keeps the lookup on the root's few rows, not on every row of a hub source.\n SELECT 1 FROM ontology_source_rows AS rows\n WHERE rows.root_id = roots.id AND +rows.entity_kind = 'link'\n AND +rows.source_type_id = ${part(0)} AND +rows.source_primary_id = ${part(1)}\n AND +rows.link_id = ${part(2)} AND +rows.target_type_id = ${part(3)}\n AND +rows.target_primary_id = ${part(4)}\n )),\n ${endpointRevision(part(0), part(1))},\n ${endpointRevision(part(3), part(4))}\n )`\n}\n\n/** The revision of the identity rows aliased `identities`. */\nexport function identityRevision(kind: \"object\" | \"link\"): string {\n const key = \"identities.identity_key\"\n return kind === \"object\"\n ? objectRevision(`json_extract(${key}, '$[0]')`, `json_extract(${key}, '$[1]')`)\n : linkRevision(key)\n}\n\n/** The keys of the links of `relation` (columns as `links`), and of both their endpoints. */\nfunction linkKeys(relation: string): string {\n return `SELECT json_array(source_type_id, source_id, link_id, target_type_id, target_id)\n AS identity_key, json_array(source_type_id, source_id) AS source_key,\n json_array(target_type_id, target_id) AS target_key\n FROM ${relation}`\n}\n\n/** The run of link expansion an identity added now waits for: the next one. */\nconst NEXT_EXPANSION = `(\n SELECT expansions FROM ontology_replacement_plans WHERE version_id = $versionId\n)`\n\n/**\n * Inserts the links of `incident_links` as identities that need a diff, or makes an existing\n * member need one; the next expansion starts from each of them.\n */\nconst INSERT_INCIDENT_LINKS = `\n INSERT INTO ${IDENTITIES} (\n version_id, entity_kind, identity_key, sort_key, diff_required, expand_at, source_key,\n target_key\n )\n SELECT $versionId, 'link', identity_key, ${SORT_KEY}, 1, ${NEXT_EXPANSION}, source_key,\n target_key\n FROM (${linkKeys(\"incident_links\")}) WHERE true\n ON CONFLICT (version_id, entity_kind, identity_key) DO UPDATE\n SET diff_required = 1, read_revision = NULL, planned_revision = NULL, classified = 0,\n change = NULL, expand_at = excluded.expand_at\n WHERE ${IDENTITIES}.diff_required = 0`\n\n/** Inserts the links of `members` as identities planned without a diff. */\nconst INSERT_MEMBER_LINKS = `\n INSERT INTO ${IDENTITIES} (\n version_id, entity_kind, identity_key, sort_key, diff_required, source_key, target_key\n )\n SELECT $versionId, 'link', identity_key, ${SORT_KEY}, 0, source_key, target_key\n FROM (${linkKeys(\"members\")}) WHERE true\n ON CONFLICT (version_id, entity_kind, identity_key) DO NOTHING`\n\n/** Live source rows of `$projectId`, as `rows`, joined from `rows` to their root and version. */\nconst LIVE_ROWS = `CROSS JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = $projectId AND roots.retired_at IS NULL AND roots.deleted = 0\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n AND versions.status IN ${PUBLISHED}`\n\n/**\n * The statements of `expandLinks`, `$versionId` and `$projectId` bound. They start from the\n * identities planned or added since the previous expansion: purge keeps every touch a ready plan\n * needs, so what commits add later always comes from their touches. Incident objects drive the\n * loop and each side seeks its own index: without statistics, SQLite would search every link and\n * override of the project once per object.\n */\nexport const EXPAND_LINK_STATEMENTS = {\n incident: `WITH incident_objects AS MATERIALIZED (\n SELECT json_extract(work.payload, '$.ref.objectTypeId') AS object_type_id,\n json_extract(work.payload, '$.ref.primaryId') AS primary_id\n FROM ${IDENTITIES} AS objects\n CROSS JOIN ${SQLITE_PLAN_WORK_TABLE} AS work ON work.work_id = $versionId\n AND work.unique_key = 'incident-object:' || objects.identity_key\n WHERE objects.version_id = $versionId AND objects.entity_kind = 'object'\n AND objects.expand_at = ${NEXT_EXPANSION}\n ), incident_links AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM incident_objects CROSS JOIN links\n ON links.project_id = $projectId\n AND links.source_type_id = incident_objects.object_type_id\n AND links.source_id = incident_objects.primary_id\n UNION\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM incident_objects CROSS JOIN links INDEXED BY idx_links_target\n ON links.project_id = $projectId\n AND links.target_type_id = incident_objects.object_type_id\n AND links.target_id = incident_objects.primary_id\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM incident_objects CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = $projectId AND overrides.identity_kind IN ('edge', 'slot')\n AND overrides.source_type_id = incident_objects.object_type_id\n AND overrides.source_primary_id = incident_objects.primary_id\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM incident_objects\n CROSS JOIN ontology_link_overrides AS overrides INDEXED BY idx_ontology_link_overrides_target\n ON overrides.project_id = $projectId\n AND overrides.target_type_id = incident_objects.object_type_id\n AND overrides.target_primary_id = incident_objects.primary_id\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM incident_objects CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.source_type_id = incident_objects.object_type_id\n AND rows.source_primary_id = incident_objects.primary_id\n ${LIVE_ROWS}\n UNION\n SELECT rows.source_type_id, rows.source_primary_id, rows.link_id,\n rows.target_type_id, rows.target_primary_id\n FROM incident_objects CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.target_type_id = incident_objects.object_type_id\n AND rows.target_primary_id = incident_objects.primary_id\n ${LIVE_ROWS}\n )\n ${INSERT_INCIDENT_LINKS}`,\n members: `WITH scopes AS (\n SELECT DISTINCT json_extract(identity_key, '$[0]') AS source_type_id,\n json_extract(identity_key, '$[1]') AS source_id,\n json_extract(identity_key, '$[2]') AS link_id\n FROM ${IDENTITIES}\n WHERE version_id = $versionId AND entity_kind = 'link' AND diff_required = 1\n AND expand_at = ${NEXT_EXPANSION}\n ), members AS (\n SELECT links.source_type_id, links.source_id, links.link_id,\n links.target_type_id, links.target_id\n FROM scopes CROSS JOIN links\n ON links.project_id = $projectId\n AND links.source_type_id = scopes.source_type_id\n AND links.source_id = scopes.source_id AND links.link_id = scopes.link_id\n UNION\n SELECT overrides.source_type_id, overrides.source_primary_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id\n FROM scopes CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = $projectId AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = scopes.source_type_id\n AND overrides.source_primary_id = scopes.source_id\n AND overrides.link_id = scopes.link_id\n )\n ${INSERT_MEMBER_LINKS}`,\n}\n\n/**\n * What the commits since the watermark of plan `$versionId` touched in project `$projectId`.\n * `+project_id` keeps the lookup on the rowid range instead of the project's whole history.\n */\nconst TOUCHED = `touched AS MATERIALIZED (\n SELECT DISTINCT touches.entity_kind, touches.identity_key\n FROM ontology_commits AS commits\n CROSS JOIN ontology_commit_touches AS touches\n ON touches.project_id = commits.project_id AND touches.commit_id = commits.id\n WHERE commits.rowid > (\n SELECT watermark FROM ontology_replacement_plans WHERE version_id = $versionId\n ) AND +commits.project_id = $projectId\n)`\n\n/**\n * The statements of `refresh`, `$versionId` and `$projectId` bound: each unplans the identities of\n * one kind whose revision reads something the commits since the watermark touched, and changed.\n * An object reads its own row, override and telemetry; a link its row and edge override, its\n * scope's slot override, its live source assertion and its endpoints. A scope's links are found\n * from its source object.\n */\nexport const TOUCHED_REFRESH_STATEMENTS = {\n object: `WITH ${TOUCHED}\n UPDATE ${IDENTITIES} AS identities\n SET read_revision = NULL, planned_revision = NULL, classified = 0, change = NULL\n WHERE identities.version_id = $versionId AND identities.entity_kind = 'object'\n AND identities.identity_key IN (SELECT identity_key FROM touched WHERE entity_kind = 'object')\n AND identities.planned_revision IS NOT ${identityRevision(\"object\")}`,\n link: `WITH ${TOUCHED}, candidates AS (\n SELECT identity_key FROM touched WHERE entity_kind = 'link'\n UNION\n SELECT links.identity_key FROM touched CROSS JOIN ${IDENTITIES} AS links\n ON links.version_id = $versionId\n AND links.source_key = json_array(\n json_extract(touched.identity_key, '$[0]'), json_extract(touched.identity_key, '$[1]')\n )\n WHERE touched.entity_kind IN ('object', 'scope')\n UNION\n SELECT links.identity_key FROM touched CROSS JOIN ${IDENTITIES} AS links\n ON links.version_id = $versionId AND links.target_key = touched.identity_key\n WHERE touched.entity_kind = 'object'\n )\n UPDATE ${IDENTITIES} AS identities\n SET read_revision = NULL, planned_revision = NULL, classified = 0, change = NULL\n WHERE identities.version_id = $versionId AND identities.entity_kind = 'link'\n AND identities.identity_key IN (SELECT identity_key FROM candidates)\n AND identities.planned_revision IS NOT ${identityRevision(\"link\")}`,\n}\n\nconst TOUCHED_LINKS = `touched_links AS (\n SELECT identity_key, json_extract(identity_key, '$[0]') AS source_type_id,\n json_extract(identity_key, '$[1]') AS source_id, json_extract(identity_key, '$[2]') AS link_id,\n json_extract(identity_key, '$[3]') AS target_type_id,\n json_extract(identity_key, '$[4]') AS target_id\n FROM touched WHERE entity_kind = 'link'\n), slot_targets AS (\n SELECT overrides.source_type_id, overrides.source_primary_id AS source_id, overrides.link_id,\n overrides.target_type_id, overrides.target_primary_id AS target_id\n FROM touched CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = $projectId AND overrides.identity_kind = 'slot'\n AND overrides.identity_key = touched.identity_key\n WHERE touched.entity_kind = 'scope'\n)`\n\nconst LINK_COLUMNS = \"source_type_id, source_id, link_id, target_type_id, target_id\"\n\nconst EFFECTIVE_TOUCHED_LINK = `EXISTS (\n SELECT 1 FROM links AS stored\n WHERE stored.project_id = $projectId AND stored.source_type_id = touched_links.source_type_id\n AND stored.source_id = touched_links.source_id AND stored.link_id = touched_links.link_id\n AND stored.target_type_id = touched_links.target_type_id\n AND stored.target_id = touched_links.target_id\n)`\n\n/**\n * The statements of `expandTouched`, `$versionId` and `$projectId` bound: the links `expandLinks`\n * would find, among those the commits since the watermark touched.\n */\nexport const EXPAND_TOUCHED_STATEMENTS = {\n incident: `WITH ${TOUCHED}, ${TOUCHED_LINKS}, incident_links AS (\n SELECT candidates.* FROM (\n SELECT ${LINK_COLUMNS} FROM touched_links\n WHERE ${EFFECTIVE_TOUCHED_LINK} OR EXISTS (\n SELECT 1 FROM ontology_link_overrides AS overrides\n WHERE overrides.project_id = $projectId AND overrides.identity_kind = 'edge'\n AND overrides.identity_key = touched_links.identity_key\n ) OR EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows ${LIVE_ROWS}\n WHERE rows.entity_kind = 'link' AND rows.source_type_id = touched_links.source_type_id\n AND rows.source_primary_id = touched_links.source_id\n AND rows.link_id = touched_links.link_id\n AND rows.target_type_id = touched_links.target_type_id\n AND rows.target_primary_id = touched_links.target_id\n )\n UNION\n SELECT ${LINK_COLUMNS} FROM slot_targets\n ) AS candidates\n WHERE EXISTS (\n SELECT 1 FROM ${SQLITE_PLAN_WORK_TABLE} AS work\n WHERE work.work_id = $versionId AND work.unique_key IN (\n 'incident-object:' || json_array(candidates.source_type_id, candidates.source_id),\n 'incident-object:' || json_array(candidates.target_type_id, candidates.target_id)\n )\n )\n )\n ${INSERT_INCIDENT_LINKS}`,\n members: `WITH ${TOUCHED}, ${TOUCHED_LINKS}, members AS (\n SELECT candidates.* FROM (\n SELECT ${LINK_COLUMNS} FROM touched_links WHERE ${EFFECTIVE_TOUCHED_LINK}\n UNION\n SELECT ${LINK_COLUMNS} FROM slot_targets\n ) AS candidates\n WHERE EXISTS (\n SELECT 1 FROM ${IDENTITIES} AS changed\n WHERE changed.version_id = $versionId\n AND changed.source_key = json_array(candidates.source_type_id, candidates.source_id)\n AND changed.diff_required = 1\n AND json_extract(changed.identity_key, '$[2]') = candidates.link_id\n )\n )\n ${INSERT_MEMBER_LINKS}`,\n}\n\n/**\n * Deletes up to `$limit` touches of `$projectId` that every ready plan's watermark has seen, or\n * all its touches when no plan is ready.\n */\nconst PURGE_TOUCHES_STATEMENT = `DELETE FROM ontology_commit_touches WHERE rowid IN (\n SELECT touches.rowid FROM ontology_commit_touches AS touches\n CROSS JOIN ontology_commits AS commits\n ON commits.project_id = touches.project_id AND commits.id = touches.commit_id\n WHERE touches.project_id = $projectId AND commits.rowid <= COALESCE(\n (SELECT MIN(plans.watermark) FROM ontology_replacement_plans AS plans\n JOIN ontology_sources AS versions USING (version_id)\n WHERE plans.project_id = $projectId AND versions.status = 'ready'),\n (SELECT COALESCE(MAX(rowid), 0) FROM ontology_commits)\n )\n LIMIT $limit\n)`\n\nexport class SqliteOntologyReplacementPlanStorage implements OntologyReplacementPlanStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async open(input: OpenReplacementPlanInput): Promise<OpenedReplacementPlan> {\n return this.runRootOperation(() => {\n const { commit } = input\n assertReplacementPlanCommit(commit)\n const candidate = this.requireCandidate(input)\n const active = this.db\n .query(\n `SELECT materialization_id, last_commit_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'`\n )\n .get(input.projectId, input.source.projectionId) as {\n readonly materialization_id: string\n readonly last_commit_id: string | null\n } | null\n const replacedMaterializationId = active?.materialization_id ?? null\n const replacedLastCommitId = active?.last_commit_id ?? null\n const existing = planRow(this.db, candidate.version_id)\n // A plan decides the entities of the source it replaces: once that moved, it starts over.\n if (\n existing?.replaced_materialization_id === replacedMaterializationId &&\n existing.replaced_last_commit_id === replacedLastCommitId\n ) {\n return { committedAt: existing.committed_at }\n }\n if (existing) deletePlan(this.db, candidate.version_id)\n this.db\n .query(\n `INSERT INTO ontology_replacement_plans (\n version_id, project_id, commit_id, committed_at, replaced_materialization_id,\n replaced_last_commit_id, watermark\n ) VALUES (?, ?, ?, ?, ?, ?, (SELECT COALESCE(MAX(rowid), 0) FROM ontology_commits))`\n )\n .run(\n candidate.version_id,\n input.projectId,\n commit.id,\n commit.committedAt,\n replacedMaterializationId,\n replacedLastCommitId\n )\n const rows = replacementSourceRows(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n materializationId: input.materializationId,\n incremental: candidate.base_materialization_id !== null,\n })\n // Every entity of the candidate and of the roots it replaces needs a diff.\n this.db\n .query(\n `INSERT INTO ${IDENTITIES} (\n version_id, entity_kind, identity_key, sort_key, diff_required, expand_at,\n source_key, target_key\n )\n SELECT ?, entity_kind, identity_key, ${SORT_KEY}, 1,\n CASE entity_kind WHEN 'link' THEN 0 END, source_key, target_key\n FROM (\n SELECT entity_kind, CASE entity_kind\n WHEN 'object' THEN json_array(object_type_id, primary_id)\n ELSE json_array(\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n )\n END AS identity_key,\n CASE entity_kind\n WHEN 'link' THEN json_array(source_type_id, source_primary_id)\n END AS source_key,\n CASE entity_kind\n WHEN 'link' THEN json_array(target_type_id, target_primary_id)\n END AS target_key\n FROM (${rows.sql}) AS rows\n )\n GROUP BY entity_kind, identity_key`\n )\n .run(candidate.version_id, ...rows.values)\n return { committedAt: commit.committedAt }\n })\n }\n\n async *streamState(\n input: StreamReplacementPlanStateInput\n ): AsyncIterable<ReplacementPlanStatePage> {\n assertPageRows(input.pageRows)\n await this.runRootOperation(() => {\n const { candidate } = this.requirePlan(input)\n if (input.entityKind === \"object\" && candidate.projection_kind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (input.entityKind === \"link\") {\n if (unplannedCount(this.db, candidate.version_id, \"object\") > 0) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must plan every object before its links.\"\n )\n }\n this.expandLinks(candidate.version_id, input.projectId)\n }\n })\n let after = \"\"\n while (true) {\n const page = await this.runRootOperation(() => {\n const { candidate } = this.requirePlan(input)\n const rows = this.db\n .query(\n `SELECT identity_key, sort_key, diff_required FROM ${IDENTITIES}\n WHERE version_id = ? AND entity_kind = ? AND planned_revision IS NULL AND sort_key > ?\n ORDER BY sort_key\n LIMIT ?`\n )\n .all(candidate.version_id, input.entityKind, after, input.pageRows) as IdentityRow[]\n if (rows.length === 0) return null\n after = rows[rows.length - 1]!.sort_key\n const state = this.readPage(input, candidate, rows)\n this.db\n .query(\n `UPDATE ${IDENTITIES} AS identities SET read_revision = ${identityRevision(input.entityKind)}\n WHERE identities.version_id = $versionId AND identities.entity_kind = $entityKind\n AND identities.identity_key IN (SELECT value FROM json_each($keys))`\n )\n .run({\n $projectId: input.projectId,\n $versionId: candidate.version_id,\n $entityKind: input.entityKind,\n $keys: JSON.stringify(rows.map((row) => row.identity_key)),\n })\n return state\n })\n if (!page) return\n yield page\n }\n }\n\n async stage(input: StageReplacementPlanInput): Promise<void> {\n await this.runRootOperation(() => {\n const { plan, candidate } = this.requirePlan(input)\n const identities = prepareReplacementIdentities(input, {\n commitId: plan.commit_id,\n committedAt: plan.committed_at,\n })\n const versionId = candidate.version_id\n this.db.run(\"SAVEPOINT sixb_replacement_plan_stage\")\n let recordKey: string | undefined\n try {\n // Only an identity streamed and still to plan has the revision its work is planned\n // from, and holds no work: unplanning one deletes its work and forgets what it read.\n const known = this.db.query(\n `SELECT read_revision, planned_revision FROM ${IDENTITIES}\n WHERE version_id = ? AND entity_kind = ? AND identity_key = ?`\n )\n const insert = this.db.query(\n `INSERT INTO ${SQLITE_PLAN_WORK_TABLE} (\n work_id, entity_kind, identity_key, record_key, unique_key, kind, lane,\n major_order, minor_order, sort_one, sort_two,\n classification_entity_kind, classification_identity_key,\n cardinality_view, cardinality_occupied, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id,\n cardinality_target_type_id, cardinality_target_primary_id, payload\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, json(?))`\n )\n // A planned object may flip its existence: the next link expansion starts from it.\n const planned = this.db.query(\n `UPDATE ${IDENTITIES}\n SET planned_revision = read_revision, classified = ?, change = ?,\n expand_at = CASE entity_kind\n WHEN 'object' THEN (\n SELECT expansions FROM ontology_replacement_plans WHERE version_id = ?\n )\n ELSE expand_at\n END\n WHERE version_id = ? AND entity_kind = ? AND identity_key = ?`\n )\n for (const identity of identities) {\n const row = known.get(versionId, identity.kind, identity.key) as {\n readonly read_revision: string | null\n readonly planned_revision: string | null\n } | null\n if (row?.read_revision == null || row.planned_revision !== null) {\n throw new MaterializationValidationError(\n `Replacement identity ${identity.entityKey} is not streamed and still to plan.`\n )\n }\n for (const record of identity.records) {\n recordKey = record.recordKey\n const columns = materializationWorkColumns(record)\n const classification = record.kind === \"classification\" ? record : null\n const cardinality = record.kind === \"cardinality\" ? record : null\n insert.run(\n versionId,\n identity.kind,\n identity.key,\n record.recordKey,\n workUniquenessKey(record),\n record.kind,\n columns.lane,\n columns.majorOrder,\n columns.minorOrder,\n columns.sortOne,\n columns.sortTwo,\n classification?.entityKind ?? null,\n classification?.identityKey ?? null,\n cardinality?.view ?? null,\n cardinality ? Number(cardinality.occupied) : null,\n cardinality?.ref.source.objectTypeId ?? null,\n cardinality?.ref.source.primaryId ?? null,\n cardinality?.ref.linkId ?? null,\n cardinality?.ref.target.objectTypeId ?? null,\n cardinality?.ref.target.primaryId ?? null,\n canonicalJson(record)\n )\n }\n planned.run(\n Number(identity.classified),\n identity.change,\n versionId,\n versionId,\n identity.kind,\n identity.key\n )\n }\n this.db.run(\"RELEASE SAVEPOINT sixb_replacement_plan_stage\")\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_replacement_plan_stage\")\n this.db.run(\"RELEASE SAVEPOINT sixb_replacement_plan_stage\")\n if (isSqliteConstraintError(error)) throw duplicateMaterializationWork(recordKey)\n throw error\n }\n })\n }\n\n async refresh(input: ReplacementPlanRef): Promise<ReplacementPlanStatus> {\n return this.runRootOperation(() => {\n const { plan, candidate } = this.requirePlan(input)\n const versionId = candidate.version_id\n const pending = unplannedCount(this.db, versionId)\n if (pending > 0) return { fresh: false, unplanned: pending }\n if (!committedSince(this.db, plan, input.projectId)) {\n return { fresh: true, counts: replacementPlanCounts(this.db, versionId) }\n }\n // Purge keeps every touch past the watermark of a ready plan: only touched identities can\n // have changed.\n const params = { $projectId: input.projectId, $versionId: versionId }\n let unplanned = 0\n for (const kind of [\"object\", \"link\"] as const) {\n const stale = this.db.query(TOUCHED_REFRESH_STATEMENTS[kind]).run(params).changes\n if (stale === 0) continue\n dropUnplannedWork(this.db, versionId, kind)\n unplanned += stale\n }\n unplanned += this.expandTouched(versionId, input.projectId)\n this.db\n .query(\n `UPDATE ontology_replacement_plans\n SET watermark = (SELECT COALESCE(MAX(rowid), 0) FROM ontology_commits)\n WHERE version_id = ?`\n )\n .run(versionId)\n if (unplanned > 0) return { fresh: false, unplanned }\n return { fresh: true, counts: replacementPlanCounts(this.db, versionId) }\n })\n }\n\n async purge(input: PurgeReplacementPlansInput): Promise<number> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Replacement plan purge project id\")\n assertPositiveInteger(input.limit, \"Replacement plan purge limit\")\n const spentPlan = this.db.query(\n `SELECT plans.version_id FROM ontology_replacement_plans AS plans\n JOIN ontology_sources AS versions USING (version_id)\n WHERE plans.project_id = ? AND versions.status <> 'ready'\n ORDER BY plans.version_id\n LIMIT 1`\n )\n let deleted = 0\n // A plan's row goes last, so a plan whose rows outlast the budget is found again next time.\n while (deleted < input.limit) {\n const spent = spentPlan.get(input.projectId) as { readonly version_id: number } | null\n if (!spent) break\n for (const [table, column] of [\n [SQLITE_PLAN_WORK_TABLE, \"work_id\"],\n [IDENTITIES, \"version_id\"],\n ] as const) {\n deleted += this.db\n .query(\n `DELETE FROM ${table} WHERE rowid IN (\n SELECT rowid FROM ${table} WHERE ${column} = ? LIMIT ?\n )`\n )\n .run(spent.version_id, input.limit - deleted).changes\n if (deleted >= input.limit) return deleted\n }\n this.db\n .query(`DELETE FROM ontology_replacement_plans WHERE version_id = ?`)\n .run(spent.version_id)\n deleted += 1\n }\n if (deleted >= input.limit) return deleted\n // Every write holds the store's lock: a plan that opens later has seen all these commits.\n return (\n deleted +\n this.db\n .query(PURGE_TOUCHES_STATEMENT)\n .run({ $projectId: input.projectId, $limit: input.limit - deleted }).changes\n )\n })\n }\n\n private readPage(\n input: StreamReplacementPlanStateInput,\n candidate: SqliteOntologySourceRow,\n rows: readonly IdentityRow[]\n ): ReplacementPlanStatePage {\n const reader = new SqliteMaterializationStateReader(this.db, input.projectId)\n if (input.entityKind === \"object\") {\n const refs = rows.map((row) => {\n const [objectTypeId, primaryId] = parseJson<string[]>(row.identity_key)\n return { objectTypeId: objectTypeId!, primaryId: primaryId! }\n })\n return {\n objects: reader.replacementObjectStates(\n input.source.projectionId,\n input.materializationId,\n refs\n ),\n links: [],\n endpoints: [],\n }\n }\n const identities = rows.map((row) => {\n const parts = parseJson<string[]>(row.identity_key)\n const ref: OntologyLinkRef = {\n source: { objectTypeId: parts[0]!, primaryId: parts[1]! },\n linkId: parts[2]!,\n target: { objectTypeId: parts[3]!, primaryId: parts[4]! },\n }\n return {\n ref,\n sortKey: row.sort_key,\n diffRequired: row.diff_required === 1,\n }\n })\n const previous = this.db\n .query(\n `SELECT materialization_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'`\n )\n .get(input.projectId, input.source.projectionId) as {\n readonly materialization_id: string\n } | null\n const links = reader.replacementLinkStates(\n input.source.projectionId,\n input.materializationId,\n [input.materializationId, ...(previous ? [previous.materialization_id] : [])],\n identities,\n candidate.base_materialization_id !== null\n )\n return {\n objects: [],\n links,\n endpoints: this.endpoints(\n candidate.version_id,\n input.projectId,\n identities.flatMap(({ ref }) => [ref.source, ref.target])\n ),\n }\n }\n\n /** Planned existence where the plan decides an endpoint, effective existence elsewhere. */\n private endpoints(\n versionId: number,\n projectId: string,\n refs: readonly OntologyObjectRef[]\n ): MaterializationObjectExistence[] {\n const unique = [...new Map(refs.map((ref) => [objectRefKey(ref), ref] as const)).values()]\n const rows = this.db\n .query(\n `SELECT requested.value AS identity_key, (\n SELECT json_extract(work.payload, '$.exists') FROM ${SQLITE_PLAN_WORK_TABLE} AS work\n WHERE work.work_id = ? AND work.unique_key = 'object-existence:' || requested.value\n ) AS planned, EXISTS (\n SELECT 1 FROM objects\n WHERE project_id = ? AND object_type_id = json_extract(requested.value, '$[0]')\n AND primary_id = json_extract(requested.value, '$[1]')\n ) AS effective\n FROM json_each(?) AS requested`\n )\n .all(versionId, projectId, JSON.stringify(unique.map((ref) => objectRefKey(ref)))) as {\n readonly identity_key: string\n readonly planned: number | null\n readonly effective: number\n }[]\n const existence = new Map(\n rows.map((row) => [row.identity_key, (row.planned ?? row.effective) === 1] as const)\n )\n return unique.map((ref) => ({ ref, exists: existence.get(objectRefKey(ref)) ?? false }))\n }\n\n /**\n * Adds the links the plan must decide besides its own: those incident to an object it flips,\n * and every member of a scope it changes, from the identities planned or added since the\n * previous expansion. Returns how many identities this left to plan, counting an existing member\n * that now needs a diff. What commits add later is found from their touches by `expandTouched`.\n */\n private expandLinks(versionId: number, projectId: string): number {\n const added = this.expand(versionId, projectId, EXPAND_LINK_STATEMENTS)\n this.db\n .query(\n `UPDATE ontology_replacement_plans SET expansions = expansions + 1 WHERE version_id = ?`\n )\n .run(versionId)\n return added\n }\n\n /**\n * Adds the links commits brought within the plan's reach, from what they touched: a link that\n * now exists incident to an object the plan flips, or in a scope a planned link changes.\n */\n private expandTouched(versionId: number, projectId: string): number {\n return this.expand(versionId, projectId, EXPAND_TOUCHED_STATEMENTS)\n }\n\n private expand(\n versionId: number,\n projectId: string,\n statements: { readonly incident: string; readonly members: string }\n ): number {\n const run = (statement: string) =>\n this.db.query(statement).run({ $projectId: projectId, $versionId: versionId }).changes\n const diffLinks = run(statements.incident)\n // An upgraded member planned without a diff keeps no work from before.\n if (diffLinks > 0) dropUnplannedWork(this.db, versionId, \"link\")\n return diffLinks + run(statements.members)\n }\n\n private requireCandidate(input: ReplacementPlanRef): SqliteOntologySourceRow {\n const candidate = sourceRow(\n this.db,\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (\n !candidate ||\n candidate.status !== \"ready\" ||\n candidate.projection_run_id !== input.execution.projectionRunId ||\n candidate.execution_token !== input.execution.executionToken\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.materializationId}' is missing, not ready, or owned by another execution.`\n )\n }\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n })\n return candidate\n }\n\n private requirePlan(input: ReplacementPlanRef): {\n readonly plan: PlanRow\n readonly candidate: SqliteOntologySourceRow\n } {\n const candidate = this.requireCandidate(input)\n const plan = planRow(this.db, candidate.version_id)\n if (!plan) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.materializationId}' has no open plan.`\n )\n }\n return { plan, candidate }\n }\n}\n\n/**\n * Every identity the plan decides with a diff is classified, and nothing else is. Staging records\n * whether an identity's work holds its classification, so this reads identities only.\n */\nexport function assertReplacementPlanCoverage(db: Database, plan: SqliteReplacementPlan): void {\n const mismatch = db\n .query(\n `SELECT 1 FROM ${IDENTITIES}\n WHERE version_id = ?\n AND classified <> (diff_required AND (entity_kind = 'link' OR ? = 1))\n LIMIT 1`\n )\n .get(plan.versionId, plan.projectionKind === \"object\" ? 1 : 0)\n if (mismatch) {\n invalidCorrelation(\"Projection replacement classification coverage does not match its plan.\")\n }\n}\n\n/** The change counts of a plan, from what its identities planned. */\nexport function replacementPlanCounts(db: Database, versionId: number): EffectiveChangeCounts {\n const rows = db\n .query(\n `SELECT entity_kind, COALESCE(change, 'unchanged') AS change, COUNT(*) AS count\n FROM ${IDENTITIES}\n WHERE version_id = ? AND classified = 1\n GROUP BY entity_kind, COALESCE(change, 'unchanged')`\n )\n .all(versionId) as {\n readonly entity_kind: \"object\" | \"link\"\n readonly change: \"created\" | \"updated\" | \"deleted\" | \"unchanged\"\n readonly count: number\n }[]\n const count = (kind: \"object\" | \"link\", change: string) =>\n rows.find((row) => row.entity_kind === kind && row.change === change)?.count ?? 0\n return {\n objectsCreated: count(\"object\", \"created\"),\n objectsUpdated: count(\"object\", \"updated\"),\n objectsDeleted: count(\"object\", \"deleted\"),\n objectsUnchanged: count(\"object\", \"unchanged\"),\n linksCreated: count(\"link\", \"created\"),\n linksUpdated: count(\"link\", \"updated\"),\n linksDeleted: count(\"link\", \"deleted\"),\n linksUnchanged: count(\"link\", \"unchanged\"),\n }\n}\n\nfunction unplannedCount(db: Database, versionId: number, kind?: \"object\" | \"link\"): number {\n const row = db\n .query(\n `SELECT COUNT(*) AS count FROM ${IDENTITIES}\n WHERE version_id = ? AND planned_revision IS NULL AND (? IS NULL OR entity_kind = ?)`\n )\n .get(versionId, kind ?? null, kind ?? null) as { readonly count: number }\n return row.count\n}\n\n/**\n * Whether a commit of the project landed after the plan's watermark. Commit rows are never deleted\n * and every write holds the store's lock, so their rowids grow in commit order.\n */\nfunction committedSince(db: Database, plan: PlanRow, projectId: string): boolean {\n // `+project_id` keeps the lookup on the rowid range instead of the project's whole history.\n return (\n db\n .query(`SELECT 1 FROM ontology_commits WHERE rowid > ? AND +project_id = ? LIMIT 1`)\n .get(plan.watermark, projectId) !== null\n )\n}\n\n/** Deletes the work of the identities of `kind` left to plan: an identity to plan holds none. */\nfunction dropUnplannedWork(db: Database, versionId: number, kind: \"object\" | \"link\"): void {\n db.query(\n `DELETE FROM ${SQLITE_PLAN_WORK_TABLE}\n WHERE work_id = ? AND entity_kind = ? AND identity_key IN (\n SELECT identity_key FROM ${IDENTITIES}\n WHERE version_id = ? AND entity_kind = ? AND planned_revision IS NULL\n )`\n ).run(versionId, kind, versionId, kind)\n}\n\nfunction deletePlan(db: Database, versionId: number): void {\n db.query(`DELETE FROM ${SQLITE_PLAN_WORK_TABLE} WHERE work_id = ?`).run(versionId)\n db.query(`DELETE FROM ${IDENTITIES} WHERE version_id = ?`).run(versionId)\n db.query(`DELETE FROM ontology_replacement_plans WHERE version_id = ?`).run(versionId)\n}\n\nfunction planRow(db: Database, versionId: number): PlanRow | null {\n return db\n .query(`SELECT * FROM ontology_replacement_plans WHERE version_id = ?`)\n .get(versionId) as PlanRow | null\n}\n\nfunction sourceRow(\n db: Database,\n projectId: string,\n sourceId: string,\n materializationId: string\n): SqliteOntologySourceRow | null {\n return db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n}\n\n/** The fresh, fully planned plan a session applies, with exactly its commit. */\nexport function boundReplacementPlan(\n db: Database,\n header: {\n readonly commit: OntologyCommitWrite\n readonly plan?: {\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n }\n }\n): SqliteReplacementPlan {\n const ref = header.plan\n const candidate = ref\n ? sourceRow(db, header.commit.projectId, ref.source.projectionId, ref.materializationId)\n : null\n const plan = candidate ? planRow(db, candidate.version_id) : null\n if (!ref || !candidate || !plan || header.commit.intent.kind !== \"projection\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"A plan-bound session needs the open plan of a projection candidate.\"\n )\n }\n if (plan.commit_id !== header.commit.id || plan.committed_at !== header.commit.committedAt) {\n throw new MaterializationValidationError(\n \"A plan-bound session must begin with the commit its plan carries.\"\n )\n }\n if (\n committedSince(db, plan, header.commit.projectId) ||\n unplannedCount(db, candidate.version_id) > 0\n ) {\n throw new MaterializationValidationError(\n \"A replacement plan applies only fully planned and just refreshed.\"\n )\n }\n return { versionId: candidate.version_id, projectionKind: candidate.projection_kind }\n}\n",
54
56
  "import type { Database } from \"bun:sqlite\"\nimport {\n linkRefKey,\n MaterializationConflictError,\n objectRefKey,\n telemetryPointKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n effectiveConflict,\n type MaterializationPlanChunk,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { ExactEffectiveLinkWrite, ExactEffectiveObjectWrite } from \"@sixb/core/storage\"\nimport { assertTimestamp, canonicalJson, isSqliteConstraintError, requireChanges } from \"./shared\"\n\nfunction linkOverrideConflictMessage(identityKind: \"edge\" | \"slot\"): string {\n return identityKind === \"edge\"\n ? \"Expected link edge override changed.\"\n : \"Expected link slot override changed.\"\n}\n\nfunction linkOverrideConflict(identityKind: \"edge\" | \"slot\"): MaterializationConflictError {\n return effectiveConflict(linkOverrideConflictMessage(identityKind))\n}\n\n/** Applies one already-validated exact plan chunk to SQLite authority tables. */\nexport class SqliteMaterializationWriter {\n constructor(private readonly db: Database) {}\n\n apply(projectId: string, commitId: string, chunk: MaterializationPlanChunk): void {\n this.applyOverrides(projectId, chunk)\n this.applyEffective(projectId, chunk)\n this.applyTimeseries(projectId, chunk)\n this.applyOutbox(projectId, commitId, chunk)\n }\n\n private applyOverrides(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.overrides.objects.upserts) {\n if (item.expectedLastCommitId === null) {\n try {\n this.db\n .query(\n `INSERT INTO ontology_object_overrides (\n project_id, object_type_id, primary_id, value, edited_at,\n last_commit_id, updated_at\n ) VALUES (?, ?, ?, json(?), json(?), ?, ?)`\n )\n .run(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n canonicalJson(item.value),\n canonicalJson(item.editedAt),\n item.lastCommitId,\n item.updatedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(\"Expected object override changed.\")\n }\n throw error\n }\n continue\n }\n requireChanges(\n this.db\n .query(\n `UPDATE ontology_object_overrides\n SET value = json(?), edited_at = json(?), last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND last_commit_id = ?`\n )\n .run(\n canonicalJson(item.value),\n canonicalJson(item.editedAt),\n item.lastCommitId,\n item.updatedAt,\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n item.expectedLastCommitId\n ).changes,\n \"effective-state\",\n \"Expected object override changed.\"\n )\n }\n for (const item of chunk.overrides.objects.deletes) {\n requireChanges(\n this.db\n .query(\n `DELETE FROM ontology_object_overrides\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND last_commit_id = ?`\n )\n .run(projectId, item.ref.objectTypeId, item.ref.primaryId, item.expectedLastCommitId)\n .changes,\n \"effective-state\",\n \"Expected object override changed.\"\n )\n }\n\n const upsertLink = (\n identityKind: \"edge\" | \"slot\",\n identityKey: string,\n ref: {\n readonly source: { readonly objectTypeId: string; readonly primaryId: string }\n readonly linkId: string\n readonly target: { readonly objectTypeId: string; readonly primaryId: string }\n },\n item:\n | (typeof chunk.overrides.links.edges.upserts)[number]\n | (typeof chunk.overrides.links.slots.upserts)[number]\n ): void => {\n if (item.expectedLastCommitId === null) {\n try {\n this.db\n .query(\n `INSERT INTO ontology_link_overrides (\n project_id, identity_kind, identity_key,\n source_type_id, source_primary_id, link_id,\n target_type_id, target_primary_id, value, last_commit_id, updated_at\n ) VALUES (?, ?, json(?), ?, ?, ?, ?, ?, json(?), ?, ?)`\n )\n .run(\n projectId,\n identityKind,\n identityKey,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId,\n canonicalJson(item.value),\n item.lastCommitId,\n item.updatedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw linkOverrideConflict(identityKind)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `UPDATE ontology_link_overrides\n SET target_type_id = ?, target_primary_id = ?, value = json(?),\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND identity_kind = ? AND identity_key = json(?)\n AND last_commit_id = ?`\n )\n .run(\n ref.target.objectTypeId,\n ref.target.primaryId,\n canonicalJson(item.value),\n item.lastCommitId,\n item.updatedAt,\n projectId,\n identityKind,\n identityKey,\n item.expectedLastCommitId\n ).changes,\n \"effective-state\",\n linkOverrideConflictMessage(identityKind)\n )\n }\n\n for (const item of chunk.overrides.links.edges.upserts) {\n upsertLink(\"edge\", linkRefKey(item.ref), item.ref, item)\n }\n for (const item of chunk.overrides.links.slots.upserts) {\n upsertLink(\n \"slot\",\n JSON.stringify([item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId]),\n { source: item.ref.source, linkId: item.ref.linkId, target: item.value.target },\n item\n )\n }\n\n const deleteLink = (\n identityKind: \"edge\" | \"slot\",\n identityKey: string,\n expectedLastCommitId: string\n ): void => {\n requireChanges(\n this.db\n .query(\n `DELETE FROM ontology_link_overrides\n WHERE project_id = ? AND identity_kind = ? AND identity_key = json(?)\n AND last_commit_id = ?`\n )\n .run(projectId, identityKind, identityKey, expectedLastCommitId).changes,\n \"effective-state\",\n linkOverrideConflictMessage(identityKind)\n )\n }\n for (const item of chunk.overrides.links.edges.deletes) {\n deleteLink(\"edge\", linkRefKey(item.ref), item.expectedLastCommitId)\n }\n for (const item of chunk.overrides.links.slots.deletes) {\n deleteLink(\n \"slot\",\n JSON.stringify([item.ref.source.objectTypeId, item.ref.source.primaryId, item.ref.linkId]),\n item.expectedLastCommitId\n )\n }\n }\n\n private applyEffective(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.effective.linkDeletes) {\n requireChanges(\n this.db\n .query(\n `\n DELETE FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ? AND last_commit_id = ?\n `\n )\n .run(\n projectId,\n item.ref.source.objectTypeId,\n item.ref.source.primaryId,\n item.ref.linkId,\n item.ref.target.objectTypeId,\n item.ref.target.primaryId,\n item.expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected link ${linkRefKey(item.ref)} changed.`\n )\n }\n for (const item of chunk.effective.objectDeletes) {\n requireChanges(\n this.db\n .query(\n `DELETE FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND version = ? AND last_commit_id = ?`\n )\n .run(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId,\n item.expected.version,\n item.expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected object ${objectRefKey(item.ref)} changed.`\n )\n }\n for (const item of chunk.effective.objectUpserts) this.applyObject(projectId, item)\n for (const item of chunk.effective.linkUpserts) this.applyLink(projectId, item)\n }\n\n private applyObject(projectId: string, item: ExactEffectiveObjectWrite): void {\n const { row, expected } = item\n if (!expected.exists) {\n try {\n this.db\n .query(\n `\n INSERT INTO objects (\n project_id, object_type_id, primary_id, properties, created_at,\n updated_at, version, last_commit_id\n ) VALUES (?, ?, ?, json(?), ?, ?, ?, ?)\n `\n )\n .run(\n projectId,\n row.ref.objectTypeId,\n row.ref.primaryId,\n canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.version,\n row.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Expected object ${objectRefKey(row.ref)} to be absent.`)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE objects\n SET properties = json(?), created_at = ?, updated_at = ?, version = ?,\n last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND version = ? AND last_commit_id = ?\n `\n )\n .run(\n canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.version,\n row.lastCommitId,\n projectId,\n row.ref.objectTypeId,\n row.ref.primaryId,\n expected.version,\n expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected object ${objectRefKey(row.ref)} changed.`\n )\n }\n\n private applyLink(projectId: string, item: ExactEffectiveLinkWrite): void {\n const { row, expected } = item\n if (!expected.exists) {\n try {\n this.db\n .query(\n `\n INSERT INTO links (\n project_id, source_type_id, source_id, link_id, target_type_id, target_id,\n properties, created_at, updated_at, last_commit_id\n ) VALUES (?, ?, ?, ?, ?, ?, json(?), ?, ?, ?)\n `\n )\n .run(\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId,\n row.ref.linkId,\n row.ref.target.objectTypeId,\n row.ref.target.primaryId,\n row.properties === undefined ? null : canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Expected link ${linkRefKey(row.ref)} to be absent.`)\n }\n throw error\n }\n return\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE links\n SET properties = json(?), created_at = ?, updated_at = ?,\n last_commit_id = ?\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ? AND last_commit_id = ?\n `\n )\n .run(\n row.properties === undefined ? null : canonicalJson(row.properties),\n row.createdAt,\n row.updatedAt,\n row.lastCommitId,\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId,\n row.ref.linkId,\n row.ref.target.objectTypeId,\n row.ref.target.primaryId,\n expected.lastCommitId\n ).changes,\n \"effective-state\",\n `Expected link ${linkRefKey(row.ref)} changed.`\n )\n }\n\n private applyTimeseries(projectId: string, chunk: MaterializationPlanChunk): void {\n for (const item of chunk.timeseries.pointUpserts) {\n const { point, expected } = item\n if (expected.lastCommitId === null) {\n try {\n this.db\n .query(\n `\n INSERT INTO timeseries (\n project_id, object_type_id, object_id, property_id,\n value, unit, at, last_commit_id\n ) VALUES (?, ?, ?, ?, json(?), ?, ?, ?)\n `\n )\n .run(\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId,\n canonicalJson(point.value),\n point.unit ?? null,\n point.at,\n point.lastCommitId\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(point.series, point.at)} changed.`\n )\n }\n throw error\n }\n } else {\n requireChanges(\n this.db\n .query(\n `\n UPDATE timeseries\n SET value = json(?), unit = ?, last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND object_id = ?\n AND property_id = ? AND at = ? AND last_commit_id = ?\n `\n )\n .run(\n canonicalJson(point.value),\n point.unit ?? null,\n point.lastCommitId,\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId,\n point.at,\n expected.lastCommitId\n ).changes,\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(point.series, point.at)} changed.`\n )\n }\n }\n }\n\n private applyOutbox(projectId: string, commitId: string, chunk: MaterializationPlanChunk): void {\n const insert = this.db.query(\n `\n INSERT INTO ontology_outbox (\n project_id, id, commit_id, commit_ordinal, event,\n available_at, attempts, lease_id, lease_expires_at,\n published_at, last_failure, created_at\n ) VALUES (?, ?, ?, ?, json(?), ?, 0, NULL, NULL, NULL, NULL, ?)\n `\n )\n for (const item of chunk.outbox) {\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n try {\n insert.run(\n projectId,\n item.id,\n commitId,\n item.commitOrdinal,\n canonicalJson(item.event),\n item.createdAt,\n item.createdAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw effectiveConflict(`Duplicate outbox event '${item.id}'.`)\n }\n throw error\n }\n }\n }\n}\n",
55
57
  "import type { Database } from \"bun:sqlite\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"@sixb/core/internal/materialization\"\nimport {\n claimedOutboxRows,\n type OutboxEventContext,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n ClaimedOntologyOutboxRow,\n ClaimOntologyOutboxInput,\n CompleteOntologyOutboxLeaseInput,\n OntologyOutboxStorage,\n OntologyOutboxSummary,\n PurgePublishedOntologyOutboxInput,\n RescheduleOntologyOutboxLeaseInput,\n SummarizeOntologyOutboxInput,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\nimport { type SqliteExecutionRow, sqliteExecutionRecord } from \"../execution-storage\"\nimport {\n assertNonblank,\n assertPositiveInteger,\n assertTimestamp,\n claimedOutboxDraft,\n parseJson,\n type SqliteOntologyOutboxRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\n/** A commit's own fields, prefixed, beside every column of the execution it ran under. */\ninterface SqliteOutboxContextRow extends SqliteExecutionRow {\n readonly commit_id: string\n readonly commit_committed_at: string\n readonly commit_origin: string\n}\n\nexport class SqliteOntologyOutboxStorage implements OntologyOutboxStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async claim(input: ClaimOntologyOutboxInput): Promise<readonly ClaimedOntologyOutboxRow[]> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n const now = assertTimestamp(input.now, \"Ontology outbox claim time\")\n const leaseExpiry = assertTimestamp(input.leaseExpiresAt, \"Ontology outbox lease expiry\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n if (leaseExpiry <= now) {\n throw new MaterializationValidationError(\n \"Ontology outbox lease expiry must be later than the claim time.\"\n )\n }\n\n // Probe at most one page plus a sentinel through the eligibility index. Sparse retries\n // avoid scanning delayed rows; overflowing backlogs use publication order without a sort.\n const eligible = this.db\n .query(\n `SELECT CAST(rowid AS TEXT) AS rowId\n FROM ontology_outbox INDEXED BY idx_ontology_outbox_claim\n WHERE project_id = ? AND published_at IS NULL AND available_at <= ?\n AND (lease_expires_at IS NULL OR lease_expires_at <= ?)\n LIMIT ?`\n )\n .all(input.projectId, input.now, input.now, input.limit + 1) as { rowId: string }[]\n if (eligible.length === 0) return []\n const selected =\n eligible.length <= input.limit\n ? eligible\n : (this.db\n .query(\n `SELECT CAST(rowid AS TEXT) AS rowId\n FROM ontology_outbox INDEXED BY idx_ontology_outbox_publication_order\n WHERE project_id = ? AND published_at IS NULL AND available_at <= ?\n AND (lease_expires_at IS NULL OR lease_expires_at <= ?)\n ORDER BY created_at, commit_id, commit_ordinal\n LIMIT ?`\n )\n .all(input.projectId, input.now, input.now, input.limit) as { rowId: string }[])\n const rows = this.db\n .query(\n `\n UPDATE ontology_outbox\n SET attempts = attempts + 1, lease_id = ?, lease_expires_at = ?\n WHERE rowid IN (SELECT CAST(value AS INTEGER) FROM json_each(?))\n RETURNING id, commit_id, commit_ordinal, event, available_at, attempts, lease_id,\n lease_expires_at, published_at, last_failure, created_at\n `\n )\n .all(\n input.leaseId,\n input.leaseExpiresAt,\n JSON.stringify(selected.map((row) => row.rowId))\n ) as SqliteOntologyOutboxRow[]\n // Each commit and its execution are read once, however many of its events the batch holds.\n const contexts = this.db\n .query(\n `SELECT commits.id AS commit_id, commits.committed_at AS commit_committed_at,\n commits.origin AS commit_origin, executions.*\n FROM json_each(?) AS requested\n CROSS JOIN ontology_commits AS commits\n ON commits.project_id = ? AND commits.id = requested.value\n CROSS JOIN executions\n ON executions.project_id = commits.project_id AND executions.id = commits.execution_id`\n )\n .all(\n JSON.stringify([...new Set(rows.map((row) => row.commit_id))]),\n input.projectId\n ) as SqliteOutboxContextRow[]\n const contextOf = new Map(\n contexts.map((row) => [row.commit_id, outboxEventContext(input.projectId, row)])\n )\n const drafts = rows\n .map(claimedOutboxDraft)\n .sort(\n (left, right) =>\n left.createdAt.localeCompare(right.createdAt) || left.id.localeCompare(right.id)\n )\n return claimedOutboxRows(drafts, (commitId) => contextOf.get(commitId))\n })\n }\n\n async markPublished(input: CompleteOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => {\n assertLeaseInput(input)\n assertTimestamp(input.publishedAt, \"Ontology outbox publishedAt\")\n const ids = validateLeaseIds(input.ids)\n const changed = this.db\n .query(\n `\n WITH requested(id) AS MATERIALIZED (\n SELECT CAST(value AS TEXT) FROM json_each(?)\n ), leased(id) AS MATERIALIZED (\n -- Drive validation from the bounded ID list even before ANALYZE.\n SELECT outbox.id FROM requested\n CROSS JOIN ontology_outbox AS outbox USING (id)\n WHERE outbox.project_id = ? AND outbox.lease_id = ?\n AND outbox.lease_expires_at IS NOT NULL\n ), eligible(id) AS (\n SELECT id FROM leased WHERE (SELECT COUNT(*) FROM leased) = ?\n )\n UPDATE ontology_outbox\n SET published_at = ?, lease_id = NULL, lease_expires_at = NULL\n WHERE project_id = ? AND id IN (SELECT id FROM eligible)\n AND lease_id = ? AND lease_expires_at IS NOT NULL\n `\n )\n .run(\n JSON.stringify(ids),\n input.projectId,\n input.leaseId,\n ids.length,\n input.publishedAt,\n input.projectId,\n input.leaseId\n ).changes\n if (changed !== ids.length) throw leaseConflict()\n })\n }\n\n async reschedule(input: RescheduleOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => {\n assertLeaseInput(input)\n assertTimestamp(input.availableAt, \"Ontology outbox availableAt\")\n const ids = validateLeaseIds(input.ids)\n const failure =\n input.failure === undefined\n ? null\n : serializeSixbFailure(input.failure, ONTOLOGY_OUTBOX_FAILURE_CODES)\n const changed = this.db\n .query(\n `\n WITH requested(id) AS MATERIALIZED (\n SELECT CAST(value AS TEXT) FROM json_each(?)\n ), leased(id) AS MATERIALIZED (\n -- Drive validation from the bounded ID list even before ANALYZE.\n SELECT outbox.id FROM requested\n CROSS JOIN ontology_outbox AS outbox USING (id)\n WHERE outbox.project_id = ? AND outbox.lease_id = ?\n AND outbox.lease_expires_at IS NOT NULL\n ), eligible(id) AS (\n SELECT id FROM leased WHERE (SELECT COUNT(*) FROM leased) = ?\n )\n UPDATE ontology_outbox\n SET available_at = ?, last_failure = COALESCE(?, last_failure),\n lease_id = NULL, lease_expires_at = NULL\n WHERE project_id = ? AND id IN (SELECT id FROM eligible)\n AND lease_id = ? AND lease_expires_at IS NOT NULL\n `\n )\n .run(\n JSON.stringify(ids),\n input.projectId,\n input.leaseId,\n ids.length,\n input.availableAt,\n failure,\n input.projectId,\n input.leaseId\n ).changes\n if (changed !== ids.length) throw leaseConflict()\n })\n }\n\n async purgePublished(input: PurgePublishedOntologyOutboxInput): Promise<number> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveInteger(input.limit, \"Ontology outbox limit\")\n assertTimestamp(input.publishedBefore, \"Ontology outbox purge cutoff\")\n return this.db\n .query(\n `\n DELETE FROM ontology_outbox\n WHERE rowid IN (\n SELECT rowid FROM ontology_outbox\n WHERE project_id = ? AND published_at IS NOT NULL AND published_at < ?\n ORDER BY published_at, id\n LIMIT ?\n )\n `\n )\n .run(input.projectId, input.publishedBefore, input.limit).changes\n })\n }\n\n async summarize(input: SummarizeOntologyOutboxInput): Promise<OntologyOutboxSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n const summary = this.db\n .query(\n `\n SELECT COUNT(*) AS pending_count,\n MIN(created_at) AS oldest_pending_at,\n SUM(CASE WHEN attempts > 0 THEN 1 ELSE 0 END) AS retrying_count,\n COALESCE(MAX(attempts), 0) AS max_attempts\n FROM ontology_outbox\n WHERE project_id = ? AND published_at IS NULL\n `\n )\n .get(input.projectId) as {\n readonly pending_count: number\n readonly oldest_pending_at: string | null\n readonly retrying_count: number | null\n readonly max_attempts: number\n }\n return {\n pendingCount: summary.pending_count,\n oldestPendingAt: summary.oldest_pending_at,\n retryingCount: summary.retrying_count ?? 0,\n maxAttempts: summary.max_attempts,\n }\n })\n }\n}\n\nfunction outboxEventContext(projectId: string, row: SqliteOutboxContextRow): OutboxEventContext {\n return {\n commit: {\n projectId,\n id: row.commit_id,\n committedAt: row.commit_committed_at,\n origin: parseJson<OutboxEventContext[\"commit\"][\"origin\"]>(row.commit_origin),\n },\n execution: sqliteExecutionRecord(row),\n }\n}\n\nfunction validateLeaseIds(ids: readonly string[]): string[] {\n const seen = new Set<string>()\n for (const id of ids) {\n assertNonblank(id, \"Ontology outbox event id\")\n if (seen.has(id)) {\n throw new MaterializationValidationError(`Ontology outbox lease batch repeats event '${id}'.`)\n }\n seen.add(id)\n }\n return [...seen]\n}\n\nfunction assertLeaseInput(input: {\n readonly projectId: string\n readonly ids: readonly string[]\n readonly leaseId: string\n}): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n}\n\nfunction leaseConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\"outbox-lease\", \"Ontology outbox lease does not match.\")\n}\n",
56
- "import type { Database } from \"bun:sqlite\"\nimport { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceAssertionPayload,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonRunSourceMaterializationInput,\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AdoptedSourceMaterialization,\n AdoptSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n PurgeAbandonedSourceMaterializationsInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n canonicalJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n sourceAssertion,\n sourceRecord,\n} from \"./shared\"\nimport { cleanupSourceVersions, purgeAbandonedSourceVersions } from \"./source-cleanup\"\nimport {\n assertSourceRootCoverage,\n SOURCE_ASSERTION_COLUMNS,\n stageSourceRoots,\n} from \"./source-roots\"\n\nexport class SqliteOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertBeginInput(input)\n this.assertExecution(input, sourceMaterializationIdentity(input))\n const existing = this.getManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = this.db\n .query(\n `\n SELECT 1\n FROM ontology_sources\n WHERE project_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n LIMIT 1\n `\n )\n .get(input.projectId, input.execution.projectionRunId)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; adopt it before beginning another.`\n )\n }\n\n this.db\n .query(\n `\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at, base_materialization_id, base_commit_id\n ) VALUES (?, ?, ?, ?, ?, 'replacement', 'staging', ?, ?, ?, ?, ?, ?, ?,\n NULL, NULL, ?, NULL, NULL, NULL, NULL, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.projectionRunId,\n input.projectionKind,\n input.execution.executionToken,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.projectionRevision,\n input.ownershipHash,\n input.ontologyRevision,\n input.createdAt,\n input.createdAt,\n input.base?.materializationId ?? null,\n input.base?.lastCommitId ?? null\n )\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n const result = await this.runRootOperation(() => {\n assertWriteIdentity(input)\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = this.findStageRows(manifest, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n stageSourceRoots(this.db, manifest, input)\n this.insertStageRows(manifest, pending)\n return { inserted: pending.length, unchanged }\n })\n await yieldSqliteEventLoop()\n return result\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n manifest.root_count === input.rootCount &&\n manifest.assertion_count === input.assertionCount &&\n manifest.ready_at === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < manifest.created_at) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n this.assertReadyState(manifest, input.rootCount, input.assertionCount)\n const result = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'ready', root_count = ?, assertion_count = ?, ready_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'staging' AND execution_token = ?\n `\n )\n .run(\n input.rootCount,\n input.assertionCount,\n input.readyAt,\n input.readyAt,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.executionToken\n )\n if (result.changes !== 1) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const row = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'\n `\n )\n .get(input.projectId, input.source.projectionId) as SqliteOntologySourceRow | null\n return row ? sourceRecord(row) : null\n })\n }\n\n async adopt(\n input: AdoptSourceMaterializationInput\n ): Promise<AdoptedSourceMaterialization | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.adoptedAt, \"Source adoptedAt\", true)\n this.assertExecution(input)\n const candidate = this.findRunCandidate(input)\n if (!candidate) return null\n // Workers' clocks differ; adoption never moves the record back in time.\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources SET execution_token = ?, updated_at = MAX(updated_at, ?)\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n input.execution.executionToken,\n input.adoptedAt,\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(`Source materialization '${candidate.materialization_id}' changed.`)\n }\n const adopted = this.requireManifest(\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n )\n return {\n record: sourceRecord(adopted),\n resumeStagingOrdinal:\n adopted.status === \"ready\" ? Number(adopted.root_count) : this.lastStagedOrdinal(adopted),\n }\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: AbandonRunSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n this.assertExecution(input)\n if (input.kind === \"candidate\") return this.abandonCandidate(input)\n const candidate = this.findRunCandidate(input)\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n return cleanupSourceVersions(this.db, input)\n })\n }\n\n async purgeAbandoned(\n input: PurgeAbandonedSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Abandoned source purge project id\")\n assertPositiveInteger(input.limit, \"Abandoned source purge limit\")\n return purgeAbandonedSourceVersions(this.db, input)\n })\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(manifest, input.abandonedAt)\n }\n\n /** The run's one staging or ready candidate, whichever execution staged it. */\n private findRunCandidate(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string }\n }): SqliteOntologySourceRow | null {\n const candidates = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n ) as SqliteOntologySourceRow[]\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ?? null\n }\n\n private lastStagedOrdinal(manifest: SqliteOntologySourceRow): number {\n const last = this.db\n .query(\n \"SELECT MAX(staging_ordinal) AS ordinal FROM ontology_source_roots WHERE version_id = ?\"\n )\n .get(manifest.version_id) as {\n readonly ordinal: number | null\n } | null\n return last?.ordinal ?? 0\n }\n\n private transitionToAbandoned(\n manifest: SqliteOntologySourceRow,\n abandonedAt: string\n ): OntologySourceRecord {\n if (\n abandonedAt < manifest.created_at ||\n (manifest.ready_at !== null && abandonedAt < manifest.ready_at)\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n abandonedAt,\n abandonedAt,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n // Its roots were never live and stay unpublished; purging removes them with the version.\n return sourceRecord(\n this.requireManifest(manifest.project_id, manifest.source_id, manifest.materialization_id)\n )\n }\n\n private assertReadyState(\n manifest: SqliteOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): void {\n const counts = this.db\n .query(\n `\n SELECT (SELECT COUNT(*) FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?1) AS assertions,\n COUNT(*) AS roots, COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE version_id = ?1\n `\n )\n .get(manifest.version_id) as {\n assertions: number\n roots: number\n ordinals: number\n min_ordinal: number | null\n max_ordinal: number | null\n }\n if (\n counts.assertions !== assertionCount ||\n counts.roots !== rootCount ||\n counts.ordinals !== rootCount ||\n (rootCount > 0 && (counts.min_ordinal !== 0 || counts.max_ordinal !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n assertSourceRootCoverage(this.db, manifest)\n // Roots store only their canonical key; compare its parts with each row's typed identity.\n const invalid = this.db\n .query(\n manifest.projection_kind === \"link\"\n ? `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING COUNT(*) <> 1\n OR MAX(json_extract(roots.root_key, '$[0]') <> 'link')\n OR MAX(rows.entity_kind <> 'link')\n OR MAX(rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')\n OR rows.link_id <> json_extract(roots.root_key, '$[3]')\n OR rows.target_type_id <> json_extract(roots.root_key, '$[4]')\n OR rows.target_primary_id <> json_extract(roots.root_key, '$[5]'))\n LIMIT 1\n `\n : `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING MAX(json_extract(roots.root_key, '$[0]') <> 'object')\n OR SUM(rows.entity_kind = 'object'\n AND rows.object_type_id = json_extract(roots.root_key, '$[1]')\n AND rows.primary_id = json_extract(roots.root_key, '$[2]')) <> 1\n OR SUM(\n (rows.entity_kind = 'object' AND (\n rows.object_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.primary_id <> json_extract(roots.root_key, '$[2]')))\n OR (rows.entity_kind = 'link' AND (\n rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')))\n ) <> 0\n OR SUM(rows.entity_kind = 'link') <> COUNT(DISTINCT CASE\n WHEN rows.entity_kind = 'link'\n THEN json_array(rows.link_id, rows.target_type_id, rows.target_primary_id)\n END)\n LIMIT 1\n `\n )\n .get(manifest.version_id)\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n /** Already staged assertions sharing a root or an ordinal with `rows`. */\n private findStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): readonly SourceStageRow[] {\n if (rows.length === 0) return []\n const rootKeys = [...new Set(rows.map((row) => row.rootKey))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n // Two keyed lookups: an OR over both columns scans every root of the version per batch.\n const existing = this.db\n .query(\n `\n WITH selected AS (\n SELECT roots.id FROM json_each(?2) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.root_key = CAST(requested.value AS TEXT)\n UNION\n SELECT roots.id FROM json_each(?3) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.staging_ordinal = CAST(requested.value AS INTEGER)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM selected\n CROSS JOIN ontology_source_roots AS roots ON roots.id = selected.id\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n `\n )\n .all(\n manifest.version_id,\n JSON.stringify(rootKeys),\n JSON.stringify(ordinals)\n ) as SqliteOntologySourceAssertionRow[]\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private insertStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): void {\n if (rows.length === 0) return\n const payload = rows.map(({ rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n return {\n rootKey,\n entityKind: row.assertion.kind,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n payload: sourceAssertionPayload(row.assertion),\n }\n })\n const inserted = this.db\n .query(\n `\n WITH staged(value) AS (SELECT value FROM json_each(?))\n INSERT INTO ontology_source_rows (\n root_id, entity_kind, object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id, payload\n )\n SELECT roots.id, json_extract(value, '$.entityKind'),\n json_extract(value, '$.objectTypeId'), json_extract(value, '$.primaryId'),\n json_extract(value, '$.sourceTypeId'), json_extract(value, '$.sourcePrimaryId'),\n json_extract(value, '$.linkId'), json_extract(value, '$.targetTypeId'),\n json_extract(value, '$.targetPrimaryId'), json_extract(value, '$.payload')\n FROM staged\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ? AND roots.root_key = json_extract(value, '$.rootKey')\n `\n )\n .run(canonicalJson(payload), manifest.version_id).changes\n if (inserted !== rows.length) {\n throw sourceConflict(\"Staged source rows do not all belong to a staged root.\")\n }\n }\n\n private assertExecution(\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): void {\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private getManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n\n private requireManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow {\n const row = this.getManifest(projectId, sourceId, materializationId)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n",
58
+ "import type { Database } from \"bun:sqlite\"\nimport { MaterializationValidationError } from \"@sixb/core/internal/materialization\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertSourceExecutionIdentity as assertExecutionIdentity,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceWriteIdentity as assertWriteIdentity,\n sourceEntityColumns as entityColumns,\n isExactStagingManifest,\n reconcileSourceStageRows,\n type SourceStageRow,\n sourceAssertionPayload,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRow,\n sourceStageRows,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AbandonRunSourceMaterializationInput,\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n ActiveOntologySource,\n AdoptedSourceMaterialization,\n AdoptSourceMaterializationInput,\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n ListActiveOntologySourcesInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n PurgeAbandonedSourceMaterializationsInput,\n StageSourceRowsInput,\n StageSourceRowsResult,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertProjectionExecution,\n assertTimestamp,\n canonicalJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteOntologySourceRow,\n type SqliteRootOperation,\n sourceAssertion,\n sourceRecord,\n} from \"./shared\"\nimport { cleanupSourceVersions, purgeAbandonedSourceVersions } from \"./source-cleanup\"\nimport {\n assertSourceRootCoverage,\n SOURCE_ASSERTION_COLUMNS,\n stageSourceRoots,\n} from \"./source-roots\"\n\nexport class SqliteOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertBeginInput(input)\n this.assertExecution(input, sourceMaterializationIdentity(input))\n const existing = this.getManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (existing) {\n if (isExactStagingManifest(sourceRecord(existing), input)) return sourceRecord(existing)\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const candidate = this.db\n .query(\n `\n SELECT 1\n FROM ontology_sources\n WHERE project_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n LIMIT 1\n `\n )\n .get(input.projectId, input.execution.projectionRunId)\n if (candidate) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; adopt it before beginning another.`\n )\n }\n\n this.db\n .query(\n `\n INSERT INTO ontology_sources (\n project_id, source_id, materialization_id, projection_run_id,\n projection_kind, protocol, status, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision, ownership_hash, ontology_revision,\n root_count, assertion_count, created_at, ready_at, activated_at,\n terminal_at, last_commit_id, updated_at, base_materialization_id, base_commit_id\n ) VALUES (?, ?, ?, ?, ?, 'replacement', 'staging', ?, ?, ?, ?, ?, ?, ?,\n NULL, NULL, ?, NULL, NULL, NULL, NULL, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.projectionRunId,\n input.projectionKind,\n input.execution.executionToken,\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId,\n input.datasetVersion.createdAt,\n input.projectionRevision,\n input.ownershipHash,\n input.ontologyRevision,\n input.createdAt,\n input.createdAt,\n input.base?.materializationId ?? null,\n input.base?.lastCommitId ?? null\n )\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n const result = await this.runRootOperation(() => {\n assertWriteIdentity(input)\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${manifest.status}' and cannot accept rows.`\n )\n }\n\n const rows = sourceStageRows(manifest.projection_kind, input.rows)\n const existing = this.findStageRows(manifest, rows)\n const { pending, unchanged } = reconcileSourceStageRows(rows, existing)\n stageSourceRoots(this.db, manifest, input)\n this.insertStageRows(manifest, pending)\n return { inserted: pending.length, unchanged }\n })\n await yieldSqliteEventLoop()\n return result\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(() => {\n assertWriteIdentity(input)\n assertTimestamp(input.readyAt, \"Source readyAt\", true)\n assertNonnegativeInteger(input.rootCount, \"Source root count\")\n assertNonnegativeInteger(input.assertionCount, \"Source assertion count\")\n this.assertExecution(input)\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n if (manifest.status === \"ready\") {\n if (\n manifest.root_count === input.rootCount &&\n manifest.assertion_count === input.assertionCount &&\n manifest.ready_at === input.readyAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (manifest.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${manifest.status}' to 'ready'.`\n )\n }\n if (input.readyAt < manifest.created_at) {\n throw new MaterializationValidationError(\"Source readyAt cannot precede source createdAt.\")\n }\n this.assertReadyState(manifest, input.rootCount, input.assertionCount)\n const result = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'ready', root_count = ?, assertion_count = ?, ready_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'staging' AND execution_token = ?\n `\n )\n .run(\n input.rootCount,\n input.assertionCount,\n input.readyAt,\n input.readyAt,\n input.projectId,\n input.source.projectionId,\n input.materializationId,\n input.execution.executionToken\n )\n if (result.changes !== 1) {\n throw sourceConflict(`Source materialization '${input.materializationId}' changed.`)\n }\n return sourceRecord(\n this.requireManifest(input.projectId, input.source.projectionId, input.materializationId)\n )\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const row = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'\n `\n )\n .get(input.projectId, input.source.projectionId) as SqliteOntologySourceRow | null\n return row ? sourceRecord(row) : null\n })\n }\n\n async listActive(\n input: ListActiveOntologySourcesInput\n ): Promise<readonly ActiveOntologySource[]> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Source project id\")\n\n // Served by the partial index on active sources.\n const rows = this.db\n .query(\n `\n SELECT source_id, dataset_id, dataset_version_id, dataset_version_created_at,\n projection_revision\n FROM ontology_sources\n WHERE project_id = ? AND status = 'active'\n `\n )\n .all(input.projectId) as ActiveSourceRow[]\n\n return rows.map((row) => ({\n source: { projectionId: row.source_id },\n datasetVersion: {\n datasetId: row.dataset_id,\n versionId: row.dataset_version_id,\n createdAt: row.dataset_version_created_at,\n },\n projectionRevision: row.projection_revision,\n }))\n })\n }\n\n async adopt(\n input: AdoptSourceMaterializationInput\n ): Promise<AdoptedSourceMaterialization | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.adoptedAt, \"Source adoptedAt\", true)\n this.assertExecution(input)\n const candidate = this.findRunCandidate(input)\n if (!candidate) return null\n // Workers' clocks differ; adoption never moves the record back in time.\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources SET execution_token = ?, updated_at = MAX(updated_at, ?)\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n input.execution.executionToken,\n input.adoptedAt,\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(`Source materialization '${candidate.materialization_id}' changed.`)\n }\n const adopted = this.requireManifest(\n candidate.project_id,\n candidate.source_id,\n candidate.materialization_id\n )\n return {\n record: sourceRecord(adopted),\n resumeStagingOrdinal:\n adopted.status === \"ready\" ? Number(adopted.root_count) : this.lastStagedOrdinal(adopted),\n }\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: AbandonRunSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n assertExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertTimestamp(input.abandonedAt, \"Source abandonedAt\", true)\n this.assertExecution(input)\n if (input.kind === \"candidate\") return this.abandonCandidate(input)\n const candidate = this.findRunCandidate(input)\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\", true)\n assertPositiveInteger(input.limit, \"Terminal source cleanup limit\")\n return cleanupSourceVersions(this.db, input)\n })\n }\n\n async purgeAbandoned(\n input: PurgeAbandonedSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Abandoned source purge project id\")\n assertPositiveInteger(input.limit, \"Abandoned source purge limit\")\n return purgeAbandonedSourceVersions(this.db, input)\n })\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const manifest = this.requireManifest(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n if (manifest.status === \"abandoned\") {\n if (\n manifest.projection_run_id === input.execution.projectionRunId &&\n manifest.terminal_at === input.abandonedAt\n ) {\n return sourceRecord(manifest)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceRecord(manifest), input.execution)\n return this.transitionToAbandoned(manifest, input.abandonedAt)\n }\n\n /** The run's one staging or ready candidate, whichever execution staged it. */\n private findRunCandidate(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string }\n }): SqliteOntologySourceRow | null {\n const candidates = this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND projection_run_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .all(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n ) as SqliteOntologySourceRow[]\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n return candidates[0] ?? null\n }\n\n private lastStagedOrdinal(manifest: SqliteOntologySourceRow): number {\n const last = this.db\n .query(\n \"SELECT MAX(staging_ordinal) AS ordinal FROM ontology_source_roots WHERE version_id = ?\"\n )\n .get(manifest.version_id) as {\n readonly ordinal: number | null\n } | null\n return last?.ordinal ?? 0\n }\n\n private transitionToAbandoned(\n manifest: SqliteOntologySourceRow,\n abandonedAt: string\n ): OntologySourceRecord {\n if (\n abandonedAt < manifest.created_at ||\n (manifest.ready_at !== null && abandonedAt < manifest.ready_at)\n ) {\n throw new MaterializationValidationError(\n \"Source abandonedAt cannot precede source creation or readiness.\"\n )\n }\n const changed = this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'abandoned', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status IN ('staging', 'ready')\n `\n )\n .run(\n abandonedAt,\n abandonedAt,\n manifest.project_id,\n manifest.source_id,\n manifest.materialization_id\n ).changes\n if (changed !== 1) {\n throw sourceConflict(\n `Source materialization '${manifest.materialization_id}' cannot transition to 'abandoned'.`\n )\n }\n // Its roots were never live and stay unpublished; purging removes them with the version.\n return sourceRecord(\n this.requireManifest(manifest.project_id, manifest.source_id, manifest.materialization_id)\n )\n }\n\n private assertReadyState(\n manifest: SqliteOntologySourceRow,\n rootCount: number,\n assertionCount: number\n ): void {\n const counts = this.db\n .query(\n `\n SELECT (SELECT COUNT(*) FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?1) AS assertions,\n COUNT(*) AS roots, COUNT(DISTINCT staging_ordinal) AS ordinals,\n MIN(staging_ordinal) AS min_ordinal, MAX(staging_ordinal) AS max_ordinal\n FROM ontology_source_roots\n WHERE version_id = ?1\n `\n )\n .get(manifest.version_id) as {\n assertions: number\n roots: number\n ordinals: number\n min_ordinal: number | null\n max_ordinal: number | null\n }\n if (\n counts.assertions !== assertionCount ||\n counts.roots !== rootCount ||\n counts.ordinals !== rootCount ||\n (rootCount > 0 && (counts.min_ordinal !== 0 || counts.max_ordinal !== rootCount - 1))\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n assertSourceRootCoverage(this.db, manifest)\n // Roots store only their canonical key; compare its parts with each row's typed identity.\n const invalid = this.db\n .query(\n manifest.projection_kind === \"link\"\n ? `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING COUNT(*) <> 1\n OR MAX(json_extract(roots.root_key, '$[0]') <> 'link')\n OR MAX(rows.entity_kind <> 'link')\n OR MAX(rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')\n OR rows.link_id <> json_extract(roots.root_key, '$[3]')\n OR rows.target_type_id <> json_extract(roots.root_key, '$[4]')\n OR rows.target_primary_id <> json_extract(roots.root_key, '$[5]'))\n LIMIT 1\n `\n : `\n SELECT roots.root_key\n FROM ontology_source_roots AS roots\n JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ?\n GROUP BY roots.id\n HAVING MAX(json_extract(roots.root_key, '$[0]') <> 'object')\n OR SUM(rows.entity_kind = 'object'\n AND rows.object_type_id = json_extract(roots.root_key, '$[1]')\n AND rows.primary_id = json_extract(roots.root_key, '$[2]')) <> 1\n OR SUM(\n (rows.entity_kind = 'object' AND (\n rows.object_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.primary_id <> json_extract(roots.root_key, '$[2]')))\n OR (rows.entity_kind = 'link' AND (\n rows.source_type_id <> json_extract(roots.root_key, '$[1]')\n OR rows.source_primary_id <> json_extract(roots.root_key, '$[2]')))\n ) <> 0\n OR SUM(rows.entity_kind = 'link') <> COUNT(DISTINCT CASE\n WHEN rows.entity_kind = 'link'\n THEN json_array(rows.link_id, rows.target_type_id, rows.target_primary_id)\n END)\n LIMIT 1\n `\n )\n .get(manifest.version_id)\n if (invalid) {\n throw new MaterializationValidationError(\n manifest.projection_kind === \"link\"\n ? \"Link projection roots must contain exactly their matching link assertion.\"\n : \"Object projection roots must contain exactly their matching object assertion plus links sourced from that root.\"\n )\n }\n }\n\n /** Already staged assertions sharing a root or an ordinal with `rows`. */\n private findStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): readonly SourceStageRow[] {\n if (rows.length === 0) return []\n const rootKeys = [...new Set(rows.map((row) => row.rootKey))]\n const ordinals = [...new Set(rows.map((row) => row.row.stagingOrdinal))]\n // Two keyed lookups: an OR over both columns scans every root of the version per batch.\n const existing = this.db\n .query(\n `\n WITH selected AS (\n SELECT roots.id FROM json_each(?2) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.root_key = CAST(requested.value AS TEXT)\n UNION\n SELECT roots.id FROM json_each(?3) AS requested\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ?1 AND roots.staging_ordinal = CAST(requested.value AS INTEGER)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM selected\n CROSS JOIN ontology_source_roots AS roots ON roots.id = selected.id\n CROSS JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n `\n )\n .all(\n manifest.version_id,\n JSON.stringify(rootKeys),\n JSON.stringify(ordinals)\n ) as SqliteOntologySourceAssertionRow[]\n return existing.map((row) => sourceStageRow(sourceAssertion(row)))\n }\n\n private insertStageRows(\n manifest: SqliteOntologySourceRow,\n rows: readonly SourceStageRow[]\n ): void {\n if (rows.length === 0) return\n const payload = rows.map(({ rootKey, row }) => {\n const entity = entityColumns(row.assertion)\n return {\n rootKey,\n entityKind: row.assertion.kind,\n objectTypeId: entity.objectTypeId,\n primaryId: entity.primaryId,\n sourceTypeId: entity.sourceTypeId,\n sourcePrimaryId: entity.sourcePrimaryId,\n linkId: entity.linkId,\n targetTypeId: entity.targetTypeId,\n targetPrimaryId: entity.targetPrimaryId,\n payload: sourceAssertionPayload(row.assertion),\n }\n })\n const inserted = this.db\n .query(\n `\n WITH staged(value) AS (SELECT value FROM json_each(?))\n INSERT INTO ontology_source_rows (\n root_id, entity_kind, object_type_id, primary_id,\n source_type_id, source_primary_id, link_id, target_type_id, target_primary_id, payload\n )\n SELECT roots.id, json_extract(value, '$.entityKind'),\n json_extract(value, '$.objectTypeId'), json_extract(value, '$.primaryId'),\n json_extract(value, '$.sourceTypeId'), json_extract(value, '$.sourcePrimaryId'),\n json_extract(value, '$.linkId'), json_extract(value, '$.targetTypeId'),\n json_extract(value, '$.targetPrimaryId'), json_extract(value, '$.payload')\n FROM staged\n CROSS JOIN ontology_source_roots AS roots\n ON roots.version_id = ? AND roots.root_key = json_extract(value, '$.rootKey')\n `\n )\n .run(canonicalJson(payload), manifest.version_id).changes\n if (inserted !== rows.length) {\n throw sourceConflict(\"Staged source rows do not all belong to a staged root.\")\n }\n }\n\n private assertExecution(\n input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n },\n identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n ): void {\n assertProjectionExecution(this.db, {\n projectId: input.projectId,\n sourceId: input.source.projectionId,\n projectionRunId: input.execution.projectionRunId,\n executionToken: input.execution.executionToken,\n ...(identity ? { identity } : {}),\n })\n }\n\n private getManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `\n SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n `\n )\n .get(projectId, sourceId, materializationId) as SqliteOntologySourceRow | null\n }\n\n private requireManifest(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow {\n const row = this.getManifest(projectId, sourceId, materializationId)\n if (!row) throw sourceConflict(`Source materialization '${materializationId}' does not exist.`)\n return row\n }\n}\n\ntype ActiveSourceRow = Pick<\n SqliteOntologySourceRow,\n | \"source_id\"\n | \"dataset_id\"\n | \"dataset_version_id\"\n | \"dataset_version_created_at\"\n | \"projection_revision\"\n>\n",
57
59
  "import type { Database } from \"bun:sqlite\"\nimport type {\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n PurgeAbandonedSourceMaterializationsInput,\n} from \"@sixb/core/storage\"\n\n/**\n * A version outlives its replacement plan, which references it: the next version may take a\n * deleted one's id, and would then resume the plan left under it.\n */\nconst PLAN_PURGED = `NOT EXISTS (\n SELECT 1 FROM ontology_replacement_plans AS plans WHERE plans.version_id = versions.version_id\n)`\n\n/**\n * Superseded versions can still hold live roots (a delta keeps unchanged roots where they were),\n * so they are cleaned root by root once retired. An abandoned candidate was never published:\n * everything it holds goes, one whole version at a time, each delete on its own version prefix.\n */\nexport function purgeAbandonedSourceVersions(\n db: Database,\n input: PurgeAbandonedSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n const nextCandidate = db.query(`\n SELECT version_id FROM ontology_sources AS versions\n WHERE project_id = ? AND status = 'abandoned' AND ${PLAN_PURGED}\n ORDER BY terminal_at, source_id, materialization_id LIMIT 1\n `)\n const deleteRows = db.query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE roots.version_id = ? LIMIT ?)`)\n const deleteRoots = db.query(`DELETE FROM ontology_source_roots WHERE id IN (\n SELECT id FROM ontology_source_roots WHERE version_id = ? LIMIT ?)`)\n const deleteManifest = db.query(\n \"DELETE FROM ontology_sources WHERE version_id = ? AND status = 'abandoned'\"\n )\n while (remaining > 0) {\n const candidate = nextCandidate.get(input.projectId) as { readonly version_id: number } | null\n if (!candidate) break\n const rows = deleteRows.run(candidate.version_id, remaining).changes\n rowsDeleted += rows\n remaining -= rows\n if (remaining === 0) break\n const roots = deleteRoots.run(candidate.version_id, remaining).changes\n rowsDeleted += roots\n remaining -= roots\n if (remaining === 0) break\n const manifest = deleteManifest.run(candidate.version_id).changes\n if (manifest === 0) break\n materializationsDeleted += manifest\n remaining -= manifest\n }\n return { rowsDeleted, materializationsDeleted }\n}\n\nexport function cleanupSourceVersions(\n db: Database,\n input: CleanupTerminalSourceMaterializationsInput\n): CleanupTerminalSourceMaterializationsResult {\n let remaining = input.limit\n const retired = `roots.project_id = ? AND roots.retired_at < ? AND versions.status = 'superseded'`\n let rowsDeleted = db\n .query(`DELETE FROM ontology_source_rows WHERE rowid IN (\n SELECT rows.rowid FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id\n WHERE ${retired}\n ORDER BY roots.retired_at, roots.id\n LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n remaining -= rowsDeleted\n if (remaining > 0) {\n const removed = db\n .query(`DELETE FROM ontology_source_roots WHERE id IN (\n SELECT roots.id FROM ontology_source_roots AS roots\n JOIN ontology_sources AS versions ON versions.version_id = roots.version_id\n WHERE ${retired}\n AND NOT EXISTS (SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id)\n ORDER BY roots.retired_at, roots.id LIMIT ?\n ) RETURNING version_id`)\n .all(input.projectId, input.terminalBefore, remaining) as { readonly version_id: number }[]\n // Each version's root_count follows its roots down, so a drained version is found by index.\n const counts = new Map<number, number>()\n for (const root of removed) counts.set(root.version_id, (counts.get(root.version_id) ?? 0) + 1)\n const drain = db.query(\n \"UPDATE ontology_sources SET root_count = root_count - ? WHERE version_id = ?\"\n )\n // These commit with the delete: every ontology storage call runs in the caller's BEGIN IMMEDIATE.\n for (const [versionId, count] of counts) drain.run(count, versionId)\n rowsDeleted += removed.length\n remaining -= removed.length\n }\n const materializationsDeleted =\n remaining === 0\n ? 0\n : db\n .query(`DELETE FROM ontology_sources WHERE version_id IN (\n SELECT versions.version_id FROM ontology_sources AS versions\n WHERE project_id = ? AND status = 'superseded' AND root_count = 0 AND terminal_at < ?\n AND ${PLAN_PURGED}\n ORDER BY terminal_at, source_id, materialization_id LIMIT ?\n )`)\n .run(input.projectId, input.terminalBefore, remaining).changes\n return { rowsDeleted, materializationsDeleted }\n}\n",
58
60
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n type MaterializationSession,\n type OntologyVectorIndexingStorage,\n VECTOR_INDEXING_FAILURE_CODES,\n type VectorIndexingRequest,\n type VectorIndexingWork,\n} from \"@sixb/core/storage\"\nimport type { SqliteRootOperation } from \"./shared\"\n\ninterface WorkRow {\n batch_id: string | null\n request: string\n status: VectorIndexingWork[\"status\"]\n available_at: string\n values_json: string | null\n error: string | null\n}\nexport class SqliteVectorIndexingStorage implements OntologyVectorIndexingStorage {\n constructor(\n private readonly db: Database,\n private readonly run: SqliteRootOperation,\n private readonly assertSession: (session: MaterializationSession, projectId: string) => void\n ) {}\n async schedule(input: Parameters<OntologyVectorIndexingStorage[\"schedule\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n for (const ref of input.deleted)\n this.db\n .query(\n `DELETE FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .run(input.projectId, ref.objectTypeId, ref.primaryId)\n const insert =\n this.db.query(`INSERT INTO object_vector_indexing (project_id, id, object_type_id, primary_id, profile, batch_id, request, status, available_at, dispatch_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO UPDATE SET id = excluded.id, batch_id = excluded.batch_id, request = excluded.request, status = 'pending', available_at = excluded.available_at, dispatch_at = excluded.dispatch_at, values_json = NULL, error = NULL`)\n for (const { batchId, ...request } of input.requests)\n insert.run(\n input.projectId,\n request.id,\n request.ref.objectTypeId,\n request.ref.primaryId,\n request.profile,\n batchId ?? null,\n JSON.stringify(request),\n input.availableAt,\n input.availableAt\n )\n }\n async complete(input: Parameters<OntologyVectorIndexingStorage[\"complete\"]>[0]) {\n this.assertSession(input.session, input.projectId)\n const remove = this.db.query(\n `DELETE FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ? AND primary_id = ? AND profile = ? AND json_extract(request, '$.configuration') = ? AND json_extract(request, '$.sourceFingerprint') = ?`\n )\n for (const entry of input.entries) {\n remove.run(\n input.projectId,\n entry.ref.objectTypeId,\n entry.ref.primaryId,\n entry.profile,\n entry.configuration,\n entry.sourceFingerprint\n )\n }\n }\n\n async dispatched(input: Parameters<OntologyVectorIndexingStorage[\"dispatched\"]>[0]) {\n await this.run(() => {\n const update = this.db.query(\n `UPDATE object_vector_indexing SET dispatch_at = ? WHERE project_id = ? AND id = ?`\n )\n for (const id of input.ids) update.run(input.nextDispatchAt, input.projectId, id)\n })\n }\n async get(input: Parameters<OntologyVectorIndexingStorage[\"get\"]>[0]) {\n return this.run(() => {\n const row = this.db\n .query<WorkRow, [string, string]>(\n `SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing WHERE project_id = ? AND id = ?`\n )\n .get(input.projectId, input.id)\n return row ? decode(row) : null\n })\n }\n async getBatch(input: Parameters<OntologyVectorIndexingStorage[\"getBatch\"]>[0]) {\n return this.run(() =>\n this.db\n .query<WorkRow, [string, string]>(`\n SELECT batch_id, request, status, available_at, values_json, error FROM object_vector_indexing\n WHERE project_id = ? AND batch_id = ? ORDER BY id`)\n .all(input.projectId, input.batchId)\n .map(decode)\n )\n }\n\n async getBatchMember(input: Parameters<OntologyVectorIndexingStorage[\"getBatchMember\"]>[0]) {\n return this.run(() => {\n const row = this.db\n .query<WorkRow, [string, string, string, string, string]>(`\n SELECT batch_id, request, status, available_at, values_json, error\n FROM object_vector_indexing WHERE project_id = ? AND object_type_id = ?\n AND primary_id = ? AND profile = ? AND batch_id = ?`)\n .get(\n input.projectId,\n input.ref.objectTypeId,\n input.ref.primaryId,\n input.profile,\n input.batchId\n )\n return row ? decode(row) : null\n })\n }\n\n async updateBatch(input: Parameters<OntologyVectorIndexingStorage[\"updateBatch\"]>[0]) {\n return this.run(() =>\n this.db.transaction(() => {\n const status = this.db.query<{ status: string }, [string, string]>(\n \"SELECT status FROM object_vector_indexing WHERE project_id = ? AND id = ?\"\n )\n if (\n input.requireAll &&\n input.updates.some(\n (update) => status.get(input.projectId, update.id)?.status !== update.expectedStatus\n )\n )\n return false\n const updateRow = this.db.query(`UPDATE object_vector_indexing\n SET status = ?, available_at = ?, values_json = COALESCE(?, values_json), error = ?\n WHERE project_id = ? AND id = ? AND status = ?`)\n for (const update of input.updates)\n updateRow.run(\n update.status,\n update.availableAt,\n update.values ? JSON.stringify(update.values) : null,\n update.error ? JSON.stringify(update.error) : null,\n input.projectId,\n update.id,\n update.expectedStatus\n )\n return true\n })()\n )\n }\n\n async listDue(input: Parameters<OntologyVectorIndexingStorage[\"listDue\"]>[0]) {\n return this.run(() =>\n this.db\n .query<WorkRow, [string, string, number]>(\n `SELECT batch_id, request, status, available_at, NULL AS values_json, error FROM object_vector_indexing WHERE project_id = ? AND status <> 'failed' AND dispatch_at <= ? ORDER BY dispatch_at, id LIMIT ?`\n )\n .all(input.projectId, input.now, input.limit)\n .map(decode)\n )\n }\n async update(input: Parameters<OntologyVectorIndexingStorage[\"update\"]>[0]) {\n return this.run(\n () =>\n this.db\n .query(\n `UPDATE object_vector_indexing SET status = ?, available_at = ?, values_json = COALESCE(?, values_json), error = ? WHERE project_id = ? AND id = ? AND status = ?`\n )\n .run(\n input.status,\n input.availableAt,\n input.values ? JSON.stringify(input.values) : null,\n input.error ? JSON.stringify(input.error) : null,\n input.projectId,\n input.id,\n input.expectedStatus\n ).changes === 1\n )\n }\n async remove(input: Parameters<OntologyVectorIndexingStorage[\"remove\"]>[0]) {\n await this.run(() => {\n this.db\n .query(`DELETE FROM object_vector_indexing WHERE project_id = ? AND id = ?`)\n .run(input.projectId, input.id)\n })\n }\n}\nfunction decode(row: WorkRow): VectorIndexingWork {\n const request = JSON.parse(row.request) as VectorIndexingRequest\n return {\n ...request,\n ...(row.batch_id ? { batchId: row.batch_id } : {}),\n status: row.status,\n availableAt: row.available_at,\n ...(row.values_json ? { values: JSON.parse(row.values_json) as number[] } : {}),\n ...(row.error\n ? {\n error: parseSixbFailure(row.error, VECTOR_INDEXING_FAILURE_CODES),\n }\n : {}),\n }\n}\n",
59
61
  "import type { Database } from \"bun:sqlite\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport type {\n MaterializationSession,\n ObjectVectorState,\n OntologyVectorStorage,\n} from \"@sixb/core/storage\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\nimport type { SqliteRootOperation } from \"./shared\"\n\ninterface VectorMetadataRow {\n readonly profile: string\n readonly configuration: string\n readonly source: string\n readonly source_fingerprint: string\n readonly last_commit_id: string\n}\n\nexport class SqliteOntologyVectorStorage implements OntologyVectorStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation,\n private readonly assertSession: (\n session: MaterializationSession,\n projectId: string,\n commitId?: string\n ) => void\n ) {}\n\n async list(\n input: Parameters<OntologyVectorStorage[\"list\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n return this.runRootOperation(() => {\n const rows = this.db\n .query<VectorMetadataRow, [string, string, string]>(`\n SELECT profile, configuration, source, source_fingerprint, last_commit_id\n FROM object_vectors\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n ORDER BY profile\n `)\n .all(input.projectId, input.ref.objectTypeId, input.ref.primaryId)\n return rows.map((row) => ({\n ref: { ...input.ref },\n profile: row.profile,\n configuration: row.configuration,\n source: JSON.parse(row.source) as string[],\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async listBatch(\n input: Parameters<OntologyVectorStorage[\"listBatch\"]>[0]\n ): Promise<readonly ObjectVectorState[]> {\n if (!input.refs.length) return []\n return this.runRootOperation(() => {\n // Keep the bounded request set first so SQLite probes the composite object index.\n const rows = this.db\n .query<\n VectorMetadataRow & { object_type_id: string; primary_id: string },\n [string, string]\n >(`\n WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id FROM json_each(?)\n )\n SELECT stored.object_type_id, stored.primary_id, stored.profile, stored.configuration,\n stored.source, stored.source_fingerprint, stored.last_commit_id\n FROM requested CROSS JOIN object_vectors AS stored\n WHERE stored.project_id = ? AND stored.object_type_id = requested.object_type_id\n AND stored.primary_id = requested.primary_id\n ORDER BY stored.object_type_id, stored.primary_id, stored.profile\n `)\n .all(JSON.stringify(input.refs), input.projectId)\n return rows.map((row) => ({\n ref: { objectTypeId: row.object_type_id, primaryId: row.primary_id },\n profile: row.profile,\n configuration: row.configuration,\n source: JSON.parse(row.source) as string[],\n sourceFingerprint: row.source_fingerprint,\n lastCommitId: row.last_commit_id,\n }))\n })\n }\n\n async removeBatch(input: Parameters<OntologyVectorStorage[\"removeBatch\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n if (!input.entries.length) return\n const { changes } = this.db\n .query(`\n DELETE FROM object_vectors WHERE rowid IN (\n SELECT stored.rowid FROM json_each(?) AS requested CROSS JOIN object_vectors AS stored\n WHERE stored.project_id = ? AND stored.object_type_id = json_extract(requested.value, '$.ref.objectTypeId')\n AND stored.primary_id = json_extract(requested.value, '$.ref.primaryId')\n AND stored.profile = json_extract(requested.value, '$.profile')\n AND stored.last_commit_id = json_extract(requested.value, '$.expectedCommitId')\n )\n `)\n .run(JSON.stringify(input.entries), input.projectId)\n if (changes !== input.entries.length) throw vectorConflict()\n }\n\n async write(input: Parameters<OntologyVectorStorage[\"write\"]>[0]): Promise<void> {\n const { value } = input\n this.assertSession(input.session, input.projectId, value.lastCommitId)\n // The Materializer validates and normalizes float32 values before this boundary.\n const embedding = encodeSqliteVector(value.values)\n const changes =\n input.expectedCommitId === null\n ? this.db\n .query(`\n INSERT INTO object_vectors (\n project_id, object_type_id, primary_id, profile,\n configuration, source, source_fingerprint, embedding, last_commit_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, object_type_id, primary_id, profile) DO NOTHING\n `)\n .run(\n input.projectId,\n value.ref.objectTypeId,\n value.ref.primaryId,\n value.profile,\n value.configuration,\n JSON.stringify(value.source),\n value.sourceFingerprint,\n embedding,\n value.lastCommitId\n ).changes\n : this.db\n .query(`\n UPDATE object_vectors\n SET configuration = ?, source = ?, source_fingerprint = ?, embedding = ?, last_commit_id = ?\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND profile = ? AND last_commit_id = ?\n `)\n .run(\n value.configuration,\n JSON.stringify(value.source),\n value.sourceFingerprint,\n embedding,\n value.lastCommitId,\n input.projectId,\n value.ref.objectTypeId,\n value.ref.primaryId,\n value.profile,\n input.expectedCommitId\n ).changes\n if (changes !== 1) throw vectorConflict()\n }\n\n async writeBatch(input: Parameters<OntologyVectorStorage[\"writeBatch\"]>[0]): Promise<void> {\n for (const entry of input.entries) {\n await this.write({ session: input.session, projectId: input.projectId, ...entry })\n }\n }\n\n async remove(input: Parameters<OntologyVectorStorage[\"remove\"]>[0]): Promise<void> {\n this.assertSession(input.session, input.projectId)\n const { changes } = this.db\n .query(`\n DELETE FROM object_vectors\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?\n AND profile = ? AND last_commit_id = ?\n `)\n .run(\n input.projectId,\n input.ref.objectTypeId,\n input.ref.primaryId,\n input.profile,\n input.expectedCommitId\n )\n if (changes !== 1) throw vectorConflict()\n }\n}\n\nfunction vectorConflict(): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n \"Vector changed since it was prepared.\"\n )\n}\n",
@@ -62,16 +64,16 @@
62
64
  "import type { Database } from \"bun:sqlite\"\nimport type { SqliteValue } from \"./run-list-query\"\n\ntype SqliteLatestRunTarget =\n | { readonly tableName: \"pipeline_runs\"; readonly ownerColumn: \"pipeline_id\" }\n | { readonly tableName: \"projection_runs\"; readonly ownerColumn: \"projection_id\" }\n | { readonly tableName: \"sync_runs\"; readonly ownerColumn: \"sync_id\" }\n | { readonly tableName: \"workflow_runs\"; readonly ownerColumn: \"workflow_id\" }\n\nexport function queryLatestRunsByOwnerId<TRow>(\n input: {\n readonly db: Database\n readonly ownerIds: readonly string[]\n readonly projectId: string\n readonly ownerIdFor: (row: TRow) => string\n /** A status that never counts as the latest run, such as a run made stale by a newer one. */\n readonly excludedStatus?: string\n } & SqliteLatestRunTarget\n): readonly TRow[] {\n const ownerIds = [...new Set(input.ownerIds)]\n if (ownerIds.length === 0) {\n return []\n }\n\n const placeholders = ownerIds.map(() => \"?\").join(\", \")\n const statusFilter = input.excludedStatus === undefined ? \"\" : \" AND status <> ?\"\n const statusArgs = input.excludedStatus === undefined ? [] : [input.excludedStatus]\n const orderColumn =\n input.tableName === \"sync_runs\" ||\n input.tableName === \"pipeline_runs\" ||\n input.tableName === \"projection_runs\"\n ? \"COALESCE(started_at, queued_at)\"\n : \"started_at\"\n const rows = input.db\n .query(\n `\n SELECT *\n FROM (\n SELECT\n *,\n ROW_NUMBER() OVER (\n PARTITION BY ${input.ownerColumn}\n ORDER BY ${orderColumn} DESC, id DESC\n ) AS sixb_latest_rank\n FROM ${input.tableName}\n WHERE project_id = ? AND ${input.ownerColumn} IN (${placeholders})${statusFilter}\n )\n WHERE sixb_latest_rank = 1\n `\n )\n .all(input.projectId, ...ownerIds, ...statusArgs) as (TRow & {\n sixb_latest_rank: SqliteValue\n })[]\n\n const latestByOwnerId = new Map(rows.map((row) => [input.ownerIdFor(row), row]))\n\n return ownerIds.flatMap((ownerId) => {\n const row = latestByOwnerId.get(ownerId)\n return row ? [row] : []\n })\n}\n",
63
65
  "import type { Database } from \"bun:sqlite\"\nimport { randomUUID } from \"node:crypto\"\nimport { serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n advanceProjectionTelemetry,\n assertGenericProgressDoesNotAdvanceTelemetry,\n assertProjectionMissingTarget,\n assertProjectionRunAttempt,\n assertProjectionRunDurableExecution,\n assertProjectionRunListWindow,\n assertProjectionRunNonEmpty,\n assertProjectionRunQueueInput,\n assertProjectionRunRunning,\n assertProjectionRunStartInput,\n canRequeueProjectionRunAfterEnqueueFailure,\n createProjectionRunClaim,\n createProjectionRunRecord,\n failProjectionRunEnqueue,\n immutableDatasetVersionConflict,\n mergeProjectionRunProgress,\n type PersistedProjectionRunRecord,\n parseProjectionAttemptFailure,\n planProjectionRunFinish,\n planProjectionRunReclaim,\n projectionRunNotFound,\n publicProjectionRunRecord,\n requireTelemetryProjectionRun,\n restoreProjectionRun,\n type StoredProjectionRunRecord,\n SUPERSEDING_PROJECTION_RUN_STATUSES,\n staleProjectionRunExecution,\n} from \"@sixb/core/internal/projection-run-storage-provider\"\nimport type {\n AdvanceProjectionTelemetryCheckpointInput,\n ExecutionStorage,\n FailProjectionRunEnqueueInput,\n FindSupersedingProjectionRunInput,\n FinishProjectionRunInput,\n ListLatestProjectionRunsInput,\n ListLatestProjectionRunsResult,\n ListProjectionRunsInput,\n ListProjectionRunsResult,\n LockProjectionRunForMaterializationInput,\n ProjectionKind,\n ProjectionRunClaim,\n ProjectionRunProgress,\n ProjectionRunRecord,\n ProjectionRunStatus,\n ProjectionRunStorage,\n QueueProjectionRunInput,\n RecordProjectionAttemptFailureInput,\n RecordProjectionMissingTargetInput,\n StartOrReclaimProjectionRunInput,\n TelemetryProjectionRunRecord,\n UpdateProjectionRunInput,\n} from \"@sixb/core/storage\"\nimport { PROJECTION_RUN_FAILURE_CODES, ProjectionRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteProjectionRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteProjectionRunStorage implements ProjectionRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteProjectionRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async queue(input: QueueProjectionRunInput): Promise<ProjectionRunRecord> {\n assertProjectionRunQueueInput(input)\n await assertProjectionRunDurableExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n projectionId: input.identity.projectionId,\n datasetId: input.identity.datasetVersion.datasetId,\n datasetVersionId: input.identity.datasetVersion.versionId,\n })\n\n return runImmediateTransaction(this.db, () => {\n this.assertDatasetVersionIsImmutable(input)\n const existing = this.findRow(input.projectId, input.id)\n if (existing) {\n const restored = restoreProjectionRunRow(existing)\n if (!canRequeueProjectionRunAfterEnqueueFailure(restored, input)) {\n throw duplicateProjectionRun(input)\n }\n const queuedAt = input.queuedAt ?? new Date()\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'queued', queued_at = ?, started_at = NULL, finished_at = NULL,\n attempt = 0, execution_token = NULL, next_batch_ordinal = ?, next_row_offset = ?,\n input_exhausted = ?, missing_target_object_type_id = NULL,\n missing_target_object_id = NULL, missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL, source_rows_read = 0,\n source_rows_skipped = 0, source_changes_read = NULL, error = NULL\n WHERE project_id = ? AND id = ? AND status = 'failed'\n AND json_extract(error, '$.code') = 'queue.enqueue_failed'\n `\n )\n .run(\n queuedAt.toISOString(),\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.fixedBatchSize === undefined ? null : 0,\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n }\n\n const record = createProjectionRunRecord(input)\n try {\n this.insertQueued(record)\n } catch (error) {\n if (isUniqueConstraintError(error)) throw duplicateProjectionRun(input)\n throw error\n }\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async startOrReclaim(input: StartOrReclaimProjectionRunInput): Promise<ProjectionRunClaim> {\n return runImmediateTransaction(this.db, () => {\n assertProjectionRunStartInput(input)\n\n const metadataConflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at IS NOT NULL\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (metadataConflict) {\n throw immutableDatasetVersionConflict(input.identity)\n }\n\n const existing = this.requireRow(input.projectId, input.id)\n const existingRecord = restoreProjectionRunRow(existing)\n const attempt = planProjectionRunReclaim(existingRecord, input).attempt\n\n const executionToken = createFreshExecutionToken(existing.execution_token)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'running', started_at = COALESCE(started_at, ?), finished_at = NULL,\n attempt = ?, execution_token = ?\n WHERE project_id = ? AND id = ?\n AND (\n (status = 'queued' AND execution_token IS NULL)\n OR (status = 'running' AND execution_token = ?)\n )\n `\n )\n .run(\n (input.startedAt ?? new Date()).toISOString(),\n attempt,\n executionToken,\n input.projectId,\n input.id,\n existing.execution_token\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n\n return projectionRunClaim(this.requireRow(input.projectId, input.id))\n })\n }\n\n async failEnqueue(input: FailProjectionRunEnqueueInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = restoreProjectionRunRow(this.requireRow(input.projectId, input.id))\n const failed = failProjectionRunEnqueue(existing, input)\n if (!failed.finishedAt || !failed.error) {\n throw new ProjectionRunError(`[SixbSqlite] Projection run '${input.id}' did not finish.`)\n }\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET status = 'failed', finished_at = ?, error = ?\n WHERE project_id = ? AND id = ? AND status = 'queued'\n `\n )\n .run(\n failed.finishedAt.toISOString(),\n serializeSixbFailure(failed.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n if (result.changes !== 1) throw duplicateProjectionRun(input)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async lockForMaterialization(\n input: LockProjectionRunForMaterializationInput\n ): Promise<ProjectionRunRecord> {\n return rowToProjectionRunRecord(this.requireMaterializationExecution(input))\n }\n\n async update(input: UpdateProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const existing = restoreProjectionRunRow(existingRow)\n assertGenericProgressDoesNotAdvanceTelemetry(existing, input.progress)\n const progress = mergeProjectionRunProgress(existing.progress, input.progress)\n const result = this.updateProgress(existingRow, progress, input.executionToken)\n if (result !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordAttemptFailure(\n input: RecordProjectionAttemptFailureInput\n ): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const error = parseProjectionAttemptFailure(restoreProjectionRunRow(existingRow), input.error)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n serializeSixbFailure(error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async finish(input: FinishProjectionRunInput): Promise<ProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existingRow = this.requireMaterializationExecution(input)\n const plan = planProjectionRunFinish(restoreProjectionRunRow(existingRow), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n status = ?,\n finished_at = ?,\n execution_token = NULL,\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?,\n input_exhausted = ?,\n error = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n `\n )\n .run(\n input.status,\n plan.finishedAt.toISOString(),\n plan.progress.sourceRowsRead,\n plan.progress.sourceRowsSkipped,\n plan.progress.sourceChangesRead ?? null,\n plan.inputExhausted ? 1 : existingRow.input_exhausted,\n plan.error === undefined\n ? null\n : serializeSixbFailure(plan.error, PROJECTION_RUN_FAILURE_CODES),\n input.projectId,\n input.id,\n input.executionToken\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async advanceTelemetryCheckpoint(\n input: AdvanceProjectionTelemetryCheckpointInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const advance = advanceProjectionTelemetry(restoreProjectionRunRow(existing), input)\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n next_batch_ordinal = ?,\n next_row_offset = ?,\n input_exhausted = ?,\n source_rows_read = ?,\n source_rows_skipped = ?,\n missing_target_object_type_id = NULL,\n missing_target_object_id = NULL,\n missing_target_batch_ordinal = NULL,\n missing_target_first_seen_at = NULL\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ? AND input_exhausted = 0\n `\n )\n .run(\n advance.checkpoint.nextBatchOrdinal,\n advance.checkpoint.nextRowOffset,\n advance.checkpoint.inputExhausted ? 1 : 0,\n advance.progress.sourceRowsRead,\n advance.progress.sourceRowsSkipped,\n input.projectId,\n input.id,\n input.executionToken,\n input.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async recordMissingTarget(\n input: RecordProjectionMissingTargetInput\n ): Promise<TelemetryProjectionRunRecord> {\n return runImmediateTransaction(this.db, () => {\n const existing = this.requireMaterializationExecution(input)\n const missingTarget = assertProjectionMissingTarget(\n requireTelemetryProjectionRun(restoreProjectionRunRow(existing)),\n input.missingTarget\n )\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n missing_target_object_type_id = ?,\n missing_target_object_id = ?,\n missing_target_batch_ordinal = ?,\n missing_target_first_seen_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\n AND next_batch_ordinal = ?\n `\n )\n .run(\n missingTarget.objectTypeId,\n missingTarget.objectId,\n missingTarget.batchOrdinal,\n missingTarget.firstSeenAt.toISOString(),\n input.projectId,\n input.id,\n input.executionToken,\n missingTarget.batchOrdinal\n )\n if (result.changes !== 1) throw staleProjectionRunExecution(input.id)\n return rowToTelemetryProjectionRunRecord(this.requireRow(input.projectId, input.id))\n })\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ProjectionRunRecord | null> {\n const row = this.findRow(params.projectId, params.id)\n return row ? rowToProjectionRunRecord(row) : null\n }\n\n async list(input: ListProjectionRunsInput): Promise<ListProjectionRunsResult> {\n assertProjectionRunNonEmpty(input.projectId, \"projectId\")\n\n if (input.statuses?.length === 0 || input.errorCodes?.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.projectionId) {\n whereClauses.push(\"projection_id = ?\")\n args.push(input.projectionId)\n }\n if (input.projectionKind) {\n whereClauses.push(\"projection_kind = ?\")\n args.push(input.projectionKind)\n }\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n if (input.datasetVersionId) {\n whereClauses.push(\"dataset_version_id = ?\")\n args.push(input.datasetVersionId)\n }\n if (input.objectTypeIds) {\n if (input.objectTypeIds.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n const placeholders = input.objectTypeIds.map(() => \"?\").join(\", \")\n whereClauses.push(\n `(object_type_id IN (${placeholders})` +\n ` OR (source_object_type_id IN (${placeholders})` +\n ` AND target_object_type_id IN (${placeholders})))`\n )\n args.push(...input.objectTypeIds, ...input.objectTypeIds, ...input.objectTypeIds)\n }\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n if (input.errorCodes) {\n whereClauses.push(\n `json_extract(error, '$.code') IN (${input.errorCodes.map(() => \"?\").join(\", \")})`\n )\n args.push(...input.errorCodes)\n }\n if (input.startedAfter) {\n whereClauses.push(\"COALESCE(started_at, queued_at) >= ?\")\n args.push(input.startedAfter.toISOString())\n }\n if (input.startedBefore) {\n whereClauses.push(\"COALESCE(started_at, queued_at) <= ?\")\n args.push(input.startedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM projection_runs ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM projection_runs\n ${where}\n ORDER BY COALESCE(started_at, queued_at) ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n assertProjectionRunListWindow(limit, \"limit\")\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n assertProjectionRunListWindow(offset, \"offset\")\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as DatabaseRow[]\n const runs = rows.map(rowToProjectionRunRecord)\n return { runs, hasMore: offset + runs.length < totalRow.count, total: totalRow.count }\n }\n\n async findSupersedingRun(\n input: FindSupersedingProjectionRunInput\n ): Promise<ProjectionRunRecord | null> {\n const run = this.requireRow(input.projectId, input.id)\n if (run.materialization_protocol !== \"replacement\") return null\n // SQLite compares TEXT with the binary collation, under which canonical UTC ISO timestamps\n // order chronologically.\n const statuses = SUPERSEDING_PROJECTION_RUN_STATUSES\n const newer = this.db\n .query(\n `\n SELECT * FROM projection_runs\n WHERE project_id = ? AND projection_id = ? AND materialization_protocol = 'replacement'\n AND status IN (${statuses.map(() => \"?\").join(\", \")})\n AND dataset_version_created_at > ?\n ORDER BY dataset_version_created_at DESC, id DESC\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n run.projection_id,\n ...statuses,\n run.dataset_version_created_at\n ) as DatabaseRow | null\n return newer ? rowToProjectionRunRecord(newer) : null\n }\n\n async listLatestByProjectionIds(\n input: ListLatestProjectionRunsInput\n ): Promise<ListLatestProjectionRunsResult> {\n const rows = queryLatestRunsByOwnerId<DatabaseRow>({\n db: this.db,\n tableName: \"projection_runs\",\n ownerColumn: \"projection_id\",\n ownerIds: input.projectionIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.projection_id,\n excludedStatus: \"superseded\",\n })\n return { runs: rows.map(rowToProjectionRunRecord) }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private assertDatasetVersionIsImmutable(input: QueueProjectionRunInput): void {\n const conflict = this.db\n .query(\n `\n SELECT 1 FROM projection_runs\n WHERE project_id = ? AND id <> ? AND dataset_id = ? AND dataset_version_id = ?\n AND dataset_version_created_at <> ?\n LIMIT 1\n `\n )\n .get(\n input.projectId,\n input.id,\n input.identity.datasetVersion.datasetId,\n input.identity.datasetVersion.versionId,\n input.identity.datasetVersion.createdAt\n )\n if (conflict) throw immutableDatasetVersionConflict(input.identity)\n }\n\n private insertQueued(record: ProjectionRunRecord): void {\n const checkpoint = record.telemetryCheckpoint\n this.db\n .query(\n `\n INSERT INTO projection_runs (\n project_id, id, execution_id, projection_id, projection_kind,\n materialization_protocol, dataset_id, dataset_version_id,\n dataset_version_created_at, ontology_revision, projection_revision, ownership_hash,\n object_type_id, source_object_type_id, target_object_type_id, status, queued_at,\n started_at, finished_at, attempt, execution_token, fixed_batch_size,\n next_batch_ordinal, next_row_offset, input_exhausted, source_rows_read,\n source_rows_skipped\n ) VALUES (\n ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'queued', ?, NULL, NULL, 0, NULL,\n ?, ?, ?, ?, 0, 0\n )\n `\n )\n .run(\n record.projectId,\n record.id,\n record.executionId,\n record.identity.projectionId,\n record.identity.projectionKind,\n record.identity.protocol,\n record.identity.datasetVersion.datasetId,\n record.identity.datasetVersion.versionId,\n record.identity.datasetVersion.createdAt,\n record.identity.ontologyRevision,\n record.identity.projectionRevision,\n record.identity.ownershipHash,\n \"objectTypeId\" in record.target ? record.target.objectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.sourceObjectTypeId : null,\n \"sourceObjectTypeId\" in record.target ? record.target.targetObjectTypeId : null,\n record.queuedAt.toISOString(),\n checkpoint?.fixedBatchSize ?? null,\n checkpoint?.nextBatchOrdinal ?? null,\n checkpoint?.nextRowOffset ?? null,\n checkpoint === undefined ? null : checkpoint.inputExhausted ? 1 : 0\n )\n }\n\n private updateProgress(\n existing: DatabaseRow,\n progress: ProjectionRunProgress,\n executionToken: string\n ): number {\n const args: (string | number | null)[] = [\n progress.sourceRowsRead,\n progress.sourceRowsSkipped,\n progress.sourceChangesRead ?? null,\n existing.project_id,\n existing.id,\n executionToken,\n ]\n const result = this.db\n .query(\n `\n UPDATE projection_runs\n SET\n source_rows_read = ?,\n source_rows_skipped = ?,\n source_changes_read = ?\n WHERE project_id = ? AND id = ? AND status = 'running'\n AND execution_token = ?\n `\n )\n .run(...args)\n return result.changes\n }\n\n private requireMaterializationExecution(\n input: LockProjectionRunForMaterializationInput\n ): DatabaseRow {\n const row = this.requireRunning(input.projectId, input.id)\n assertProjectionRunAttempt(restoreProjectionRunRow(row), input)\n return row\n }\n\n private requireRunning(projectId: string, id: string): DatabaseRow {\n const row = this.requireRow(projectId, id)\n assertProjectionRunRunning(restoreProjectionRunRow(row))\n return row\n }\n\n private findRow(projectId: string, id: string): DatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM projection_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as DatabaseRow | null\n }\n\n private requireRow(projectId: string, id: string): DatabaseRow {\n assertProjectionRunNonEmpty(projectId, \"projectId\")\n assertProjectionRunNonEmpty(id, \"id\")\n const row = this.findRow(projectId, id)\n if (!row) throw projectionRunNotFound(projectId, id)\n return row\n }\n}\n\nfunction createFreshExecutionToken(previous: string | null): string {\n let token = randomUUID()\n while (token === previous) token = randomUUID()\n return token\n}\n\nfunction rowToProjectionRunRecord(row: DatabaseRow): ProjectionRunRecord {\n return publicProjectionRunRecord(restoreProjectionRunRow(row))\n}\n\nfunction restoreProjectionRunRow(row: DatabaseRow): StoredProjectionRunRecord {\n const persisted: PersistedProjectionRunRecord = {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n projectionId: row.projection_id,\n projectionKind: row.projection_kind,\n protocol: row.materialization_protocol ?? undefined,\n datasetId: row.dataset_id,\n datasetVersionId: row.dataset_version_id,\n datasetVersionCreatedAt: row.dataset_version_created_at ?? undefined,\n ontologyRevision: row.ontology_revision ?? undefined,\n projectionRevision: row.projection_revision ?? undefined,\n ownershipHash: row.ownership_hash ?? undefined,\n objectTypeId: row.object_type_id ?? undefined,\n sourceObjectTypeId: row.source_object_type_id ?? undefined,\n targetObjectTypeId: row.target_object_type_id ?? undefined,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n attempt: databaseSafeInteger(row.attempt, \"attempt\"),\n executionToken: row.execution_token ?? undefined,\n fixedBatchSize: optionalDatabaseSafeInteger(row.fixed_batch_size, \"fixedBatchSize\"),\n nextBatchOrdinal: optionalDatabaseSafeInteger(row.next_batch_ordinal, \"nextBatchOrdinal\"),\n nextRowOffset: optionalDatabaseSafeInteger(row.next_row_offset, \"nextRowOffset\"),\n inputExhausted: row.input_exhausted === null ? undefined : row.input_exhausted === 1,\n missingTargetObjectTypeId: row.missing_target_object_type_id ?? undefined,\n missingTargetObjectId: row.missing_target_object_id ?? undefined,\n missingTargetBatchOrdinal: optionalDatabaseSafeInteger(\n row.missing_target_batch_ordinal,\n \"missingTargetBatchOrdinal\"\n ),\n missingTargetFirstSeenAt: row.missing_target_first_seen_at\n ? new Date(row.missing_target_first_seen_at)\n : undefined,\n progress: {\n sourceRowsRead: databaseSafeInteger(row.source_rows_read, \"sourceRowsRead\"),\n sourceRowsSkipped: databaseSafeInteger(row.source_rows_skipped, \"sourceRowsSkipped\"),\n ...(row.source_changes_read == null\n ? {}\n : { sourceChangesRead: databaseSafeInteger(row.source_changes_read, \"sourceChangesRead\") }),\n },\n error: row.error ?? undefined,\n }\n return restoreProjectionRun(persisted)\n}\n\nfunction projectionRunClaim(row: DatabaseRow): ProjectionRunClaim {\n return createProjectionRunClaim(restoreProjectionRunRow(row))\n}\n\nfunction rowToTelemetryProjectionRunRecord(row: DatabaseRow): TelemetryProjectionRunRecord {\n return requireTelemetryProjectionRun(rowToProjectionRunRecord(row))\n}\n\nfunction optionalDatabaseSafeInteger(value: number | null, fieldName: string): number | undefined {\n return value === null ? undefined : databaseSafeInteger(value, fieldName)\n}\n\nfunction databaseSafeInteger(value: number, fieldName: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new ProjectionRunError(\n `[SixbSqlite] Projection run persisted ${fieldName} is not a non-negative safe integer.`\n )\n }\n return value\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n projection_id: string\n projection_kind: ProjectionKind\n materialization_protocol: \"replacement\" | \"telemetry\" | null\n dataset_id: string\n dataset_version_id: string\n dataset_version_created_at: string | null\n ontology_revision: string | null\n projection_revision: string | null\n ownership_hash: string | null\n object_type_id: string | null\n source_object_type_id: string | null\n target_object_type_id: string | null\n status: ProjectionRunStatus\n queued_at: string\n started_at: string | null\n finished_at: string | null\n attempt: number\n execution_token: string | null\n fixed_batch_size: number | null\n next_batch_ordinal: number | null\n next_row_offset: number | null\n input_exhausted: 0 | 1 | null\n missing_target_object_type_id: string | null\n missing_target_object_id: string | null\n missing_target_batch_ordinal: number | null\n missing_target_first_seen_at: string | null\n source_rows_read: number\n source_rows_skipped: number\n source_changes_read: number | null\n error: string | null\n}\n\nfunction duplicateProjectionRun(input: { readonly projectId: string; readonly id: string }) {\n return new ProjectionRunError(\n `[SixbSqlite] Projection run '${input.id}' already exists for project '${input.projectId}'.`\n )\n}\n",
64
66
  "import type { Database } from \"bun:sqlite\"\nimport type { RuleEventSubject } from \"@sixb/core\"\nimport type {\n ListActiveRuleStatesInput,\n ListActiveRuleStatesResult,\n ListRuleStatesReconciliationPageInput,\n ListRuleStatesReconciliationPageResult,\n RuleStateRecord,\n RuleStateTransitionEvent,\n RulesStorage,\n StoredRuleResolvedEvent,\n StoredRuleTriggeredEvent,\n} from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n runImmediateTransaction,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteRulesStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteRulesStorage implements RulesStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteRulesStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n }\n\n async getActive(params: {\n projectId: string\n ruleId: string\n subject: RuleEventSubject\n }): Promise<RuleStateRecord | null> {\n const row = this.db\n .query(\n `\n SELECT\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n FROM rule_states\n WHERE project_id = ?\n AND rule_id = ?\n AND subject_kind = ?\n AND object_type_id = ?\n AND primary_id = ?\n `\n )\n .get(\n params.projectId,\n params.ruleId,\n params.subject.kind,\n params.subject.objectTypeId,\n params.subject.primaryId\n ) as SqliteRuleStateRow | null\n\n return row ? rowToRuleStateRecord(row) : null\n }\n\n async getActiveBatch(params: {\n projectId: string\n items: readonly {\n readonly ruleId: string\n readonly subject: RuleEventSubject\n }[]\n }): Promise<readonly RuleStateRecord[]> {\n if (params.items.length === 0) return []\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subject.kind') AS subject_kind,\n json_extract(value, '$.subject.objectTypeId') AS object_type_id,\n json_extract(value, '$.subject.primaryId') AS primary_id\n FROM json_each(?)\n )\n SELECT states.project_id, states.rule_id, states.subject_kind,\n states.object_type_id, states.primary_id, states.triggered_at\n FROM rule_states AS states\n JOIN requested USING (rule_id, subject_kind, object_type_id, primary_id)\n WHERE states.project_id = ?\n `\n )\n .all(JSON.stringify(params.items), params.projectId) as SqliteRuleStateRow[]\n return rows.map(rowToRuleStateRecord)\n }\n\n async listActive(input: ListActiveRuleStatesInput): Promise<ListActiveRuleStatesResult> {\n if (input.objectTypeIds?.length === 0) {\n return { states: [], hasMore: false, total: 0 }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: (string | number)[] = [input.projectId]\n\n if (input.ruleId) {\n whereClauses.push(\"rule_id = ?\")\n args.push(input.ruleId)\n }\n\n if (input.objectTypeId) {\n whereClauses.push(\"object_type_id = ?\")\n args.push(input.objectTypeId)\n }\n\n if (input.objectTypeIds) {\n whereClauses.push(`object_type_id IN (${input.objectTypeIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.objectTypeIds)\n }\n\n if (input.primaryId) {\n whereClauses.push(\"primary_id = ?\")\n args.push(input.primaryId)\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const limit = input.limit\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM rule_states ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n FROM rule_states\n ${where}\n ORDER BY triggered_at ${order}, rule_id ${order}, object_type_id ${order}, primary_id ${order}\n `\n const queryArgs = [...args]\n\n if (limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as SqliteRuleStateRow[]\n const states = rows.map(rowToRuleStateRecord)\n\n return {\n states,\n hasMore: offset + states.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n async listReconciliationPage(\n input: ListRuleStatesReconciliationPageInput\n ): Promise<ListRuleStatesReconciliationPageResult> {\n assertPositiveLimit(input.limit)\n const { after } = input\n const cursor = after ? [after.ruleId, after.objectTypeId, after.primaryId] : []\n // The cursor and order follow the primary key column for column so each page seeks to its\n // start. `subject_kind` is always 'object' (CHECK); filtering on it steers SQLite onto\n // idx_rule_states_project_rule and a full sort per page.\n const rows = this.db\n .query(\n `\n SELECT project_id, rule_id, subject_kind, object_type_id, primary_id, triggered_at\n FROM rule_states\n WHERE project_id = ?\n ${cursor.length > 0 ? \"AND (rule_id, subject_kind, object_type_id, primary_id) > (?, 'object', ?, ?)\" : \"\"}\n ORDER BY rule_id ASC, subject_kind ASC, object_type_id ASC, primary_id ASC\n LIMIT ?\n `\n )\n .all(input.projectId, ...cursor, input.limit + 1) as SqliteRuleStateRow[]\n return reconciliationPage(rows, input.limit)\n }\n\n async applyTriggered(event: StoredRuleTriggeredEvent): Promise<void> {\n this.db\n .query(\n `\n INSERT INTO rule_states (\n project_id,\n rule_id,\n subject_kind,\n object_type_id,\n primary_id,\n triggered_at\n ) VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(project_id, rule_id, subject_kind, object_type_id, primary_id)\n DO UPDATE SET triggered_at = excluded.triggered_at\n `\n )\n .run(\n event.projectId,\n event.payload.ruleId,\n event.payload.subject.kind,\n event.payload.subject.objectTypeId,\n event.payload.subject.primaryId,\n event.payload.triggeredAt\n )\n }\n\n async applyResolved(event: StoredRuleResolvedEvent): Promise<void> {\n this.db\n .query(\n `\n DELETE FROM rule_states\n WHERE project_id = ?\n AND rule_id = ?\n AND subject_kind = ?\n AND object_type_id = ?\n AND primary_id = ?\n `\n )\n .run(\n event.projectId,\n event.payload.ruleId,\n event.payload.subject.kind,\n event.payload.subject.objectTypeId,\n event.payload.subject.primaryId\n )\n }\n\n async applyTransitions(events: readonly RuleStateTransitionEvent[]): Promise<void> {\n if (events.length === 0) return\n const rows = events.map(transitionRow)\n\n runImmediateTransaction(this.db, () => {\n this.db\n .query(\n `\n WITH transitions AS (\n SELECT\n json_extract(value, '$.type') AS type,\n json_extract(value, '$.projectId') AS project_id,\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subjectKind') AS subject_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id,\n json_extract(value, '$.transitionAt') AS transition_at\n FROM json_each(?)\n )\n INSERT INTO rule_states (\n project_id, rule_id, subject_kind, object_type_id, primary_id, triggered_at\n )\n SELECT project_id, rule_id, subject_kind, object_type_id, primary_id, transition_at\n FROM transitions\n WHERE type = 'rule.triggered'\n ON CONFLICT(project_id, rule_id, subject_kind, object_type_id, primary_id)\n DO UPDATE SET triggered_at = excluded.triggered_at\n `\n )\n .run(JSON.stringify(rows))\n\n this.db\n .query(\n `\n WITH transitions AS (\n SELECT\n json_extract(value, '$.type') AS type,\n json_extract(value, '$.projectId') AS project_id,\n json_extract(value, '$.ruleId') AS rule_id,\n json_extract(value, '$.subjectKind') AS subject_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n )\n DELETE FROM rule_states\n WHERE EXISTS (\n SELECT 1 FROM transitions\n WHERE transitions.type = 'rule.resolved'\n AND transitions.project_id = rule_states.project_id\n AND transitions.rule_id = rule_states.rule_id\n AND transitions.subject_kind = rule_states.subject_kind\n AND transitions.object_type_id = rule_states.object_type_id\n AND transitions.primary_id = rule_states.primary_id\n )\n `\n )\n .run(JSON.stringify(rows))\n })\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction transitionRow(event: RuleStateTransitionEvent) {\n return {\n type: event.type,\n projectId: event.projectId,\n ruleId: event.payload.ruleId,\n subjectKind: event.payload.subject.kind,\n objectTypeId: event.payload.subject.objectTypeId,\n primaryId: event.payload.subject.primaryId,\n transitionAt:\n event.type === \"rule.triggered\" ? event.payload.triggeredAt : event.payload.resolvedAt,\n }\n}\n\nfunction reconciliationPage(\n rows: readonly SqliteRuleStateRow[],\n limit: number\n): ListRuleStatesReconciliationPageResult {\n const hasMore = rows.length > limit\n const states = rows.slice(0, limit).map(rowToRuleStateRecord)\n const last = states.at(-1)\n return {\n states,\n ...(hasMore && last\n ? {\n next: {\n ruleId: last.ruleId,\n objectTypeId: last.subject.objectTypeId,\n primaryId: last.subject.primaryId,\n },\n }\n : {}),\n }\n}\n\nfunction assertPositiveLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Rules reconciliation page limit must be a positive safe integer.\")\n }\n}\n\ninterface SqliteRuleStateRow {\n readonly project_id: string\n readonly rule_id: string\n readonly subject_kind: RuleEventSubject[\"kind\"]\n readonly object_type_id: string\n readonly primary_id: string\n readonly triggered_at: string\n}\n\nfunction rowToRuleStateRecord(row: SqliteRuleStateRow): RuleStateRecord {\n return {\n projectId: row.project_id,\n ruleId: row.rule_id,\n subject: {\n kind: row.subject_kind,\n objectTypeId: row.object_type_id,\n primaryId: row.primary_id,\n },\n triggeredAt: row.triggered_at,\n }\n}\n",
65
- "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareGrantByIdInput,\n normalizeListShareGrantsInput,\n normalizeRevokeShareGrantInput,\n normalizeShareGrantCreate,\n parseShareGrantRecord,\n} from \"@sixb/core/internal/share-grant-storage-provider\"\nimport type {\n CreateShareGrantInput,\n GetShareGrantByIdInput,\n ListShareGrantsInput,\n ListShareGrantsResult,\n RevokeShareGrantInput,\n ShareGrantRecord,\n ShareGrantStorage,\n} from \"@sixb/core/storage\"\nimport { ShareGrantStorageError } from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareGrantStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for issued Share grants. Secret handling remains in Core. */\nexport class SqliteShareGrantStorage implements ShareGrantStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareGrantStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n }\n\n async create(input: CreateShareGrantInput): Promise<ShareGrantRecord> {\n const record = normalizeShareGrantCreate(input)\n try {\n this.db\n .query(\n `\n INSERT INTO share_grants (\n project_id, id, definition_id, target_object_type_id, target_primary_id,\n issued_by_type, issued_by_id, authority_version, authority_snapshot,\n authority_digest, token_hash, destination_path, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.id,\n record.definitionId,\n record.target.objectTypeId,\n record.target.primaryId,\n record.issuedBy.type,\n record.issuedBy.id,\n record.authoritySnapshot.version,\n JSON.stringify(record.authoritySnapshot),\n record.authorityDigest,\n record.tokenHash,\n record.destinationPath,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareGrantStorageError(\n \"duplicate\",\n `[SixbSqlite] Share grant '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n throw error\n }\n return this.require(record.projectId, record.id, \"create\")\n }\n\n async getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeGetShareGrantByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async list(input: ListShareGrantsInput): Promise<ListShareGrantsResult> {\n const normalized = normalizeListShareGrantsInput(input)\n const where = [\"project_id = ?\"]\n const args: (string | number)[] = [normalized.projectId]\n if (normalized.definitionId !== undefined) {\n where.push(\"definition_id = ?\")\n args.push(normalized.definitionId)\n }\n if (normalized.target !== undefined) {\n where.push(\"target_object_type_id = ?\", \"target_primary_id = ?\")\n args.push(normalized.target.objectTypeId, normalized.target.primaryId)\n }\n if (!normalized.includeRevoked) where.push(\"revoked_at IS NULL\")\n if (!normalized.includeExpired) {\n where.push(\"expires_at > ?\")\n args.push(normalized.now.toISOString())\n }\n\n const predicate = where.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM share_grants WHERE ${predicate}`)\n .get(...args) as { readonly total: number }\n const rows = this.db\n .query(\n `\n SELECT * FROM share_grants\n WHERE ${predicate}\n ORDER BY created_at DESC, id DESC\n LIMIT ? OFFSET ?\n `\n )\n .all(...args, normalized.limit, normalized.offset) as SqliteShareGrantRow[]\n const grants = rows.map(rowToRecord)\n return {\n grants,\n total: totalRow.total,\n hasMore: normalized.offset + grants.length < totalRow.total,\n }\n }\n\n async revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeRevokeShareGrantInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n\n const revocation = normalizeRevokeShareGrantInput(normalized, current.createdAt)\n this.db\n .query(\n `\n UPDATE share_grants\n SET revoked_at = ?, revoked_by_type = ?, revoked_by_id = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n `\n )\n .run(\n revocation.revokedAt.toISOString(),\n revocation.revokedBy.type,\n revocation.revokedBy.id,\n revocation.projectId,\n revocation.id\n )\n return this.require(revocation.projectId, revocation.id, \"revoke\")\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareGrantRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_grants WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareGrantRow | null\n return row ? rowToRecord(row) : null\n }\n\n private require(projectId: string, id: string, operation: string): ShareGrantRecord {\n const record = this.getRow(projectId, id)\n if (!record) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share grant '${id}' disappeared after ${operation}.`\n )\n }\n return record\n }\n}\n\ninterface SqliteShareGrantRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly definition_id: unknown\n readonly target_object_type_id: unknown\n readonly target_primary_id: unknown\n readonly issued_by_type: unknown\n readonly issued_by_id: unknown\n readonly authority_version: unknown\n readonly authority_snapshot: unknown\n readonly authority_digest: unknown\n readonly token_hash: unknown\n readonly destination_path: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly revoked_at: unknown\n readonly revoked_by_type: unknown\n readonly revoked_by_id: unknown\n}\n\nfunction rowToRecord(row: SqliteShareGrantRow): ShareGrantRecord {\n const authoritySnapshot = parseStoredJson(row.authority_snapshot, \"authority snapshot\")\n if (\n typeof row.authority_version !== \"number\" ||\n !isRecord(authoritySnapshot) ||\n authoritySnapshot.version !== row.authority_version\n ) {\n throw invalidRecord(\"Share authority version does not match its snapshot.\")\n }\n\n const hasRevokedAt = row.revoked_at !== null\n const hasRevokedBy = row.revoked_by_type !== null || row.revoked_by_id !== null\n if (hasRevokedAt !== hasRevokedBy) {\n throw invalidRecord(\"Share revocation time and actor must be stored together.\")\n }\n\n return parseShareGrantRecord({\n projectId: row.project_id,\n id: row.id,\n definitionId: row.definition_id,\n target: {\n objectTypeId: row.target_object_type_id,\n primaryId: row.target_primary_id,\n },\n issuedBy: { type: row.issued_by_type, id: row.issued_by_id },\n authoritySnapshot,\n authorityDigest: row.authority_digest,\n tokenHash: row.token_hash,\n destinationPath: row.destination_path,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n ...(hasRevokedAt ? { revokedAt: row.revoked_at } : {}),\n ...(hasRevokedBy ? { revokedBy: { type: row.revoked_by_type, id: row.revoked_by_id } } : {}),\n })\n}\n\nfunction parseStoredJson(value: unknown, field: string): unknown {\n if (typeof value !== \"string\") throw invalidRecord(`Share ${field} must be stored as JSON text.`)\n try {\n return JSON.parse(value)\n } catch (cause) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share ${field} contains invalid JSON.`,\n { cause }\n )\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidRecord(message: string): ShareGrantStorageError {\n return new ShareGrantStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
67
+ "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareGrantByIdInput,\n normalizeListShareGrantsInput,\n normalizeRevokeShareGrantInput,\n normalizeShareGrantCreate,\n parseShareGrantRecord,\n} from \"@sixb/core/internal/share-grant-storage-provider\"\nimport type {\n CreateShareGrantInput,\n GetShareGrantByIdInput,\n GetShareGrantsByIdsInput,\n ListShareGrantsInput,\n ListShareGrantsResult,\n RevokeShareGrantInput,\n ShareGrantRecord,\n ShareGrantStorage,\n} from \"@sixb/core/storage\"\nimport { ShareGrantStorageError } from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareGrantStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for issued Share grants. Secret handling remains in Core. */\nexport class SqliteShareGrantStorage implements ShareGrantStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareGrantStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n }\n\n async create(input: CreateShareGrantInput): Promise<ShareGrantRecord> {\n const record = normalizeShareGrantCreate(input)\n try {\n this.db\n .query(\n `\n INSERT INTO share_grants (\n project_id, id, definition_id, target_object_type_id, target_primary_id,\n issued_by_type, issued_by_id, authority_version, authority_snapshot,\n authority_digest, token_hash, destination_path, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.id,\n record.definitionId,\n record.target.objectTypeId,\n record.target.primaryId,\n record.issuedBy.type,\n record.issuedBy.id,\n record.authoritySnapshot.version,\n JSON.stringify(record.authoritySnapshot),\n record.authorityDigest,\n record.tokenHash,\n record.destinationPath,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareGrantStorageError(\n \"duplicate\",\n `[SixbSqlite] Share grant '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n throw error\n }\n return this.require(record.projectId, record.id, \"create\")\n }\n\n async getById(input: GetShareGrantByIdInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeGetShareGrantByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async getByIds(input: GetShareGrantsByIdsInput): Promise<readonly ShareGrantRecord[]> {\n const ids = [...new Set(input.ids)]\n if (ids.length === 0) {\n return []\n }\n\n const rows = this.db\n .query(\n `\n SELECT *\n FROM share_grants\n WHERE project_id = ?\n AND id IN (SELECT value FROM json_each(?))\n `\n )\n .all(input.projectId, JSON.stringify(ids)) as SqliteShareGrantRow[]\n\n const byId = new Map(rows.map((row) => [row.id, row]))\n return ids.flatMap((id) => {\n const row = byId.get(id)\n return row ? [rowToRecord(row)] : []\n })\n }\n\n async list(input: ListShareGrantsInput): Promise<ListShareGrantsResult> {\n const normalized = normalizeListShareGrantsInput(input)\n const where = [\"project_id = ?\"]\n const args: (string | number)[] = [normalized.projectId]\n if (normalized.definitionId !== undefined) {\n where.push(\"definition_id = ?\")\n args.push(normalized.definitionId)\n }\n if (normalized.target !== undefined) {\n where.push(\"target_object_type_id = ?\", \"target_primary_id = ?\")\n args.push(normalized.target.objectTypeId, normalized.target.primaryId)\n }\n if (!normalized.includeRevoked) where.push(\"revoked_at IS NULL\")\n if (!normalized.includeExpired) {\n where.push(\"expires_at > ?\")\n args.push(normalized.now.toISOString())\n }\n\n const predicate = where.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM share_grants WHERE ${predicate}`)\n .get(...args) as { readonly total: number }\n const rows = this.db\n .query(\n `\n SELECT * FROM share_grants\n WHERE ${predicate}\n ORDER BY created_at DESC, id DESC\n LIMIT ? OFFSET ?\n `\n )\n .all(...args, normalized.limit, normalized.offset) as SqliteShareGrantRow[]\n const grants = rows.map(rowToRecord)\n return {\n grants,\n total: totalRow.total,\n hasMore: normalized.offset + grants.length < totalRow.total,\n }\n }\n\n async revoke(input: RevokeShareGrantInput): Promise<ShareGrantRecord | null> {\n const normalized = normalizeRevokeShareGrantInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n\n const revocation = normalizeRevokeShareGrantInput(normalized, current.createdAt)\n this.db\n .query(\n `\n UPDATE share_grants\n SET revoked_at = ?, revoked_by_type = ?, revoked_by_id = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n `\n )\n .run(\n revocation.revokedAt.toISOString(),\n revocation.revokedBy.type,\n revocation.revokedBy.id,\n revocation.projectId,\n revocation.id\n )\n return this.require(revocation.projectId, revocation.id, \"revoke\")\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareGrantRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_grants WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareGrantRow | null\n return row ? rowToRecord(row) : null\n }\n\n private require(projectId: string, id: string, operation: string): ShareGrantRecord {\n const record = this.getRow(projectId, id)\n if (!record) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share grant '${id}' disappeared after ${operation}.`\n )\n }\n return record\n }\n}\n\ninterface SqliteShareGrantRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly definition_id: unknown\n readonly target_object_type_id: unknown\n readonly target_primary_id: unknown\n readonly issued_by_type: unknown\n readonly issued_by_id: unknown\n readonly authority_version: unknown\n readonly authority_snapshot: unknown\n readonly authority_digest: unknown\n readonly token_hash: unknown\n readonly destination_path: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly revoked_at: unknown\n readonly revoked_by_type: unknown\n readonly revoked_by_id: unknown\n}\n\nfunction rowToRecord(row: SqliteShareGrantRow): ShareGrantRecord {\n const authoritySnapshot = parseStoredJson(row.authority_snapshot, \"authority snapshot\")\n if (\n typeof row.authority_version !== \"number\" ||\n !isRecord(authoritySnapshot) ||\n authoritySnapshot.version !== row.authority_version\n ) {\n throw invalidRecord(\"Share authority version does not match its snapshot.\")\n }\n\n const hasRevokedAt = row.revoked_at !== null\n const hasRevokedBy = row.revoked_by_type !== null || row.revoked_by_id !== null\n if (hasRevokedAt !== hasRevokedBy) {\n throw invalidRecord(\"Share revocation time and actor must be stored together.\")\n }\n\n return parseShareGrantRecord({\n projectId: row.project_id,\n id: row.id,\n definitionId: row.definition_id,\n target: {\n objectTypeId: row.target_object_type_id,\n primaryId: row.target_primary_id,\n },\n issuedBy: { type: row.issued_by_type, id: row.issued_by_id },\n authoritySnapshot,\n authorityDigest: row.authority_digest,\n tokenHash: row.token_hash,\n destinationPath: row.destination_path,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n ...(hasRevokedAt ? { revokedAt: row.revoked_at } : {}),\n ...(hasRevokedBy ? { revokedBy: { type: row.revoked_by_type, id: row.revoked_by_id } } : {}),\n })\n}\n\nfunction parseStoredJson(value: unknown, field: string): unknown {\n if (typeof value !== \"string\") throw invalidRecord(`Share ${field} must be stored as JSON text.`)\n try {\n return JSON.parse(value)\n } catch (cause) {\n throw new ShareGrantStorageError(\n \"invalid_record\",\n `[SixbSqlite] Share ${field} contains invalid JSON.`,\n { cause }\n )\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidRecord(message: string): ShareGrantStorageError {\n return new ShareGrantStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
66
68
  "import type { Database } from \"bun:sqlite\"\nimport {\n normalizeGetShareSessionByIdInput,\n normalizeRenewShareSessionIfValidInput,\n normalizeRevokeShareSessionInput,\n normalizeShareSessionCreate,\n parseShareSessionRecord,\n} from \"@sixb/core/internal/share-session-storage-provider\"\nimport type {\n CreateShareSessionInput,\n GetShareSessionByIdInput,\n RenewShareSessionIfValidInput,\n RevokeShareSessionInput,\n ShareSessionRecord,\n ShareSessionStorage,\n} from \"@sixb/core/storage\"\nimport { ShareSessionStorageError } from \"@sixb/core/storage\"\nimport { isForeignKeyConstraintError, isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteShareSessionStorageOptions {\n readonly path?: string\n readonly connection?: SqliteStoreConnection\n}\n\n/** SQLite persistence for short-lived Share access sessions. */\nexport class SqliteShareSessionStorage implements ShareSessionStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteShareSessionStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n }\n\n async create(input: CreateShareSessionInput): Promise<ShareSessionRecord> {\n const record = normalizeShareSessionCreate(input)\n try {\n const row = this.db\n .query(\n `\n INSERT INTO share_sessions (\n project_id, id, grant_id, token_hash, created_at, expires_at,\n absolute_expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n RETURNING *\n `\n )\n .get(\n record.projectId,\n record.id,\n record.grantId,\n record.tokenHash,\n record.createdAt.toISOString(),\n record.expiresAt.toISOString(),\n record.absoluteExpiresAt.toISOString()\n ) as SqliteShareSessionRow | null\n if (!row) throw invalidRecord(`Share session '${record.id}' disappeared after create.`)\n return rowToRecord(row)\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new ShareSessionStorageError(\n \"duplicate\",\n `[SixbSqlite] Share session '${record.id}' conflicts with an existing record.`,\n { cause: error }\n )\n }\n if (isForeignKeyConstraintError(error)) {\n throw new ShareSessionStorageError(\n \"invalid_input\",\n `[SixbSqlite] Share grant '${record.grantId}' does not exist in project '${record.projectId}'.`,\n { cause: error }\n )\n }\n throw error\n }\n }\n\n async getById(input: GetShareSessionByIdInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeGetShareSessionByIdInput(input)\n return this.getRow(normalized.projectId, normalized.id)\n }\n\n async renewIfValid(input: RenewShareSessionIfValidInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRenewShareSessionIfValidInput(input)\n const requestedExpiry = normalized.expiresAt.toISOString()\n const now = normalized.now.toISOString()\n const row = this.db\n .query(\n `\n UPDATE share_sessions\n SET expires_at = CASE\n WHEN ? > absolute_expires_at THEN absolute_expires_at\n WHEN ? > expires_at THEN ?\n ELSE expires_at\n END\n WHERE project_id = ?\n AND id = ?\n AND grant_id = ?\n AND token_hash = ?\n AND revoked_at IS NULL\n AND created_at <= ?\n AND expires_at > ?\n AND absolute_expires_at > ?\n RETURNING *\n `\n )\n .get(\n requestedExpiry,\n requestedExpiry,\n requestedExpiry,\n normalized.projectId,\n normalized.id,\n normalized.grantId,\n normalized.tokenHash,\n now,\n now,\n now\n ) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : null\n }\n\n async revoke(input: RevokeShareSessionInput): Promise<ShareSessionRecord | null> {\n const normalized = normalizeRevokeShareSessionInput(input)\n const current = this.getRow(normalized.projectId, normalized.id)\n if (!current || current.revokedAt) return current\n const revocation = normalizeRevokeShareSessionInput(normalized, current.createdAt)\n const row = this.db\n .query(\n `\n UPDATE share_sessions\n SET revoked_at = ?\n WHERE project_id = ? AND id = ? AND revoked_at IS NULL\n RETURNING *\n `\n )\n .get(\n revocation.revokedAt.toISOString(),\n revocation.projectId,\n revocation.id\n ) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : this.getRow(revocation.projectId, revocation.id)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getRow(projectId: string, id: string): ShareSessionRecord | null {\n const row = this.db\n .query(\"SELECT * FROM share_sessions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as SqliteShareSessionRow | null\n return row ? rowToRecord(row) : null\n }\n}\n\ninterface SqliteShareSessionRow {\n readonly project_id: unknown\n readonly id: unknown\n readonly grant_id: unknown\n readonly token_hash: unknown\n readonly created_at: unknown\n readonly expires_at: unknown\n readonly absolute_expires_at: unknown\n readonly revoked_at: unknown\n}\n\nfunction rowToRecord(row: SqliteShareSessionRow): ShareSessionRecord {\n return parseShareSessionRecord({\n projectId: row.project_id,\n id: row.id,\n grantId: row.grant_id,\n tokenHash: row.token_hash,\n createdAt: row.created_at,\n expiresAt: row.expires_at,\n absoluteExpiresAt: row.absolute_expires_at,\n ...(row.revoked_at === null ? {} : { revokedAt: row.revoked_at }),\n })\n}\n\nfunction invalidRecord(message: string): ShareSessionStorageError {\n return new ShareSessionStorageError(\"invalid_record\", `[SixbSqlite] ${message}`)\n}\n",
67
69
  "import type { Database } from \"bun:sqlite\"\nimport type { JsonValue } from \"@sixb/core\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { canRequeueSyncRunAfterEnqueueFailure } from \"@sixb/core/internal/storage\"\nimport { assertSyncRunExecution } from \"@sixb/core/internal/sync-run-storage-provider\"\nimport type {\n ExecutionStorage,\n FinishSyncRunInput,\n ListLatestSyncRunsInput,\n ListLatestSyncRunsResult,\n ListSyncRunsInput,\n ListSyncRunsResult,\n QueueSyncRunInput,\n StartSyncRunInput,\n SyncRunRecord,\n SyncRunStorage,\n} from \"@sixb/core/storage\"\nimport { SYNC_RUN_FAILURE_CODES, SyncRunError } from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteSyncRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteSyncRunStorage implements SyncRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteSyncRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async queue(input: QueueSyncRunInput): Promise<SyncRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertSyncRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n syncId: input.syncId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO sync_runs (\n project_id,\n id,\n execution_id,\n sync_id,\n dataset_id,\n mode,\n status,\n queued_at,\n started_at,\n expected_latest_version_id,\n commit_message\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.syncId,\n input.datasetId,\n input.mode,\n \"queued\",\n queuedAt.toISOString(),\n input.expectedLatestVersionId ?? null,\n input.commitMessage ?? null\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n return this.requeueAfterEnqueueFailure(input, queuedAt)\n }\n\n throw error\n }\n\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (!record) {\n throw new SyncRunError(\n `[SixbSqlite] Failed to load sync run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueueSyncRunInput,\n queuedAt: Date\n ): Promise<SyncRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM sync_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n if (!existing || !canRequeueSyncRunAfterEnqueueFailure(rowToSyncRunRecord(existing), input)) {\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE sync_runs\n SET status = ?, queued_at = ?, started_at = NULL, finished_at = NULL,\n rows_read = NULL, output_version_id = NULL, error = NULL, checkpoint = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"queued\", queuedAt.toISOString(), input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM sync_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n return rowToSyncRunRecord(updated)\n })()\n }\n\n async start(input: StartSyncRunInput): Promise<SyncRunRecord> {\n const result = this.db\n .query(\n `\n UPDATE sync_runs\n SET status = ?, started_at = ?, error = NULL\n WHERE project_id = ? AND id = ? AND status = ?\n `\n )\n .run(\n \"running\",\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.id,\n \"queued\"\n )\n if (result.changes > 0) {\n const record = await this.getById({ projectId: input.projectId, id: input.id })\n if (record) return record\n }\n\n const existing = await this.getById({ projectId: input.projectId, id: input.id })\n if (!existing) {\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n async finish(input: FinishSyncRunInput): Promise<SyncRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM sync_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow | null\n\n if (!existing) {\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n const enqueueFailure =\n input.status === \"failed\" && input.error.code === \"queue.enqueue_failed\"\n if (\n (enqueueFailure && existing.status !== \"queued\") ||\n (!enqueueFailure && existing.status !== \"running\")\n ) {\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' cannot finish from status '${existing.status}'.`\n )\n }\n\n if (input.status === \"succeeded\") {\n if (input.output && input.output.datasetId !== existing.dataset_id) {\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' output dataset '${input.output.datasetId}' does not match '${existing.dataset_id}'.`\n )\n }\n if (!input.output && input.rowsRead !== 0 && existing.mode !== \"merge\") {\n throw new SyncRunError(\n `[SixbSqlite] Sync run '${input.id}' may omit its output with rows read only for an initial merge no-op.`\n )\n }\n }\n\n this.db\n .query(\n `\n UPDATE sync_runs\n SET\n status = ?,\n finished_at = ?,\n rows_read = ?,\n output_version_id = ?,\n error = ?,\n checkpoint = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\"\n ? input.rowsRead\n : (input.rowsRead ?? existing.rows_read ?? null),\n input.status === \"succeeded\" ? (input.output?.versionId ?? null) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, SYNC_RUN_FAILURE_CODES),\n input.status === \"succeeded\" ? serializeCheckpoint(input.checkpoint) : null,\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM sync_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as DatabaseRow\n\n return rowToSyncRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<SyncRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM sync_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as DatabaseRow | null\n\n return row ? rowToSyncRunRecord(row) : null\n }\n\n async list(input: ListSyncRunsInput): Promise<ListSyncRunsResult> {\n if (hasEmptyStatuses(input) || input.syncIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.syncId) {\n whereClauses.push(\"sync_id = ?\")\n args.push(input.syncId)\n }\n\n if (input.syncIds) {\n whereClauses.push(`sync_id IN (${input.syncIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.syncIds)\n }\n\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n\n appendRunListFilters(whereClauses, args, input, \"COALESCE(started_at, queued_at)\")\n\n const { rows, total, hasMore } = queryRunList<DatabaseRow>({\n db: this.db,\n tableName: \"sync_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToSyncRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestBySyncIds(input: ListLatestSyncRunsInput): Promise<ListLatestSyncRunsResult> {\n const rows = queryLatestRunsByOwnerId<DatabaseRow>({\n db: this.db,\n tableName: \"sync_runs\",\n ownerColumn: \"sync_id\",\n ownerIds: input.syncIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.sync_id,\n })\n\n return {\n runs: rows.map(rowToSyncRunRecord),\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction serializeCheckpoint(checkpoint: JsonValue | undefined): string | null {\n return checkpoint !== undefined ? JSON.stringify(checkpoint) : null\n}\n\nfunction parseCheckpoint(value: string | null | undefined): JsonValue | undefined {\n return value != null ? (JSON.parse(value) as JsonValue) : undefined\n}\n\nfunction rowToSyncRunRecord(row: DatabaseRow): SyncRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n syncId: row.sync_id,\n datasetId: row.dataset_id,\n mode: row.mode,\n status: row.status,\n queuedAt: new Date(row.queued_at),\n startedAt: row.started_at ? new Date(row.started_at) : undefined,\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n rowsRead: row.rows_read ?? undefined,\n output: row.output_version_id\n ? {\n datasetId: row.dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n expectedLatestVersionId: row.expected_latest_version_id ?? undefined,\n commitMessage: row.commit_message ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, SYNC_RUN_FAILURE_CODES),\n checkpoint: parseCheckpoint(row.checkpoint),\n }\n}\n\nfunction isUniqueConstraintError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"UNIQUE constraint failed\")\n}\n\ninterface DatabaseRow {\n project_id: string\n id: string\n execution_id: string\n sync_id: string\n dataset_id: string\n mode: SyncRunRecord[\"mode\"]\n status: SyncRunRecord[\"status\"]\n queued_at: string\n started_at: string | null\n finished_at: string | null\n rows_read: number | null\n output_version_id: string | null\n expected_latest_version_id: string | null\n commit_message: string | null\n error: string | null\n checkpoint: string | null\n}\n",
68
70
  "import type { Database } from \"bun:sqlite\"\n\nexport interface SqliteStorageTestingAdapter {\n advanceConnectorConnectionTime(durationMs: number): void\n /** The store's write connection, for tests that inspect tables no public read exposes. */\n readonly db: Database\n}\n\nconst adapters = new WeakMap<object, SqliteStorageTestingAdapter>()\n\nexport function registerSqliteStorageTestingAdapter(\n storage: object,\n adapter: SqliteStorageTestingAdapter\n): void {\n adapters.set(storage, adapter)\n}\n\nexport function getSqliteStorageTestingAdapter(storage: object): SqliteStorageTestingAdapter {\n const adapter = adapters.get(storage)\n if (!adapter) throw new Error(\"[SixbSqlite] Storage testing adapter is unavailable.\")\n return adapter\n}\n",
69
71
  "import type { Database } from \"bun:sqlite\"\nimport type {\n TimeseriesHistoryBatchInput,\n TimeseriesHistoryBatchResult,\n TimeseriesPoint,\n TimeseriesStorage,\n} from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteTimeseriesStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\n/**\n * SQLite-based TimeseriesStorage implementation.\n *\n * Stores time-series data with efficient querying for history and latest values.\n */\nexport class SqliteTimeseriesStorage implements TimeseriesStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteTimeseriesStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n }\n\n async getHistory(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n propertyId: string\n from?: Date\n to?: Date\n limit?: number\n order?: \"asc\" | \"desc\"\n }): Promise<readonly TimeseriesPoint[]> {\n let query = `\n SELECT * FROM timeseries\n WHERE project_id = ? AND object_type_id = ? AND object_id = ? AND property_id = ?\n `\n const args: (string | number | null)[] = [\n params.projectId,\n params.objectTypeId,\n params.objectId,\n params.propertyId,\n ]\n\n if (params.from) {\n query += \" AND at >= ?\"\n args.push(params.from.toISOString())\n }\n\n if (params.to) {\n query += \" AND at <= ?\"\n args.push(params.to.toISOString())\n }\n\n query += ` ORDER BY at ${params.order === \"desc\" ? \"DESC\" : \"ASC\"}`\n\n if (params.limit !== undefined) {\n query += \" LIMIT ?\"\n args.push(params.limit)\n }\n\n const rows = this.db.query(query).all(...args) as DatabaseRow[]\n\n return rows.map((row) => this.rowToPoint(row))\n }\n\n async getHistoryBatch(\n input: TimeseriesHistoryBatchInput\n ): Promise<readonly TimeseriesHistoryBatchResult[]> {\n if (input.series.length === 0) {\n return []\n }\n\n const order = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const values = input.series.map(() => \"(?, ?, ?, ?)\").join(\", \")\n const args: (string | number | null)[] = []\n\n input.series.forEach((series, index) => {\n args.push(index, series.objectTypeId, series.objectId, series.propertyId)\n })\n\n let query = `\n WITH requested(series_index, object_type_id, object_id, property_id) AS (\n VALUES ${values}\n ),\n ranked AS (\n SELECT\n requested.series_index,\n timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY requested.series_index\n ORDER BY timeseries.at ${order}\n ) AS series_row_number\n FROM requested\n JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.object_id\n AND timeseries.property_id = requested.property_id\n WHERE 1 = 1\n `\n args.push(input.projectId)\n\n if (input.from) {\n query += \" AND timeseries.at >= ?\"\n args.push(input.from.toISOString())\n }\n\n if (input.to) {\n query += \" AND timeseries.at <= ?\"\n args.push(input.to.toISOString())\n }\n\n query += \"\\n )\\n SELECT * FROM ranked\"\n\n if (input.limitPerSeries !== undefined) {\n query += \" WHERE series_row_number <= ?\"\n args.push(Math.max(0, input.limitPerSeries))\n }\n\n query += ` ORDER BY series_index ASC, at ${order}`\n\n const rows = this.db.query(query).all(...args) as (DatabaseRow & {\n series_index: number\n series_row_number: number\n })[]\n const results = input.series.map((series) => ({\n ...series,\n points: [] as TimeseriesPoint[],\n }))\n\n for (const row of rows) {\n const result = results[row.series_index]\n if (result) {\n result.points.push(this.rowToPoint(row))\n }\n }\n\n return results\n }\n\n async getLatest(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n propertyId: string\n }): Promise<TimeseriesPoint | null> {\n const row = this.db\n .query(\n `\n SELECT * FROM timeseries\n WHERE project_id = ? AND object_type_id = ? AND object_id = ? AND property_id = ?\n ORDER BY at DESC\n LIMIT 1\n `\n )\n .get(\n params.projectId,\n params.objectTypeId,\n params.objectId,\n params.propertyId\n ) as DatabaseRow | null\n\n return row ? this.rowToPoint(row) : null\n }\n private rowToPoint(row: DatabaseRow): TimeseriesPoint {\n return {\n projectId: row.project_id,\n objectTypeId: row.object_type_id,\n objectId: row.object_id,\n propertyId: row.property_id,\n value: JSON.parse(row.value),\n unit: row.unit ?? undefined,\n at: new Date(row.at),\n lastCommitId: row.last_commit_id,\n }\n }\n\n /**\n * Close the database connection.\n */\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\ninterface DatabaseRow {\n project_id: string\n object_type_id: string\n object_id: string\n property_id: string\n value: string\n unit: string | null\n at: string\n last_commit_id: string\n}\n",
70
72
  "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { assertWebhookRunExecution } from \"@sixb/core/internal/webhook-run-storage-provider\"\nimport type {\n ExecutionStorage,\n FinishWebhookRunInput,\n GetWebhookRunByDeliveryInput,\n ListWebhookRunsInput,\n ListWebhookRunsResult,\n RestartWebhookRunInput,\n StartWebhookRunInput,\n WebhookRunRecord,\n WebhookRunStorage,\n} from \"@sixb/core/storage\"\nimport { canRetryWebhookRun, WEBHOOK_RUN_FAILURE_CODES, WebhookRunError } from \"@sixb/core/storage\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWebhookRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWebhookRunStorage implements WebhookRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteWebhookRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async start(input: StartWebhookRunInput): Promise<WebhookRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n await assertWebhookRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n route: input.route,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO webhook_runs (\n project_id, id, execution_id, connector_id, webhook_id, status, method, route,\n started_at, request_body_bytes, request_body_sha256, idempotency_key\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.connectorId,\n input.webhookId,\n \"running\",\n input.method,\n input.route,\n startedAt.toISOString(),\n input.requestBodyBytes,\n input.requestBodySha256,\n input.idempotencyKey ?? null\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WebhookRunError(\n `[SixbSqlite] Webhook run '${input.id}' or delivery key already exists for project '${input.projectId}'.`,\n \"duplicate_run\"\n )\n }\n throw error\n }\n\n return this.requireWebhookRun(input.projectId, input.id)\n }\n\n async restart(input: RestartWebhookRunInput): Promise<WebhookRunRecord> {\n return this.db.transaction(() => {\n const existing = this.getWebhookRunRow(input.projectId, input.id)\n if (!existing) {\n throw new WebhookRunError(\n `[SixbSqlite] Webhook run '${input.id}' not found for project '${input.projectId}'.`,\n \"not_found\"\n )\n }\n if (!canRetryWebhookRun(rowToWebhookRunRecord(existing))) {\n throw new WebhookRunError(\n `[SixbSqlite] Webhook run '${input.id}' cannot restart from status '${existing.status}'.`,\n \"invalid_transition\"\n )\n }\n\n const result = this.db\n .query(\n `\n UPDATE webhook_runs\n SET status = 'running', started_at = ?, finished_at = NULL,\n response_status = NULL, error = NULL\n WHERE project_id = ? AND id = ? AND status = 'failed'\n `\n )\n .run((input.startedAt ?? new Date()).toISOString(), input.projectId, input.id)\n if (result.changes === 0) {\n throw new WebhookRunError(\n `[SixbSqlite] Webhook run '${input.id}' changed while restarting.`,\n \"invalid_transition\"\n )\n }\n return this.requireWebhookRun(input.projectId, input.id)\n })()\n }\n\n async finish(input: FinishWebhookRunInput): Promise<WebhookRunRecord> {\n return this.db.transaction(() => {\n const existing = this.getWebhookRunRow(input.projectId, input.id)\n if (!existing) {\n throw new WebhookRunError(\n `[SixbSqlite] Webhook run '${input.id}' not found for project '${input.projectId}'.`,\n \"not_found\"\n )\n }\n if (existing.status !== \"running\") {\n throw new WebhookRunError(\n `[SixbSqlite] Webhook run '${input.id}' for project '${input.projectId}' is already terminal.`,\n \"invalid_transition\"\n )\n }\n\n this.db\n .query(\n `\n UPDATE webhook_runs\n SET status = ?, finished_at = ?, response_status = ?, error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.responseStatus ?? null,\n input.status === \"succeeded\"\n ? null\n : serializeSixbFailure(input.error, WEBHOOK_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n return this.requireWebhookRun(input.projectId, input.id)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WebhookRunRecord | null> {\n const row = this.getWebhookRunRow(params.projectId, params.id)\n return row ? rowToWebhookRunRecord(row) : null\n }\n\n async getByDelivery(input: GetWebhookRunByDeliveryInput): Promise<WebhookRunRecord | null> {\n const row = this.db\n .query(\n `\n SELECT * FROM webhook_runs\n WHERE project_id = ? AND connector_id = ? AND webhook_id = ? AND idempotency_key = ?\n `\n )\n .get(\n input.projectId,\n input.connectorId,\n input.webhookId,\n input.idempotencyKey\n ) as WebhookRunDatabaseRow | null\n return row ? rowToWebhookRunRecord(row) : null\n }\n\n async list(input: ListWebhookRunsInput): Promise<ListWebhookRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], hasMore: false, total: 0 }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.connectorId) {\n whereClauses.push(\"connector_id = ?\")\n args.push(input.connectorId)\n }\n if (input.webhookId) {\n whereClauses.push(\"webhook_id = ?\")\n args.push(input.webhookId)\n }\n if (input.idempotencyKey) {\n whereClauses.push(\"idempotency_key = ?\")\n args.push(input.idempotencyKey)\n }\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WebhookRunDatabaseRow>({\n db: this.db,\n tableName: \"webhook_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { runs: rows.map(rowToWebhookRunRecord), hasMore, total }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private getWebhookRunRow(projectId: string, id: string): WebhookRunDatabaseRow | null {\n return this.db\n .query(\"SELECT * FROM webhook_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WebhookRunDatabaseRow | null\n }\n\n private requireWebhookRun(projectId: string, id: string): WebhookRunRecord {\n const row = this.getWebhookRunRow(projectId, id)\n if (!row) {\n throw new WebhookRunError(\n `[SixbSqlite] Failed to load webhook run '${id}' for project '${projectId}'.`,\n \"not_found\"\n )\n }\n return rowToWebhookRunRecord(row)\n }\n}\n\nfunction rowToWebhookRunRecord(row: WebhookRunDatabaseRow): WebhookRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n connectorId: row.connector_id,\n webhookId: row.webhook_id,\n status: row.status,\n method: row.method,\n route: row.route,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n requestBodyBytes: row.request_body_bytes,\n requestBodySha256: row.request_body_sha256,\n responseStatus: row.response_status ?? undefined,\n idempotencyKey: row.idempotency_key ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WEBHOOK_RUN_FAILURE_CODES),\n }\n}\n\ninterface WebhookRunDatabaseRow {\n readonly project_id: string\n readonly id: string\n readonly execution_id: string\n readonly connector_id: string\n readonly webhook_id: string\n readonly status: WebhookRunRecord[\"status\"]\n readonly method: string\n readonly route: string\n readonly started_at: string\n readonly finished_at: string | null\n readonly request_body_bytes: number\n readonly request_body_sha256: string\n readonly response_status: number | null\n readonly idempotency_key: string | null\n readonly error: string | null\n}\n",
71
73
  "import type { Database } from \"bun:sqlite\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowInterventionInput,\n CreateWorkflowInterventionInput,\n ExpireWorkflowInterventionInput,\n ListWorkflowInterventionsInput,\n ListWorkflowInterventionsResult,\n Principal,\n SubmitWorkflowInterventionInput,\n WorkflowInterventionRecord,\n WorkflowInterventionStorage,\n} from \"@sixb/core/storage\"\nimport { WorkflowInterventionError } from \"@sixb/core/storage\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowInterventionStorageOptions {\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowInterventionStorage implements WorkflowInterventionStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n\n constructor(options: SqliteWorkflowInterventionStorageOptions = {}) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n }\n\n async create(input: CreateWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_interventions (\n project_id,\n id,\n workflow_id,\n workflow_run_id,\n node_run_id,\n node_index,\n node_id,\n node_key,\n intervention_id,\n input,\n default_response,\n status,\n requested_at,\n expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowId,\n input.workflowRunId,\n input.nodeRunId,\n input.nodeIndex,\n input.nodeId,\n input.nodeKey,\n input.interventionId,\n serializeRecord(input.input),\n serializeRecord(input.defaultResponse),\n \"pending\",\n (input.requestedAt ?? new Date()).toISOString(),\n input.expiresAt?.toISOString() ?? null\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireIntervention(input.projectId, input.id)\n }\n\n async submit(input: SubmitWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n submitted_at = ?,\n submitted_by = ?,\n response = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"submitted\",\n (input.submittedAt ?? new Date()).toISOString(),\n serializePrincipal(input.submittedBy),\n serializeRecord(input.response),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async cancel(input: CancelWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n cancelled_at = ?,\n cancelled_by = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"cancelled\",\n (input.cancelledAt ?? new Date()).toISOString(),\n serializePrincipal(input.cancelledBy),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async expire(input: ExpireWorkflowInterventionInput): Promise<WorkflowInterventionRecord> {\n return this.db.transaction(() => {\n const existing = this.requirePendingIntervention(input.projectId, input.id)\n\n this.db\n .query(\n `\n UPDATE workflow_interventions\n SET\n status = ?,\n expired_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"expired\",\n (input.expiredAt ?? new Date()).toISOString(),\n existing.project_id,\n existing.id\n )\n\n return this.requireIntervention(input.projectId, input.id)\n })()\n }\n\n async getById(params: {\n projectId: string\n id: string\n }): Promise<WorkflowInterventionRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowInterventionDatabaseRow | null\n\n return row ? rowToWorkflowInterventionRecord(row) : null\n }\n\n async list(input: ListWorkflowInterventionsInput): Promise<ListWorkflowInterventionsResult> {\n if ((input.statuses && input.statuses.length === 0) || input.workflowIds?.length === 0) {\n return {\n interventions: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.statuses) {\n whereClauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n args.push(...input.statuses)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.nodeRunId) {\n whereClauses.push(\"node_run_id = ?\")\n args.push(input.nodeRunId)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n if (input.interventionId) {\n whereClauses.push(\"intervention_id = ?\")\n args.push(input.interventionId)\n }\n\n if (input.requestedAfter) {\n whereClauses.push(\"requested_at >= ?\")\n args.push(input.requestedAfter.toISOString())\n }\n\n if (input.requestedBefore) {\n whereClauses.push(\"requested_at <= ?\")\n args.push(input.requestedBefore.toISOString())\n }\n\n const where = `WHERE ${whereClauses.join(\" AND \")}`\n const order = input.order === \"asc\" ? \"ASC\" : \"DESC\"\n const offset = input.offset ?? 0\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS count FROM workflow_interventions ${where}`)\n .get(...args) as { count: number }\n\n let query = `\n SELECT * FROM workflow_interventions\n ${where}\n ORDER BY requested_at ${order}, id ${order}\n `\n const queryArgs = [...args]\n\n if (input.limit !== undefined) {\n query += \" LIMIT ? OFFSET ?\"\n queryArgs.push(input.limit, offset)\n } else if (offset > 0) {\n query += \" LIMIT -1 OFFSET ?\"\n queryArgs.push(offset)\n }\n\n const rows = this.db.query(query).all(...queryArgs) as WorkflowInterventionDatabaseRow[]\n\n return {\n interventions: rows.map(rowToWorkflowInterventionRecord),\n hasMore: offset + rows.length < totalRow.count,\n total: totalRow.count,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requirePendingIntervention(\n projectId: string,\n id: string\n ): WorkflowInterventionDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowInterventionDatabaseRow | null\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${id}' not found for project '${projectId}'.`\n )\n }\n\n if (row.status !== \"pending\") {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention '${id}' for project '${projectId}' is not pending.`\n )\n }\n\n return row\n }\n\n private requireIntervention(projectId: string, id: string): WorkflowInterventionRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_interventions WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowInterventionDatabaseRow | null\n\n if (!row) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Failed to load workflow intervention '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowInterventionRecord(row)\n }\n}\n\ntype SqliteValue = string | number | null\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction serializePrincipal(principal: Principal | undefined): string | null {\n return principal ? JSON.stringify(principal) : null\n}\n\nfunction parsePrincipal(value: string | null): Principal | undefined {\n return value ? (JSON.parse(value) as Principal) : undefined\n}\n\nfunction rowToWorkflowInterventionRecord(\n row: WorkflowInterventionDatabaseRow\n): WorkflowInterventionRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowId: row.workflow_id,\n workflowRunId: row.workflow_run_id,\n nodeRunId: row.node_run_id,\n nodeIndex: row.node_index,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n interventionId: row.intervention_id,\n input: parseRecord(row.input),\n defaultResponse: parseRecord(row.default_response),\n status: row.status,\n requestedAt: new Date(row.requested_at),\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n submittedAt: row.submitted_at ? new Date(row.submitted_at) : undefined,\n submittedBy: parsePrincipal(row.submitted_by),\n response: row.response ? parseRecord(row.response) : undefined,\n cancelledAt: row.cancelled_at ? new Date(row.cancelled_at) : undefined,\n cancelledBy: parsePrincipal(row.cancelled_by),\n expiredAt: row.expired_at ? new Date(row.expired_at) : undefined,\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowInterventionError(\n `[SixbSqlite] Workflow intervention ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface WorkflowInterventionDatabaseRow {\n project_id: string\n id: string\n workflow_id: string\n workflow_run_id: string\n node_run_id: string\n node_index: number\n node_id: string\n node_key: string\n intervention_id: string\n input: string\n default_response: string\n status: WorkflowInterventionRecord[\"status\"]\n requested_at: string\n expires_at: string | null\n submitted_at: string | null\n submitted_by: string | null\n response: string | null\n cancelled_at: string | null\n cancelled_by: string | null\n expired_at: string | null\n}\n",
72
- "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n assertWorkflowAgentNodeRunExecution,\n assertWorkflowRunExecution,\n} from \"@sixb/core/internal/workflow-run-storage-provider\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowAgentNodeRunInput,\n ConfirmWorkflowAgentNodeRunExecutionOwnershipInput,\n ConfirmWorkflowRunExecutionOwnershipInput,\n CreateWorkflowAgentNodeRunInput,\n ExecutionStorage,\n FinishWorkflowAgentNodeRunInput,\n FinishWorkflowNodeRunInput,\n FinishWorkflowRunInput,\n ListLatestWorkflowRunsInput,\n ListLatestWorkflowRunsResult,\n ListWorkflowAgentNodeRunsInput,\n ListWorkflowAgentNodeRunsResult,\n ListWorkflowNodeRunsInput,\n ListWorkflowNodeRunsResult,\n ListWorkflowRunsInput,\n ListWorkflowRunsResult,\n QueueWorkflowRunInput,\n ReclaimWorkflowAgentNodeRunInput,\n ReclaimWorkflowRunInput,\n ResumeWorkflowRunInput,\n StartWorkflowAgentNodeRunInput,\n StartWorkflowNodeRunInput,\n StartWorkflowRunInput,\n WaitWorkflowNodeRunInput,\n WaitWorkflowRunInput,\n WorkflowAgentNodeRunRecord,\n WorkflowAgentNodeRunStorage,\n WorkflowNodeRunRecord,\n WorkflowNodeRunStorage,\n WorkflowRunRecord,\n WorkflowRunStorage,\n} from \"@sixb/core/storage\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n WORKFLOW_RUN_FAILURE_CODES,\n WorkflowRunError,\n} from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowRunStorage implements WorkflowRunStorage {\n readonly nodes: SqliteWorkflowNodeRunStorage\n readonly agentNodes: SqliteWorkflowAgentNodeRunStorage\n\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteWorkflowRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n this.nodes = new SqliteWorkflowNodeRunStorage(this.db)\n this.agentNodes = new SqliteWorkflowAgentNodeRunStorage(this.db, this.executions)\n }\n\n async queue(input: QueueWorkflowRunInput): Promise<WorkflowRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertWorkflowRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n workflowId: input.workflowId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_runs (\n project_id,\n id,\n execution_id,\n workflow_id,\n status,\n input,\n queued_at,\n started_at,\n attempt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.workflowId,\n \"queued\",\n serializeRecord(input.input),\n queuedAt.toISOString(),\n queuedAt.toISOString(),\n 0\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' or execution '${input.executionId}' is already linked for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireWorkflowRun(input.projectId, input.id)\n }\n\n async start(input: StartWorkflowRunInput): Promise<WorkflowRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing || existing.status !== \"queued\") {\n throw new WorkflowRunError(\n existing\n ? `[SixbSqlite] Workflow run '${input.id}' cannot start from status '${existing.status}'.`\n : `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n started_at = ?,\n finished_at = NULL,\n error = NULL,\n attempt = attempt + 1,\n execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n startedAt.toISOString(),\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n this.db\n .query(`\n UPDATE workflow_runs SET attempt = ?, execution_token = ?,\n execution_queue_lease_expires_at = ? WHERE project_id = ? AND id = ?\n `)\n .run(\n row.attempt + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowRunExecutionOwnershipInput\n ): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n assertSqliteWorkflowRunOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async finish(input: FinishWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (!canFinishWorkflowRun(existing.status, input.status)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' cannot be finished from status '${existing.status}'.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?,\n execution_token = NULL,\n execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow\n\n return rowToWorkflowRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , execution_token = NULL, execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async resume(input: ResumeWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be waiting.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , attempt = attempt + 1, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowRunDatabaseRow | null\n\n return row ? rowToWorkflowRunRecord(row) : null\n }\n\n async list(input: ListWorkflowRunsInput): Promise<ListWorkflowRunsResult> {\n if (hasEmptyStatuses(input) || input.workflowIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByWorkflowIds(\n input: ListLatestWorkflowRunsInput\n ): Promise<ListLatestWorkflowRunsResult> {\n const rows = queryLatestRunsByOwnerId<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n ownerColumn: \"workflow_id\",\n ownerIds: input.workflowIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.workflow_id,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requireWorkflowRun(projectId: string, id: string): WorkflowRunRecord {\n const record = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n\n if (!record) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow run '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowRunRecord(record)\n }\n\n private requireStatus(\n projectId: string,\n id: string,\n status: WorkflowRunRecord[\"status\"]\n ): WorkflowRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n if (!row) throw new WorkflowRunError(`[SixbSqlite] Workflow run '${id}' not found.`)\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${id}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowAgentNodeRunStorage implements WorkflowAgentNodeRunStorage {\n constructor(\n private readonly db: Database,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n const parent = this.db\n .query(\n `\n SELECT workflow_runs.execution_id\n FROM workflow_node_runs\n JOIN workflow_runs\n ON workflow_runs.project_id = workflow_node_runs.project_id\n AND workflow_runs.id = workflow_node_runs.workflow_run_id\n WHERE workflow_node_runs.project_id = ?\n AND workflow_node_runs.id = ?\n AND workflow_node_runs.node_type = 'agent'\n `\n )\n .get(input.projectId, input.nodeRunId) as { execution_id: string } | null\n if (!parent) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' was not found.`\n )\n }\n await assertWorkflowAgentNodeRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n nodeRunId: input.nodeRunId,\n actorId: input.actorId,\n workflowExecutionId: parent.execution_id,\n })\n\n try {\n this.db\n .query(`\n INSERT INTO workflow_agent_node_runs (\n project_id, node_run_id, execution_id, actor_id, status, prompt, attempt, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `)\n .run(\n input.projectId,\n input.nodeRunId,\n input.executionId,\n input.actorId,\n \"queued\",\n input.prompt,\n 0,\n (input.createdAt ?? new Date()).toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent execution already exists for workflow node run '${input.nodeRunId}'.`\n )\n }\n throw error\n }\n return this.require(input.projectId, input.nodeRunId)\n }\n\n async start(input: StartWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n this.requireStatus(input.projectId, input.nodeRunId, \"queued\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = ?, attempt = 1, execution_token = ?,\n execution_queue_lease_expires_at = ?, started_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n \"running\",\n input.modelId ?? null,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n attempt = ?, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n Number(row.attempt) + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowAgentNodeRunExecutionOwnershipInput\n ): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async finish(input: FinishWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = COALESCE(?, model_id), finish_reason = ?, trace = ?,\n diagnostics = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n input.status,\n input.modelId ?? null,\n input.finishReason ?? null,\n input.trace ? JSON.stringify(input.trace) : null,\n input.diagnostics ? JSON.stringify(input.diagnostics) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async cancel(input: CancelWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.require(input.projectId, input.nodeRunId)\n if (row.status !== \"queued\" && row.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' cannot be cancelled from status '${row.status}'.`\n )\n }\n this.db\n .query(\n `UPDATE workflow_agent_node_runs SET status = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?`\n )\n .run(\n \"cancelled\",\n input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async getByNodeRunId(params: {\n projectId: string\n nodeRunId: string\n }): Promise<WorkflowAgentNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(params.projectId, params.nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n return row ? rowToWorkflowAgentNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowAgentNodeRunsInput): Promise<ListWorkflowAgentNodeRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], total: 0, hasMore: false }\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.actorId) {\n whereClauses.push(\"actor_id = ?\")\n args.push(input.actorId)\n }\n appendRunListFilters(whereClauses, args, input)\n const result = queryRunList<WorkflowAgentNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_agent_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { ...result, runs: result.rows.map(rowToWorkflowAgentNodeRunRecord) }\n }\n\n private require(projectId: string, nodeRunId: string): WorkflowAgentNodeRunRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n return rowToWorkflowAgentNodeRunRecord(row)\n }\n\n private requireStatus(\n projectId: string,\n nodeRunId: string,\n status: WorkflowAgentNodeRunRecord[\"status\"]\n ): WorkflowAgentNodeRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowNodeRunStorage implements WorkflowNodeRunStorage {\n constructor(private readonly db: Database) {}\n\n async start(input: StartWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n return this.db.transaction(() => {\n const workflowRun = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.workflowRunId) as WorkflowRunDatabaseRow | null\n\n if (!workflowRun) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (workflowRun.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(workflowRun, input.executionToken)\n\n if (workflowRun.workflow_id !== input.workflowId) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' workflow '${input.workflowId}' does not match workflow run '${input.workflowRunId}' workflow '${workflowRun.workflow_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_node_runs (\n project_id,\n id,\n workflow_run_id,\n workflow_id,\n node_index,\n node_type,\n node_id,\n node_key,\n status,\n input,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowRunId,\n input.workflowId,\n input.nodeIndex,\n input.nodeType,\n input.nodeId,\n input.nodeKey,\n \"running\",\n serializeRecord(input.input),\n startedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow node run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToWorkflowNodeRunRecord(row)\n })()\n }\n\n async finish(input: FinishWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\" && existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" && input.output ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = NULL,\n output = NULL,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowNodeRunDatabaseRow | null\n\n return row ? rowToWorkflowNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowNodeRunsInput): Promise<ListWorkflowNodeRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n nodes: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.nodeType) {\n whereClauses.push(\"node_type = ?\")\n args.push(input.nodeType)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n nodes: rows.map(rowToWorkflowNodeRunRecord),\n hasMore,\n total,\n }\n }\n\n private assertNodeParentOwnership(node: WorkflowNodeRunDatabaseRow, token?: string): void {\n const run = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(node.project_id, node.workflow_run_id) as WorkflowRunDatabaseRow | null\n if (!run) throw new WorkflowRunError(\"[SixbSqlite] Parent workflow run was not found.\")\n assertSqliteWorkflowRunOwnership(run, token)\n }\n}\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction rowToWorkflowRunRecord(row: WorkflowRunDatabaseRow): WorkflowRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n workflowId: row.workflow_id,\n status: row.status,\n input: parseRecord(row.input),\n output: row.output ? parseRecord(row.output) : undefined,\n queuedAt: row.queued_at ? new Date(row.queued_at) : undefined,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n }\n}\n\nfunction rowToWorkflowNodeRunRecord(row: WorkflowNodeRunDatabaseRow): WorkflowNodeRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowRunId: row.workflow_run_id,\n workflowId: row.workflow_id,\n nodeIndex: row.node_index,\n nodeType: row.node_type,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n status: row.status,\n input: parseRecord(row.input),\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output: row.output ? parseRecord(row.output) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\nfunction canFinishWorkflowRun(\n current: WorkflowRunRecord[\"status\"],\n next: FinishWorkflowRunInput[\"status\"]\n): boolean {\n return (\n current === \"running\" ||\n (current === \"waiting\" && next !== \"succeeded\") ||\n (current === \"queued\" && next !== \"succeeded\")\n )\n}\n\ninterface WorkflowRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n workflow_id: string\n status: WorkflowRunRecord[\"status\"]\n input: string\n output: string | null\n queued_at: string | null\n started_at: string\n finished_at: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n}\n\ninterface WorkflowNodeRunDatabaseRow {\n project_id: string\n id: string\n workflow_run_id: string\n workflow_id: string\n node_index: number\n node_type: WorkflowNodeRunRecord[\"nodeType\"]\n node_id: string\n node_key: string\n status: WorkflowNodeRunRecord[\"status\"]\n input: string\n started_at: string\n finished_at: string | null\n output: string | null\n error: string | null\n}\n\ninterface WorkflowAgentNodeRunDatabaseRow {\n project_id: string\n node_run_id: string\n execution_id: string\n actor_id: string\n status: WorkflowAgentNodeRunRecord[\"status\"]\n prompt: string\n model_id: string | null\n finish_reason: WorkflowAgentNodeRunRecord[\"finishReason\"] | null\n trace: string | null\n diagnostics: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nfunction assertSqliteWorkflowAgentNodeOwnership(\n row: WorkflowAgentNodeRunDatabaseRow,\n token: string\n): void {\n if (row.execution_token !== token) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on agent workflow node run '${row.node_run_id}'.`\n )\n }\n}\n\nfunction rowToWorkflowAgentNodeRunRecord(\n row: WorkflowAgentNodeRunDatabaseRow\n): WorkflowAgentNodeRunRecord {\n return {\n projectId: row.project_id,\n nodeRunId: row.node_run_id,\n executionId: row.execution_id,\n actorId: row.actor_id,\n status: row.status,\n prompt: row.prompt,\n ...(row.model_id ? { modelId: row.model_id } : {}),\n ...(row.finish_reason ? { finishReason: row.finish_reason } : {}),\n ...(row.trace ? { trace: JSON.parse(row.trace) } : {}),\n ...(row.diagnostics ? { diagnostics: JSON.parse(row.diagnostics) } : {}),\n ...(row.error ? { error: parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES) } : {}),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n createdAt: new Date(row.created_at),\n ...(row.started_at ? { startedAt: new Date(row.started_at) } : {}),\n ...(row.completed_at ? { completedAt: new Date(row.completed_at) } : {}),\n }\n}\n\nfunction assertSqliteWorkflowRunOwnership(row: WorkflowRunDatabaseRow, token?: string): void {\n if (row.execution_token !== (token ?? null)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on workflow run '${row.id}'.`\n )\n }\n}\n"
74
+ "import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport {\n assertWorkflowAgentNodeRunExecution,\n assertWorkflowRunExecution,\n} from \"@sixb/core/internal/workflow-run-storage-provider\"\nimport type { WorkflowIOSnapshot } from \"@sixb/core/internal/workflows\"\nimport type {\n CancelWorkflowAgentNodeRunInput,\n ConfirmWorkflowAgentNodeRunExecutionOwnershipInput,\n ConfirmWorkflowRunExecutionOwnershipInput,\n CreateWorkflowAgentNodeRunInput,\n ExecutionStorage,\n FinishWorkflowAgentNodeRunInput,\n FinishWorkflowNodeRunInput,\n FinishWorkflowRunInput,\n ListLatestWorkflowRunsInput,\n ListLatestWorkflowRunsResult,\n ListWorkflowAgentNodeRunsInput,\n ListWorkflowAgentNodeRunsResult,\n ListWorkflowNodeRunsInput,\n ListWorkflowNodeRunsResult,\n ListWorkflowRunsInput,\n ListWorkflowRunsResult,\n QueueWorkflowRunInput,\n ReclaimWorkflowAgentNodeRunInput,\n ReclaimWorkflowRunInput,\n ResumeWorkflowRunInput,\n StartWorkflowAgentNodeRunInput,\n StartWorkflowNodeRunInput,\n StartWorkflowRunInput,\n WaitWorkflowNodeRunInput,\n WaitWorkflowRunInput,\n WorkflowAgentNodeRunRecord,\n WorkflowAgentNodeRunStorage,\n WorkflowNodeRunRecord,\n WorkflowNodeRunStorage,\n WorkflowRunRecord,\n WorkflowRunStorage,\n} from \"@sixb/core/storage\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n WORKFLOW_RUN_FAILURE_CODES,\n WorkflowRunError,\n} from \"@sixb/core/storage\"\nimport { queryLatestRunsByOwnerId } from \"./latest-run-query\"\nimport {\n appendRunListFilters,\n hasEmptyStatuses,\n queryRunList,\n type SqliteValue,\n} from \"./run-list-query\"\nimport { isUniqueConstraintError } from \"./storage-errors\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"./transactions\"\n\nexport interface SqliteWorkflowRunStorageOptions {\n /** Execution lookup sharing the same provider transaction. */\n executions: ExecutionStorage\n /** Path to SQLite database file. Defaults to ':memory:' for in-memory database. */\n path?: string\n /** Internal shared connection used by bundled SqliteStorage. */\n connection?: SqliteStoreConnection\n}\n\nexport class SqliteWorkflowRunStorage implements WorkflowRunStorage {\n readonly nodes: SqliteWorkflowNodeRunStorage\n readonly agentNodes: SqliteWorkflowAgentNodeRunStorage\n\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqliteWorkflowRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n\n this.nodes = new SqliteWorkflowNodeRunStorage(this.db)\n this.agentNodes = new SqliteWorkflowAgentNodeRunStorage(this.db, this.executions)\n }\n\n async queue(input: QueueWorkflowRunInput): Promise<WorkflowRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertWorkflowRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n workflowId: input.workflowId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_runs (\n project_id,\n id,\n execution_id,\n workflow_id,\n status,\n input,\n queued_at,\n started_at,\n attempt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.workflowId,\n \"queued\",\n serializeRecord(input.input),\n queuedAt.toISOString(),\n queuedAt.toISOString(),\n 0\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' or execution '${input.executionId}' is already linked for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n return this.requireWorkflowRun(input.projectId, input.id)\n }\n\n async start(input: StartWorkflowRunInput): Promise<WorkflowRunRecord> {\n const startedAt = input.startedAt ?? new Date()\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing || existing.status !== \"queued\") {\n throw new WorkflowRunError(\n existing\n ? `[SixbSqlite] Workflow run '${input.id}' cannot start from status '${existing.status}'.`\n : `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n started_at = ?,\n finished_at = NULL,\n error = NULL,\n attempt = attempt + 1,\n execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n startedAt.toISOString(),\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n this.db\n .query(`\n UPDATE workflow_runs SET attempt = ?, execution_token = ?,\n execution_queue_lease_expires_at = ? WHERE project_id = ? AND id = ?\n `)\n .run(\n row.attempt + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowRunExecutionOwnershipInput\n ): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.id, \"running\")\n assertSqliteWorkflowRunOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.id\n )\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async finish(input: FinishWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (!canFinishWorkflowRun(existing.status, input.status)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' cannot be finished from status '${existing.status}'.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?,\n execution_token = NULL,\n execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow\n\n return rowToWorkflowRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(existing, input.executionToken)\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , execution_token = NULL, execution_queue_lease_expires_at = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async resume(input: ResumeWorkflowRunInput): Promise<WorkflowRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.id}' for project '${input.projectId}' must be waiting.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_runs\n SET\n status = ?,\n finished_at = NULL,\n error = NULL\n , attempt = attempt + 1, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n \"running\",\n input.execution?.token ?? null,\n input.execution?.queueLeaseExpiresAt.toISOString() ?? null,\n input.projectId,\n input.id\n )\n\n return this.requireWorkflowRun(input.projectId, input.id)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowRunDatabaseRow | null\n\n return row ? rowToWorkflowRunRecord(row) : null\n }\n\n async getByExecutionIds(params: {\n readonly projectId: string\n readonly executionIds: readonly string[]\n }): Promise<readonly WorkflowRunRecord[]> {\n const executionIds = [...new Set(params.executionIds)]\n if (executionIds.length === 0) {\n return []\n }\n\n const rows = this.db\n .query(\n `\n SELECT *\n FROM workflow_runs\n WHERE project_id = ?\n AND execution_id IN (SELECT value FROM json_each(?))\n `\n )\n .all(params.projectId, JSON.stringify(executionIds)) as WorkflowRunDatabaseRow[]\n\n const byExecution = new Map(rows.map((row) => [row.execution_id, row]))\n return executionIds.flatMap((executionId) => {\n const row = byExecution.get(executionId)\n return row ? [rowToWorkflowRunRecord(row)] : []\n })\n }\n\n async list(input: ListWorkflowRunsInput): Promise<ListWorkflowRunsResult> {\n if (hasEmptyStatuses(input) || input.workflowIds?.length === 0) {\n return {\n runs: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.workflowIds) {\n whereClauses.push(`workflow_id IN (${input.workflowIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.workflowIds)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByWorkflowIds(\n input: ListLatestWorkflowRunsInput\n ): Promise<ListLatestWorkflowRunsResult> {\n const rows = queryLatestRunsByOwnerId<WorkflowRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_runs\",\n ownerColumn: \"workflow_id\",\n ownerIds: input.workflowIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.workflow_id,\n })\n\n return {\n runs: rows.map(rowToWorkflowRunRecord),\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private requireWorkflowRun(projectId: string, id: string): WorkflowRunRecord {\n const record = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n\n if (!record) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow run '${id}' for project '${projectId}'.`\n )\n }\n\n return rowToWorkflowRunRecord(record)\n }\n\n private requireStatus(\n projectId: string,\n id: string,\n status: WorkflowRunRecord[\"status\"]\n ): WorkflowRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as WorkflowRunDatabaseRow | null\n if (!row) throw new WorkflowRunError(`[SixbSqlite] Workflow run '${id}' not found.`)\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${id}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowAgentNodeRunStorage implements WorkflowAgentNodeRunStorage {\n constructor(\n private readonly db: Database,\n private readonly executions: ExecutionStorage\n ) {}\n\n async create(input: CreateWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n const parent = this.db\n .query(\n `\n SELECT workflow_runs.execution_id\n FROM workflow_node_runs\n JOIN workflow_runs\n ON workflow_runs.project_id = workflow_node_runs.project_id\n AND workflow_runs.id = workflow_node_runs.workflow_run_id\n WHERE workflow_node_runs.project_id = ?\n AND workflow_node_runs.id = ?\n AND workflow_node_runs.node_type = 'agent'\n `\n )\n .get(input.projectId, input.nodeRunId) as { execution_id: string } | null\n if (!parent) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' was not found.`\n )\n }\n await assertWorkflowAgentNodeRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n nodeRunId: input.nodeRunId,\n actorId: input.actorId,\n workflowExecutionId: parent.execution_id,\n })\n\n try {\n this.db\n .query(`\n INSERT INTO workflow_agent_node_runs (\n project_id, node_run_id, execution_id, actor_id, status, prompt, attempt, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `)\n .run(\n input.projectId,\n input.nodeRunId,\n input.executionId,\n input.actorId,\n \"queued\",\n input.prompt,\n 0,\n (input.createdAt ?? new Date()).toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent execution already exists for workflow node run '${input.nodeRunId}'.`\n )\n }\n throw error\n }\n return this.require(input.projectId, input.nodeRunId)\n }\n\n async start(input: StartWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n this.requireStatus(input.projectId, input.nodeRunId, \"queued\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = ?, attempt = 1, execution_token = ?,\n execution_queue_lease_expires_at = ?, started_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n \"running\",\n input.modelId ?? null,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n (input.startedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async reclaim(input: ReclaimWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n attempt = ?, execution_token = ?, execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n Number(row.attempt) + 1,\n input.execution.token,\n input.execution.queueLeaseExpiresAt.toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async confirmExecutionOwnership(\n input: ConfirmWorkflowAgentNodeRunExecutionOwnershipInput\n ): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n const current = row.execution_queue_lease_expires_at\n ? new Date(row.execution_queue_lease_expires_at)\n : input.queueLeaseExpiresAt\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET execution_queue_lease_expires_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n new Date(Math.max(current.getTime(), input.queueLeaseExpiresAt.getTime())).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async finish(input: FinishWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.requireStatus(input.projectId, input.nodeRunId, \"running\")\n assertSqliteWorkflowAgentNodeOwnership(row, input.executionToken)\n this.db\n .query(`\n UPDATE workflow_agent_node_runs SET\n status = ?, model_id = COALESCE(?, model_id), finish_reason = ?, trace = ?,\n diagnostics = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?\n `)\n .run(\n input.status,\n input.modelId ?? null,\n input.finishReason ?? null,\n input.trace ? JSON.stringify(input.trace) : null,\n input.diagnostics ? JSON.stringify(input.diagnostics) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async cancel(input: CancelWorkflowAgentNodeRunInput): Promise<WorkflowAgentNodeRunRecord> {\n return this.db.transaction(() => {\n const row = this.require(input.projectId, input.nodeRunId)\n if (row.status !== \"queued\" && row.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${input.nodeRunId}' cannot be cancelled from status '${row.status}'.`\n )\n }\n this.db\n .query(\n `UPDATE workflow_agent_node_runs SET status = ?, error = ?, execution_token = NULL,\n execution_queue_lease_expires_at = NULL, completed_at = ?\n WHERE project_id = ? AND node_run_id = ?`\n )\n .run(\n \"cancelled\",\n input.error === undefined\n ? null\n : serializeSixbFailure(input.error, AGENT_RUN_FAILURE_CODES),\n (input.completedAt ?? new Date()).toISOString(),\n input.projectId,\n input.nodeRunId\n )\n return this.require(input.projectId, input.nodeRunId)\n })()\n }\n\n async getByNodeRunId(params: {\n projectId: string\n nodeRunId: string\n }): Promise<WorkflowAgentNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(params.projectId, params.nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n return row ? rowToWorkflowAgentNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowAgentNodeRunsInput): Promise<ListWorkflowAgentNodeRunsResult> {\n if (hasEmptyStatuses(input)) return { runs: [], total: 0, hasMore: false }\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n if (input.actorId) {\n whereClauses.push(\"actor_id = ?\")\n args.push(input.actorId)\n }\n appendRunListFilters(whereClauses, args, input)\n const result = queryRunList<WorkflowAgentNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_agent_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n return { ...result, runs: result.rows.map(rowToWorkflowAgentNodeRunRecord) }\n }\n\n private require(projectId: string, nodeRunId: string): WorkflowAgentNodeRunRecord {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n return rowToWorkflowAgentNodeRunRecord(row)\n }\n\n private requireStatus(\n projectId: string,\n nodeRunId: string,\n status: WorkflowAgentNodeRunRecord[\"status\"]\n ): WorkflowAgentNodeRunDatabaseRow {\n const row = this.db\n .query(\"SELECT * FROM workflow_agent_node_runs WHERE project_id = ? AND node_run_id = ?\")\n .get(projectId, nodeRunId) as WorkflowAgentNodeRunDatabaseRow | null\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' not found for project '${projectId}'.`\n )\n }\n if (row.status !== status) {\n throw new WorkflowRunError(\n `[SixbSqlite] Agent workflow node run '${nodeRunId}' must be ${status} (status '${row.status}').`\n )\n }\n return row\n }\n}\n\nexport class SqliteWorkflowNodeRunStorage implements WorkflowNodeRunStorage {\n constructor(private readonly db: Database) {}\n\n async start(input: StartWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n assertNonNegativeInteger(input.nodeIndex, \"nodeIndex\")\n\n return this.db.transaction(() => {\n const workflowRun = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.workflowRunId) as WorkflowRunDatabaseRow | null\n\n if (!workflowRun) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (workflowRun.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run '${input.workflowRunId}' for project '${input.projectId}' must be running.`\n )\n }\n assertSqliteWorkflowRunOwnership(workflowRun, input.executionToken)\n\n if (workflowRun.workflow_id !== input.workflowId) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' workflow '${input.workflowId}' does not match workflow run '${input.workflowRunId}' workflow '${workflowRun.workflow_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO workflow_node_runs (\n project_id,\n id,\n workflow_run_id,\n workflow_id,\n node_index,\n node_type,\n node_id,\n node_key,\n status,\n input,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.workflowRunId,\n input.workflowId,\n input.nodeIndex,\n input.nodeType,\n input.nodeId,\n input.nodeKey,\n \"running\",\n serializeRecord(input.input),\n startedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n throw error\n }\n\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!row) {\n throw new WorkflowRunError(\n `[SixbSqlite] Failed to load workflow node run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToWorkflowNodeRunRecord(row)\n })()\n }\n\n async finish(input: FinishWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\" && existing.status !== \"waiting\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = ?,\n output = ?,\n error = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.status,\n (input.finishedAt ?? new Date()).toISOString(),\n input.status === \"succeeded\" && input.output ? serializeRecord(input.output) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, WORKFLOW_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async wait(input: WaitWorkflowNodeRunInput): Promise<WorkflowNodeRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow | null\n\n if (!existing) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n this.assertNodeParentOwnership(existing, input.executionToken)\n\n if (existing.status !== \"running\") {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow node run '${input.id}' for project '${input.projectId}' must be running.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE workflow_node_runs\n SET\n status = ?,\n finished_at = NULL,\n output = NULL,\n error = NULL\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\"waiting\", input.projectId, input.id)\n\n const updated = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as WorkflowNodeRunDatabaseRow\n\n return rowToWorkflowNodeRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<WorkflowNodeRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM workflow_node_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as WorkflowNodeRunDatabaseRow | null\n\n return row ? rowToWorkflowNodeRunRecord(row) : null\n }\n\n async list(input: ListWorkflowNodeRunsInput): Promise<ListWorkflowNodeRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n nodes: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.workflowRunId) {\n whereClauses.push(\"workflow_run_id = ?\")\n args.push(input.workflowRunId)\n }\n\n if (input.workflowId) {\n whereClauses.push(\"workflow_id = ?\")\n args.push(input.workflowId)\n }\n\n if (input.nodeType) {\n whereClauses.push(\"node_type = ?\")\n args.push(input.nodeType)\n }\n\n if (input.nodeId) {\n whereClauses.push(\"node_id = ?\")\n args.push(input.nodeId)\n }\n\n if (input.nodeKey) {\n whereClauses.push(\"node_key = ?\")\n args.push(input.nodeKey)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<WorkflowNodeRunDatabaseRow>({\n db: this.db,\n tableName: \"workflow_node_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n nodes: rows.map(rowToWorkflowNodeRunRecord),\n hasMore,\n total,\n }\n }\n\n private assertNodeParentOwnership(node: WorkflowNodeRunDatabaseRow, token?: string): void {\n const run = this.db\n .query(\"SELECT * FROM workflow_runs WHERE project_id = ? AND id = ?\")\n .get(node.project_id, node.workflow_run_id) as WorkflowRunDatabaseRow | null\n if (!run) throw new WorkflowRunError(\"[SixbSqlite] Parent workflow run was not found.\")\n assertSqliteWorkflowRunOwnership(run, token)\n }\n}\n\nfunction serializeRecord(value: WorkflowIOSnapshot): string {\n return JSON.stringify(value)\n}\n\nfunction parseRecord(value: string): WorkflowIOSnapshot {\n return JSON.parse(value) as WorkflowIOSnapshot\n}\n\nfunction rowToWorkflowRunRecord(row: WorkflowRunDatabaseRow): WorkflowRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n workflowId: row.workflow_id,\n status: row.status,\n input: parseRecord(row.input),\n output: row.output ? parseRecord(row.output) : undefined,\n queuedAt: row.queued_at ? new Date(row.queued_at) : undefined,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n }\n}\n\nfunction rowToWorkflowNodeRunRecord(row: WorkflowNodeRunDatabaseRow): WorkflowNodeRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n workflowRunId: row.workflow_run_id,\n workflowId: row.workflow_id,\n nodeIndex: row.node_index,\n nodeType: row.node_type,\n nodeId: row.node_id,\n nodeKey: row.node_key,\n status: row.status,\n input: parseRecord(row.input),\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n output: row.output ? parseRecord(row.output) : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, WORKFLOW_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertNonNegativeInteger(value: number, fieldName: string): void {\n if (!Number.isInteger(value) || value < 0) {\n throw new WorkflowRunError(\n `[SixbSqlite] Workflow run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\nfunction canFinishWorkflowRun(\n current: WorkflowRunRecord[\"status\"],\n next: FinishWorkflowRunInput[\"status\"]\n): boolean {\n return (\n current === \"running\" ||\n (current === \"waiting\" && next !== \"succeeded\") ||\n (current === \"queued\" && next !== \"succeeded\")\n )\n}\n\ninterface WorkflowRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n workflow_id: string\n status: WorkflowRunRecord[\"status\"]\n input: string\n output: string | null\n queued_at: string | null\n started_at: string\n finished_at: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n}\n\ninterface WorkflowNodeRunDatabaseRow {\n project_id: string\n id: string\n workflow_run_id: string\n workflow_id: string\n node_index: number\n node_type: WorkflowNodeRunRecord[\"nodeType\"]\n node_id: string\n node_key: string\n status: WorkflowNodeRunRecord[\"status\"]\n input: string\n started_at: string\n finished_at: string | null\n output: string | null\n error: string | null\n}\n\ninterface WorkflowAgentNodeRunDatabaseRow {\n project_id: string\n node_run_id: string\n execution_id: string\n actor_id: string\n status: WorkflowAgentNodeRunRecord[\"status\"]\n prompt: string\n model_id: string | null\n finish_reason: WorkflowAgentNodeRunRecord[\"finishReason\"] | null\n trace: string | null\n diagnostics: string | null\n error: string | null\n attempt: number\n execution_token: string | null\n execution_queue_lease_expires_at: string | null\n created_at: string\n started_at: string | null\n completed_at: string | null\n}\n\nfunction assertSqliteWorkflowAgentNodeOwnership(\n row: WorkflowAgentNodeRunDatabaseRow,\n token: string\n): void {\n if (row.execution_token !== token) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on agent workflow node run '${row.node_run_id}'.`\n )\n }\n}\n\nfunction rowToWorkflowAgentNodeRunRecord(\n row: WorkflowAgentNodeRunDatabaseRow\n): WorkflowAgentNodeRunRecord {\n return {\n projectId: row.project_id,\n nodeRunId: row.node_run_id,\n executionId: row.execution_id,\n actorId: row.actor_id,\n status: row.status,\n prompt: row.prompt,\n ...(row.model_id ? { modelId: row.model_id } : {}),\n ...(row.finish_reason ? { finishReason: row.finish_reason } : {}),\n ...(row.trace ? { trace: JSON.parse(row.trace) } : {}),\n ...(row.diagnostics ? { diagnostics: JSON.parse(row.diagnostics) } : {}),\n ...(row.error ? { error: parseSixbFailure(row.error, AGENT_RUN_FAILURE_CODES) } : {}),\n attempt: row.attempt,\n ...(row.execution_token && row.execution_queue_lease_expires_at\n ? {\n execution: {\n token: row.execution_token,\n queueLeaseExpiresAt: new Date(row.execution_queue_lease_expires_at),\n },\n }\n : {}),\n createdAt: new Date(row.created_at),\n ...(row.started_at ? { startedAt: new Date(row.started_at) } : {}),\n ...(row.completed_at ? { completedAt: new Date(row.completed_at) } : {}),\n }\n}\n\nfunction assertSqliteWorkflowRunOwnership(row: WorkflowRunDatabaseRow, token?: string): void {\n if (row.execution_token !== (token ?? null)) {\n throw new WorkflowRunError(\n `[SixbSqlite] Execution token is no longer current on workflow run '${row.id}'.`\n )\n }\n}\n"
73
75
  ],
74
- "mappings": ";;AAIA;AAOA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;;;ACvBA;AAAA;AAAA;AAAA;AAIA;AACA;AAcA;;;ACpBA,qBAAS;AACT,sBAAS;AACT,oBAAS;;;ACHT;AACA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
75
- "debugId": "7AEE546F2916C86164756E2164756E21",
76
+ "mappings": ";;AAIA;AAOA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;;;ACvBA;AAAA;AAAA;AAAA;AAIA;AACA;AAcA;;;ACpBA,qBAAS;AACT,sBAAS;AACT,oBAAS;;;ACHT;AACA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
77
+ "debugId": "B9F8223963B8B3F664756E2164756E21",
76
78
  "names": []
77
79
  }