@sixb/sqlite 0.1.26 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/agent-storage.d.ts +8 -3
- package/dist/agents/agent-storage.d.ts.map +1 -1
- package/dist/agents/computers.d.ts +22 -0
- package/dist/agents/computers.d.ts.map +1 -0
- package/dist/agents/rows.d.ts +3 -0
- package/dist/agents/rows.d.ts.map +1 -1
- package/dist/agents/runs.d.ts.map +1 -1
- package/dist/agents/threads.d.ts +3 -1
- package/dist/agents/threads.d.ts.map +1 -1
- package/dist/agents/token-rates.d.ts +13 -0
- package/dist/agents/token-rates.d.ts.map +1 -0
- package/dist/ai-accounting-filters.d.ts +14 -0
- package/dist/ai-accounting-filters.d.ts.map +1 -0
- package/dist/ai-cost-groups.d.ts +1 -1
- package/dist/ai-cost-groups.d.ts.map +1 -1
- package/dist/ai-cost-storage.d.ts.map +1 -1
- package/dist/index.js +421 -75
- package/dist/index.js.map +18 -15
- package/dist/migrations.d.ts.map +1 -1
- package/dist/objects/query-compiler.d.ts.map +1 -1
- package/dist/ontology-storage/commits.d.ts.map +1 -1
- package/dist/ontology-storage/materializations.d.ts +2 -1
- package/dist/ontology-storage/materializations.d.ts.map +1 -1
- package/dist/pipeline-run-storage.d.ts.map +1 -1
- package/dist/sync-run-storage.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/agents/agent-storage.ts +10 -3
- package/src/agents/computers.ts +112 -0
- package/src/agents/rows.ts +9 -1
- package/src/agents/runs.ts +25 -3
- package/src/agents/threads.ts +100 -22
- package/src/agents/token-rates.ts +90 -0
- package/src/ai-accounting-filters.ts +51 -0
- package/src/ai-cost-groups.ts +52 -14
- package/src/ai-cost-storage.ts +101 -39
- package/src/migrations/082-agent-token-rates.sql +17 -0
- package/src/migrations/083-agent-computer-sessions.sql +27 -0
- package/src/migrations.ts +6 -0
- package/src/objects/query-compiler.ts +26 -15
- package/src/ontology-storage/commits.ts +9 -0
- package/src/ontology-storage/materializations.ts +18 -1
- package/src/pipeline-run-storage.ts +5 -7
- package/src/sync-run-storage.ts +2 -7
package/dist/index.js.map
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/action-run-storage.ts", "../src/transactions.ts", "../src/migrations.ts", "../src/activity-storage.ts", "../src/agents/approvals.ts", "../src/agents/rows.ts", "../src/agents/checkpoints.ts", "../src/agents/memory.ts", "../src/agents/messages.ts", "../src/storage-errors.ts", "../src/agents/runs.ts", "../src/run-list-query.ts", "../src/agents/settings.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/read-scope.ts", "../src/objects/scoped-reader.ts", "../src/objects/reader.ts", "../src/objects/rows.ts", "../src/objects/vector-extension.ts", "../src/objects/conditional-reader.ts", "../src/objects/selected-reader.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/unique-values.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/approvals.ts", "../src/agents/rows.ts", "../src/agents/checkpoints.ts", "../src/agents/computers.ts", "../src/agents/memory.ts", "../src/agents/messages.ts", "../src/storage-errors.ts", "../src/agents/runs.ts", "../src/run-list-query.ts", "../src/agents/settings.ts", "../src/agents/threads.ts", "../src/agents/token-rates.ts", "../src/agents/agent-storage.ts", "../src/ai-cost-storage.ts", "../src/ai-accounting-filters.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/read-scope.ts", "../src/objects/scoped-reader.ts", "../src/objects/reader.ts", "../src/objects/rows.ts", "../src/objects/vector-extension.ts", "../src/objects/conditional-reader.ts", "../src/objects/selected-reader.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/unique-values.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
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
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] Scoped 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 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 sqliteSql(\"067-artifact-kinds\", artifactKindsSql),\n sqliteSql(\"068-artifact-state\", artifactStateSql),\n sqliteSql(\"069-agent-thread-participants\", agentThreadParticipantsSql),\n sqliteSql(\"070-forked-context-checkpoints\", forkedContextCheckpointsSql),\n sqliteSql(\"071-unique-values\", uniqueValuesSql),\n sqliteSql(\"072-generated-media-usage\", generatedMediaUsageSql),\n sqliteSql(\"073-model-call-files\", modelCallFilesSql),\n sqliteSql(\"074-agent-memory\", agentMemorySql),\n sqliteSql(\"075-artifact-threads\", artifactThreadsSql),\n sqliteSql(\"076-agent-approvals\", agentApprovalsSql),\n sqliteSql(\"077-agent-approval-resume\", agentApprovalResumeSql),\n sqliteStep(\n \"078-subagent-threads\",\n (db) => {\n // Bun runs a script past a statement that fails and reports only the last one's error, so\n // a refused copy would go unnoticed and the rebuild would drop the rows: count around it.\n const before = subagentThreadCounts(db)\n db.run(subagentThreadsSql)\n const after = subagentThreadCounts(db)\n if (\n after.runs !== before.runs ||\n after.threads !== before.threads + before.threadless ||\n after.messages !== before.messages + before.threadless ||\n after.threadless !== 0\n ) {\n throw new Error(\n \"[SixbSqliteStorage] Agent runs, threads or messages were lost while giving sub-agents their threads.\"\n )\n }\n },\n { checksum: checksum(subagentThreadsSql) }\n ),\n sqliteSql(\"079-subagent-questions\", subagentQuestionsSql),\n sqliteSql(\"080-agent-run-cancel-requests\", agentRunCancelRequestsSql),\n sqliteSql(\"081-agent-thread-runs-on\", agentThreadRunsOnSql),\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\nfunction 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\nfunction subagentThreadCounts(db: Database): {\n readonly runs: number\n readonly threads: number\n readonly messages: number\n /** Child runs without a thread. */\n readonly threadless: number\n} {\n return db\n .query(`SELECT (SELECT count(*) FROM agent_runs) AS runs,\n (SELECT count(*) FROM agent_threads) AS threads,\n (SELECT count(*) FROM agent_messages) AS messages,\n (SELECT count(*) FROM agent_runs WHERE kind = 'subagent' AND thread_id IS NULL) AS threadless`)\n .get() as {\n readonly runs: number\n readonly threads: number\n readonly messages: number\n readonly threadless: number\n }\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}\nimport artifactKindsSql from \"./migrations/067-artifact-kinds.sql\" with { type: \"text\" }\nimport artifactStateSql from \"./migrations/068-artifact-state.sql\" with { type: \"text\" }\nimport agentThreadParticipantsSql from \"./migrations/069-agent-thread-participants.sql\" with {\n type: \"text\",\n}\nimport forkedContextCheckpointsSql from \"./migrations/070-forked-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport uniqueValuesSql from \"./migrations/071-unique-values.sql\" with { type: \"text\" }\nimport generatedMediaUsageSql from \"./migrations/072-generated-media-usage.sql\" with {\n type: \"text\",\n}\nimport modelCallFilesSql from \"./migrations/073-model-call-files.sql\" with { type: \"text\" }\nimport agentMemorySql from \"./migrations/074-agent-memory.sql\" with { type: \"text\" }\nimport artifactThreadsSql from \"./migrations/075-artifact-threads.sql\" with { type: \"text\" }\nimport agentApprovalsSql from \"./migrations/076-agent-approvals.sql\" with { type: \"text\" }\nimport agentApprovalResumeSql from \"./migrations/077-agent-approval-resume.sql\" with {\n type: \"text\",\n}\nimport subagentThreadsSql from \"./migrations/078-subagent-threads.sql\" with { type: \"text\" }\nimport subagentQuestionsSql from \"./migrations/079-subagent-questions.sql\" with { type: \"text\" }\nimport agentRunCancelRequestsSql from \"./migrations/080-agent-run-cancel-requests.sql\" with {\n type: \"text\",\n}\nimport agentThreadRunsOnSql from \"./migrations/081-agent-thread-runs-on.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 sqliteSql(\"067-artifact-kinds\", artifactKindsSql),\n sqliteSql(\"068-artifact-state\", artifactStateSql),\n sqliteSql(\"069-agent-thread-participants\", agentThreadParticipantsSql),\n sqliteSql(\"070-forked-context-checkpoints\", forkedContextCheckpointsSql),\n sqliteSql(\"071-unique-values\", uniqueValuesSql),\n sqliteSql(\"072-generated-media-usage\", generatedMediaUsageSql),\n sqliteSql(\"073-model-call-files\", modelCallFilesSql),\n sqliteSql(\"074-agent-memory\", agentMemorySql),\n sqliteSql(\"075-artifact-threads\", artifactThreadsSql),\n sqliteSql(\"076-agent-approvals\", agentApprovalsSql),\n sqliteSql(\"077-agent-approval-resume\", agentApprovalResumeSql),\n sqliteStep(\n \"078-subagent-threads\",\n (db) => {\n // Bun runs a script past a statement that fails and reports only the last one's error, so\n // a refused copy would go unnoticed and the rebuild would drop the rows: count around it.\n const before = subagentThreadCounts(db)\n db.run(subagentThreadsSql)\n const after = subagentThreadCounts(db)\n if (\n after.runs !== before.runs ||\n after.threads !== before.threads + before.threadless ||\n after.messages !== before.messages + before.threadless ||\n after.threadless !== 0\n ) {\n throw new Error(\n \"[SixbSqliteStorage] Agent runs, threads or messages were lost while giving sub-agents their threads.\"\n )\n }\n },\n { checksum: checksum(subagentThreadsSql) }\n ),\n sqliteSql(\"079-subagent-questions\", subagentQuestionsSql),\n sqliteSql(\"080-agent-run-cancel-requests\", agentRunCancelRequestsSql),\n sqliteSql(\"081-agent-thread-runs-on\", agentThreadRunsOnSql),\n sqliteSql(\"082-agent-token-rates\", agentTokenRatesSql),\n sqliteSql(\"083-agent-computer-sessions\", agentComputerSessionsSql),\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\nfunction 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\nfunction subagentThreadCounts(db: Database): {\n readonly runs: number\n readonly threads: number\n readonly messages: number\n /** Child runs without a thread. */\n readonly threadless: number\n} {\n return db\n .query(`SELECT (SELECT count(*) FROM agent_runs) AS runs,\n (SELECT count(*) FROM agent_threads) AS threads,\n (SELECT count(*) FROM agent_messages) AS messages,\n (SELECT count(*) FROM agent_runs WHERE kind = 'subagent' AND thread_id IS NULL) AS threadless`)\n .get() as {\n readonly runs: number\n readonly threads: number\n readonly messages: number\n readonly threadless: number\n }\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}\nimport artifactKindsSql from \"./migrations/067-artifact-kinds.sql\" with { type: \"text\" }\nimport artifactStateSql from \"./migrations/068-artifact-state.sql\" with { type: \"text\" }\nimport agentThreadParticipantsSql from \"./migrations/069-agent-thread-participants.sql\" with {\n type: \"text\",\n}\nimport forkedContextCheckpointsSql from \"./migrations/070-forked-context-checkpoints.sql\" with {\n type: \"text\",\n}\nimport uniqueValuesSql from \"./migrations/071-unique-values.sql\" with { type: \"text\" }\nimport generatedMediaUsageSql from \"./migrations/072-generated-media-usage.sql\" with {\n type: \"text\",\n}\nimport modelCallFilesSql from \"./migrations/073-model-call-files.sql\" with { type: \"text\" }\nimport agentMemorySql from \"./migrations/074-agent-memory.sql\" with { type: \"text\" }\nimport artifactThreadsSql from \"./migrations/075-artifact-threads.sql\" with { type: \"text\" }\nimport agentApprovalsSql from \"./migrations/076-agent-approvals.sql\" with { type: \"text\" }\nimport agentApprovalResumeSql from \"./migrations/077-agent-approval-resume.sql\" with {\n type: \"text\",\n}\nimport subagentThreadsSql from \"./migrations/078-subagent-threads.sql\" with { type: \"text\" }\nimport subagentQuestionsSql from \"./migrations/079-subagent-questions.sql\" with { type: \"text\" }\nimport agentRunCancelRequestsSql from \"./migrations/080-agent-run-cancel-requests.sql\" with {\n type: \"text\",\n}\nimport agentThreadRunsOnSql from \"./migrations/081-agent-thread-runs-on.sql\" with { type: \"text\" }\nimport agentTokenRatesSql from \"./migrations/082-agent-token-rates.sql\" with { type: \"text\" }\nimport agentComputerSessionsSql from \"./migrations/083-agent-computer-sessions.sql\" with {\n type: \"text\",\n}\n",
|
|
9
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",
|
|
10
10
|
"import type { Database } from \"bun:sqlite\"\nimport type { Principal } from \"@sixb/core\"\nimport {\n agentApprovalCallKey,\n assertAgentApprovalCaller,\n assertRequestAgentApprovalInput,\n newAgentApprovalRecord,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AgentApprovalCall,\n type AgentApprovalCursor,\n type AgentApprovalMode,\n type AgentApprovalOutcome,\n type AgentApprovalRecord,\n type AgentApprovalStore,\n AgentStorageError,\n type DecideAgentApprovalInput,\n type DecideAgentApprovalResult,\n type ListAgentApprovalsInput,\n type ListAgentApprovalsResult,\n type MarkAgentApprovalsReportedInput,\n type RequestAgentApprovalInput,\n type RequestAgentApprovalResult,\n type SettleAgentApprovalsInput,\n type StopAgentApprovalsInput,\n type StopAgentApprovalsResult,\n} from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\nimport { type AgentRunRow, rowToRunRecord } from \"./rows\"\n\ninterface AgentApprovalRow {\n readonly project_id: string\n readonly id: string\n readonly thread_id: string\n readonly run_id: string\n readonly caller_run_id: string\n readonly requested_by_type: Principal[\"type\"]\n readonly requested_by_id: string\n readonly mode: AgentApprovalRecord[\"mode\"]\n readonly call_key: string\n readonly call: string\n readonly status: AgentApprovalRecord[\"status\"]\n readonly created_at: string\n readonly expires_at: string\n readonly decided_at: string | null\n readonly decided_by_type: Principal[\"type\"] | null\n readonly decided_by_id: string | null\n readonly outcome: string | null\n readonly reported_in_message_id: string | null\n readonly raised_mode: AgentApprovalMode | null\n readonly turn_stopped_at: string | null\n readonly execution_claimed_at: string | null\n}\n\nconst LIVE_CALL = `\n SELECT * FROM agent_approvals\n WHERE project_id = ? AND thread_id = ? AND call_key = ?\n AND status IN ('pending', 'approved', 'denied')\n`\n\nexport class SqliteAgentApprovalStore implements AgentApprovalStore {\n constructor(private readonly db: Database) {}\n\n async request(input: RequestAgentApprovalInput): Promise<RequestAgentApprovalResult> {\n assertRequestAgentApprovalInput(input, \"SixbSqlite\")\n\n return runImmediateTransaction(this.db, () => {\n const threadId = assertAgentApprovalCaller({\n request: input,\n turn: this.run(input.projectId, input.runId),\n caller: this.run(input.projectId, input.callerRunId),\n prefix: \"SixbSqlite\",\n })\n const callKey = agentApprovalCallKey(input.call)\n const live = this.db\n .query(LIVE_CALL)\n .get(input.projectId, threadId, callKey) as AgentApprovalRow | null\n if (live) return { approval: rowToApproval(live), created: false }\n\n if (this.row(input.projectId, input.id)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent approval '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n const approval = newAgentApprovalRecord(input, threadId)\n this.db\n .query(\n `INSERT INTO agent_approvals (\n project_id, id, thread_id, run_id, caller_run_id, requested_by_type, requested_by_id,\n mode, call_key, call, status, created_at, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?)`\n )\n .run(\n approval.projectId,\n approval.id,\n approval.threadId,\n approval.runId,\n approval.callerRunId,\n approval.requestedBy.type,\n approval.requestedBy.id,\n approval.mode,\n approval.callKey,\n JSON.stringify(approval.call),\n approval.createdAt.toISOString(),\n approval.expiresAt.toISOString()\n )\n return { approval, created: true }\n })\n }\n\n async decide(input: DecideAgentApprovalInput): Promise<DecideAgentApprovalResult | null> {\n const decidedAt = (input.decidedAt ?? new Date()).toISOString()\n\n return runImmediateTransaction(this.db, () => {\n const current = this.row(input.projectId, input.id)\n if (!current) return null\n if (current.status !== \"pending\") return { approval: rowToApproval(current), decided: false }\n\n if (current.expires_at <= decidedAt) {\n this.db\n .query(\"UPDATE agent_approvals SET status = 'expired' WHERE project_id = ? AND id = ?\")\n .run(input.projectId, input.id)\n } else {\n this.db\n .query(\n `UPDATE agent_approvals\n SET status = ?, decided_at = ?, decided_by_type = ?, decided_by_id = ?, raised_mode = ?\n WHERE project_id = ? AND id = ?`\n )\n .run(\n input.decision,\n decidedAt,\n input.decidedBy.type,\n input.decidedBy.id,\n input.decision === \"approved\" ? (input.raisedMode ?? null) : null,\n input.projectId,\n input.id\n )\n }\n const approval = this.require(input.projectId, input.id)\n return { approval, decided: approval.status === input.decision }\n })\n }\n\n async recordOutcome(input: {\n readonly projectId: string\n readonly id: string\n readonly outcome: AgentApprovalOutcome\n }): Promise<AgentApprovalRecord> {\n return runImmediateTransaction(this.db, () => {\n const current = this.row(input.projectId, input.id)\n if (current?.status !== \"approved\") {\n throw new AgentStorageError(\n \"invalid_state\",\n current\n ? `[SixbSqlite] Agent approval '${input.id}' is not approved (status '${current.status}').`\n : `[SixbSqlite] Agent approval '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n if (current.outcome !== null) return rowToApproval(current)\n\n this.db\n .query(\"UPDATE agent_approvals SET outcome = ? WHERE project_id = ? AND id = ?\")\n .run(JSON.stringify(input.outcome), input.projectId, input.id)\n return this.require(input.projectId, input.id)\n })\n }\n\n async settle(input: SettleAgentApprovalsInput): Promise<readonly AgentApprovalRecord[]> {\n const rows = this.db\n .query(\n `UPDATE agent_approvals SET status = ?\n WHERE project_id = ? AND thread_id = ? AND status = 'pending'\n RETURNING *`\n )\n .all(input.status, input.projectId, input.threadId) as AgentApprovalRow[]\n return rows.map(rowToApproval).sort(compareApprovals)\n }\n\n async stop(input: StopAgentApprovalsInput): Promise<StopAgentApprovalsResult> {\n const stoppedAt = (input.stoppedAt ?? new Date()).toISOString()\n const clauses = [\n \"project_id = ?\",\n \"thread_id = ?\",\n \"reported_in_message_id IS NULL\",\n \"(status = 'pending' OR turn_stopped_at IS NULL)\",\n ]\n const params: string[] = [input.projectId, input.threadId]\n if (input.runId !== undefined) {\n clauses.push(\"run_id = ?\")\n params.push(input.runId)\n }\n if (input.requestedBy !== undefined) {\n clauses.push(\"requested_by_type = ? AND requested_by_id = ?\")\n params.push(input.requestedBy.type, input.requestedBy.id)\n }\n\n return runImmediateTransaction(this.db, () => {\n const matched = this.db\n .query(`SELECT * FROM agent_approvals WHERE ${clauses.join(\" AND \")}`)\n .all(...params) as AgentApprovalRow[]\n const update = this.db.query(\n `UPDATE agent_approvals\n SET status = CASE WHEN status = 'pending' THEN 'cancelled' ELSE status END,\n turn_stopped_at = COALESCE(turn_stopped_at, ?)\n WHERE project_id = ? AND id = ?`\n )\n for (const row of matched) update.run(stoppedAt, input.projectId, row.id)\n\n const cancelled = matched\n .filter((row) => row.status === \"pending\")\n .map((row) => this.require(input.projectId, row.id))\n const stopped = matched.filter((row) => row.turn_stopped_at === null).length\n return { cancelled: cancelled.sort(compareApprovals), stopped }\n })\n }\n\n async holdsRun(input: { readonly projectId: string; readonly runId: string }): Promise<boolean> {\n return sqliteHoldsRun(this.db, input.projectId, input.runId)\n }\n\n async claimExecution(input: {\n readonly projectId: string\n readonly id: string\n readonly claimedAt: Date\n readonly staleBefore: Date\n }): Promise<AgentApprovalRecord | null> {\n const row = this.db\n .query(\n `UPDATE agent_approvals SET execution_claimed_at = ?\n WHERE project_id = ? AND id = ? AND status = 'approved' AND outcome IS NULL\n AND COALESCE(execution_claimed_at, decided_at) <= ?\n RETURNING *`\n )\n .get(\n input.claimedAt.toISOString(),\n input.projectId,\n input.id,\n input.staleBefore.toISOString()\n ) as AgentApprovalRow | null\n return row ? rowToApproval(row) : null\n }\n\n async listRepairable(input: {\n readonly projectId: string\n readonly claimableBefore: Date\n readonly after?: AgentApprovalCursor\n readonly limit: number\n }): Promise<readonly AgentApprovalRecord[]> {\n const afterAt = input.after?.createdAt.toISOString() ?? null\n const afterId = input.after?.id ?? \"\"\n // Each half of the OR matches one partial index.\n const rows = this.db\n .query(\n `SELECT * FROM agent_approvals\n WHERE project_id = ?\n AND (\n (status = 'approved' AND outcome IS NULL\n AND COALESCE(execution_claimed_at, decided_at) <= ?)\n OR (status IN ('approved', 'denied') AND reported_in_message_id IS NULL\n AND turn_stopped_at IS NULL)\n )\n AND (? IS NULL OR created_at > ? OR (created_at = ? AND id > ?))\n ORDER BY created_at, id\n LIMIT ?`\n )\n .all(\n input.projectId,\n input.claimableBefore.toISOString(),\n afterAt,\n afterAt,\n afterAt,\n afterId,\n input.limit\n ) as AgentApprovalRow[]\n return rows.map(rowToApproval)\n }\n\n async expireDue(input: {\n readonly projectId: string\n readonly now: Date\n readonly limit?: number\n }): Promise<readonly AgentApprovalRecord[]> {\n const rows = this.db\n .query(\n `UPDATE agent_approvals SET status = 'expired'\n WHERE project_id = ? AND id IN (\n SELECT id FROM agent_approvals\n WHERE project_id = ? AND status = 'pending' AND expires_at <= ?\n ORDER BY created_at, id\n LIMIT ?\n )\n RETURNING *`\n )\n .all(\n input.projectId,\n input.projectId,\n input.now.toISOString(),\n input.limit ?? -1\n ) as AgentApprovalRow[]\n return rows.map(rowToApproval).sort(compareApprovals)\n }\n\n async markReported(input: MarkAgentApprovalsReportedInput): Promise<readonly string[]> {\n const ids = [...new Set(input.ids)]\n if (ids.length === 0) return []\n\n const rows = this.db\n .query(\n `UPDATE agent_approvals SET reported_in_message_id = ?\n WHERE project_id = ? AND thread_id = ? AND reported_in_message_id IS NULL\n AND (? = 0 OR turn_stopped_at IS NULL)\n AND id IN (${ids.map(() => \"?\").join(\", \")})\n RETURNING id`\n )\n .all(\n input.messageId,\n input.projectId,\n input.threadId,\n input.resuming === true ? 1 : 0,\n ...ids\n ) as { id: string }[]\n const marked = new Set(rows.map((row) => row.id))\n return ids.filter((id) => marked.has(id))\n }\n\n async getById(params: {\n readonly projectId: string\n readonly id: string\n }): Promise<AgentApprovalRecord | null> {\n const row = this.row(params.projectId, params.id)\n return row ? rowToApproval(row) : null\n }\n\n async list(input: ListAgentApprovalsInput): Promise<ListAgentApprovalsResult> {\n if (input.statuses?.length === 0) return { approvals: [], hasMore: false, total: 0 }\n\n const { where, params } = listFilter(input)\n const offset = input.offset ?? 0\n return this.db.transaction(() => {\n const counted = this.db\n .query(`SELECT COUNT(*) AS total FROM agent_approvals WHERE ${where}`)\n .get(...params) as { total: number }\n const rows = this.db\n .query(\n `SELECT * FROM agent_approvals WHERE ${where}\n ORDER BY created_at, id LIMIT ? OFFSET ?`\n )\n .all(...params, input.limit ?? -1, offset) as AgentApprovalRow[]\n return {\n approvals: rows.map(rowToApproval),\n hasMore: offset + rows.length < counted.total,\n total: counted.total,\n }\n })()\n }\n\n private run(projectId: string, id: string) {\n const row = this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentRunRow | null\n return row ? rowToRunRecord(row) : null\n }\n\n private row(projectId: string, id: string): AgentApprovalRow | null {\n return this.db\n .query(\"SELECT * FROM agent_approvals WHERE project_id = ? AND id = ?\")\n .get(projectId, id) as AgentApprovalRow | null\n }\n\n private require(projectId: string, id: string): AgentApprovalRecord {\n const row = this.row(projectId, id)\n if (!row) throw new Error(`[SixbSqlite] Agent approval '${id}' disappeared.`)\n return rowToApproval(row)\n }\n}\n\n/** The `list` predicate, as the in-memory store's `agentApprovalMatches` reads it. */\nfunction listFilter(input: ListAgentApprovalsInput): {\n readonly where: string\n readonly params: readonly (string | number)[]\n} {\n const clauses = [\"project_id = ?\"]\n const params: (string | number)[] = [input.projectId]\n if (input.threadId !== undefined) {\n clauses.push(\"thread_id = ?\")\n params.push(input.threadId)\n }\n if (input.runId !== undefined) {\n clauses.push(\"run_id = ?\")\n params.push(input.runId)\n }\n if (input.requestedBy !== undefined) {\n clauses.push(\"requested_by_type = ? AND requested_by_id = ?\")\n params.push(input.requestedBy.type, input.requestedBy.id)\n }\n if (input.statuses !== undefined) {\n clauses.push(`status IN (${input.statuses.map(() => \"?\").join(\", \")})`)\n params.push(...input.statuses)\n }\n if (input.reported !== undefined) {\n clauses.push(`reported_in_message_id IS ${input.reported ? \"NOT NULL\" : \"NULL\"}`)\n }\n return { where: clauses.join(\" AND \"), params }\n}\n\nfunction rowToApproval(row: AgentApprovalRow): AgentApprovalRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n threadId: row.thread_id,\n runId: row.run_id,\n callerRunId: row.caller_run_id,\n requestedBy: { type: row.requested_by_type, id: row.requested_by_id },\n mode: row.mode,\n callKey: row.call_key,\n call: JSON.parse(row.call) as AgentApprovalCall,\n status: row.status,\n createdAt: new Date(row.created_at),\n expiresAt: new Date(row.expires_at),\n ...(row.decided_at === null ? {} : { decidedAt: new Date(row.decided_at) }),\n ...(row.decided_by_type === null || row.decided_by_id === null\n ? {}\n : { decidedBy: { type: row.decided_by_type, id: row.decided_by_id } }),\n ...(row.outcome === null ? {} : { outcome: JSON.parse(row.outcome) as AgentApprovalOutcome }),\n ...(row.reported_in_message_id === null\n ? {}\n : { reportedInMessageId: row.reported_in_message_id }),\n ...(row.raised_mode === null ? {} : { raisedMode: row.raised_mode }),\n ...(row.turn_stopped_at === null ? {} : { turnStoppedAt: new Date(row.turn_stopped_at) }),\n ...(row.execution_claimed_at === null\n ? {}\n : { executionClaimedAt: new Date(row.execution_claimed_at) }),\n }\n}\n\n/**\n * Whether a run holds a call: an approval of its, or one it made for its turn, pending or decided\n * and not reported yet. `holdsRun` and the paused finish of `runs.finish` both ask this.\n */\nexport function sqliteHoldsRun(db: Database, projectId: string, runId: string): boolean {\n const held = db\n .query(\n `SELECT id FROM agent_approvals\n WHERE project_id = ? AND (run_id = ? OR caller_run_id = ?)\n AND status IN ('pending', 'approved', 'denied') AND reported_in_message_id IS NULL\n LIMIT 1`\n )\n .get(projectId, runId, runId)\n return held !== null\n}\n\nfunction compareApprovals(left: AgentApprovalRecord, right: AgentApprovalRecord): number {\n return left.createdAt.getTime() - right.createdAt.getTime() || left.id.localeCompare(right.id)\n}\n",
|
|
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 AgentThreadParticipantRecord,\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 kind: AgentThreadRecord[\"kind\"]\n parent_thread_id: string | null\n parent_run_id: string | null\n spawn_key: string | null\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 runs_on: \"computer\" | null\n computer_id: 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 AgentThreadParticipantRow {\n project_id: string\n thread_id: string\n principal_type: \"user\"\n principal_id: string\n added_at: string\n added_by_type: Principal[\"type\"]\n added_by_id: 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 cancel_requested_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 kind: row.kind,\n ...(row.parent_thread_id && row.parent_run_id && row.spawn_key\n ? {\n parent: {\n threadId: row.parent_thread_id,\n spawnedBy: row.parent_run_id,\n key: row.spawn_key,\n },\n }\n : {}),\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 ...(row.runs_on == null ? {} : { runsOn: row.runs_on }),\n ...(row.computer_id == null ? {} : { computerId: row.computer_id }),\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 cancelRequestedAt: row.cancel_requested_at ? new Date(row.cancel_requested_at) : 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 (\n !row.thread_id ||\n !row.trigger_message_id ||\n !row.parent_run_id ||\n !row.spawn_key ||\n row.spec === null\n ) {\n throw new Error(`[SixbSqlite] Subagent run '${row.id}' has invalid persisted fields.`)\n }\n return {\n ...base,\n kind: \"subagent\",\n threadId: row.thread_id,\n triggerMessageId: row.trigger_message_id,\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\nexport function rowToParticipantRecord(\n row: AgentThreadParticipantRow\n): AgentThreadParticipantRecord {\n return {\n projectId: row.project_id,\n threadId: row.thread_id,\n principal: { type: \"user\", id: row.principal_id },\n addedAt: new Date(row.added_at),\n addedBy: { type: row.added_by_type, id: row.added_by_id },\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
|
+
"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 AgentThreadParticipantRecord,\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 kind: AgentThreadRecord[\"kind\"]\n parent_thread_id: string | null\n parent_run_id: string | null\n spawn_key: string | null\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 runs_on: \"computer\" | null\n computer_id: string | null\n computer_name: string | null\n computer_folder: string | null\n moved_at: 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 AgentThreadParticipantRow {\n project_id: string\n thread_id: string\n principal_type: \"user\"\n principal_id: string\n added_at: string\n added_by_type: Principal[\"type\"]\n added_by_id: 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 cancel_requested_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 kind: row.kind,\n ...(row.parent_thread_id && row.parent_run_id && row.spawn_key\n ? {\n parent: {\n threadId: row.parent_thread_id,\n spawnedBy: row.parent_run_id,\n key: row.spawn_key,\n },\n }\n : {}),\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 ...(row.runs_on == null ? {} : { runsOn: row.runs_on }),\n ...(row.computer_id == null || row.computer_name == null || row.computer_folder == null\n ? {}\n : {\n computer: { id: row.computer_id, name: row.computer_name, folder: row.computer_folder },\n }),\n ...(row.moved_at == null ? {} : { movedAt: new Date(row.moved_at) }),\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 cancelRequestedAt: row.cancel_requested_at ? new Date(row.cancel_requested_at) : 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 (\n !row.thread_id ||\n !row.trigger_message_id ||\n !row.parent_run_id ||\n !row.spawn_key ||\n row.spec === null\n ) {\n throw new Error(`[SixbSqlite] Subagent run '${row.id}' has invalid persisted fields.`)\n }\n return {\n ...base,\n kind: \"subagent\",\n threadId: row.thread_id,\n triggerMessageId: row.trigger_message_id,\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\nexport function rowToParticipantRecord(\n row: AgentThreadParticipantRow\n): AgentThreadParticipantRecord {\n return {\n projectId: row.project_id,\n threadId: row.thread_id,\n principal: { type: \"user\", id: row.principal_id },\n addedAt: new Date(row.added_at),\n addedBy: { type: row.added_by_type, id: row.added_by_id },\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",
|
|
12
12
|
"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 thread_id = ? AND created_by_run_id = ?\"\n )\n .get(\n input.projectId,\n input.threadId,\n input.createdByRunId\n ) 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 threadId: 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 thread_id = ? AND created_by_run_id IN (${placeholders})`\n )\n .all(input.projectId, input.threadId, ...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",
|
|
13
|
+
"import type { Database } from \"bun:sqlite\"\nimport { assertAgentComputerSession } from \"@sixb/core/internal/agent-run-storage-provider\"\nimport type {\n AgentComputerSessionRecord,\n AgentComputerSessionStore,\n Principal,\n} from \"@sixb/core/storage\"\n\ninterface AgentComputerSessionRow {\n project_id: string\n owner_principal_type: Principal[\"type\"]\n owner_principal_id: string\n id: string\n computer_id: string\n computer_name: string\n folder: string\n expires_at: string\n}\n\nexport class SqliteAgentComputerSessionStore implements AgentComputerSessionStore {\n constructor(private readonly db: Database) {}\n\n async hold(input: AgentComputerSessionRecord): Promise<void> {\n assertAgentComputerSession(input, \"SixbSqlite\")\n this.db\n .query(\n `INSERT INTO agent_computer_sessions (\n project_id, owner_principal_type, owner_principal_id, id,\n computer_id, computer_name, folder, expires_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, owner_principal_type, owner_principal_id, id)\n DO UPDATE SET\n computer_id = excluded.computer_id,\n computer_name = excluded.computer_name,\n folder = excluded.folder,\n expires_at = excluded.expires_at`\n )\n .run(\n input.projectId,\n input.ownerPrincipal.type,\n input.ownerPrincipal.id,\n input.id,\n input.computer.id,\n input.computer.name,\n input.computer.folder,\n input.expiresAt.toISOString()\n )\n }\n\n async release(input: {\n readonly projectId: string\n readonly id: string\n readonly ownerPrincipal: Principal\n }): Promise<AgentComputerSessionRecord | null> {\n const row = this.db\n .query(\n `DELETE FROM agent_computer_sessions\n WHERE project_id = ? AND owner_principal_type = ? AND owner_principal_id = ? AND id = ?\n RETURNING *`\n )\n .get(\n input.projectId,\n input.ownerPrincipal.type,\n input.ownerPrincipal.id,\n input.id\n ) as AgentComputerSessionRow | null\n return row && rowToSession(row)\n }\n\n async listLive(input: {\n readonly projectId: string\n readonly ownerPrincipal: Principal\n readonly now: Date\n }): Promise<readonly AgentComputerSessionRecord[]> {\n const rows = this.db\n .query(\n `SELECT * FROM agent_computer_sessions\n WHERE project_id = ? AND owner_principal_type = ? AND owner_principal_id = ?\n AND expires_at > ?\n ORDER BY id`\n )\n .all(\n input.projectId,\n input.ownerPrincipal.type,\n input.ownerPrincipal.id,\n input.now.toISOString()\n ) as AgentComputerSessionRow[]\n return rows.map(rowToSession)\n }\n\n async removeLapsed(input: {\n readonly projectId: string\n readonly now: Date\n }): Promise<readonly AgentComputerSessionRecord[]> {\n const rows = this.db\n .query(\n `DELETE FROM agent_computer_sessions WHERE project_id = ? AND expires_at <= ? RETURNING *`\n )\n .all(input.projectId, input.now.toISOString()) as AgentComputerSessionRow[]\n return rows.map(rowToSession)\n }\n}\n\nfunction rowToSession(row: AgentComputerSessionRow): AgentComputerSessionRecord {\n return {\n projectId: row.project_id,\n id: row.id,\n ownerPrincipal: { type: row.owner_principal_type, id: row.owner_principal_id },\n computer: { id: row.computer_id, name: row.computer_name, folder: row.folder },\n expiresAt: new Date(row.expires_at),\n }\n}\n",
|
|
13
14
|
"import type { Database } from \"bun:sqlite\"\nimport type { Principal } from \"@sixb/core\"\nimport {\n agentMemoryConflicts,\n agentMemoryHistoryCutoff,\n assertSaveAgentMemoryInput,\n type LatestAgentMemoryFile,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport type {\n AgentMemoryRepoRecord,\n AgentMemoryRevisionRecord,\n AgentMemoryStore,\n ListAgentMemoryRevisionsInput,\n ListAgentMemoryRevisionsResult,\n SaveAgentMemoryInput,\n SaveAgentMemoryResult,\n} from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\n\ninterface RevisionRow {\n readonly revision: number\n readonly message: string\n readonly author_principal_type: Principal[\"type\"]\n readonly author_principal_id: string\n readonly source: string | null\n readonly created_at: string\n}\n\n/** Each path's highest-revision version, the deleted ones included. */\nconst LATEST_FILES = `\n SELECT f.path, f.revision, f.contents FROM agent_memory_files f\n WHERE f.project_id = ? AND f.repo_id = ? AND f.revision = (\n SELECT MAX(l.revision) FROM agent_memory_files l\n WHERE l.project_id = f.project_id AND l.repo_id = f.repo_id AND l.path = f.path\n )\n`\n\nexport class SqliteAgentMemoryStore implements AgentMemoryStore {\n constructor(private readonly db: Database) {}\n\n async get(input: {\n projectId: string\n repoId: string\n asOf?: Date\n revision?: number\n }): Promise<AgentMemoryRepoRecord> {\n return this.db.transaction(() => {\n const revision = this.head(input.projectId, input.repoId, input.asOf, input.revision)\n const files = this.db\n .query(\n `SELECT f.path, f.contents FROM agent_memory_files f\n WHERE f.project_id = ? AND f.repo_id = ? AND f.contents IS NOT NULL AND f.revision = (\n SELECT MAX(l.revision) FROM agent_memory_files l\n WHERE l.project_id = f.project_id AND l.repo_id = f.repo_id AND l.path = f.path\n AND l.revision <= ?\n )\n ORDER BY f.path`\n )\n .all(input.projectId, input.repoId, revision) as { path: string; contents: string }[]\n return { revision, files: files.map(({ path, contents }) => ({ path, contents })) }\n })()\n }\n\n async save(input: SaveAgentMemoryInput): Promise<SaveAgentMemoryResult> {\n assertSaveAgentMemoryInput(input, \"SixbSqlite\")\n return runImmediateTransaction(this.db, () => {\n const head = this.head(input.projectId, input.repoId)\n const paths = input.changes.map((change) => change.path)\n const latest = this.db\n .query(`${LATEST_FILES} AND f.path IN (${paths.map(() => \"?\").join(\", \")})`)\n .all(input.projectId, input.repoId, ...paths) as (LatestAgentMemoryFile & {\n path: string\n })[]\n const conflicts = agentMemoryConflicts(\n input,\n head,\n new Map(latest.map((file) => [file.path, file]))\n )\n if (conflicts.length > 0) return { saved: false, revision: head, conflicts }\n\n const revision = head + 1\n const createdAt = input.createdAt ?? new Date()\n this.db\n .query(\n `INSERT INTO agent_memory_revisions (\n project_id, repo_id, revision, message, author_principal_type, author_principal_id,\n source, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`\n )\n .run(\n input.projectId,\n input.repoId,\n revision,\n input.message,\n input.author.type,\n input.author.id,\n input.source ?? null,\n createdAt.toISOString()\n )\n const insertFile = this.db.query(\n `INSERT INTO agent_memory_files (project_id, repo_id, path, revision, contents)\n VALUES (?, ?, ?, ?, ?)`\n )\n for (const change of input.changes) {\n insertFile.run(input.projectId, input.repoId, change.path, revision, change.contents)\n }\n this.db\n .query(\n `DELETE FROM agent_memory_files AS f\n WHERE f.project_id = ? AND f.repo_id = ? AND f.revision IN (\n SELECT revision FROM agent_memory_revisions\n WHERE project_id = ? AND repo_id = ? AND created_at < ?\n ) AND EXISTS (\n SELECT 1 FROM agent_memory_files n\n WHERE n.project_id = f.project_id AND n.repo_id = f.repo_id AND n.path = f.path\n AND n.revision > f.revision\n )`\n )\n .run(\n input.projectId,\n input.repoId,\n input.projectId,\n input.repoId,\n agentMemoryHistoryCutoff(createdAt).toISOString()\n )\n return { saved: true, revision }\n })\n }\n\n async listRevisions(\n input: ListAgentMemoryRevisionsInput\n ): Promise<ListAgentMemoryRevisionsResult> {\n return this.db.transaction(() => {\n const { total } = this.db\n .query(\n \"SELECT COUNT(*) AS total FROM agent_memory_revisions WHERE project_id = ? AND repo_id = ?\"\n )\n .get(input.projectId, input.repoId) as { total: number }\n const offset = input.offset ?? 0\n const rows = this.db\n .query(\n `SELECT revision, message, author_principal_type, author_principal_id, source, created_at\n FROM agent_memory_revisions WHERE project_id = ? AND repo_id = ?\n ORDER BY revision DESC LIMIT ? OFFSET ?`\n )\n .all(input.projectId, input.repoId, input.limit ?? -1, offset) as RevisionRow[]\n const changes = this.db\n .query(\n `SELECT revision, path, contents IS NULL AS deleted FROM agent_memory_files\n WHERE project_id = ? AND repo_id = ? AND revision IN (${rows.map(() => \"?\").join(\", \")})\n ORDER BY path`\n )\n .all(input.projectId, input.repoId, ...rows.map((row) => row.revision)) as {\n revision: number\n path: string\n deleted: number\n }[]\n const revisions = rows.map(\n (row): AgentMemoryRevisionRecord => ({\n revision: row.revision,\n message: row.message,\n author: { type: row.author_principal_type, id: row.author_principal_id },\n ...(row.source === null ? {} : { source: row.source }),\n changes: changes\n .filter((change) => change.revision === row.revision)\n .map((change) => ({ path: change.path, deleted: change.deleted === 1 })),\n createdAt: new Date(row.created_at),\n })\n )\n return { revisions, hasMore: offset + rows.length < total, total }\n })()\n }\n\n async delete(input: { projectId: string; repoId: string }): Promise<void> {\n // File versions go with their revisions through ON DELETE CASCADE.\n this.db\n .query(\"DELETE FROM agent_memory_revisions WHERE project_id = ? AND repo_id = ?\")\n .run(input.projectId, input.repoId)\n }\n\n /** The highest revision, or the highest saved by `asOf` and up to `upTo`. */\n private head(projectId: string, repoId: string, asOf?: Date, upTo?: number): number {\n const at = asOf?.toISOString() ?? null\n const row = this.db\n .query(\n `SELECT COALESCE(MAX(revision), 0) AS revision FROM agent_memory_revisions\n WHERE project_id = ? AND repo_id = ? AND (? IS NULL OR created_at <= ?)\n AND (? IS NULL OR revision <= ?)`\n )\n .get(projectId, repoId, at, at, upTo ?? null, upTo ?? null) as {\n revision: number\n }\n return row.revision\n }\n}\n",
|
|
14
15
|
"import type { Database } from \"bun:sqlite\"\nimport { countsAsThreadMessage } from \"@sixb/core/internal/agent-run-storage-provider\"\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 + ?, last_message_at = ?, updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n countsAsThreadMessage(input) ? 1 : 0,\n createdAt.toISOString(),\n createdAt.toISOString(),\n input.projectId,\n input.threadId\n )\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 if (input.fence) {\n const owner = this.db\n .query(\n \"SELECT 1 AS present FROM agent_runs WHERE project_id = ? AND id = ? AND status = 'running' AND execution_token = ?\"\n )\n .get(input.projectId, input.fence.runId, input.fence.executionToken)\n if (!owner) {\n throw new AgentStorageError(\n \"execution_lost\",\n `[SixbSqlite] Execution token is no longer current on agent run '${input.fence.runId}'.`\n )\n }\n }\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(\n \"DELETE FROM agent_messages WHERE project_id = ? AND thread_id = ? AND run_id = ? RETURNING parts\"\n )\n .all(input.projectId, input.threadId, input.runId) as { parts: string }[]\n if (deleted.length === 0) {\n return 0\n }\n // The thread counts only the messages the conversation shows: take back the ones it counted.\n const counted = deleted.filter((row) =>\n countsAsThreadMessage({ parts: JSON.parse(row.parts) })\n ).length\n\n const updatedAt = new Date().toISOString()\n this.db\n .query(\n `\n UPDATE agent_threads\n SET\n message_count = MAX(message_count - ?, 0),\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(counted, input.projectId, input.threadId, updatedAt, input.projectId, input.threadId)\n\n return deleted.length\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",
|
|
15
16
|
"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",
|
|
16
|
-
"import type { Database } from \"bun:sqlite\"\nimport {\n agentRunMayHoldCalls,\n assertAgentRunExecution,\n assertAgentRunFinishPayload,\n assertAwaitingApprovalFinish,\n assertConversationAgentRunSpec,\n assertConversationThreadRow,\n assertCreateSubagentRunInput,\n assertSubagentThreadTakesRun,\n newSubagentThreadRecord,\n subagentRunMatchesCreateInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { AGENT_MESSAGE_CONTENT_VERSION } from \"@sixb/core/internal/agents\"\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 ListThreadSubagentsInput,\n type ReclaimAgentRunInput,\n type RequestAgentRunCancelInput,\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 { sqliteHoldsRun } from \"./approvals\"\nimport { type AgentRunRow, type AgentThreadRow, rowToRunRecord, rowToThreadRecord } 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 id, kind, active_run_id FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as Pick<\n AgentThreadRow,\n \"id\" | \"kind\" | \"active_run_id\"\n > | 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 assertConversationThreadRow(thread, \"takes turns\", \"SixbSqlite\")\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 const createdAt = input.createdAt ?? new Date()\n try {\n this.claimChildThread(input, parentRow, createdAt)\n this.db\n .query(\n `\n INSERT INTO agent_runs (\n project_id, id, execution_id, kind, thread_id, trigger_message_id, parent_run_id,\n spawn_key, spec, status, attempt, created_at\n ) VALUES (?, ?, ?, 'subagent', ?, ?, ?, ?, ?, 'queued', 0, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.thread.id,\n input.trigger.id,\n input.parentRunId,\n input.spawnKey,\n JSON.stringify(input.spec),\n createdAt.toISOString()\n )\n this.db\n .query(\n `\n INSERT INTO agent_messages (\n project_id, id, thread_id, run_id, role, seq, parts, metadata, content_version,\n created_at\n ) VALUES (\n ?, ?, ?, ?, 'user',\n (SELECT COALESCE(MAX(seq), 0) + 1 FROM agent_messages\n WHERE project_id = ? AND thread_id = ?),\n ?, ?, ?, ?\n )\n `\n )\n .run(\n input.projectId,\n input.trigger.id,\n input.thread.id,\n input.id,\n input.projectId,\n input.thread.id,\n JSON.stringify(input.trigger.parts),\n input.trigger.metadata === undefined ? null : JSON.stringify(input.trigger.metadata),\n AGENT_MESSAGE_CONTENT_VERSION,\n createdAt.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 const run = this.requireRunning(input.projectId, input.id)\n if (\n input.ifLapsedBy &&\n run.execution_queue_lease_expires_at !== null &&\n new Date(run.execution_queue_lease_expires_at).getTime() > input.ifLapsedBy.getTime()\n ) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Agent run '${input.id}' is still held by its runner, whose lease has not lapsed.`\n )\n }\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 requestCancel(input: RequestAgentRunCancelInput): Promise<AgentRunRecord> {\n return this.db.transaction(() => {\n this.db\n .query(\n `\n UPDATE agent_runs\n SET cancel_requested_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND cancel_requested_at IS NULL\n `\n )\n .run((input.at ?? new Date()).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 assertAgentRunFinishPayload(run.kind, input, run.id, \"SixbSqlite\")\n if (input.finishReason === \"awaiting_approval\") {\n assertAwaitingApprovalFinish({\n runId: input.id,\n status: input.status,\n holdsApproval: sqliteHoldsRun(this.db, input.projectId, input.id),\n prefix: \"SixbSqlite\",\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 if (agentRunMayHoldCalls(rowToRunRecord(run)))\n this.settleApprovals(run.kind, input, completedAt)\n\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n /**\n * A turn that pauses keeps its calls for their decision. A turn that ends any other way cancels\n * the ones still waiting, a late one included, and never resumes on the rest. A child that fails\n * or is cancelled takes its own pending calls with it.\n */\n private settleApprovals(\n kind: AgentRunRecord[\"kind\"],\n input: FinishAgentRunInput,\n completedAt: Date\n ): void {\n if (input.finishReason === \"awaiting_approval\") return\n const turn = kind === \"conversation\"\n if (!turn && input.status === \"succeeded\") return\n\n this.db\n .query(\n `UPDATE agent_approvals SET status = 'cancelled'\n WHERE project_id = ? AND status = 'pending' AND (run_id = ? OR caller_run_id = ?)`\n )\n .run(input.projectId, input.id, input.id)\n if (!turn) return\n this.db\n .query(\n `UPDATE agent_approvals SET turn_stopped_at = ?\n WHERE project_id = ? AND run_id = ?\n AND reported_in_message_id IS NULL AND turn_stopped_at IS NULL`\n )\n .run(completedAt.toISOString(), input.projectId, input.id)\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 listThreadSubagents(\n input: ListThreadSubagentsInput\n ): Promise<readonly SubagentRunRecord[]> {\n // Reached through the turns of the conversation, by thread, then each turn's children by key\n // or, for a finish reason, by `idx_agent_runs_paused_on_question`.\n const filters: string[] = []\n const args: SqliteValue[] = [input.projectId, input.threadId]\n if (input.spawnKey !== undefined) {\n filters.push(\"AND child.spawn_key = ?\")\n args.push(input.spawnKey)\n }\n if (input.finishReason !== undefined) {\n filters.push(\"AND child.finish_reason = ?\")\n args.push(input.finishReason)\n }\n args.push(input.limit ?? 100)\n\n const rows = this.db\n .query(\n `SELECT child.* FROM agent_runs turn\n JOIN agent_runs child\n ON child.project_id = turn.project_id AND child.parent_run_id = turn.id\n WHERE turn.project_id = ? AND turn.thread_id = ? AND child.kind = 'subagent'\n ${filters.join(\" \")}\n ORDER BY COALESCE(turn.started_at, turn.created_at) DESC, turn.id DESC,\n child.created_at DESC, child.id DESC\n LIMIT ?`\n )\n .all(...args) as AgentRunRow[]\n return rows.flatMap((row) => {\n const run = rowToRunRecord(row)\n return run.kind === \"subagent\" ? [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 /**\n * The child's thread: its first run creates it, owned by the conversation's owner; a later run\n * takes it while it is idle. Either way the run is its active run.\n */\n private claimChildThread(\n input: CreateSubagentRunInput,\n parent: AgentRunRow,\n createdAt: Date\n ): void {\n if (!input.thread.create) {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.thread.id) as AgentThreadRow | null\n assertSubagentThreadTakesRun(\n row ? rowToThreadRecord(row) : null,\n input,\n parent.thread_id ?? \"\",\n \"SixbSqlite\"\n )\n this.db\n .query(\n `\n UPDATE agent_threads\n SET active_run_id = ?, message_count = message_count + 1, last_message_at = ?,\n updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.id,\n createdAt.toISOString(),\n createdAt.toISOString(),\n input.projectId,\n input.thread.id\n )\n return\n }\n\n const conversation = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, parent.thread_id) as AgentThreadRow | null\n if (!conversation) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${parent.thread_id}' not found for project '${input.projectId}'.`\n )\n }\n\n const thread = newSubagentThreadRecord(input, rowToThreadRecord(conversation), createdAt)\n this.db\n .query(\n `\n INSERT INTO agent_threads (\n project_id, id, kind, parent_thread_id, parent_run_id, spawn_key, owner_principal_type,\n owner_principal_id, status, active_run_id, last_message_at, message_count, created_at,\n updated_at\n ) VALUES (?, ?, 'subagent', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n thread.projectId,\n thread.id,\n conversation.id,\n input.parentRunId,\n input.spawnKey,\n thread.ownerPrincipal.type,\n thread.ownerPrincipal.id,\n thread.status,\n input.id,\n createdAt.toISOString(),\n thread.messageCount,\n createdAt.toISOString(),\n createdAt.toISOString()\n )\n }\n\n /** A turn releases its conversation, a child run its own thread. */\n private releaseThread(run: AgentRunRow, completedAt: Date): void {\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",
|
|
17
|
+
"import type { Database } from \"bun:sqlite\"\nimport {\n agentRunMayHoldCalls,\n assertAgentRunExecution,\n assertAgentRunFinishPayload,\n assertAwaitingApprovalFinish,\n assertConversationAgentRunSpec,\n assertConversationThreadRow,\n assertCreateSubagentRunInput,\n assertStartsOnComputer,\n assertSubagentThreadTakesRun,\n assertTurnInThreadPlace,\n newSubagentThreadRecord,\n subagentRunMatchesCreateInput,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport { AGENT_MESSAGE_CONTENT_VERSION } from \"@sixb/core/internal/agents\"\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 ListThreadSubagentsInput,\n type ReclaimAgentRunInput,\n type RequestAgentRunCancelInput,\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 { sqliteHoldsRun } from \"./approvals\"\nimport { type AgentRunRow, type AgentThreadRow, rowToRunRecord, rowToThreadRecord } 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(\n \"SELECT id, kind, active_run_id, runs_on FROM agent_threads WHERE project_id = ? AND id = ?\"\n )\n .get(input.projectId, input.threadId) as Pick<\n AgentThreadRow,\n \"id\" | \"kind\" | \"active_run_id\" | \"runs_on\"\n > | 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 assertConversationThreadRow(thread, \"takes turns\", \"SixbSqlite\")\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 assertTurnInThreadPlace(thread.runs_on, input.spec, input.threadId, \"SixbSqlite\")\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 const createdAt = input.createdAt ?? new Date()\n try {\n this.claimChildThread(input, parentRow, createdAt)\n this.db\n .query(\n `\n INSERT INTO agent_runs (\n project_id, id, execution_id, kind, thread_id, trigger_message_id, parent_run_id,\n spawn_key, spec, status, attempt, created_at\n ) VALUES (?, ?, ?, 'subagent', ?, ?, ?, ?, ?, 'queued', 0, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.thread.id,\n input.trigger.id,\n input.parentRunId,\n input.spawnKey,\n JSON.stringify(input.spec),\n createdAt.toISOString()\n )\n this.db\n .query(\n `\n INSERT INTO agent_messages (\n project_id, id, thread_id, run_id, role, seq, parts, metadata, content_version,\n created_at\n ) VALUES (\n ?, ?, ?, ?, 'user',\n (SELECT COALESCE(MAX(seq), 0) + 1 FROM agent_messages\n WHERE project_id = ? AND thread_id = ?),\n ?, ?, ?, ?\n )\n `\n )\n .run(\n input.projectId,\n input.trigger.id,\n input.thread.id,\n input.id,\n input.projectId,\n input.thread.id,\n JSON.stringify(input.trigger.parts),\n input.trigger.metadata === undefined ? null : JSON.stringify(input.trigger.metadata),\n AGENT_MESSAGE_CONTENT_VERSION,\n createdAt.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 const run = this.requireStatus(input.projectId, input.id, \"queued\")\n if (input.onComputer) {\n const thread = this.db\n .query(\n \"SELECT computer_id AS id, computer_folder AS folder FROM agent_threads WHERE project_id = ? AND id = ?\"\n )\n .get(input.projectId, run.thread_id) as { id: string; folder: string } | null\n assertStartsOnComputer(\n rowToRunRecord(run),\n thread?.id ? thread : undefined,\n input.onComputer,\n \"SixbSqlite\"\n )\n }\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 const run = this.requireRunning(input.projectId, input.id)\n if (\n input.ifLapsedBy &&\n run.execution_queue_lease_expires_at !== null &&\n new Date(run.execution_queue_lease_expires_at).getTime() > input.ifLapsedBy.getTime()\n ) {\n throw new AgentStorageError(\n \"invalid_state\",\n `[SixbSqlite] Agent run '${input.id}' is still held by its runner, whose lease has not lapsed.`\n )\n }\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 requestCancel(input: RequestAgentRunCancelInput): Promise<AgentRunRecord> {\n return this.db.transaction(() => {\n this.db\n .query(\n `\n UPDATE agent_runs\n SET cancel_requested_at = ?\n WHERE project_id = ? AND id = ? AND status = 'running' AND cancel_requested_at IS NULL\n `\n )\n .run((input.at ?? new Date()).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 assertAgentRunFinishPayload(run.kind, input, run.id, \"SixbSqlite\")\n if (input.finishReason === \"awaiting_approval\") {\n assertAwaitingApprovalFinish({\n runId: input.id,\n status: input.status,\n holdsApproval: sqliteHoldsRun(this.db, input.projectId, input.id),\n prefix: \"SixbSqlite\",\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 if (agentRunMayHoldCalls(rowToRunRecord(run)))\n this.settleApprovals(run.kind, input, completedAt)\n\n return this.requireRun(input.projectId, input.id)\n })()\n }\n\n /**\n * A turn that pauses keeps its calls for their decision. A turn that ends any other way cancels\n * the ones still waiting, a late one included, and never resumes on the rest. A child that fails\n * or is cancelled takes its own pending calls with it.\n */\n private settleApprovals(\n kind: AgentRunRecord[\"kind\"],\n input: FinishAgentRunInput,\n completedAt: Date\n ): void {\n if (input.finishReason === \"awaiting_approval\") return\n const turn = kind === \"conversation\"\n if (!turn && input.status === \"succeeded\") return\n\n this.db\n .query(\n `UPDATE agent_approvals SET status = 'cancelled'\n WHERE project_id = ? AND status = 'pending' AND (run_id = ? OR caller_run_id = ?)`\n )\n .run(input.projectId, input.id, input.id)\n if (!turn) return\n this.db\n .query(\n `UPDATE agent_approvals SET turn_stopped_at = ?\n WHERE project_id = ? AND run_id = ?\n AND reported_in_message_id IS NULL AND turn_stopped_at IS NULL`\n )\n .run(completedAt.toISOString(), input.projectId, input.id)\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 listThreadSubagents(\n input: ListThreadSubagentsInput\n ): Promise<readonly SubagentRunRecord[]> {\n // Reached through the turns of the conversation, by thread, then each turn's children by key\n // or, for a finish reason, by `idx_agent_runs_paused_on_question`.\n const filters: string[] = []\n const args: SqliteValue[] = [input.projectId, input.threadId]\n if (input.spawnKey !== undefined) {\n filters.push(\"AND child.spawn_key = ?\")\n args.push(input.spawnKey)\n }\n if (input.finishReason !== undefined) {\n filters.push(\"AND child.finish_reason = ?\")\n args.push(input.finishReason)\n }\n args.push(input.limit ?? 100)\n\n const rows = this.db\n .query(\n `SELECT child.* FROM agent_runs turn\n JOIN agent_runs child\n ON child.project_id = turn.project_id AND child.parent_run_id = turn.id\n WHERE turn.project_id = ? AND turn.thread_id = ? AND child.kind = 'subagent'\n ${filters.join(\" \")}\n ORDER BY COALESCE(turn.started_at, turn.created_at) DESC, turn.id DESC,\n child.created_at DESC, child.id DESC\n LIMIT ?`\n )\n .all(...args) as AgentRunRow[]\n return rows.flatMap((row) => {\n const run = rowToRunRecord(row)\n return run.kind === \"subagent\" ? [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 if (input.excludeComputerTurns) {\n whereClauses.push(\"json_extract(spec, '$.runsOn') IS NOT 'computer'\")\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 /**\n * The child's thread: its first run creates it, owned by the conversation's owner; a later run\n * takes it while it is idle. Either way the run is its active run.\n */\n private claimChildThread(\n input: CreateSubagentRunInput,\n parent: AgentRunRow,\n createdAt: Date\n ): void {\n if (!input.thread.create) {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.thread.id) as AgentThreadRow | null\n assertSubagentThreadTakesRun(\n row ? rowToThreadRecord(row) : null,\n input,\n parent.thread_id ?? \"\",\n \"SixbSqlite\"\n )\n this.db\n .query(\n `\n UPDATE agent_threads\n SET active_run_id = ?, message_count = message_count + 1, last_message_at = ?,\n updated_at = ?\n WHERE project_id = ? AND id = ?\n `\n )\n .run(\n input.id,\n createdAt.toISOString(),\n createdAt.toISOString(),\n input.projectId,\n input.thread.id\n )\n return\n }\n\n const conversation = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, parent.thread_id) as AgentThreadRow | null\n if (!conversation) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${parent.thread_id}' not found for project '${input.projectId}'.`\n )\n }\n\n const thread = newSubagentThreadRecord(input, rowToThreadRecord(conversation), createdAt)\n this.db\n .query(\n `\n INSERT INTO agent_threads (\n project_id, id, kind, parent_thread_id, parent_run_id, spawn_key, owner_principal_type,\n owner_principal_id, status, active_run_id, last_message_at, message_count, created_at,\n updated_at\n ) VALUES (?, ?, 'subagent', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n thread.projectId,\n thread.id,\n conversation.id,\n input.parentRunId,\n input.spawnKey,\n thread.ownerPrincipal.type,\n thread.ownerPrincipal.id,\n thread.status,\n input.id,\n createdAt.toISOString(),\n thread.messageCount,\n createdAt.toISOString(),\n createdAt.toISOString()\n )\n }\n\n /** A turn releases its conversation, a child run its own thread. */\n private releaseThread(run: AgentRunRow, completedAt: Date): void {\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",
|
|
17
18
|
"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",
|
|
18
19
|
"import type { Database } from \"bun:sqlite\"\nimport { assertAgentApprovalModeInput } from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AgentApprovalMode,\n type AgentApprovalModeStore,\n AgentStorageError,\n type Principal,\n} from \"@sixb/core/storage\"\n\nexport class SqliteAgentApprovalModeStore implements AgentApprovalModeStore {\n constructor(private readonly db: Database) {}\n\n async getDefault(input: {\n readonly projectId: string\n readonly principal: Principal\n }): Promise<AgentApprovalMode | null> {\n const row = this.db\n .query(\n `SELECT approval_mode FROM agent_user_settings\n WHERE project_id = ? AND principal_type = ? AND principal_id = ?`\n )\n .get(input.projectId, input.principal.type, input.principal.id) as {\n approval_mode: AgentApprovalMode\n } | null\n return row?.approval_mode ?? null\n }\n\n async setDefault(input: {\n readonly projectId: string\n readonly principal: Principal\n readonly mode: AgentApprovalMode\n readonly updatedAt?: Date\n }): Promise<void> {\n assertAgentApprovalModeInput(input.mode, \"SixbSqlite\")\n this.db\n .query(\n `INSERT INTO agent_user_settings (\n project_id, principal_type, principal_id, approval_mode, updated_at\n ) VALUES (?, ?, ?, ?, ?)\n ON CONFLICT (project_id, principal_type, principal_id)\n DO UPDATE SET approval_mode = excluded.approval_mode, updated_at = excluded.updated_at`\n )\n .run(\n input.projectId,\n input.principal.type,\n input.principal.id,\n input.mode,\n (input.updatedAt ?? new Date()).toISOString()\n )\n }\n\n async getForThread(input: {\n readonly projectId: string\n readonly threadId: string\n readonly principal: Principal\n }): Promise<AgentApprovalMode | null> {\n const row = this.db\n .query(\n `SELECT approval_mode FROM agent_thread_user_settings\n WHERE project_id = ? AND thread_id = ? AND principal_type = ? AND principal_id = ?`\n )\n .get(input.projectId, input.threadId, input.principal.type, input.principal.id) as {\n approval_mode: AgentApprovalMode\n } | null\n return row?.approval_mode ?? null\n }\n\n async setForThread(input: {\n readonly projectId: string\n readonly threadId: string\n readonly principal: Principal\n readonly mode: AgentApprovalMode | null\n readonly updatedAt?: Date\n }): Promise<void> {\n if (input.mode !== null) assertAgentApprovalModeInput(input.mode, \"SixbSqlite\")\n const thread = this.db\n .query(\"SELECT id FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId)\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.mode === null) {\n this.db\n .query(\n `DELETE FROM agent_thread_user_settings\n WHERE project_id = ? AND thread_id = ? AND principal_type = ? AND principal_id = ?`\n )\n .run(input.projectId, input.threadId, input.principal.type, input.principal.id)\n return\n }\n this.db\n .query(\n `INSERT INTO agent_thread_user_settings (\n project_id, thread_id, principal_type, principal_id, approval_mode, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, thread_id, principal_type, principal_id)\n DO UPDATE SET approval_mode = excluded.approval_mode, updated_at = excluded.updated_at`\n )\n .run(\n input.projectId,\n input.threadId,\n input.principal.type,\n input.principal.id,\n input.mode,\n (input.updatedAt ?? new Date()).toISOString()\n )\n }\n}\n",
|
|
19
|
-
"import type { Database } from \"bun:sqlite\"\nimport {\n assertAssignableComputer,\n assertComputerId,\n assertConversationThreadRow,\n assertRunsOn,\n participantsToAdd,\n planAgentThreadFork,\n remapArtifactIds,\n snapshotAgentThreadSandboxParams,\n transitionAgentThreadSandbox,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AddAgentThreadParticipantsInput,\n type AgentContextCheckpointRecord,\n AgentStorageError,\n type AgentThreadParticipantRecord,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type AgentThreadStore,\n type AssignAgentThreadComputerInput,\n type CreateAgentThreadInput,\n type ForkAgentThreadInput,\n type ListAgentThreadChildrenInput,\n type ListAgentThreadParticipantsInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n type RemoveAgentThreadParticipantInput,\n type TransitionAgentThreadSandboxInput,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport {\n type AgentContextCheckpointRow,\n type AgentMessageRow,\n type AgentRunRow,\n type AgentThreadParticipantRow,\n type AgentThreadRow,\n queryAgentList,\n rowToContextCheckpointRecord,\n rowToParticipantRecord,\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 assertRunsOn(input.runsOn, \"Agent thread\", \"SixbSqlite\")\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 runs_on,\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.runsOn ?? null,\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 fork(input: ForkAgentThreadInput): Promise<AgentThreadRecord> {\n return this.db\n .transaction(() => {\n const source = this.db\n .query(\n \"SELECT id, kind, active_run_id FROM agent_threads WHERE project_id = ? AND id = ?\"\n )\n .get(input.projectId, input.sourceThreadId) as Pick<\n AgentThreadRow,\n \"id\" | \"kind\" | \"active_run_id\"\n > | null\n\n if (!source) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${input.sourceThreadId}' not found for project '${input.projectId}'.`\n )\n }\n assertConversationThreadRow(source, \"can be forked\", \"SixbSqlite\")\n\n const activeRun = source.active_run_id === null ? null : this.findActiveRun(input, source)\n\n // Only what the plan needs: the parts are copied by the database, not through here. A\n // message of approval outcomes only is not counted (`countsAsThreadMessage`).\n const messages = (\n this.db\n .query(\n `\n SELECT id, seq,\n NOT (\n json_array_length(parts) > 0 AND NOT EXISTS (\n SELECT 1 FROM json_each(agent_messages.parts)\n WHERE json_extract(value, '$.type') <> 'approval-outcome'\n )\n ) AS counted\n FROM agent_messages WHERE project_id = ? AND thread_id = ? ORDER BY seq ASC\n `\n )\n .all(input.projectId, source.id) as (Pick<AgentMessageRow, \"id\" | \"seq\"> & {\n counted: number\n })[]\n ).map((row) => ({ id: row.id, seq: row.seq, counted: row.counted === 1 }))\n\n const checkpoints = 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 `\n )\n .all(input.projectId, source.id) as AgentContextCheckpointRow[]\n\n const plan = planAgentThreadFork(\n input,\n {\n ...(activeRun?.trigger_message_id\n ? { triggerMessageId: activeRun.trigger_message_id }\n : {}),\n messages,\n checkpoints: checkpoints.map(rowToContextCheckpointRecord),\n },\n \"SixbSqlite\"\n )\n\n this.insertForkedThread(plan.thread)\n\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 )\n SELECT\n message.project_id,\n json_extract(copy.value, '$[1]'),\n ?,\n message.run_id,\n message.role,\n message.author_principal_type,\n message.author_principal_id,\n message.seq,\n message.parts,\n message.metadata,\n message.content_version,\n message.created_at,\n message.completed_at\n FROM json_each(?) AS copy\n JOIN agent_messages AS message\n ON message.project_id = ? AND message.id = json_extract(copy.value, '$[0]')\n `\n )\n .run(\n plan.thread.id,\n JSON.stringify(plan.messages.map((copy) => [copy.sourceId, copy.id])),\n input.projectId\n )\n this.remapCopiedParts(\n input.projectId,\n plan.messages.map((copy) => copy.id),\n input.artifactCopies\n )\n\n if (plan.checkpoint) {\n this.insertCopiedCheckpoint(plan.checkpoint)\n }\n\n return this.requireThread(input.projectId, input.id)\n })\n .immediate()\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 listChildren(input: ListAgentThreadChildrenInput): Promise<readonly AgentThreadRecord[]> {\n // By `idx_agent_threads_children`, which holds sub-agents' threads only.\n const turn = input.parentRunId === undefined ? \"\" : \"AND parent_run_id = ?\"\n const rows = this.db\n .query(\n `\n SELECT *\n FROM agent_threads\n WHERE project_id = ? AND parent_thread_id = ? AND kind = 'subagent' ${turn}\n ORDER BY created_at ASC, id ASC\n LIMIT ? OFFSET ?\n `\n )\n .all(\n input.projectId,\n input.parentThreadId,\n ...(input.parentRunId === undefined ? [] : [input.parentRunId]),\n input.limit ?? 100,\n input.offset ?? 0\n ) as AgentThreadRow[]\n return rows.map(rowToThreadRecord)\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 // A sub-agent's thread is read through its conversation; the list indexes leave it out too.\n const whereClauses = [\"project_id = ?\", \"kind = 'conversation'\"]\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 if (input.participantPrincipal) {\n whereClauses.push(`EXISTS (\n SELECT 1 FROM agent_thread_participants participant\n WHERE participant.project_id = agent_threads.project_id\n AND participant.thread_id = agent_threads.id\n AND participant.principal_type = ?\n AND participant.principal_id = ?\n )`)\n args.push(input.participantPrincipal.type, input.participantPrincipal.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 async addParticipants(\n input: AddAgentThreadParticipantsInput\n ): Promise<readonly AgentThreadParticipantRecord[]> {\n return this.db\n .transaction(() => {\n const thread = this.db\n .query(\"SELECT id, kind FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as Pick<AgentThreadRow, \"id\" | \"kind\"> | null\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 assertConversationThreadRow(thread, \"has participants\", \"SixbSqlite\")\n\n const existing = this.selectParticipants(input.projectId, [input.threadId])\n const added = participantsToAdd(input, existing, \"SixbSqlite\")\n const addedAt = (input.addedAt ?? new Date()).toISOString()\n\n const insert = this.db.query(`\n INSERT INTO agent_thread_participants (\n project_id,\n thread_id,\n principal_type,\n principal_id,\n added_at,\n added_by_type,\n added_by_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n `)\n for (const principal of added) {\n insert.run(\n input.projectId,\n input.threadId,\n principal.type,\n principal.id,\n addedAt,\n input.addedBy.type,\n input.addedBy.id\n )\n }\n\n return added.length === 0\n ? existing\n : this.selectParticipants(input.projectId, [input.threadId])\n })\n .immediate()\n }\n\n async removeParticipant(input: RemoveAgentThreadParticipantInput): Promise<boolean> {\n const result = this.db\n .query(`\n DELETE FROM agent_thread_participants\n WHERE project_id = ? AND thread_id = ? AND principal_type = ? AND principal_id = ?\n `)\n .run(input.projectId, input.threadId, input.principal.type, input.principal.id)\n\n return result.changes > 0\n }\n\n async assignComputer(input: AssignAgentThreadComputerInput): Promise<AgentThreadRecord> {\n assertComputerId(input.computerId, \"SixbSqlite\")\n this.db\n .query(`\n UPDATE agent_threads SET computer_id = ?\n WHERE project_id = ? AND id = ? AND runs_on = 'computer'\n ${input.ifUnassigned ? \"AND computer_id IS NULL\" : \"\"}\n `)\n .run(input.computerId, input.projectId, input.id)\n\n // Read in the same tick: nothing else writes to the database in between.\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as AgentThreadRow | null\n const thread = row ? rowToThreadRecord(row) : null\n assertAssignableComputer(thread, input.id, \"SixbSqlite\")\n return thread\n }\n\n async listParticipants(\n input: ListAgentThreadParticipantsInput\n ): Promise<readonly AgentThreadParticipantRecord[]> {\n return this.selectParticipants(input.projectId, [...new Set(input.threadIds)])\n }\n\n private selectParticipants(\n projectId: string,\n threadIds: readonly string[]\n ): AgentThreadParticipantRecord[] {\n if (threadIds.length === 0) {\n return []\n }\n\n const rows = this.db\n .query(`\n SELECT *\n FROM agent_thread_participants\n WHERE project_id = ?\n AND thread_id IN (SELECT value FROM json_each(?))\n ORDER BY added_at, principal_id, thread_id\n `)\n .all(projectId, JSON.stringify(threadIds)) as AgentThreadParticipantRow[]\n\n return rows.map(rowToParticipantRecord)\n }\n\n private findActiveRun(\n input: ForkAgentThreadInput,\n source: Pick<AgentThreadRow, \"active_run_id\">\n ): Pick<AgentRunRow, \"trigger_message_id\"> | null {\n return this.db\n .query(\"SELECT trigger_message_id FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, source.active_run_id) as Pick<AgentRunRow, \"trigger_message_id\"> | null\n }\n\n private insertForkedThread(thread: AgentThreadRecord): void {\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 sandbox_state,\n status,\n active_run_id,\n last_message_at,\n message_count,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?)\n `\n )\n .run(\n thread.projectId,\n thread.id,\n thread.ownerPrincipal.type,\n thread.ownerPrincipal.id,\n thread.title ?? null,\n thread.sandboxParams === undefined ? null : JSON.stringify(thread.sandboxParams),\n thread.sandboxState === undefined ? null : JSON.stringify(thread.sandboxState),\n thread.status,\n thread.lastMessageAt?.toISOString() ?? null,\n thread.messageCount,\n thread.createdAt.toISOString(),\n thread.updatedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent thread '${thread.id}' already exists for project '${thread.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n private insertCopiedCheckpoint(checkpoint: AgentContextCheckpointRecord): void {\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 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 checkpoint.projectId,\n checkpoint.id,\n checkpoint.threadId,\n checkpoint.createdByRunId,\n checkpoint.reason,\n checkpoint.summary,\n checkpoint.summaryFormatVersion,\n checkpoint.summarizedThroughSeq,\n checkpoint.observedHeadSeq,\n checkpoint.estimatedInputTokensBefore,\n checkpoint.estimatedInputTokensAfter,\n checkpoint.summaryModelId,\n checkpoint.createdAt.toISOString()\n )\n }\n\n /** The copied messages name the fork's copies of the source's artifacts. */\n private remapCopiedParts(\n projectId: string,\n messageIds: readonly string[],\n copies: Readonly<Record<string, string>> | undefined\n ): void {\n if (!copies || Object.keys(copies).length === 0 || messageIds.length === 0) return\n\n const rows = this.db\n .query(\n `SELECT id, parts FROM agent_messages\n WHERE project_id = ? AND id IN (SELECT value FROM json_each(?))`\n )\n .all(projectId, JSON.stringify(messageIds)) as {\n readonly id: string\n readonly parts: string\n }[]\n const update = this.db.query(\n \"UPDATE agent_messages SET parts = ? WHERE project_id = ? AND id = ?\"\n )\n for (const row of rows) {\n const parts = remapArtifactIds(row.parts, copies)\n if (parts !== row.parts) update.run(parts, projectId, row.id)\n }\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",
|
|
20
|
-
"import type {
|
|
21
|
-
"import {\n type AiAccountingAggregateFragment,\n type AiAccountingRecordSetItem,\n aiAccountingModelKind,\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.model_kind,\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.image_output_tokens,\n usage.audio_output_tokens,\n usage.output_images,\n usage.input_characters,\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 'kind', model_kind, NULL, 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(COUNT(image_output_tokens) AS TEXT) AS image_output_tokens_count,\n CAST(COUNT(audio_output_tokens) AS TEXT) AS audio_output_tokens_count,\n CAST(COUNT(output_images) AS TEXT) AS output_images_count,\n CAST(COUNT(input_characters) AS TEXT) AS input_characters_count,\n CAST(SUM(audio_duration_ms) AS TEXT) AS audio_duration_ms_sum,\n CAST(SUM(image_output_tokens) AS TEXT) AS image_output_tokens_sum,\n CAST(SUM(audio_output_tokens) AS TEXT) AS audio_output_tokens_sum,\n CAST(SUM(output_images) AS TEXT) AS output_images_sum,\n CAST(SUM(input_characters) AS TEXT) AS input_characters_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 image_output_tokens: number | null\n readonly audio_output_tokens: number | null\n readonly output_images: number | null\n readonly input_characters: 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 image_output_tokens_count: string\n readonly audio_output_tokens_count: string\n readonly output_images_count: string\n readonly input_characters_count: string\n readonly audio_duration_ms_sum: string | null\n readonly image_output_tokens_sum: string | null\n readonly audio_output_tokens_sum: string | null\n readonly output_images_sum: string | null\n readonly input_characters_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 === \"kind\"\n ? withModelKind(aiAccountingModelKind(row.key_1))\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 imageOutputTokens: meterFragment(row.image_output_tokens_count, row.image_output_tokens_sum),\n audioOutputTokens: meterFragment(row.audio_output_tokens_count, row.audio_output_tokens_sum),\n outputImages: meterFragment(row.output_images_count, row.output_images_sum),\n inputCharacters: meterFragment(row.input_characters_count, row.input_characters_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 ...(row.image_output_tokens === null ? {} : { imageOutputTokens: row.image_output_tokens }),\n ...(row.audio_output_tokens === null ? {} : { audioOutputTokens: row.audio_output_tokens }),\n ...(row.output_images === null ? {} : { outputImages: row.output_images }),\n ...(row.input_characters === null ? {} : { inputCharacters: row.input_characters }),\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\nfunction withModelKind(modelKind: AiAccountingAggregateFragment[\"modelKind\"]) {\n return modelKind === undefined ? {} : { modelKind }\n}\n",
|
|
22
|
-
"import {\n type AiModelCallGroupRow,\n aiModelCallGroupFragmentFromRow,\n buildAiModelCallGroupsFromFragments,\n normalizeAiModelCallAccountingQuery,\n TOKENLESS_MODEL_KINDS,\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\n// Fixed kind names, never user input.\nconst TOKENLESS_KINDS = TOKENLESS_MODEL_KINDS.map((kind) => `'${kind}'`).join(\", \")\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, usage.model_kind, usage.output_images, usage.input_characters,\n usage.audio_duration_ms,\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(COUNT(CASE WHEN total_tokens IS NULL AND model_kind IN (${TOKENLESS_KINDS}) THEN 1 END) AS TEXT)\n AS tokenless_count,\n CAST(SUM(total_tokens) AS TEXT) AS total_tokens,\n CAST(SUM(output_images) AS TEXT) AS output_images,\n CAST(SUM(input_characters) AS TEXT) AS input_characters,\n CAST(SUM(audio_duration_ms) AS TEXT) AS audio_duration_ms,\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",
|
|
20
|
+
"import type { Database } from \"bun:sqlite\"\nimport {\n assertAgentThreadComputer,\n assertAssignableComputer,\n assertComputerPlace,\n assertConversationThreadRow,\n assertMovableToCloud,\n movesComputerPlace,\n participantsToAdd,\n planAgentThreadFork,\n queuedTurnInCloud,\n remapArtifactIds,\n snapshotAgentThreadSandboxParams,\n transitionAgentThreadSandbox,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport {\n type AddAgentThreadParticipantsInput,\n type AgentContextCheckpointRecord,\n type AgentRunRecord,\n AgentStorageError,\n type AgentThreadParticipantRecord,\n type AgentThreadRecord,\n type AgentThreadSandboxState,\n type AgentThreadStore,\n type AssignAgentThreadComputerInput,\n type CreateAgentThreadInput,\n type ForkAgentThreadInput,\n type ListAgentThreadChildrenInput,\n type ListAgentThreadParticipantsInput,\n type ListAgentThreadsInput,\n type ListAgentThreadsResult,\n type MoveAgentThreadToCloudInput,\n type MoveAgentThreadToCloudResult,\n type RemoveAgentThreadParticipantInput,\n type TransitionAgentThreadSandboxInput,\n} from \"@sixb/core/storage\"\nimport type { SqliteValue } from \"../run-list-query\"\nimport { isUniqueConstraintError } from \"../storage-errors\"\nimport {\n type AgentContextCheckpointRow,\n type AgentMessageRow,\n type AgentRunRow,\n type AgentThreadParticipantRow,\n type AgentThreadRow,\n queryAgentList,\n rowToContextCheckpointRecord,\n rowToParticipantRecord,\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 assertComputerPlace(input.runsOn, input.computer, \"SixbSqlite\")\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 runs_on,\n computer_id,\n computer_name,\n computer_folder,\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.runsOn ?? null,\n input.computer?.id ?? null,\n input.computer?.name ?? null,\n input.computer?.folder ?? null,\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 private activeRunOf(projectId: string, thread: AgentThreadRecord | null): AgentRunRecord | null {\n const row = thread?.activeRunId\n ? (this.db\n .query(\"SELECT * FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(projectId, thread.activeRunId) as AgentRunRow | null)\n : null\n return row ? rowToRunRecord(row) : null\n }\n\n async fork(input: ForkAgentThreadInput): Promise<AgentThreadRecord> {\n return this.db\n .transaction(() => {\n const source = this.db\n .query(\n \"SELECT id, kind, active_run_id, runs_on, moved_at FROM agent_threads WHERE project_id = ? AND id = ?\"\n )\n .get(input.projectId, input.sourceThreadId) as Pick<\n AgentThreadRow,\n \"id\" | \"kind\" | \"active_run_id\" | \"runs_on\" | \"moved_at\"\n > | null\n\n if (!source) {\n throw new AgentStorageError(\n \"thread_not_found\",\n `[SixbSqlite] Agent thread '${input.sourceThreadId}' not found for project '${input.projectId}'.`\n )\n }\n assertConversationThreadRow(source, \"can be forked\", \"SixbSqlite\")\n\n const activeRun = source.active_run_id === null ? null : this.findActiveRun(input, source)\n\n // Only what the plan needs: the parts are copied by the database, not through here. A\n // message of approval outcomes only is not counted (`countsAsThreadMessage`).\n const messages = (\n this.db\n .query(\n `\n SELECT id, seq,\n NOT (\n json_array_length(parts) > 0 AND NOT EXISTS (\n SELECT 1 FROM json_each(agent_messages.parts)\n WHERE json_extract(value, '$.type') <> 'approval-outcome'\n )\n ) AS counted\n FROM agent_messages WHERE project_id = ? AND thread_id = ? ORDER BY seq ASC\n `\n )\n .all(input.projectId, source.id) as (Pick<AgentMessageRow, \"id\" | \"seq\"> & {\n counted: number\n })[]\n ).map((row) => ({ id: row.id, seq: row.seq, counted: row.counted === 1 }))\n\n const checkpoints = 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 `\n )\n .all(input.projectId, source.id) as AgentContextCheckpointRow[]\n\n const plan = planAgentThreadFork(\n input,\n {\n workspace: { runsOn: source.runs_on, movedAt: source.moved_at },\n ...(activeRun?.trigger_message_id\n ? { triggerMessageId: activeRun.trigger_message_id }\n : {}),\n messages,\n checkpoints: checkpoints.map(rowToContextCheckpointRecord),\n },\n \"SixbSqlite\"\n )\n\n this.insertForkedThread(plan.thread)\n\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 )\n SELECT\n message.project_id,\n json_extract(copy.value, '$[1]'),\n ?,\n message.run_id,\n message.role,\n message.author_principal_type,\n message.author_principal_id,\n message.seq,\n message.parts,\n message.metadata,\n message.content_version,\n message.created_at,\n message.completed_at\n FROM json_each(?) AS copy\n JOIN agent_messages AS message\n ON message.project_id = ? AND message.id = json_extract(copy.value, '$[0]')\n `\n )\n .run(\n plan.thread.id,\n JSON.stringify(plan.messages.map((copy) => [copy.sourceId, copy.id])),\n input.projectId\n )\n this.remapCopiedParts(\n input.projectId,\n plan.messages.map((copy) => copy.id),\n input.artifactCopies\n )\n\n if (plan.checkpoint) {\n this.insertCopiedCheckpoint(plan.checkpoint)\n }\n\n return this.requireThread(input.projectId, input.id)\n })\n .immediate()\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 listChildren(input: ListAgentThreadChildrenInput): Promise<readonly AgentThreadRecord[]> {\n // By `idx_agent_threads_children`, which holds sub-agents' threads only.\n const turn = input.parentRunId === undefined ? \"\" : \"AND parent_run_id = ?\"\n const rows = this.db\n .query(\n `\n SELECT *\n FROM agent_threads\n WHERE project_id = ? AND parent_thread_id = ? AND kind = 'subagent' ${turn}\n ORDER BY created_at ASC, id ASC\n LIMIT ? OFFSET ?\n `\n )\n .all(\n input.projectId,\n input.parentThreadId,\n ...(input.parentRunId === undefined ? [] : [input.parentRunId]),\n input.limit ?? 100,\n input.offset ?? 0\n ) as AgentThreadRow[]\n return rows.map(rowToThreadRecord)\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 // A sub-agent's thread is read through its conversation; the list indexes leave it out too.\n const whereClauses = [\"project_id = ?\", \"kind = 'conversation'\"]\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 if (input.participantPrincipal) {\n whereClauses.push(`EXISTS (\n SELECT 1 FROM agent_thread_participants participant\n WHERE participant.project_id = agent_threads.project_id\n AND participant.thread_id = agent_threads.id\n AND participant.principal_type = ?\n AND participant.principal_id = ?\n )`)\n args.push(input.participantPrincipal.type, input.participantPrincipal.id)\n }\n\n if (input.activeOnComputer) {\n whereClauses.push(\"computer_id = ? AND computer_folder = ? AND active_run_id IS NOT NULL\")\n args.push(input.activeOnComputer.id, input.activeOnComputer.folder)\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 async addParticipants(\n input: AddAgentThreadParticipantsInput\n ): Promise<readonly AgentThreadParticipantRecord[]> {\n return this.db\n .transaction(() => {\n const thread = this.db\n .query(\"SELECT id, kind FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.threadId) as Pick<AgentThreadRow, \"id\" | \"kind\"> | null\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 assertConversationThreadRow(thread, \"has participants\", \"SixbSqlite\")\n\n const existing = this.selectParticipants(input.projectId, [input.threadId])\n const added = participantsToAdd(input, existing, \"SixbSqlite\")\n const addedAt = (input.addedAt ?? new Date()).toISOString()\n\n const insert = this.db.query(`\n INSERT INTO agent_thread_participants (\n project_id,\n thread_id,\n principal_type,\n principal_id,\n added_at,\n added_by_type,\n added_by_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n `)\n for (const principal of added) {\n insert.run(\n input.projectId,\n input.threadId,\n principal.type,\n principal.id,\n addedAt,\n input.addedBy.type,\n input.addedBy.id\n )\n }\n\n return added.length === 0\n ? existing\n : this.selectParticipants(input.projectId, [input.threadId])\n })\n .immediate()\n }\n\n async removeParticipant(input: RemoveAgentThreadParticipantInput): Promise<boolean> {\n const result = this.db\n .query(`\n DELETE FROM agent_thread_participants\n WHERE project_id = ? AND thread_id = ? AND principal_type = ? AND principal_id = ?\n `)\n .run(input.projectId, input.threadId, input.principal.type, input.principal.id)\n\n return result.changes > 0\n }\n\n async assignComputer(input: AssignAgentThreadComputerInput): Promise<AgentThreadRecord> {\n assertAgentThreadComputer(input.computer, \"SixbSqlite\")\n return this.db\n .transaction(() => {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as AgentThreadRow | null\n const thread = row ? rowToThreadRecord(row) : null\n assertAssignableComputer(\n thread,\n this.activeRunOf(input.projectId, thread),\n input.computer,\n input.id,\n \"SixbSqlite\"\n )\n const movedAt = movesComputerPlace(thread, input.computer)\n ? (input.movedAt ?? new Date()).toISOString()\n : null\n this.db\n .query(`\n UPDATE agent_threads\n SET computer_id = ?, computer_name = ?, computer_folder = ?,\n moved_at = COALESCE(?, moved_at)\n WHERE project_id = ? AND id = ?\n `)\n .run(\n input.computer.id,\n input.computer.name,\n input.computer.folder,\n movedAt,\n input.projectId,\n input.id\n )\n return this.requireThread(input.projectId, input.id)\n })\n .immediate()\n }\n\n async moveToCloud(input: MoveAgentThreadToCloudInput): Promise<MoveAgentThreadToCloudResult> {\n return this.db\n .transaction(() => {\n const row = this.db\n .query(\"SELECT * FROM agent_threads WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as AgentThreadRow | null\n const thread = row ? rowToThreadRecord(row) : null\n const active = this.activeRunOf(input.projectId, thread)\n assertMovableToCloud(thread, active, input.id, \"SixbSqlite\")\n\n const queued = queuedTurnInCloud(active)\n if (queued) {\n this.db\n .query(\"UPDATE agent_runs SET spec = ? WHERE project_id = ? AND id = ?\")\n .run(JSON.stringify(queued.spec), input.projectId, queued.id)\n }\n this.db\n .query(`\n UPDATE agent_threads\n SET runs_on = NULL, computer_id = NULL, computer_name = NULL, computer_folder = NULL,\n moved_at = ?\n WHERE project_id = ? AND id = ?\n `)\n .run((input.movedAt ?? new Date()).toISOString(), input.projectId, input.id)\n const moved = this.requireThread(input.projectId, input.id)\n return { thread: moved, ...(queued ? { queued } : {}) }\n })\n .immediate()\n }\n\n async listParticipants(\n input: ListAgentThreadParticipantsInput\n ): Promise<readonly AgentThreadParticipantRecord[]> {\n return this.selectParticipants(input.projectId, [...new Set(input.threadIds)])\n }\n\n private selectParticipants(\n projectId: string,\n threadIds: readonly string[]\n ): AgentThreadParticipantRecord[] {\n if (threadIds.length === 0) {\n return []\n }\n\n const rows = this.db\n .query(`\n SELECT *\n FROM agent_thread_participants\n WHERE project_id = ?\n AND thread_id IN (SELECT value FROM json_each(?))\n ORDER BY added_at, principal_id, thread_id\n `)\n .all(projectId, JSON.stringify(threadIds)) as AgentThreadParticipantRow[]\n\n return rows.map(rowToParticipantRecord)\n }\n\n private findActiveRun(\n input: ForkAgentThreadInput,\n source: Pick<AgentThreadRow, \"active_run_id\">\n ): Pick<AgentRunRow, \"trigger_message_id\"> | null {\n return this.db\n .query(\"SELECT trigger_message_id FROM agent_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, source.active_run_id) as Pick<AgentRunRow, \"trigger_message_id\"> | null\n }\n\n private insertForkedThread(thread: AgentThreadRecord): void {\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 sandbox_state,\n status,\n active_run_id,\n last_message_at,\n message_count,\n moved_at,\n created_at,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, ?)\n `\n )\n .run(\n thread.projectId,\n thread.id,\n thread.ownerPrincipal.type,\n thread.ownerPrincipal.id,\n thread.title ?? null,\n thread.sandboxParams === undefined ? null : JSON.stringify(thread.sandboxParams),\n thread.sandboxState === undefined ? null : JSON.stringify(thread.sandboxState),\n thread.status,\n thread.lastMessageAt?.toISOString() ?? null,\n thread.messageCount,\n thread.movedAt?.toISOString() ?? null,\n thread.createdAt.toISOString(),\n thread.updatedAt.toISOString()\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new AgentStorageError(\n \"duplicate_id\",\n `[SixbSqlite] Agent thread '${thread.id}' already exists for project '${thread.projectId}'.`\n )\n }\n\n throw error\n }\n }\n\n private insertCopiedCheckpoint(checkpoint: AgentContextCheckpointRecord): void {\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 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 checkpoint.projectId,\n checkpoint.id,\n checkpoint.threadId,\n checkpoint.createdByRunId,\n checkpoint.reason,\n checkpoint.summary,\n checkpoint.summaryFormatVersion,\n checkpoint.summarizedThroughSeq,\n checkpoint.observedHeadSeq,\n checkpoint.estimatedInputTokensBefore,\n checkpoint.estimatedInputTokensAfter,\n checkpoint.summaryModelId,\n checkpoint.createdAt.toISOString()\n )\n }\n\n /** The copied messages name the fork's copies of the source's artifacts. */\n private remapCopiedParts(\n projectId: string,\n messageIds: readonly string[],\n copies: Readonly<Record<string, string>> | undefined\n ): void {\n if (!copies || Object.keys(copies).length === 0 || messageIds.length === 0) return\n\n const rows = this.db\n .query(\n `SELECT id, parts FROM agent_messages\n WHERE project_id = ? AND id IN (SELECT value FROM json_each(?))`\n )\n .all(projectId, JSON.stringify(messageIds)) as {\n readonly id: string\n readonly parts: string\n }[]\n const update = this.db.query(\n \"UPDATE agent_messages SET parts = ? WHERE project_id = ? AND id = ?\"\n )\n for (const row of rows) {\n const parts = remapArtifactIds(row.parts, copies)\n if (parts !== row.parts) update.run(parts, projectId, row.id)\n }\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",
|
|
21
|
+
"import type { Database } from \"bun:sqlite\"\nimport {\n AGENT_TOKEN_RATE_SAMPLES,\n assertAgentTokenRateRecord,\n} from \"@sixb/core/internal/agent-run-storage-provider\"\nimport type { AgentTokenRateRecord, AgentTokenRateStore } from \"@sixb/core/storage\"\nimport { runImmediateTransaction } from \"../transactions\"\n\ninterface TokenRateRow {\n readonly project_id: string\n readonly run_id: string\n readonly provider_id: string\n readonly model_id: string\n readonly bytes: number\n readonly tokens: number\n readonly measured_at: string\n}\n\nexport class SqliteAgentTokenRateStore implements AgentTokenRateStore {\n constructor(private readonly db: Database) {}\n\n async record(input: AgentTokenRateRecord): Promise<void> {\n assertAgentTokenRateRecord(input, \"SixbSqlite\")\n\n runImmediateTransaction(this.db, () => {\n this.db\n .query(\n `INSERT INTO agent_token_rates (\n project_id, run_id, provider_id, model_id, bytes, tokens, measured_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, run_id) DO UPDATE SET\n provider_id = excluded.provider_id, model_id = excluded.model_id,\n bytes = excluded.bytes, tokens = excluded.tokens, measured_at = excluded.measured_at`\n )\n .run(\n input.projectId,\n input.runId,\n input.providerId,\n input.modelId,\n input.bytes,\n input.tokens,\n input.measuredAt.toISOString()\n )\n\n this.db\n .query(\n `DELETE FROM agent_token_rates\n WHERE project_id = ?1 AND provider_id = ?2 AND model_id = ?3\n AND run_id NOT IN (\n SELECT run_id FROM agent_token_rates\n WHERE project_id = ?1 AND provider_id = ?2 AND model_id = ?3\n ORDER BY measured_at DESC, run_id DESC\n LIMIT ?4\n )`\n )\n .run(input.projectId, input.providerId, input.modelId, AGENT_TOKEN_RATE_SAMPLES)\n })\n }\n\n async listLatest(input: {\n readonly projectId: string\n readonly providerId: string\n readonly modelId: string\n }): Promise<readonly AgentTokenRateRecord[]> {\n const rows = this.db\n .query(\n `SELECT project_id, run_id, provider_id, model_id, bytes, tokens, measured_at\n FROM agent_token_rates\n WHERE project_id = ? AND provider_id = ? AND model_id = ?\n ORDER BY measured_at DESC, run_id DESC\n LIMIT ?`\n )\n .all(\n input.projectId,\n input.providerId,\n input.modelId,\n AGENT_TOKEN_RATE_SAMPLES\n ) as TokenRateRow[]\n\n return rows.map((row) => ({\n projectId: row.project_id,\n providerId: row.provider_id,\n modelId: row.model_id,\n runId: row.run_id,\n bytes: row.bytes,\n tokens: row.tokens,\n measuredAt: new Date(row.measured_at),\n }))\n }\n}\n",
|
|
22
|
+
"import type { AgentStorage, ExecutionStorage } from \"@sixb/core/storage\"\nimport {\n closeSqliteStoreConnection,\n openSqliteStoreConnection,\n type SqliteStoreConnection,\n} from \"../transactions\"\nimport { SqliteAgentApprovalStore } from \"./approvals\"\nimport { SqliteAgentContextCheckpointStore } from \"./checkpoints\"\nimport { SqliteAgentComputerSessionStore } from \"./computers\"\nimport { SqliteAgentMemoryStore } from \"./memory\"\nimport { SqliteAgentMessageStore } from \"./messages\"\nimport { SqliteAgentRunStore } from \"./runs\"\nimport { SqliteAgentApprovalModeStore } from \"./settings\"\nimport { SqliteAgentThreadStore } from \"./threads\"\nimport { SqliteAgentTokenRateStore } from \"./token-rates\"\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, context-checkpoint, memory, approval,\n * approval-mode, computer-session and token-rate sub-stores sharing one connection. Cross-table writes run in\n * SQLite transactions; the bundled {@link SqliteStorage} serializes them for single-flight and\n * 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 readonly memory: SqliteAgentMemoryStore\n readonly approvals: SqliteAgentApprovalStore\n readonly approvalModes: SqliteAgentApprovalModeStore\n readonly computers: SqliteAgentComputerSessionStore\n readonly tokenRates: SqliteAgentTokenRateStore\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 this.memory = new SqliteAgentMemoryStore(this.connection.db)\n this.approvals = new SqliteAgentApprovalStore(this.connection.db)\n this.approvalModes = new SqliteAgentApprovalModeStore(this.connection.db)\n this.computers = new SqliteAgentComputerSessionStore(this.connection.db)\n this.tokenRates = new SqliteAgentTokenRateStore(this.connection.db)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n",
|
|
23
|
+
"import {\n type AiAccountingAggregateFragment,\n type AiAccountingRecordSetItem,\n aiAccountingModelKind,\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 {\n SQLITE_SOURCE_KIND,\n SQLITE_SOURCE_WORKFLOW,\n sqliteAccountingFilter,\n sqliteAccountingFilterParameters,\n} from \"./ai-accounting-filters\"\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 ...sqliteAccountingFilterParameters(query),\n input.bucket,\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 AND ${sqliteAccountingFilter({\n kind: \"usage.model_kind\",\n sourceKind: SQLITE_SOURCE_KIND,\n sourceWorkflow: SQLITE_SOURCE_WORKFLOW,\n userId: \"execution.requested_by_user_id\",\n serviceAccountId: \"execution.requested_by_service_account_id\",\n })}\n`\n\nconst SQLITE_ACCOUNTING_LIST_JOINS = `\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`\n\nconst SQLITE_ACCOUNTING_LIST_COUNT_SQL = `\n SELECT CAST(COUNT(*) AS TEXT) AS total\n FROM ai_model_call_usage AS usage\n ${SQLITE_ACCOUNTING_LIST_JOINS}\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 ${SQLITE_ACCOUNTING_LIST_JOINS}\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.model_kind,\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.image_output_tokens,\n usage.audio_output_tokens,\n usage.output_images,\n usage.input_characters,\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 execution.requested_by_user_id AS requester_user_id,\n execution.requested_by_service_account_id AS requester_service_account_id,\n ${SQLITE_SOURCE_KIND} AS source_kind\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 ), filtered AS (\n SELECT * FROM classified\n WHERE ${sqliteAccountingFilter({\n kind: \"model_kind\",\n sourceKind: \"source_kind\",\n sourceWorkflow: \"attribution_workflow_id\",\n userId: \"requester_user_id\",\n serviceAccountId: \"requester_service_account_id\",\n })}\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 filtered.*\n FROM filtered\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 filtered.*\n FROM filtered\n UNION ALL\n SELECT 'modelSeries', provider_id, requested_model_id, 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 filtered.*\n FROM filtered\n UNION ALL\n SELECT 'model', provider_id, requested_model_id, NULL, NULL, filtered.* FROM filtered\n UNION ALL\n SELECT 'person',\n CASE\n WHEN requester_user_id IS NOT NULL THEN 'user'\n WHEN requester_service_account_id IS NOT NULL THEN 'serviceAccount'\n END,\n COALESCE(requester_user_id, requester_service_account_id), NULL, NULL, filtered.*\n FROM filtered\n UNION ALL\n SELECT 'kind', model_kind, NULL, NULL, NULL, filtered.* FROM filtered\n UNION ALL\n SELECT 'agent', attribution_agent_kind, attribution_workflow_id, attribution_agent_step_id, NULL, filtered.*\n FROM filtered WHERE attribution_agent_kind IS NOT NULL\n UNION ALL\n SELECT 'workflow', attribution_workflow_id, NULL, NULL, NULL, filtered.*\n FROM filtered 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(COUNT(image_output_tokens) AS TEXT) AS image_output_tokens_count,\n CAST(COUNT(audio_output_tokens) AS TEXT) AS audio_output_tokens_count,\n CAST(COUNT(output_images) AS TEXT) AS output_images_count,\n CAST(COUNT(input_characters) AS TEXT) AS input_characters_count,\n CAST(SUM(audio_duration_ms) AS TEXT) AS audio_duration_ms_sum,\n CAST(SUM(image_output_tokens) AS TEXT) AS image_output_tokens_sum,\n CAST(SUM(audio_output_tokens) AS TEXT) AS audio_output_tokens_sum,\n CAST(SUM(output_images) AS TEXT) AS output_images_sum,\n CAST(SUM(input_characters) AS TEXT) AS input_characters_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 ...sqliteAccountingFilterParameters(query),\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 image_output_tokens: number | null\n readonly audio_output_tokens: number | null\n readonly output_images: number | null\n readonly input_characters: 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 image_output_tokens_count: string\n readonly audio_output_tokens_count: string\n readonly output_images_count: string\n readonly input_characters_count: string\n readonly audio_duration_ms_sum: string | null\n readonly image_output_tokens_sum: string | null\n readonly audio_output_tokens_sum: string | null\n readonly output_images_sum: string | null\n readonly input_characters_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 === \"modelSeries\"\n ? {\n providerId: required(row.key_1),\n modelId: required(row.key_2),\n start: new Date(required(row.bucket_start)),\n }\n : row.dimension === \"person\"\n ? row.key_1 && row.key_2\n ? { requesterType: row.key_1 as \"user\" | \"serviceAccount\", requesterId: row.key_2 }\n : {}\n : row.dimension === \"kind\"\n ? withModelKind(aiAccountingModelKind(row.key_1))\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 imageOutputTokens: meterFragment(row.image_output_tokens_count, row.image_output_tokens_sum),\n audioOutputTokens: meterFragment(row.audio_output_tokens_count, row.audio_output_tokens_sum),\n outputImages: meterFragment(row.output_images_count, row.output_images_sum),\n inputCharacters: meterFragment(row.input_characters_count, row.input_characters_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 ...(row.image_output_tokens === null ? {} : { imageOutputTokens: row.image_output_tokens }),\n ...(row.audio_output_tokens === null ? {} : { audioOutputTokens: row.audio_output_tokens }),\n ...(row.output_images === null ? {} : { outputImages: row.output_images }),\n ...(row.input_characters === null ? {} : { inputCharacters: row.input_characters }),\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\nfunction withModelKind(modelKind: AiAccountingAggregateFragment[\"modelKind\"]) {\n return modelKind === undefined ? {} : { modelKind }\n}\n",
|
|
24
|
+
"import type { normalizeAiAccountingQuery } from \"@sixb/core/internal/ai-cost-storage-provider\"\n\n// The kind, source and requester filters every accounting read shares, over the joins it makes:\n// `execution`, `direct_agent`, `workflow_node`.\n\n/** Where a call came from, as `aiAccountingSource` reads its attribution. */\nexport const SQLITE_SOURCE_WORKFLOW = `COALESCE(\n workflow_node.workflow_id,\n CASE WHEN execution.executor_kind = 'workflow' THEN execution.authority_primitive_id END\n)`\nexport const SQLITE_SOURCE_KIND = `CASE\n WHEN direct_agent.id IS NOT NULL THEN 'agent'\n WHEN ${SQLITE_SOURCE_WORKFLOW} IS NOT NULL THEN 'workflow'\n WHEN execution.executor_kind = 'action' THEN 'action'\n ELSE 'other'\nEND`\n\n/** The kind, source and requester filters over the columns that hold them; 12 positional params. */\nexport function sqliteAccountingFilter(columns: {\n readonly kind: string\n readonly sourceKind: string\n readonly sourceWorkflow: string\n readonly userId: string\n readonly serviceAccountId: string\n}): string {\n return `(? IS NULL OR ${columns.kind} = ?)\n AND (? IS NULL OR ${columns.sourceKind} = ?)\n AND (? IS NULL OR ${columns.sourceWorkflow} = ?)\n AND (\n ? IS NULL\n OR (? = 'none' AND ${columns.userId} IS NULL AND ${columns.serviceAccountId} IS NULL)\n OR (? = 'user' AND ${columns.userId} = ?)\n OR (? = 'serviceAccount' AND ${columns.serviceAccountId} = ?)\n )`\n}\n\nexport function sqliteAccountingFilterParameters(\n query: ReturnType<typeof normalizeAiAccountingQuery>\n): readonly (string | null)[] {\n const kind = query.modelKind ?? null\n const source = query.source?.kind ?? null\n const workflow = query.source?.kind === \"workflow\" ? (query.source.workflowId ?? null) : null\n const mode =\n query.requester === undefined\n ? null\n : query.requester === \"none\"\n ? \"none\"\n : query.requester.type\n const id = query.requester === undefined || query.requester === \"none\" ? null : query.requester.id\n return [kind, kind, source, source, workflow, workflow, mode, mode, mode, id, mode, id]\n}\n",
|
|
25
|
+
"import {\n type AiModelCallGroupRow,\n aiModelCallGroupFragmentFromRow,\n buildAiModelCallGroupsFromFragments,\n normalizeAiModelCallAccountingQuery,\n normalizeAiModelCallGroupSort,\n TOKENLESS_MODEL_KINDS,\n} from \"@sixb/core/internal/ai-cost-storage-provider\"\nimport type { ListAiModelCallGroupsInput, ListAiModelCallGroupsResult } from \"@sixb/core/storage\"\nimport {\n SQLITE_SOURCE_KIND,\n SQLITE_SOURCE_WORKFLOW,\n sqliteAccountingFilter,\n sqliteAccountingFilterParameters,\n} from \"./ai-accounting-filters\"\nimport type { SqliteStoreConnection } from \"./transactions\"\n\n/** Positional `?` placeholders numbered from `start`, to sit among this file's numbered ones. */\nfunction numbered(sql: string, start: number): string {\n let next = start\n return sql.replace(/\\?(?!\\d)/g, () => `?${next++}`)\n}\n\n/** Paginate conversations, workflow runs and other 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 sort = normalizeAiModelCallGroupSort(input.sort)\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 filters = sqliteAccountingFilterParameters(query)\n const count = connection.db.query(COUNT_SQL).get(...parameters, ...filters) as { total: string }\n const rows = connection.db\n .query(PAGE_SQL)\n .all(...parameters, ...filters, query.limit, query.offset, sort) 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), sort)\n return { items, total, hasMore: query.offset + items.length < total }\n}\n\n// Fixed kind names, never user input.\nconst TOKENLESS_KINDS = TOKENLESS_MODEL_KINDS.map((kind) => `'${kind}'`).join(\", \")\n\nconst FILTERED_SQL = `\nWITH filtered AS (\n SELECT COALESCE(root_agent.execution_id, usage.execution_id) AS root_execution_id,\n -- What the call is listed under, as aiModelCallGroupKey computes it.\n CASE\n WHEN root_agent.thread_id IS NOT NULL THEN 'thread:' || root_agent.thread_id\n WHEN workflow_node.workflow_run_id IS NOT NULL THEN 'workflowRun:' || workflow_node.workflow_run_id\n ELSE COALESCE(root_agent.execution_id, usage.execution_id)\n END AS group_key,\n usage.execution_id, usage.provider_id, usage.requested_model_id, usage.occurred_at,\n usage.total_tokens, usage.input_tokens, usage.cache_read_input_tokens,\n usage.model_kind, usage.output_images, usage.input_characters,\n usage.audio_duration_ms,\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 execution.requested_by_user_id, execution.requested_by_service_account_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 AND ${numbered(\n sqliteAccountingFilter({\n kind: \"usage.model_kind\",\n sourceKind: SQLITE_SOURCE_KIND,\n sourceWorkflow: SQLITE_SOURCE_WORKFLOW,\n userId: \"execution.requested_by_user_id\",\n serviceAccountId: \"execution.requested_by_service_account_id\",\n }),\n 7\n )}\n), roots AS (\n SELECT group_key, MAX(occurred_at) AS last_call_at, TOTAL(amount_nanos) AS cost_nanos\n FROM filtered GROUP BY group_key\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 group_key FROM roots\n ORDER BY CASE WHEN ?21 = 'cost' THEN cost_nanos END DESC, last_call_at DESC, group_key ASC\n LIMIT ?19 OFFSET ?20\n)\nSELECT filtered.group_key, 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(COUNT(CASE WHEN total_tokens IS NULL AND model_kind IN (${TOKENLESS_KINDS}) THEN 1 END) AS TEXT)\n AS tokenless_count,\n CAST(SUM(total_tokens) AS TEXT) AS total_tokens,\n CAST(SUM(input_tokens) AS TEXT) AS input_tokens,\n CAST(SUM(cache_read_input_tokens) AS TEXT) AS cache_read_input_tokens,\n CAST(SUM(output_images) AS TEXT) AS output_images,\n CAST(SUM(input_characters) AS TEXT) AS input_characters,\n CAST(SUM(audio_duration_ms) AS TEXT) AS audio_duration_ms,\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,\n MAX(requested_by_user_id) AS requested_by_user_id,\n MAX(requested_by_service_account_id) AS requested_by_service_account_id\nFROM filtered JOIN page ON page.group_key = filtered.group_key\nGROUP BY filtered.group_key, root_execution_id, execution_id, provider_id, requested_model_id,\n valuation_status, amount_currency\n`\n",
|
|
23
26
|
"import type { FileRef } from \"@sixb/core/blob-storage/server\"\nimport {\n assertAiUsageExecutionId,\n assertSameCallExecution,\n normalizeAiModelCallFilesRecord,\n normalizeAiModelCallRecord,\n} from \"@sixb/core/internal/storage\"\nimport { isModelReasoning, normalizeModelProviderIds } from \"@sixb/core/models\"\nimport type { ReadonlyJsonObject } from \"@sixb/core/storage\"\nimport {\n type AiModelCallFilesRecord,\n type AiModelCallUsageInput,\n type AiModelCallUsageRecord,\n type AiUsageExecutionSummary,\n type AiUsageStorage,\n AiUsageStorageError,\n aggregateAiModelCallUsage,\n type GetAiModelCallFilesInput,\n type GetLatestAiModelCallForExecutionInput,\n type RecordAiModelCallFilesInput,\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 async recordModelCallFiles(input: RecordAiModelCallFilesInput): Promise<AiModelCallFilesRecord> {\n const record = normalizeAiModelCallFilesRecord(input)\n return runImmediateTransaction(this.connection.db, () => {\n const existing = this.findCallFiles(record.projectId, record.callId)\n if (existing) return assertSameCallExecution(existing, record)\n this.assertExecutionExists(record.projectId, record.executionId)\n this.connection.db\n .query(\n `\n INSERT INTO ai_model_call_files (project_id, call_id, execution_id, files, recorded_at)\n VALUES (?, ?, ?, ?, ?)\n `\n )\n .run(\n record.projectId,\n record.callId,\n record.executionId,\n JSON.stringify(record.files),\n record.recordedAt.toISOString()\n )\n return record\n })\n }\n\n async getModelCallFiles(input: GetAiModelCallFilesInput): Promise<AiModelCallFilesRecord | null> {\n assertNonBlankProjectId(input.projectId)\n return this.findCallFiles(input.projectId, input.callId)\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n\n private findCallFiles(projectId: string, callId: string): AiModelCallFilesRecord | null {\n const row = this.connection.db\n .query(\"SELECT * FROM ai_model_call_files WHERE project_id = ? AND call_id = ?\")\n .get(projectId, callId) as CallFilesRow | null\n return row\n ? {\n projectId: row.project_id,\n executionId: row.execution_id,\n callId: row.call_id,\n files: JSON.parse(row.files) as FileRef[],\n recordedAt: new Date(row.recorded_at),\n }\n : null\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 image_output_tokens,\n audio_output_tokens,\n output_images,\n input_characters,\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.imageOutputTokens ?? null,\n record.usage.audioOutputTokens ?? null,\n record.usage.outputImages ?? null,\n record.usage.inputCharacters ?? 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 CallFilesRow {\n readonly project_id: string\n readonly call_id: string\n readonly execution_id: string\n readonly files: string\n readonly recorded_at: string\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 image_output_tokens: number | null\n readonly audio_output_tokens: number | null\n readonly output_images: number | null\n readonly input_characters: 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 ...(row.image_output_tokens === null ? {} : { imageOutputTokens: row.image_output_tokens }),\n ...(row.audio_output_tokens === null ? {} : { audioOutputTokens: row.audio_output_tokens }),\n ...(row.output_images === null ? {} : { outputImages: row.output_images }),\n ...(row.input_characters === null ? {} : { inputCharacters: row.input_characters }),\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",
|
|
24
27
|
"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",
|
|
25
28
|
"import type { Database, SQLQueryBindings } from \"bun:sqlite\"\nimport {\n artifactStateBytes,\n artifactStorageErrors,\n checkArtifactStateWrite,\n parseArtifactFrameGrantRow,\n parseArtifactRow,\n parseArtifactStateRow,\n parseArtifactVersionRow,\n} from \"@sixb/core/internal/storage\"\nimport type {\n ArtifactFrameGrantRecord,\n ArtifactRecord,\n ArtifactStateEntry,\n ArtifactStateKeyInput,\n ArtifactStateScope,\n ArtifactStorage,\n ArtifactVersionInput,\n ArtifactVersionRecord,\n CopyArtifactInput,\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 SetArtifactStateInput,\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\nconst STATE_COLUMNS = \"key, value, size_bytes AS sizeBytes, updated_at AS updatedAt\"\n\n/** One reader of one artifact: the bindings that follow `STATE_SCOPE`. */\nconst STATE_SCOPE = \"project_id = ? AND artifact_id = ? AND principal_type = ? AND principal_id = ?\"\n\nfunction stateScope(input: ArtifactStateScope): SQLQueryBindings[] {\n return [input.projectId, input.artifactId, input.principal.type, input.principal.id]\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, latest_version AS latestVersion\n 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 readonly latestVersion: 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 // Inside the write transaction: a publish from the same base after this one finds it moved.\n if (input.baseVersion !== undefined && current.latestVersion !== input.baseVersion) {\n const latest = parseArtifactVersionRow(\n 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, current.latestVersion) as Row\n )\n throw artifactStorageErrors.moved(input.artifactId, input.baseVersion, {\n version: latest.version,\n author: latest.author,\n })\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.threadId !== undefined) {\n where.push(\n `EXISTS (\n SELECT 1 FROM artifact_threads t\n WHERE t.project_id = a.project_id AND t.artifact_id = a.id AND t.thread_id = ?\n )`\n )\n params.push(input.threadId)\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 listThreadIds(input: GetArtifactInput): Promise<string[]> {\n const rows = this.db\n .query(\n `SELECT thread_id AS threadId FROM artifact_threads\n WHERE project_id = ? AND artifact_id = ? ORDER BY thread_id`\n )\n .all(input.projectId, input.id) as { readonly threadId: string }[]\n return rows.map((row) => row.threadId)\n }\n\n async copy(input: CopyArtifactInput): Promise<ArtifactRecord> {\n return runImmediateTransaction(this.db, () => {\n const source = this.db\n .query(\"SELECT id FROM artifacts WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.sourceId)\n if (!source) throw artifactStorageErrors.notFound(input.sourceId)\n\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 )\n SELECT project_id, ?, kind, title, ?, ?, latest_version, next_version, created_at,\n updated_at\n FROM artifacts WHERE project_id = ? AND id = ?\n ON CONFLICT (project_id, id) DO NOTHING\n RETURNING ${ARTIFACT_COLUMNS}`\n )\n .get(\n input.id,\n input.owner.type,\n input.owner.id,\n input.projectId,\n input.sourceId\n ) as Row | null\n if (!artifact) throw artifactStorageErrors.exists(input.id)\n\n 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, created_at\n )\n SELECT project_id, ?, version, title, entry, files, outline, refs,\n author_principal_type, author_principal_id, created_at\n FROM artifact_versions WHERE project_id = ? AND artifact_id = ?`\n )\n .run(input.id, input.projectId, input.sourceId)\n this.db\n .query(\n `INSERT INTO artifact_threads (project_id, artifact_id, thread_id, shared_at, copied)\n VALUES (?, ?, ?, ?, 1)`\n )\n .run(\n input.projectId,\n input.id,\n input.threadId,\n (input.copiedAt ?? new Date()).toISOString()\n )\n return parseArtifactRow(artifact)\n })\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 getState(input: ArtifactStateKeyInput): Promise<ArtifactStateEntry | null> {\n const row = this.db\n .query(`SELECT ${STATE_COLUMNS} FROM artifact_state WHERE ${STATE_SCOPE} AND key = ?`)\n .get(...stateScope(input), input.key) as Row | null\n return row ? parseArtifactStateRow(row) : null\n }\n\n async setState(input: SetArtifactStateInput): Promise<void> {\n runImmediateTransaction(this.db, () => {\n const artifact = this.db\n .query(\"SELECT 1 FROM artifacts WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.artifactId)\n if (!artifact) throw artifactStorageErrors.notFound(input.artifactId)\n // In the write transaction: two writes at once cannot both fit under the limits.\n const others = this.db\n .query(\n `SELECT count(*) AS keys, coalesce(sum(size_bytes), 0) AS bytes FROM artifact_state\n WHERE ${STATE_SCOPE} AND key <> ?`\n )\n .get(...stateScope(input), input.key) as { readonly keys: number; readonly bytes: number }\n const sizeBytes = artifactStateBytes(input.value)\n checkArtifactStateWrite({ key: input.key, valueBytes: sizeBytes, others })\n this.db\n .query(\n `INSERT INTO artifact_state (\n project_id, artifact_id, principal_type, principal_id, key, value, size_bytes,\n updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (project_id, artifact_id, principal_type, principal_id, key) DO UPDATE SET\n value = excluded.value, size_bytes = excluded.size_bytes,\n updated_at = excluded.updated_at`\n )\n .run(...stateScope(input), input.key, input.value, sizeBytes, input.updatedAt.toISOString())\n })\n }\n\n async deleteState(input: ArtifactStateKeyInput): Promise<boolean> {\n return (\n this.db\n .query(`DELETE FROM artifact_state WHERE ${STATE_SCOPE} AND key = ?`)\n .run(...stateScope(input), input.key).changes > 0\n )\n }\n\n async listState(input: ArtifactStateScope): Promise<ArtifactStateEntry[]> {\n const rows = this.db\n .query(`SELECT ${STATE_COLUMNS} FROM artifact_state WHERE ${STATE_SCOPE} ORDER BY key`)\n .all(...stateScope(input)) as Row[]\n return rows.map(parseArtifactStateRow)\n }\n\n async clearState(input: ArtifactStateScope): Promise<number> {\n return this.db\n .query(`DELETE FROM artifact_state WHERE ${STATE_SCOPE}`)\n .run(...stateScope(input)).changes\n }\n\n async delete(input: DeleteArtifactInput): Promise<boolean> {\n // Versions, frame grants, and state 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(\n `DELETE FROM artifact_versions WHERE project_id = ? AND origin_run_id = ?\n RETURNING origin_thread_id AS threadId`\n )\n .all(input.projectId, input.runId) as { readonly threadId: string }[]\n // A run publishes from one thread: its artifacts stay shared there only while a version\n // from it remains, or when they were copied for it.\n const threadId = deleted[0]?.threadId\n for (const { artifactId } of affected) {\n this.db\n .query(\n `DELETE FROM artifact_threads\n WHERE project_id = ? AND artifact_id = ? AND thread_id = ? AND copied = 0\n AND NOT EXISTS (\n SELECT 1 FROM artifact_versions\n WHERE project_id = ? AND artifact_id = ? AND origin_thread_id = ?\n )`\n )\n .run(\n input.projectId,\n artifactId,\n threadId ?? null,\n input.projectId,\n artifactId,\n threadId ?? null\n )\n this.repointLatest(input.projectId, artifactId)\n }\n return deleted.length\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 if (input.origin) {\n this.linkThread(projectId, artifactId, input.origin.threadId, input.createdAt)\n }\n return parseArtifactVersionRow(row)\n }\n\n /** Shares an artifact in a thread, keeping when it was first shared there. */\n private linkThread(\n projectId: string,\n artifactId: string,\n threadId: string,\n sharedAt: Date\n ): void {\n this.db\n .query(\n `INSERT INTO artifact_threads (project_id, artifact_id, thread_id, shared_at)\n VALUES (?, ?, ?, ?)\n ON CONFLICT (project_id, artifact_id, thread_id) DO NOTHING`\n )\n .run(projectId, artifactId, threadId, sharedAt.toISOString())\n }\n}\n",
|
|
@@ -42,7 +45,7 @@
|
|
|
42
45
|
"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",
|
|
43
46
|
"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",
|
|
44
47
|
"import type { Database } from \"bun:sqlite\"\nimport { hasVectorProfile } from \"@sixb/core/internal/query\"\nimport type {\n CompiledConditionalObjectReadScope,\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 { createSqliteConditionalReader } from \"./conditional-reader\"\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 constant: 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 createConditionalReadScope(params: {\n projectId: string\n scope: CompiledConditionalObjectReadScope\n }): ObjectReadStorage {\n return createSqliteConditionalReader(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 getByUniqueValue(\n params: Parameters<ObjectReadStorage[\"getByUniqueValue\"]>[0]\n ): Promise<ObjectRow | null> {\n return this.reader.getByUniqueValue(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",
|
|
45
|
-
"import {\n type ObjectExpansion,\n type ObjectQuery,\n ObjectQueryExecutionError,\n type ObjectQueryPredicate,\n type ObjectQuerySetOperation,\n type ObjectQuerySortField,\n} from \"@sixb/core\"\nimport {\n hasVectorProfile,\n isVectorProfileQuery,\n normalizeVector,\n vectorSearchCandidateLimit,\n} from \"@sixb/core/internal/query\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\n\nexport type SqliteValue = string | number | bigint | boolean | null | Uint8Array\n\nexport interface SqliteObjectQueryPageRow {\n object_type_id: string\n primary_id: string\n properties: string\n _cursor_properties?: string\n}\n\nexport interface CompiledObjectQuery {\n vectorProbe?: {\n sql: string\n args: SqliteValue[]\n limit: number\n /** Maximum returned rows and total before the outermost limit, respectively. */\n rowLimit: number\n totalLimit: number\n }\n sql: string\n args: SqliteValue[]\n totalSql: string\n totalArgs: SqliteValue[]\n order: CompiledOrder\n hasMoreProbe?: CompiledHasMoreProbe\n hasMore(rowCount: number, total?: number): boolean\n trimRows<T>(rows: readonly T[]): readonly T[]\n nextPageToken(rows: readonly SqliteObjectQueryPageRow[], rowCount: number): string | undefined\n}\n\ninterface CompiledHasMoreProbe {\n sql: string\n args: SqliteValue[]\n hasMore(rowCount: number): boolean\n}\n\ninterface CompileContext {\n probeLimit: boolean\n source: SqliteObjectQuerySource\n}\n\ninterface CompiledPredicate {\n sql: string\n args: SqliteValue[]\n}\n\ninterface CompiledOrder {\n sql: string\n args: SqliteValue[]\n fields: readonly CompiledOrderField[]\n propertyColumn: string\n}\n\ntype CompiledOrderField =\n | {\n kind: \"property\"\n propertyId: string\n direction: \"asc\" | \"desc\"\n }\n | {\n kind: \"column\"\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\"\n binary?: boolean\n direction: \"asc\" | \"desc\"\n }\n\ninterface EncodedPageToken {\n version: 1\n order: readonly string[]\n values: readonly EncodedCursorValue[]\n}\n\ninterface EncodedCursorValue {\n nullish: boolean\n value?: unknown\n}\n\nconst PAGE_TOKEN_PREFIX = \"keyset:\"\n\n// Fallback fanout cap for a \"many\" expansion that arrives without an explicit\n// limit. The core executor normally bakes a limit in before pushdown; this only\n// bounds the degenerate uncapped case. Mirrors the PostgreSQL compiler.\nconst DEFAULT_EXPANSION_FANOUT = 1_000\n\nexport function compileObjectQuery(\n projectId: string,\n query: ObjectQuery,\n options: { includeTotal?: boolean; source?: SqliteObjectQuerySource } = {}\n): CompiledObjectQuery {\n if (hasVectorProfile(query) && !isVectorProfileQuery(query)) {\n throw new ObjectQueryExecutionError(\n \"unsupported_vector_composition\",\n \"Vector search supports one profile with filters, traversals or sets before ranking and limit/project after.\"\n )\n }\n const source = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const ctx: CompileContext = { probeLimit: options.includeTotal === false, source }\n return source.wrapQuery(compileObjectQueryInternal(projectId, query, ctx))\n}\n\n/** Physical relations used by the object-query compiler. */\nexport interface SqliteObjectQuerySource {\n readonly objectsTable: string\n readonly linksTable: string\n readonly objectPropertyPermissionsTable?: string\n /**\n * Where to read one concrete type's objects, when the source can say it more precisely than\n * `objectsTable`: a table and that type's own filter over its `properties`. A statement that\n * reads a single type then holds the filter as a top-level condition, which an index can serve.\n */\n objectsOfType?(objectTypeId: string): SqliteTypedObjects\n /** Wrap a terminal SELECT without its own WITH clause; the selected source owns the only WITH. */\n wrapStatement(\n sql: string,\n args?: readonly SqliteValue[]\n ): {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n wrapQuery(query: CompiledObjectQuery): CompiledObjectQuery\n}\n\nexport interface SqliteTypedObjects {\n readonly table: string\n readonly filter?: { readonly sql: string; readonly args: readonly SqliteValue[] }\n}\n\n/** The table and `AND ...` filter a statement reads one type's objects with. */\nexport function sqliteObjectsOfType(\n source: SqliteObjectQuerySource,\n objectTypeId: string\n): { table: string; filter: string; args: readonly SqliteValue[] } {\n const typed = source.objectsOfType?.(objectTypeId)\n if (!typed) return { table: source.objectsTable, filter: \"\", args: [] }\n\n return {\n table: typed.table,\n filter: typed.filter ? `AND (${typed.filter.sql})` : \"\",\n args: typed.filter?.args ?? [],\n }\n}\n\nexport const DEFAULT_OBJECT_QUERY_SOURCE: SqliteObjectQuerySource = {\n objectsTable: \"objects\",\n linksTable: \"links\",\n wrapStatement: (sql, args = []) => ({ sql, args: [...args] }),\n wrapQuery: (query) => query,\n}\n\nfunction exactContext(ctx: CompileContext): CompileContext {\n return ctx.probeLimit ? { ...ctx, probeLimit: false } : ctx\n}\n\nfunction compileObjectQueryInternal(\n projectId: string,\n query: ObjectQuery,\n ctx: CompileContext\n): CompiledObjectQuery {\n switch (query.kind) {\n case \"rerank\":\n throw new ObjectQueryExecutionError(\n \"reranking_requires_runtime\",\n \"Reranking must execute in the model runtime, not storage.\"\n )\n case \"start\":\n return compileStart(projectId, query, ctx)\n case \"refs\":\n return compileRefs(projectId, query, ctx)\n case \"filter\":\n return compileFilter(projectId, query.input, query.predicate, ctx)\n case \"sort\":\n return compileSort(projectId, query.input, query.fields, ctx)\n case \"limit\":\n return compileLimit(projectId, query.input, query.limit, ctx)\n case \"page\":\n return compilePage(projectId, query.input, query.pageSize, query.pageToken, ctx)\n case \"traverse\":\n return compileTraversal(\n projectId,\n query.input,\n query.linkId,\n query.direction,\n query.sourceObjectTypeId,\n ctx\n )\n case \"set\":\n return compileSet(projectId, query.op, query.inputs, ctx)\n case \"project\":\n return compileProject(projectId, query.input, query.properties, ctx)\n case \"text\":\n return compileText(\n projectId,\n query.input,\n query.query,\n query.fields,\n query.fieldsByObjectType,\n ctx\n )\n case \"expand\":\n return compileExpand(projectId, query.input, query.expansions, ctx)\n case \"vector\":\n return compileVector(projectId, query, ctx)\n }\n}\n\nfunction compileVector(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"vector\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (\n typeof query.vector === \"string\" ||\n !isVectorProfileQuery(query) ||\n !query.configuration ||\n !Number.isSafeInteger(query.k) ||\n query.k < 1 ||\n query.k > 1000 ||\n query.vector.length < 1 ||\n query.vector.length > 16000\n ) {\n throw new ObjectQueryExecutionError(\n \"invalid_vector_query\",\n \"A validated named vector profile is required.\"\n )\n }\n const input = compileObjectQueryInternal(projectId, query.input, exactContext(ctx))\n const permissions = ctx.source.objectPropertyPermissionsTable\n const permissionJoin = permissions\n ? `CROSS JOIN (\n SELECT project_id, object_type_id, primary_id, json_group_array(property_id) AS property_ids\n FROM ${permissions}\n GROUP BY project_id, object_type_id, primary_id\n ) AS vector_permissions ON vector_permissions.project_id = vectors.project_id\n AND vector_permissions.object_type_id = vectors.object_type_id\n AND vector_permissions.primary_id = vectors.primary_id`\n : \"\"\n const authorized = permissions\n ? `AND NOT EXISTS (\n SELECT 1 FROM json_each(vectors.source) AS required\n WHERE required.value NOT IN (SELECT value FROM json_each(vector_permissions.property_ids))\n )`\n : \"\"\n const candidates = `FROM (${input.sql}) AS input\n CROSS JOIN object_vectors AS vectors ON vectors.project_id = input.project_id\n AND vectors.object_type_id = input.object_type_id AND vectors.primary_id = input.primary_id\n ${permissionJoin}\n WHERE vectors.profile = ? AND vectors.configuration = ?\n AND length(vectors.embedding) / 4 = ? ${authorized}`\n const candidateArgs = [...input.args, query.profile!, query.configuration, query.vector.length]\n // Bound distance work, not just returned rows. Exceeding the envelope fails before ranking.\n const limit = vectorSearchCandidateLimit(query.vector.length)\n const values = normalizeVector(query.vector, query.vector.length)\n const order = compileOrder([\n { kind: \"column\", column: \"_vector_score\", direction: \"desc\" },\n ...identityOrderFields().map((field) => ({ ...field, binary: true })),\n ])\n const rankedOrder = compileOrder(order.fields, \"ranked\")\n // Materialize only bounded, authorized candidates once. CASE prevents distance evaluation\n // above the envelope; the reader rejects the count before exposing any rows or scores.\n const sql = `SELECT stored.project_id, stored.object_type_id, stored.primary_id,\n stored.properties, stored.properties AS _cursor_properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id,\n ranked._vector_candidate_count, ranked._vector_score\n FROM (\n WITH _sixb_vector_candidates AS MATERIALIZED (\n SELECT input.project_id, input.object_type_id, input.primary_id,\n vectors.embedding AS _vector_embedding ${candidates} LIMIT ?\n ), _sixb_vector_budget AS (\n SELECT COUNT(*) AS _vector_candidate_count FROM _sixb_vector_candidates\n )\n SELECT input.project_id, input.object_type_id, input.primary_id, budget._vector_candidate_count,\n CASE WHEN budget._vector_candidate_count <= ?\n THEN max(-1, min(1, 1 - vec_distance_cosine(input._vector_embedding, ?)))\n END AS _vector_score\n FROM _sixb_vector_candidates AS input CROSS JOIN _sixb_vector_budget AS budget\n ORDER BY ${order.sql} LIMIT ?\n ) AS ranked CROSS JOIN ${ctx.source.objectsTable} AS stored\n ON stored.project_id = ranked.project_id AND stored.object_type_id = ranked.object_type_id\n AND stored.primary_id = ranked.primary_id\n ORDER BY ${rankedOrder.sql}`\n const args = [...candidateArgs, limit + 1, limit, encodeSqliteVector(values), query.k]\n return {\n sql,\n args,\n // Top-k cardinality depends on eligibility, not distances or ranking.\n totalSql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS eligible`,\n totalArgs: [...candidateArgs, query.k],\n order,\n vectorProbe: {\n sql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS candidates`,\n args: [...candidateArgs, limit + 1],\n limit,\n rowLimit: query.k,\n totalLimit: query.k,\n },\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileStart(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"start\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.includeSubtypes === true) {\n throw new Error(\"[Sixb] SQLite object storage does not support start.includeSubtypes\")\n }\n\n const order = compileOrder(identityOrderFields())\n const objects = sqliteObjectsOfType(ctx.source, query.objectTypeId)\n const sql = `\n SELECT *, properties AS _cursor_properties\n FROM ${objects.table}\n WHERE project_id = ? AND object_type_id = ? ${objects.filter}\n ORDER BY ${order.sql}\n `\n const args = [projectId, query.objectTypeId, ...objects.args, ...order.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM ${objects.table} WHERE project_id = ? AND object_type_id = ? ${objects.filter}`,\n totalArgs: [projectId, query.objectTypeId, ...objects.args],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileRefs(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"refs\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.refs.length === 0) {\n throw new Error(\"[Sixb] SQLite object storage requires at least one ref\")\n }\n\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const refsJson = JSON.stringify(query.refs)\n const requested = `\n SELECT DISTINCT\n json_extract(ref.value, '$.objectTypeId') AS object_type_id,\n json_extract(ref.value, '$.primaryId') AS primary_id\n FROM json_each(?) AS ref\n `\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n\n return {\n sql,\n args: [refsJson, projectId, ...selectedOrder.args],\n totalSql: `\n SELECT COUNT(*) AS total\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n `,\n totalArgs: [refsJson, projectId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileFilter(\n projectId: string,\n inputQuery: ObjectQuery,\n predicateNode: ObjectQueryPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate = compilePredicate(predicateNode)\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileWhere(\n projectId: string,\n inputQuery: ObjectQuery,\n predicate: CompiledPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const sql = `\n SELECT *\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n ORDER BY ${input.order.sql}\n `\n\n return {\n sql,\n args: [...input.args, ...predicate.args, ...input.order.args],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n `,\n totalArgs: [...input.args, ...predicate.args],\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileText(\n projectId: string,\n inputQuery: ObjectQuery,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate =\n fields && fields.length > 0\n ? compileTextPredicate(query, fields)\n : compileScopedTextPredicate(query, fieldsByObjectType)\n\n if (!predicate) {\n throw new Error(\"[Sixb] SQLite object text search requires fields or resolved text defaults\")\n }\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileSort(\n projectId: string,\n inputQuery: ObjectQuery,\n fields: readonly ObjectQuerySortField[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const probeInput =\n ctx.probeLimit && needsLimitProbe(inputQuery)\n ? compileObjectQueryInternal(projectId, inputQuery, ctx)\n : undefined\n const order = compileOrder(sortOrderFields(fields))\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n input.properties,\n input.properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${order.sql}\n `,\n args: [...input.args, ...order.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n order,\n hasMoreProbe: probeInput ? hasMoreProbeFor(probeInput) : input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction compileLimit(\n projectId: string,\n inputQuery: ObjectQuery,\n rawLimit: number,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const limit = Math.max(0, rawLimit)\n const rowLimit = ctx.probeLimit ? limit + 1 : limit\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...input.order.args, rowLimit],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe\n ? {\n ...input.vectorProbe,\n rowLimit: Math.min(input.vectorProbe.rowLimit, rowLimit),\n totalLimit: input.vectorProbe.rowLimit,\n }\n : undefined,\n order: input.order,\n hasMore: (rowCount, total) =>\n total === undefined ? ctx.probeLimit && rowCount > limit : limit < total,\n trimRows: ctx.probeLimit ? (rows) => rows.slice(0, limit) : identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compilePage(\n projectId: string,\n inputQuery: ObjectQuery,\n rawPageSize: number,\n pageToken: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const pageSize = Math.max(0, rawPageSize)\n const cursor = pageToken ? decodePageToken(pageToken, input.order.fields) : undefined\n const cursorPredicate = cursor\n ? compileKeysetPredicate(input.order.fields, cursor, input.order.propertyColumn)\n : undefined\n const whereSql = cursorPredicate ? `WHERE ${cursorPredicate.sql}` : \"\"\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ${whereSql}\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...(cursorPredicate?.args ?? []), ...input.order.args, pageSize + 1],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount) => rowCount > pageSize,\n trimRows: (rows) => rows.slice(0, pageSize),\n nextPageToken: (rows, rowCount) => {\n if (rowCount <= pageSize || rows.length === 0) return undefined\n return encodePageToken(rows[rows.length - 1], input.order.fields)\n },\n }\n}\n\nfunction compileTraversal(\n projectId: string,\n inputQuery: ObjectQuery,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const outputAlias = direction === \"outgoing\" ? \"target_object\" : \"source_object\"\n const joinSql =\n direction === \"outgoing\"\n ? `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.source_type_id = input.object_type_id\n AND edge.source_id = input.primary_id\n AND edge.link_id = ?\n JOIN ${ctx.source.objectsTable} AS target_object\n ON target_object.project_id = edge.project_id\n AND target_object.object_type_id = edge.target_type_id\n AND target_object.primary_id = edge.target_id\n `\n : `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.target_type_id = input.object_type_id\n AND edge.target_id = input.primary_id\n AND edge.link_id = ?${sourceObjectTypeId === undefined ? \"\" : \"\\n AND edge.source_type_id = ?\"}\n JOIN ${ctx.source.objectsTable} AS source_object\n ON source_object.project_id = edge.project_id\n AND source_object.object_type_id = edge.source_type_id\n AND source_object.primary_id = edge.source_id\n `\n const order = compileOrder(identityOrderFields())\n const qualifiedOrder = compileOrder(identityOrderFields(), outputAlias)\n const sql = `\n SELECT DISTINCT ${outputAlias}.*, ${outputAlias}.properties AS _cursor_properties\n FROM (${input.sql}) AS input\n ${joinSql}\n ORDER BY ${qualifiedOrder.sql}\n `\n const args = [\n ...input.args,\n linkId,\n ...(sourceObjectTypeId === undefined ? [] : [sourceObjectTypeId]),\n ...qualifiedOrder.args,\n ]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${sql}) AS traversed`,\n totalArgs: args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\n/** Correlation handle for an expansion: the parent row's identity columns. */\ninterface ExpansionParent {\n project: string\n type: string\n id: string\n}\n\n// `expand` attaches linked objects to each result row without changing which\n// objects match (unlike `traverse`, which pivots to the targets). Each expansion\n// becomes a correlated subquery that hydrates its links into a JSON value, and\n// all expansions are folded into one `_expand` object column the row mapper reads\n// back. The input set is otherwise untouched, so pagination/order pass through.\nfunction compileExpand(\n projectId: string,\n inputQuery: ObjectQuery,\n expansions: readonly ObjectExpansion[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const expand = compileExpansionsObject(\n expansions,\n { project: \"input.project_id\", type: \"input.object_type_id\", id: \"input.primary_id\" },\n \"\",\n ctx\n )\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const sql = `\n SELECT input.*, ${expand.sql} AS _expand\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `\n\n return {\n sql,\n args: [...expand.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\n// `json_object(linkId, value, ...)` over a set of expansions sharing one parent.\n// Link ids are user data, so they ride as parameters. Each value is a correlated\n// subquery whose JSON subtype is lost crossing the subquery boundary, so it is\n// re-parsed with `json(...)` to embed as nested JSON rather than a quoted string.\n// Used both for the outer `_expand` column and for each child's nested `links`.\nfunction compileExpansionsObject(\n expansions: readonly ObjectExpansion[],\n parent: ExpansionParent,\n pathPrefix: string,\n ctx: CompileContext\n): CompiledPredicate {\n const parts: string[] = []\n const args: SqliteValue[] = []\n expansions.forEach((expansion, index) => {\n const path = pathPrefix === \"\" ? `${index}` : `${pathPrefix}_${index}`\n const value = compileExpansionValue(expansion, parent, path, ctx)\n parts.push(\"?\", `json(${value.sql})`)\n args.push(expansion.linkId, ...value.args)\n })\n return { sql: `json_object(${parts.join(\", \")})`, args }\n}\n\n// One expansion's hydrated value. A parent's links are read in the order from\n// `compileExpansionOrder` (the expansion's `orderBy` against the target object's\n// properties, then an identity tiebreak) and `LIMIT N` keeps the top-N per parent\n// in-DB; each retained neighbour becomes a JSON object; and the value is an\n// ordered array (\"many\", numbered by `row_number()` for `json_group_array`) or the\n// first neighbour or null (\"one\"). The cardinality is core-resolved before pushdown.\nfunction compileExpansionValue(\n expansion: ObjectExpansion,\n parent: ExpansionParent,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const edge = `edge_${path}`\n const target = `tgt_${path}`\n const ranked = `ranked_${path}`\n const incoming = expansion.direction === \"incoming\"\n // The hydrated neighbour is the link target (outgoing) or source (incoming);\n // the parent sits on the opposite end, mirroring `compileTraversal`.\n const neighborType = incoming ? `${edge}.source_type_id` : `${edge}.target_type_id`\n const neighborId = incoming ? `${edge}.source_id` : `${edge}.target_id`\n const parentType = incoming ? `${edge}.target_type_id` : `${edge}.source_type_id`\n const parentId = incoming ? `${edge}.target_id` : `${edge}.source_id`\n\n const child = compileExpansionChildJson(expansion, edge, target, path, ctx)\n const order = compileExpansionOrder(expansion, target, neighborType, neighborId)\n\n const whereParts = [\n `${edge}.project_id = ${parent.project}`,\n `${parentType} = ${parent.type}`,\n `${parentId} = ${parent.id}`,\n `${edge}.link_id = ?`,\n ]\n const whereArgs: SqliteValue[] = [expansion.linkId]\n if (incoming && expansion.sourceObjectTypeId !== undefined) {\n whereParts.push(`${edge}.source_type_id = ?`)\n whereArgs.push(expansion.sourceObjectTypeId)\n }\n\n const from = `\n FROM ${ctx.source.linksTable} AS ${edge}\n JOIN ${ctx.source.objectsTable} AS ${target}\n ON ${target}.project_id = ${edge}.project_id\n AND ${target}.object_type_id = ${neighborType}\n AND ${target}.primary_id = ${neighborId}\n WHERE ${whereParts.join(\" AND \")}\n `\n\n // ORDER BY ... LIMIT stops at the kept neighbours, so only they are built as JSON. Filtering\n // on row_number() would build every neighbour first, in a co-routine per parent.\n if (expansion.cardinality === \"one\") {\n return {\n sql: `(SELECT ${child.sql} ${from} ORDER BY ${order.sql} LIMIT 1)`,\n args: [...child.args, ...whereArgs, ...order.args],\n }\n }\n\n // The fanout cap is baked into `limit` by the core executor before pushdown.\n // Each element is re-parsed with `json(...)` so the aggregate embeds objects\n // rather than the quoted JSON text the subquery column hands back.\n const limit = expansion.limit ?? DEFAULT_EXPANSION_FANOUT\n return {\n sql: `COALESCE((SELECT json_group_array(json(${ranked}.elem) ORDER BY ${ranked}._ord) FROM (\n SELECT ${child.sql} AS elem, row_number() OVER (ORDER BY ${order.sql}) AS _ord\n ${from}\n ORDER BY ${order.sql}\n LIMIT ?\n ) AS ${ranked}), '[]')`,\n args: [...child.args, ...order.args, ...whereArgs, ...order.args, limit],\n }\n}\n\n// Build one hydrated neighbour as an `ExpandedObjectRow`-shaped JSON object. The\n// JSON-valued columns (`properties`, the edge's `linkProperties`) are re-parsed\n// with `json(...)` so they embed as JSON rather than strings; `linkProperties`\n// always rides along (the mapper drops it when null/empty), and nested expansions\n// recurse under `links`, correlated on this neighbour.\nfunction compileExpansionChildJson(\n expansion: ObjectExpansion,\n edge: string,\n target: string,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const fields = [\n `'projectId', ${target}.project_id`,\n `'objectTypeId', ${target}.object_type_id`,\n `'primaryId', ${target}.primary_id`,\n `'properties', json(${target}.properties)`,\n `'createdAt', ${target}.created_at`,\n `'updatedAt', ${target}.updated_at`,\n `'version', ${target}.version`,\n `'lastCommitId', ${target}.last_commit_id`,\n `'linkProperties', json(${edge}.properties)`,\n ]\n const args: SqliteValue[] = []\n\n if (expansion.expand && expansion.expand.length > 0) {\n const nested = compileExpansionsObject(\n expansion.expand,\n {\n project: `${target}.project_id`,\n type: `${target}.object_type_id`,\n id: `${target}.primary_id`,\n },\n path,\n ctx\n )\n fields.push(`'links', ${nested.sql}`)\n args.push(...nested.args)\n }\n\n return { sql: `json_object(${fields.join(\", \")})`, args }\n}\n\n// Order a parent's links the way the fallback's per-parent trim does: each\n// property sorts nulls last with the requested direction (against the neighbour's\n// JSON properties), then a deterministic identity tiebreak on the neighbour.\nfunction compileExpansionOrder(\n expansion: ObjectExpansion,\n target: string,\n neighborType: string,\n neighborId: string\n): CompiledPredicate {\n const propertyColumn = `${target}.properties`\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of expansion.orderBy ?? []) {\n // Relevance is a no-op in the fallback comparator; mirror that by skipping it.\n if (field.kind !== \"property\") continue\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal expansion sorting\",\n \"$.expand.orderBy\"\n )\n }\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n clauses.push(`${neighborType} ASC`, `${neighborId} ASC`)\n return { sql: clauses.join(\", \"), args }\n}\n\nfunction compileSet(\n projectId: string,\n op: ObjectQuerySetOperation,\n inputs: readonly ObjectQuery[],\n ctx: CompileContext\n): CompiledObjectQuery {\n if (inputs.length === 0) {\n const order = compileOrder(identityOrderFields())\n return {\n sql: `\n SELECT *\n FROM ${ctx.source.objectsTable}\n WHERE 1 = 0\n ORDER BY ${order.sql}\n `,\n args: order.args,\n totalSql: \"SELECT 0 as total\",\n totalArgs: [],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n }\n\n const compiledInputs = inputs.map((input) =>\n compileObjectQueryInternal(projectId, input, exactContext(ctx))\n )\n const identities = compileSetIdentities(op, compiledInputs)\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${identities.sql}) AS ids\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = ids.object_type_id\n AND selected.primary_id = ids.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n const args = [...identities.args, projectId, ...selectedOrder.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${identities.sql}) AS ids`,\n totalArgs: identities.args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileProject(\n projectId: string,\n inputQuery: ObjectQuery,\n properties: readonly string[] | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, ctx)\n if (!properties) return input\n\n const projection = compileProjectionExpression(properties)\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const outputOrder = compileOrder(input.order.fields, undefined, \"_cursor_properties\")\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n ${projection.sql} AS properties,\n input._cursor_properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score, input._vector_candidate_count\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `,\n args: [...projection.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: outputOrder,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction needsLimitProbe(query: ObjectQuery): boolean {\n switch (query.kind) {\n case \"limit\":\n return true\n case \"project\":\n case \"sort\":\n return needsLimitProbe(query.input)\n default:\n return false\n }\n}\n\nfunction hasMoreProbeFor(compiled: CompiledObjectQuery): CompiledHasMoreProbe {\n return (\n compiled.hasMoreProbe ?? {\n sql: compiled.sql,\n args: compiled.args,\n hasMore: (rowCount) => compiled.hasMore(rowCount, undefined),\n }\n )\n}\n\nfunction compileSetIdentities(\n op: ObjectQuerySetOperation,\n inputs: readonly CompiledObjectQuery[]\n): CompiledPredicate {\n const operator = op === \"union\" ? \"UNION\" : op === \"intersect\" ? \"INTERSECT\" : \"EXCEPT\"\n const identitySqls = inputs.map(\n (input) => `SELECT object_type_id, primary_id FROM (${input.sql}) AS input`\n )\n\n return {\n sql: identitySqls.join(` ${operator} `),\n args: inputs.flatMap((input) => input.args),\n }\n}\n\nfunction compileProjectionExpression(properties: readonly string[]): CompiledPredicate {\n if (properties.length === 0) return { sql: \"json('{}')\", args: [] }\n\n return {\n sql: `\n COALESCE(\n (\n SELECT json_group_object(projected.key, ${sqliteJsonEachValue(\"projected\")})\n FROM json_each(input.properties) AS projected\n WHERE projected.key IN (${properties.map(() => \"?\").join(\", \")})\n ),\n json('{}')\n )\n `,\n args: [...properties],\n }\n}\n\n/** json_each exposes JSON booleans as integer SQL values; restore their JSON representation. */\nexport function sqliteJsonEachValue(alias: string): string {\n return `CASE ${alias}.type\n WHEN 'true' THEN json('true')\n WHEN 'false' THEN json('false')\n ELSE ${alias}.value\n END`\n}\n\n/** Compile a predicate over the unqualified `properties` column of the relation it filters. */\nexport function compilePredicate(predicate: ObjectQueryPredicate): CompiledPredicate {\n if (\n \"scalarKind\" in predicate &&\n predicate.scalarKind === \"decimal\" &&\n (predicate.op === \"lt\" ||\n predicate.op === \"lte\" ||\n predicate.op === \"gt\" ||\n predicate.op === \"gte\")\n ) {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal predicates\",\n \"$.predicate\"\n )\n }\n\n switch (predicate.op) {\n case \"and\":\n case \"or\": {\n const items = predicate.items.map(compilePredicate)\n const joiner = predicate.op === \"and\" ? \" AND \" : \" OR \"\n return {\n sql: `(${items.map((item) => item.sql).join(joiner)})`,\n args: items.flatMap((item) => item.args),\n }\n }\n case \"not\": {\n const item = compilePredicate(predicate.item)\n return negatePredicate(item)\n }\n case \"constant\":\n return { sql: predicate.value ? \"1\" : \"0\", args: [] }\n case \"eq\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, [predicate.value])\n : compileEqualityPredicate(predicate.propertyId, \"eq\", predicate.value)\n case \"neq\":\n return predicate.scalarKind === \"userRef\"\n ? negatePredicate(compileUserRefInPredicate(predicate.propertyId, [predicate.value]))\n : compileEqualityPredicate(predicate.propertyId, \"neq\", predicate.value)\n case \"lt\":\n case \"lte\":\n case \"gt\":\n case \"gte\": {\n const op = sqlComparisonOperator(predicate.op)\n return {\n sql: `${jsonValueExpression()} ${op} ?`,\n args: [jsonPath(predicate.propertyId), sqlValue(predicate.value)],\n }\n }\n case \"in\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, predicate.values)\n : compileInPredicate(predicate.propertyId, predicate.values)\n case \"exists\": {\n const sql = `${jsonTypeExpression()} IS NOT NULL`\n const item: CompiledPredicate = { sql, args: [jsonPath(predicate.propertyId)] }\n return predicate.value ? item : negatePredicate(item)\n }\n case \"contains\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefContainsPredicate(predicate.propertyId, predicate.value)\n : compileContainsPredicate(predicate.propertyId, predicate.value)\n }\n}\n\n/**\n * User references are JSON objects, so they match on both fields rather than on serialized text,\n * which would depend on key order.\n */\nfunction compileUserRefInPredicate(\n propertyId: string,\n values: readonly unknown[]\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n const ids = values.flatMap((value) => {\n const id = userRefId(value)\n return id === undefined ? [] : [id]\n })\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.includes(null)) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n if (ids.length > 0) {\n clauses.push(\n `(${jsonValueExpression()} = 'user' AND ${jsonValueExpression()} IN (${ids.map(() => \"?\").join(\", \")}))`\n )\n args.push(`${path}.type`, `${path}.id`, ...ids)\n }\n if (clauses.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileUserRefContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const id = userRefId(value)\n if (id === undefined) return { sql: \"0 = 1\", args: [] }\n const path = jsonPath(propertyId)\n return {\n sql: `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.type = 'object' AND json_extract(item.value, '$.type') = 'user' AND json_extract(item.value, '$.id') = ?))`,\n args: [path, path, id],\n }\n}\n\nfunction userRefId(value: unknown): string | undefined {\n if (typeof value !== \"object\" || value === null) return undefined\n const { type, id } = value as { type?: unknown; id?: unknown }\n return type === \"user\" && typeof id === \"string\" ? id : undefined\n}\n\nfunction negatePredicate(predicate: CompiledPredicate): CompiledPredicate {\n return {\n sql: `(NOT COALESCE((${predicate.sql}), 0))`,\n args: predicate.args,\n }\n}\n\nfunction compileEqualityPredicate(\n propertyId: string,\n op: \"eq\" | \"neq\",\n value: unknown\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n if (value === null) {\n const sql = `${jsonTypeExpression()} = 'null'`\n const item: CompiledPredicate = { sql, args: [path] }\n return op === \"eq\" ? item : negatePredicate(item)\n }\n\n if (op === \"eq\") {\n return {\n sql: `${jsonValueExpression()} = ?`,\n args: [path, sqlValue(value)],\n }\n }\n\n // JS predicate semantics treat missing/null properties as not equal to any\n // non-null scalar. SQL three-valued null logic needs those cases explicit.\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonValueExpression()} != ?)`,\n args: [path, path, path, sqlValue(value)],\n }\n}\n\nfunction compileInPredicate(propertyId: string, values: readonly unknown[]): CompiledPredicate {\n if (values.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const path = jsonPath(propertyId)\n const nonNullValues = values.filter((value) => value !== null)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.length !== nonNullValues.length) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n\n if (nonNullValues.length > 0) {\n clauses.push(`${jsonValueExpression()} IN (${nonNullValues.map(() => \"?\").join(\", \")})`)\n args.push(path, ...nonNullValues.map(sqlValue))\n }\n\n return {\n sql: `(${clauses.join(\" OR \")})`,\n args,\n }\n}\n\nfunction compileContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const path = jsonPath(propertyId)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (typeof value === \"string\") {\n clauses.push(`(${jsonTypeExpression()} = 'text' AND instr(${jsonValueExpression()}, ?) > 0)`)\n args.push(path, path, value)\n }\n\n clauses.push(\n `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.value IS ?))`\n )\n args.push(path, path, sqlValue(value))\n\n if (typeof value === \"string\") {\n clauses.push(\n `(${jsonTypeExpression()} = 'object' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.key = ?))`\n )\n args.push(path, path, value)\n }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileTextPredicate(query: string, fields: readonly string[]): CompiledPredicate {\n const terms = tokenize(query)\n if (terms.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const clauses = terms.map(() => {\n const fieldClauses = fields.map(\n () => `instr(lower(COALESCE(CAST(${jsonValueExpression()} AS TEXT), '')), ?) > 0`\n )\n return `(${fieldClauses.join(\" OR \")})`\n })\n const args = terms.flatMap((term) => fields.flatMap((field) => [jsonPath(field), term]))\n\n return { sql: `(${clauses.join(\" AND \")})`, args }\n}\n\nfunction compileScopedTextPredicate(\n query: string,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): CompiledPredicate | null {\n const scopedPredicates: CompiledPredicate[] = []\n\n for (const [objectTypeId, fields] of Object.entries(fieldsByObjectType ?? {})) {\n if (fields.length === 0) continue\n const predicate = compileTextPredicate(query, fields)\n scopedPredicates.push({\n sql: `(object_type_id = ? AND ${predicate.sql})`,\n args: [objectTypeId, ...predicate.args],\n })\n }\n\n if (scopedPredicates.length === 0) return null\n\n return {\n sql: `(${scopedPredicates.map((predicate) => predicate.sql).join(\" OR \")})`,\n args: scopedPredicates.flatMap((predicate) => predicate.args),\n }\n}\n\nfunction compileOrder(\n fields: readonly CompiledOrderField[],\n qualifier?: string,\n propertyColumn = \"properties\"\n): CompiledOrder {\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of fields) {\n if (field.kind === \"column\") {\n clauses.push(\n `${columnExpression(field.column, qualifier)}${field.binary ? \" COLLATE BINARY\" : \"\"} ${field.direction.toUpperCase()}`\n )\n continue\n }\n\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n return { sql: clauses.join(\", \"), args, fields, propertyColumn }\n}\n\nfunction sortOrderFields(fields: readonly ObjectQuerySortField[]): readonly CompiledOrderField[] {\n const orderFields: CompiledOrderField[] = []\n for (const field of fields) {\n if (field.kind !== \"property\") {\n throw new Error(\"[Sixb] SQLite object storage does not support relevance sorting\")\n }\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal sorting\",\n \"$.sort\"\n )\n }\n\n orderFields.push({\n kind: \"property\",\n propertyId: field.propertyId,\n direction: field.direction === \"desc\" ? \"desc\" : \"asc\",\n })\n }\n orderFields.push(...identityOrderFields())\n return orderFields\n}\n\nfunction identityOrderFields(): readonly CompiledOrderField[] {\n return [\n { kind: \"column\", column: \"object_type_id\", direction: \"asc\" },\n { kind: \"column\", column: \"primary_id\", direction: \"asc\" },\n ]\n}\n\nfunction compileKeysetPredicate(\n fields: readonly CompiledOrderField[],\n cursor: readonly EncodedCursorValue[],\n propertyColumn = \"properties\"\n): CompiledPredicate {\n const disjuncts: CompiledPredicate[] = []\n\n for (let index = 0; index < fields.length; index += 1) {\n const equalityPredicates = fields\n .slice(0, index)\n .map((field, equalityIndex) =>\n compileFieldEquality(field, cursor[equalityIndex], propertyColumn)\n )\n const advancePredicate = compileFieldAfter(fields[index], cursor[index], propertyColumn)\n if (!advancePredicate) continue\n\n const parts = [...equalityPredicates, advancePredicate]\n disjuncts.push({\n sql: `(${parts.map((part) => part.sql).join(\" AND \")})`,\n args: parts.flatMap((part) => part.args),\n })\n }\n\n if (disjuncts.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return {\n sql: `(${disjuncts.map((part) => part.sql).join(\" OR \")})`,\n args: disjuncts.flatMap((part) => part.args),\n }\n}\n\nfunction compileFieldEquality(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} = ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n const path = jsonPath(field.propertyId)\n if (cursor.nullish) {\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null')`,\n args: [path, path],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NOT NULL AND ${jsonTypeExpression(propertyColumn)} != 'null' AND ${jsonValueExpression(propertyColumn)} = ?)`,\n args: [path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction compileFieldAfter(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate | null {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} ${field.direction === \"desc\" ? \"<\" : \">\"} ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n if (cursor.nullish) return null\n\n const path = jsonPath(field.propertyId)\n const rankSql = `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END`\n const valueOperator = field.direction === \"desc\" ? \"<\" : \">\"\n\n return {\n sql: `(${rankSql} > 0 OR (${rankSql} = 0 AND ${jsonValueExpression(propertyColumn)} ${valueOperator} ?))`,\n args: [path, path, path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction encodePageToken(\n row: SqliteObjectQueryPageRow,\n fields: readonly CompiledOrderField[]\n): string {\n const properties = JSON.parse(row._cursor_properties ?? row.properties) as Record<string, unknown>\n const token: EncodedPageToken = {\n version: 1,\n order: fields.map(orderFieldKey),\n values: fields.map((field) => cursorValueForField(row, properties, field)),\n }\n return `${PAGE_TOKEN_PREFIX}${Buffer.from(JSON.stringify(token)).toString(\"base64url\")}`\n}\n\nfunction decodePageToken(\n token: string,\n fields: readonly CompiledOrderField[]\n): readonly EncodedCursorValue[] {\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const raw = token.slice(PAGE_TOKEN_PREFIX.length)\n let decoded: unknown\n try {\n decoded = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\"))\n } catch {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n if (!isEncodedPageToken(decoded)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const expectedOrder = fields.map(orderFieldKey)\n if (\n decoded.order.length !== expectedOrder.length ||\n decoded.order.some((field, index) => field !== expectedOrder[index])\n ) {\n throwInvalidPageToken(\"SQLite object query page token does not match query order\")\n }\n\n return decoded.values\n}\n\nfunction throwInvalidPageToken(message: string): never {\n throw new ObjectQueryExecutionError(\"invalid_page_token\", message, \"$.pageToken\")\n}\n\nfunction isEncodedPageToken(value: unknown): value is EncodedPageToken {\n if (!isPlainObject(value)) return false\n if (value.version !== 1) return false\n if (!Array.isArray(value.order) || value.order.some((item) => typeof item !== \"string\")) {\n return false\n }\n if (!Array.isArray(value.values)) return false\n return value.values.every(\n (item) =>\n isPlainObject(item) &&\n typeof item.nullish === \"boolean\" &&\n (item.nullish || Object.hasOwn(item, \"value\"))\n )\n}\n\nfunction cursorValueForField(\n row: SqliteObjectQueryPageRow,\n properties: Record<string, unknown>,\n field: CompiledOrderField\n): EncodedCursorValue {\n const value =\n field.kind === \"column\"\n ? field.column === \"object_type_id\"\n ? row.object_type_id\n : row.primary_id\n : properties[field.propertyId]\n\n return value === null || value === undefined ? { nullish: true } : { nullish: false, value }\n}\n\nfunction orderFieldKey(field: CompiledOrderField): string {\n return field.kind === \"column\"\n ? `column:${field.column}:${field.direction}`\n : `property:${field.propertyId}:${field.direction}`\n}\n\nfunction columnExpression(\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\",\n qualifier?: string\n): string {\n return qualifier ? `${qualifier}.${column}` : column\n}\n\nfunction jsonValueExpression(column = \"properties\"): string {\n return `json_extract(${column}, ?)`\n}\n\nfunction jsonTypeExpression(column = \"properties\"): string {\n return `json_type(${column}, ?)`\n}\n\nfunction jsonPath(propertyId: string): string {\n return `$.\"${propertyId.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction sqlValue(value: unknown): SqliteValue {\n if (value instanceof Date) return value.toISOString()\n if (typeof value === \"boolean\") return value ? 1 : 0\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value === null\n ) {\n return value\n }\n return JSON.stringify(value)\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction sqlComparisonOperator(op: \"lt\" | \"lte\" | \"gt\" | \"gte\"): \"<\" | \"<=\" | \">\" | \">=\" {\n switch (op) {\n case \"lt\":\n return \"<\"\n case \"lte\":\n return \"<=\"\n case \"gt\":\n return \">\"\n case \"gte\":\n return \">=\"\n }\n}\n\nfunction identityRows<T>(rows: readonly T[]): readonly T[] {\n return rows\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
48
|
+
"import {\n type ObjectExpansion,\n type ObjectQuery,\n ObjectQueryExecutionError,\n type ObjectQueryPredicate,\n type ObjectQuerySetOperation,\n type ObjectQuerySortField,\n} from \"@sixb/core\"\nimport {\n hasVectorProfile,\n isVectorProfileQuery,\n linkEndpointObjectTypeIds,\n normalizeVector,\n vectorSearchCandidateLimit,\n} from \"@sixb/core/internal/query\"\nimport { encodeSqliteVector } from \"../vector-encoding\"\n\nexport type SqliteValue = string | number | bigint | boolean | null | Uint8Array\n\nexport interface SqliteObjectQueryPageRow {\n object_type_id: string\n primary_id: string\n properties: string\n _cursor_properties?: string\n}\n\nexport interface CompiledObjectQuery {\n vectorProbe?: {\n sql: string\n args: SqliteValue[]\n limit: number\n /** Maximum returned rows and total before the outermost limit, respectively. */\n rowLimit: number\n totalLimit: number\n }\n sql: string\n args: SqliteValue[]\n totalSql: string\n totalArgs: SqliteValue[]\n order: CompiledOrder\n hasMoreProbe?: CompiledHasMoreProbe\n hasMore(rowCount: number, total?: number): boolean\n trimRows<T>(rows: readonly T[]): readonly T[]\n nextPageToken(rows: readonly SqliteObjectQueryPageRow[], rowCount: number): string | undefined\n}\n\ninterface CompiledHasMoreProbe {\n sql: string\n args: SqliteValue[]\n hasMore(rowCount: number): boolean\n}\n\ninterface CompileContext {\n probeLimit: boolean\n source: SqliteObjectQuerySource\n}\n\ninterface CompiledPredicate {\n sql: string\n args: SqliteValue[]\n}\n\ninterface CompiledOrder {\n sql: string\n args: SqliteValue[]\n fields: readonly CompiledOrderField[]\n propertyColumn: string\n}\n\ntype CompiledOrderField =\n | {\n kind: \"property\"\n propertyId: string\n direction: \"asc\" | \"desc\"\n }\n | {\n kind: \"column\"\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\"\n binary?: boolean\n direction: \"asc\" | \"desc\"\n }\n\ninterface EncodedPageToken {\n version: 1\n order: readonly string[]\n values: readonly EncodedCursorValue[]\n}\n\ninterface EncodedCursorValue {\n nullish: boolean\n value?: unknown\n}\n\nconst PAGE_TOKEN_PREFIX = \"keyset:\"\n\n// Fallback fanout cap for a \"many\" expansion that arrives without an explicit\n// limit. The core executor normally bakes a limit in before pushdown; this only\n// bounds the degenerate uncapped case. Mirrors the PostgreSQL compiler.\nconst DEFAULT_EXPANSION_FANOUT = 1_000\n\nexport function compileObjectQuery(\n projectId: string,\n query: ObjectQuery,\n options: { includeTotal?: boolean; source?: SqliteObjectQuerySource } = {}\n): CompiledObjectQuery {\n if (hasVectorProfile(query) && !isVectorProfileQuery(query)) {\n throw new ObjectQueryExecutionError(\n \"unsupported_vector_composition\",\n \"Vector search supports one profile with filters, traversals or sets before ranking and limit/project after.\"\n )\n }\n const source = options.source ?? DEFAULT_OBJECT_QUERY_SOURCE\n const ctx: CompileContext = { probeLimit: options.includeTotal === false, source }\n return source.wrapQuery(compileObjectQueryInternal(projectId, query, ctx))\n}\n\n/** Physical relations used by the object-query compiler. */\nexport interface SqliteObjectQuerySource {\n readonly objectsTable: string\n readonly linksTable: string\n readonly objectPropertyPermissionsTable?: string\n /**\n * Where to read one concrete type's objects, when the source can say it more precisely than\n * `objectsTable`: a table and that type's own filter over its `properties`. A statement that\n * reads a single type then holds the filter as a top-level condition, which an index can serve.\n */\n objectsOfType?(objectTypeId: string): SqliteTypedObjects\n /** Wrap a terminal SELECT without its own WITH clause; the selected source owns the only WITH. */\n wrapStatement(\n sql: string,\n args?: readonly SqliteValue[]\n ): {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n wrapQuery(query: CompiledObjectQuery): CompiledObjectQuery\n}\n\nexport interface SqliteTypedObjects {\n readonly table: string\n readonly filter?: { readonly sql: string; readonly args: readonly SqliteValue[] }\n}\n\n/** The table and `AND ...` filter a statement reads one type's objects with. */\nexport function sqliteObjectsOfType(\n source: SqliteObjectQuerySource,\n objectTypeId: string\n): { table: string; filter: string; args: readonly SqliteValue[] } {\n const typed = source.objectsOfType?.(objectTypeId)\n if (!typed) return { table: source.objectsTable, filter: \"\", args: [] }\n\n return {\n table: typed.table,\n filter: typed.filter ? `AND (${typed.filter.sql})` : \"\",\n args: typed.filter?.args ?? [],\n }\n}\n\nexport const DEFAULT_OBJECT_QUERY_SOURCE: SqliteObjectQuerySource = {\n objectsTable: \"objects\",\n linksTable: \"links\",\n wrapStatement: (sql, args = []) => ({ sql, args: [...args] }),\n wrapQuery: (query) => query,\n}\n\nfunction exactContext(ctx: CompileContext): CompileContext {\n return ctx.probeLimit ? { ...ctx, probeLimit: false } : ctx\n}\n\nfunction compileObjectQueryInternal(\n projectId: string,\n query: ObjectQuery,\n ctx: CompileContext\n): CompiledObjectQuery {\n switch (query.kind) {\n case \"rerank\":\n throw new ObjectQueryExecutionError(\n \"reranking_requires_runtime\",\n \"Reranking must execute in the model runtime, not storage.\"\n )\n case \"start\":\n return compileStart(projectId, query, ctx)\n case \"refs\":\n return compileRefs(projectId, query, ctx)\n case \"filter\":\n return compileFilter(projectId, query.input, query.predicate, ctx)\n case \"sort\":\n return compileSort(projectId, query.input, query.fields, ctx)\n case \"limit\":\n return compileLimit(projectId, query.input, query.limit, ctx)\n case \"page\":\n return compilePage(projectId, query.input, query.pageSize, query.pageToken, ctx)\n case \"traverse\":\n return compileTraversal(projectId, query, ctx)\n case \"set\":\n return compileSet(projectId, query.op, query.inputs, ctx)\n case \"project\":\n return compileProject(projectId, query.input, query.properties, ctx)\n case \"text\":\n return compileText(\n projectId,\n query.input,\n query.query,\n query.fields,\n query.fieldsByObjectType,\n ctx\n )\n case \"expand\":\n return compileExpand(projectId, query.input, query.expansions, ctx)\n case \"vector\":\n return compileVector(projectId, query, ctx)\n }\n}\n\nfunction compileVector(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"vector\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (\n typeof query.vector === \"string\" ||\n !isVectorProfileQuery(query) ||\n !query.configuration ||\n !Number.isSafeInteger(query.k) ||\n query.k < 1 ||\n query.k > 1000 ||\n query.vector.length < 1 ||\n query.vector.length > 16000\n ) {\n throw new ObjectQueryExecutionError(\n \"invalid_vector_query\",\n \"A validated named vector profile is required.\"\n )\n }\n const input = compileObjectQueryInternal(projectId, query.input, exactContext(ctx))\n const permissions = ctx.source.objectPropertyPermissionsTable\n const permissionJoin = permissions\n ? `CROSS JOIN (\n SELECT project_id, object_type_id, primary_id, json_group_array(property_id) AS property_ids\n FROM ${permissions}\n GROUP BY project_id, object_type_id, primary_id\n ) AS vector_permissions ON vector_permissions.project_id = vectors.project_id\n AND vector_permissions.object_type_id = vectors.object_type_id\n AND vector_permissions.primary_id = vectors.primary_id`\n : \"\"\n const authorized = permissions\n ? `AND NOT EXISTS (\n SELECT 1 FROM json_each(vectors.source) AS required\n WHERE required.value NOT IN (SELECT value FROM json_each(vector_permissions.property_ids))\n )`\n : \"\"\n const candidates = `FROM (${input.sql}) AS input\n CROSS JOIN object_vectors AS vectors ON vectors.project_id = input.project_id\n AND vectors.object_type_id = input.object_type_id AND vectors.primary_id = input.primary_id\n ${permissionJoin}\n WHERE vectors.profile = ? AND vectors.configuration = ?\n AND length(vectors.embedding) / 4 = ? ${authorized}`\n const candidateArgs = [...input.args, query.profile!, query.configuration, query.vector.length]\n // Bound distance work, not just returned rows. Exceeding the envelope fails before ranking.\n const limit = vectorSearchCandidateLimit(query.vector.length)\n const values = normalizeVector(query.vector, query.vector.length)\n const order = compileOrder([\n { kind: \"column\", column: \"_vector_score\", direction: \"desc\" },\n ...identityOrderFields().map((field) => ({ ...field, binary: true })),\n ])\n const rankedOrder = compileOrder(order.fields, \"ranked\")\n // Materialize only bounded, authorized candidates once. CASE prevents distance evaluation\n // above the envelope; the reader rejects the count before exposing any rows or scores.\n const sql = `SELECT stored.project_id, stored.object_type_id, stored.primary_id,\n stored.properties, stored.properties AS _cursor_properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id,\n ranked._vector_candidate_count, ranked._vector_score\n FROM (\n WITH _sixb_vector_candidates AS MATERIALIZED (\n SELECT input.project_id, input.object_type_id, input.primary_id,\n vectors.embedding AS _vector_embedding ${candidates} LIMIT ?\n ), _sixb_vector_budget AS (\n SELECT COUNT(*) AS _vector_candidate_count FROM _sixb_vector_candidates\n )\n SELECT input.project_id, input.object_type_id, input.primary_id, budget._vector_candidate_count,\n CASE WHEN budget._vector_candidate_count <= ?\n THEN max(-1, min(1, 1 - vec_distance_cosine(input._vector_embedding, ?)))\n END AS _vector_score\n FROM _sixb_vector_candidates AS input CROSS JOIN _sixb_vector_budget AS budget\n ORDER BY ${order.sql} LIMIT ?\n ) AS ranked CROSS JOIN ${ctx.source.objectsTable} AS stored\n ON stored.project_id = ranked.project_id AND stored.object_type_id = ranked.object_type_id\n AND stored.primary_id = ranked.primary_id\n ORDER BY ${rankedOrder.sql}`\n const args = [...candidateArgs, limit + 1, limit, encodeSqliteVector(values), query.k]\n return {\n sql,\n args,\n // Top-k cardinality depends on eligibility, not distances or ranking.\n totalSql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS eligible`,\n totalArgs: [...candidateArgs, query.k],\n order,\n vectorProbe: {\n sql: `SELECT COUNT(*) AS total FROM (SELECT 1 ${candidates} LIMIT ?) AS candidates`,\n args: [...candidateArgs, limit + 1],\n limit,\n rowLimit: query.k,\n totalLimit: query.k,\n },\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileStart(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"start\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.includeSubtypes === true) {\n throw new Error(\"[Sixb] SQLite object storage does not support start.includeSubtypes\")\n }\n\n const order = compileOrder(identityOrderFields())\n const objects = sqliteObjectsOfType(ctx.source, query.objectTypeId)\n const sql = `\n SELECT *, properties AS _cursor_properties\n FROM ${objects.table}\n WHERE project_id = ? AND object_type_id = ? ${objects.filter}\n ORDER BY ${order.sql}\n `\n const args = [projectId, query.objectTypeId, ...objects.args, ...order.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM ${objects.table} WHERE project_id = ? AND object_type_id = ? ${objects.filter}`,\n totalArgs: [projectId, query.objectTypeId, ...objects.args],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileRefs(\n projectId: string,\n query: Extract<ObjectQuery, { kind: \"refs\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n if (query.refs.length === 0) {\n throw new Error(\"[Sixb] SQLite object storage requires at least one ref\")\n }\n\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const refsJson = JSON.stringify(query.refs)\n const requested = `\n SELECT DISTINCT\n json_extract(ref.value, '$.objectTypeId') AS object_type_id,\n json_extract(ref.value, '$.primaryId') AS primary_id\n FROM json_each(?) AS ref\n `\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n\n return {\n sql,\n args: [refsJson, projectId, ...selectedOrder.args],\n totalSql: `\n SELECT COUNT(*) AS total\n FROM (${requested}) AS requested\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = requested.object_type_id\n AND selected.primary_id = requested.primary_id\n `,\n totalArgs: [refsJson, projectId],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileFilter(\n projectId: string,\n inputQuery: ObjectQuery,\n predicateNode: ObjectQueryPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate = compilePredicate(predicateNode)\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileWhere(\n projectId: string,\n inputQuery: ObjectQuery,\n predicate: CompiledPredicate,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const sql = `\n SELECT *\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n ORDER BY ${input.order.sql}\n `\n\n return {\n sql,\n args: [...input.args, ...predicate.args, ...input.order.args],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n WHERE ${predicate.sql}\n `,\n totalArgs: [...input.args, ...predicate.args],\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileText(\n projectId: string,\n inputQuery: ObjectQuery,\n query: string,\n fields: readonly string[] | undefined,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const predicate =\n fields && fields.length > 0\n ? compileTextPredicate(query, fields)\n : compileScopedTextPredicate(query, fieldsByObjectType)\n\n if (!predicate) {\n throw new Error(\"[Sixb] SQLite object text search requires fields or resolved text defaults\")\n }\n return compileWhere(projectId, inputQuery, predicate, ctx)\n}\n\nfunction compileSort(\n projectId: string,\n inputQuery: ObjectQuery,\n fields: readonly ObjectQuerySortField[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const probeInput =\n ctx.probeLimit && needsLimitProbe(inputQuery)\n ? compileObjectQueryInternal(projectId, inputQuery, ctx)\n : undefined\n const order = compileOrder(sortOrderFields(fields))\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n input.properties,\n input.properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${order.sql}\n `,\n args: [...input.args, ...order.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n order,\n hasMoreProbe: probeInput ? hasMoreProbeFor(probeInput) : input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction compileLimit(\n projectId: string,\n inputQuery: ObjectQuery,\n rawLimit: number,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const limit = Math.max(0, rawLimit)\n const rowLimit = ctx.probeLimit ? limit + 1 : limit\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...input.order.args, rowLimit],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe\n ? {\n ...input.vectorProbe,\n rowLimit: Math.min(input.vectorProbe.rowLimit, rowLimit),\n totalLimit: input.vectorProbe.rowLimit,\n }\n : undefined,\n order: input.order,\n hasMore: (rowCount, total) =>\n total === undefined ? ctx.probeLimit && rowCount > limit : limit < total,\n trimRows: ctx.probeLimit ? (rows) => rows.slice(0, limit) : identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compilePage(\n projectId: string,\n inputQuery: ObjectQuery,\n rawPageSize: number,\n pageToken: string | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const pageSize = Math.max(0, rawPageSize)\n const cursor = pageToken ? decodePageToken(pageToken, input.order.fields) : undefined\n const cursorPredicate = cursor\n ? compileKeysetPredicate(input.order.fields, cursor, input.order.propertyColumn)\n : undefined\n const whereSql = cursorPredicate ? `WHERE ${cursorPredicate.sql}` : \"\"\n\n return {\n sql: `\n SELECT *\n FROM (${input.sql}) AS input\n ${whereSql}\n ORDER BY ${input.order.sql}\n LIMIT ?\n `,\n args: [...input.args, ...(cursorPredicate?.args ?? []), ...input.order.args, pageSize + 1],\n totalSql: `\n SELECT COUNT(*) as total\n FROM (${input.sql}) AS input\n `,\n totalArgs: input.args,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMore: (rowCount) => rowCount > pageSize,\n trimRows: (rows) => rows.slice(0, pageSize),\n nextPageToken: (rows, rowCount) => {\n if (rowCount <= pageSize || rows.length === 0) return undefined\n return encodePageToken(rows[rows.length - 1], input.order.fields)\n },\n }\n}\n\nfunction compileTraversal(\n projectId: string,\n traversal: Extract<ObjectQuery, { kind: \"traverse\" }>,\n ctx: CompileContext\n): CompiledObjectQuery {\n const { linkId, direction, sourceObjectTypeId } = traversal\n const input = compileObjectQueryInternal(projectId, traversal.input, exactContext(ctx))\n const outputAlias = direction === \"outgoing\" ? \"target_object\" : \"source_object\"\n const endpointType = compileEndpointTypes(outputAlias, linkEndpointObjectTypeIds(traversal))\n const joinSql =\n direction === \"outgoing\"\n ? `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.source_type_id = input.object_type_id\n AND edge.source_id = input.primary_id\n AND edge.link_id = ?\n JOIN ${ctx.source.objectsTable} AS target_object\n ON target_object.project_id = edge.project_id\n AND target_object.object_type_id = edge.target_type_id\n AND target_object.primary_id = edge.target_id\n ${endpointType.sql}\n `\n : `\n JOIN ${ctx.source.linksTable} AS edge\n ON edge.project_id = input.project_id\n AND edge.target_type_id = input.object_type_id\n AND edge.target_id = input.primary_id\n AND edge.link_id = ?${sourceObjectTypeId === undefined ? \"\" : \"\\n AND edge.source_type_id = ?\"}\n JOIN ${ctx.source.objectsTable} AS source_object\n ON source_object.project_id = edge.project_id\n AND source_object.object_type_id = edge.source_type_id\n AND source_object.primary_id = edge.source_id\n ${endpointType.sql}\n `\n const order = compileOrder(identityOrderFields())\n const qualifiedOrder = compileOrder(identityOrderFields(), outputAlias)\n const sql = `\n SELECT DISTINCT ${outputAlias}.*, ${outputAlias}.properties AS _cursor_properties\n FROM (${input.sql}) AS input\n ${joinSql}\n ORDER BY ${qualifiedOrder.sql}\n `\n const args = [\n ...input.args,\n linkId,\n ...(direction === \"incoming\" && sourceObjectTypeId !== undefined ? [sourceObjectTypeId] : []),\n ...endpointType.args,\n ...qualifiedOrder.args,\n ]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${sql}) AS traversed`,\n totalArgs: args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\n/** Only the types the ontology says this link can reach. */\nfunction compileEndpointTypes(\n alias: string,\n objectTypeIds: readonly string[] | undefined\n): CompiledPredicate {\n if (!objectTypeIds?.length) return { sql: \"\", args: [] }\n\n return {\n sql: `AND ${alias}.object_type_id IN (${objectTypeIds.map(() => \"?\").join(\", \")})`,\n args: [...objectTypeIds],\n }\n}\n\n/** Correlation handle for an expansion: the parent row's identity columns. */\ninterface ExpansionParent {\n project: string\n type: string\n id: string\n}\n\n// `expand` attaches linked objects to each result row without changing which\n// objects match (unlike `traverse`, which pivots to the targets). Each expansion\n// becomes a correlated subquery that hydrates its links into a JSON value, and\n// all expansions are folded into one `_expand` object column the row mapper reads\n// back. The input set is otherwise untouched, so pagination/order pass through.\nfunction compileExpand(\n projectId: string,\n inputQuery: ObjectQuery,\n expansions: readonly ObjectExpansion[],\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, exactContext(ctx))\n const expand = compileExpansionsObject(\n expansions,\n { project: \"input.project_id\", type: \"input.object_type_id\", id: \"input.primary_id\" },\n \"\",\n ctx\n )\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const sql = `\n SELECT input.*, ${expand.sql} AS _expand\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `\n\n return {\n sql,\n args: [...expand.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: input.order,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\n// `json_object(linkId, value, ...)` over a set of expansions sharing one parent.\n// Link ids are user data, so they ride as parameters. Each value is a correlated\n// subquery whose JSON subtype is lost crossing the subquery boundary, so it is\n// re-parsed with `json(...)` to embed as nested JSON rather than a quoted string.\n// Used both for the outer `_expand` column and for each child's nested `links`.\nfunction compileExpansionsObject(\n expansions: readonly ObjectExpansion[],\n parent: ExpansionParent,\n pathPrefix: string,\n ctx: CompileContext\n): CompiledPredicate {\n const parts: string[] = []\n const args: SqliteValue[] = []\n expansions.forEach((expansion, index) => {\n const path = pathPrefix === \"\" ? `${index}` : `${pathPrefix}_${index}`\n const value = compileExpansionValue(expansion, parent, path, ctx)\n parts.push(\"?\", `json(${value.sql})`)\n args.push(expansion.linkId, ...value.args)\n })\n return { sql: `json_object(${parts.join(\", \")})`, args }\n}\n\n// One expansion's hydrated value. A parent's links are read in the order from\n// `compileExpansionOrder` (the expansion's `orderBy` against the target object's\n// properties, then an identity tiebreak) and `LIMIT N` keeps the top-N per parent\n// in-DB; each retained neighbour becomes a JSON object; and the value is an\n// ordered array (\"many\", numbered by `row_number()` for `json_group_array`) or the\n// first neighbour or null (\"one\"). The cardinality is core-resolved before pushdown.\nfunction compileExpansionValue(\n expansion: ObjectExpansion,\n parent: ExpansionParent,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const edge = `edge_${path}`\n const target = `tgt_${path}`\n const ranked = `ranked_${path}`\n const incoming = expansion.direction === \"incoming\"\n // The hydrated neighbour is the link target (outgoing) or source (incoming);\n // the parent sits on the opposite end, mirroring `compileTraversal`.\n const neighborType = incoming ? `${edge}.source_type_id` : `${edge}.target_type_id`\n const neighborId = incoming ? `${edge}.source_id` : `${edge}.target_id`\n const parentType = incoming ? `${edge}.target_type_id` : `${edge}.source_type_id`\n const parentId = incoming ? `${edge}.target_id` : `${edge}.source_id`\n\n const child = compileExpansionChildJson(expansion, edge, target, path, ctx)\n const order = compileExpansionOrder(expansion, target, neighborType, neighborId)\n\n const whereParts = [\n `${edge}.project_id = ${parent.project}`,\n `${parentType} = ${parent.type}`,\n `${parentId} = ${parent.id}`,\n `${edge}.link_id = ?`,\n ]\n const endpointType = compileEndpointTypes(target, expansion.endpointObjectTypeIds)\n const whereArgs: SqliteValue[] = [...endpointType.args, expansion.linkId]\n if (incoming && expansion.sourceObjectTypeId !== undefined) {\n whereParts.push(`${edge}.source_type_id = ?`)\n whereArgs.push(expansion.sourceObjectTypeId)\n }\n\n const from = `\n FROM ${ctx.source.linksTable} AS ${edge}\n JOIN ${ctx.source.objectsTable} AS ${target}\n ON ${target}.project_id = ${edge}.project_id\n AND ${target}.object_type_id = ${neighborType}\n AND ${target}.primary_id = ${neighborId}\n ${endpointType.sql}\n WHERE ${whereParts.join(\" AND \")}\n `\n\n // ORDER BY ... LIMIT stops at the kept neighbours, so only they are built as JSON. Filtering\n // on row_number() would build every neighbour first, in a co-routine per parent.\n if (expansion.cardinality === \"one\") {\n return {\n sql: `(SELECT ${child.sql} ${from} ORDER BY ${order.sql} LIMIT 1)`,\n args: [...child.args, ...whereArgs, ...order.args],\n }\n }\n\n // The fanout cap is baked into `limit` by the core executor before pushdown.\n // Each element is re-parsed with `json(...)` so the aggregate embeds objects\n // rather than the quoted JSON text the subquery column hands back.\n const limit = expansion.limit ?? DEFAULT_EXPANSION_FANOUT\n return {\n sql: `COALESCE((SELECT json_group_array(json(${ranked}.elem) ORDER BY ${ranked}._ord) FROM (\n SELECT ${child.sql} AS elem, row_number() OVER (ORDER BY ${order.sql}) AS _ord\n ${from}\n ORDER BY ${order.sql}\n LIMIT ?\n ) AS ${ranked}), '[]')`,\n args: [...child.args, ...order.args, ...whereArgs, ...order.args, limit],\n }\n}\n\n// Build one hydrated neighbour as an `ExpandedObjectRow`-shaped JSON object. The\n// JSON-valued columns (`properties`, the edge's `linkProperties`) are re-parsed\n// with `json(...)` so they embed as JSON rather than strings; `linkProperties`\n// always rides along (the mapper drops it when null/empty), and nested expansions\n// recurse under `links`, correlated on this neighbour.\nfunction compileExpansionChildJson(\n expansion: ObjectExpansion,\n edge: string,\n target: string,\n path: string,\n ctx: CompileContext\n): CompiledPredicate {\n const fields = [\n `'projectId', ${target}.project_id`,\n `'objectTypeId', ${target}.object_type_id`,\n `'primaryId', ${target}.primary_id`,\n `'properties', json(${target}.properties)`,\n `'createdAt', ${target}.created_at`,\n `'updatedAt', ${target}.updated_at`,\n `'version', ${target}.version`,\n `'lastCommitId', ${target}.last_commit_id`,\n `'linkProperties', json(${edge}.properties)`,\n ]\n const args: SqliteValue[] = []\n\n if (expansion.expand && expansion.expand.length > 0) {\n const nested = compileExpansionsObject(\n expansion.expand,\n {\n project: `${target}.project_id`,\n type: `${target}.object_type_id`,\n id: `${target}.primary_id`,\n },\n path,\n ctx\n )\n fields.push(`'links', ${nested.sql}`)\n args.push(...nested.args)\n }\n\n return { sql: `json_object(${fields.join(\", \")})`, args }\n}\n\n// Order a parent's links the way the fallback's per-parent trim does: each\n// property sorts nulls last with the requested direction (against the neighbour's\n// JSON properties), then a deterministic identity tiebreak on the neighbour.\nfunction compileExpansionOrder(\n expansion: ObjectExpansion,\n target: string,\n neighborType: string,\n neighborId: string\n): CompiledPredicate {\n const propertyColumn = `${target}.properties`\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of expansion.orderBy ?? []) {\n // Relevance is a no-op in the fallback comparator; mirror that by skipping it.\n if (field.kind !== \"property\") continue\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal expansion sorting\",\n \"$.expand.orderBy\"\n )\n }\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n clauses.push(`${neighborType} ASC`, `${neighborId} ASC`)\n return { sql: clauses.join(\", \"), args }\n}\n\nfunction compileSet(\n projectId: string,\n op: ObjectQuerySetOperation,\n inputs: readonly ObjectQuery[],\n ctx: CompileContext\n): CompiledObjectQuery {\n if (inputs.length === 0) {\n const order = compileOrder(identityOrderFields())\n return {\n sql: `\n SELECT *\n FROM ${ctx.source.objectsTable}\n WHERE 1 = 0\n ORDER BY ${order.sql}\n `,\n args: order.args,\n totalSql: \"SELECT 0 as total\",\n totalArgs: [],\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n }\n\n const compiledInputs = inputs.map((input) =>\n compileObjectQueryInternal(projectId, input, exactContext(ctx))\n )\n const identities = compileSetIdentities(op, compiledInputs)\n const order = compileOrder(identityOrderFields())\n const selectedOrder = compileOrder(identityOrderFields(), \"selected\")\n const sql = `\n SELECT selected.*, selected.properties AS _cursor_properties\n FROM (${identities.sql}) AS ids\n JOIN ${ctx.source.objectsTable} AS selected\n ON selected.project_id = ?\n AND selected.object_type_id = ids.object_type_id\n AND selected.primary_id = ids.primary_id\n ORDER BY ${selectedOrder.sql}\n `\n const args = [...identities.args, projectId, ...selectedOrder.args]\n\n return {\n sql,\n args,\n totalSql: `SELECT COUNT(*) as total FROM (${identities.sql}) AS ids`,\n totalArgs: identities.args,\n order,\n hasMore: () => false,\n trimRows: identityRows,\n nextPageToken: () => undefined,\n }\n}\n\nfunction compileProject(\n projectId: string,\n inputQuery: ObjectQuery,\n properties: readonly string[] | undefined,\n ctx: CompileContext\n): CompiledObjectQuery {\n const input = compileObjectQueryInternal(projectId, inputQuery, ctx)\n if (!properties) return input\n\n const projection = compileProjectionExpression(properties)\n const inputOrder = compileOrder(input.order.fields, \"input\", \"input._cursor_properties\")\n const outputOrder = compileOrder(input.order.fields, undefined, \"_cursor_properties\")\n\n return {\n sql: `\n SELECT\n input.project_id,\n input.object_type_id,\n input.primary_id,\n ${projection.sql} AS properties,\n input._cursor_properties AS _cursor_properties,\n input.created_at,\n input.updated_at,\n input.version,\n input.last_commit_id${input.vectorProbe ? \", input._vector_score, input._vector_candidate_count\" : \"\"}\n FROM (${input.sql}) AS input\n ORDER BY ${inputOrder.sql}\n `,\n args: [...projection.args, ...input.args, ...inputOrder.args],\n totalSql: input.totalSql,\n totalArgs: input.totalArgs,\n vectorProbe: input.vectorProbe,\n order: outputOrder,\n hasMoreProbe: input.hasMoreProbe,\n hasMore: input.hasMore,\n trimRows: input.trimRows,\n nextPageToken: input.nextPageToken,\n }\n}\n\nfunction needsLimitProbe(query: ObjectQuery): boolean {\n switch (query.kind) {\n case \"limit\":\n return true\n case \"project\":\n case \"sort\":\n return needsLimitProbe(query.input)\n default:\n return false\n }\n}\n\nfunction hasMoreProbeFor(compiled: CompiledObjectQuery): CompiledHasMoreProbe {\n return (\n compiled.hasMoreProbe ?? {\n sql: compiled.sql,\n args: compiled.args,\n hasMore: (rowCount) => compiled.hasMore(rowCount, undefined),\n }\n )\n}\n\nfunction compileSetIdentities(\n op: ObjectQuerySetOperation,\n inputs: readonly CompiledObjectQuery[]\n): CompiledPredicate {\n const operator = op === \"union\" ? \"UNION\" : op === \"intersect\" ? \"INTERSECT\" : \"EXCEPT\"\n const identitySqls = inputs.map(\n (input) => `SELECT object_type_id, primary_id FROM (${input.sql}) AS input`\n )\n\n return {\n sql: identitySqls.join(` ${operator} `),\n args: inputs.flatMap((input) => input.args),\n }\n}\n\nfunction compileProjectionExpression(properties: readonly string[]): CompiledPredicate {\n if (properties.length === 0) return { sql: \"json('{}')\", args: [] }\n\n return {\n sql: `\n COALESCE(\n (\n SELECT json_group_object(projected.key, ${sqliteJsonEachValue(\"projected\")})\n FROM json_each(input.properties) AS projected\n WHERE projected.key IN (${properties.map(() => \"?\").join(\", \")})\n ),\n json('{}')\n )\n `,\n args: [...properties],\n }\n}\n\n/** json_each exposes JSON booleans as integer SQL values; restore their JSON representation. */\nexport function sqliteJsonEachValue(alias: string): string {\n return `CASE ${alias}.type\n WHEN 'true' THEN json('true')\n WHEN 'false' THEN json('false')\n ELSE ${alias}.value\n END`\n}\n\n/** Compile a predicate over the unqualified `properties` column of the relation it filters. */\nexport function compilePredicate(predicate: ObjectQueryPredicate): CompiledPredicate {\n if (\n \"scalarKind\" in predicate &&\n predicate.scalarKind === \"decimal\" &&\n (predicate.op === \"lt\" ||\n predicate.op === \"lte\" ||\n predicate.op === \"gt\" ||\n predicate.op === \"gte\")\n ) {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal predicates\",\n \"$.predicate\"\n )\n }\n\n switch (predicate.op) {\n case \"and\":\n case \"or\": {\n const items = predicate.items.map(compilePredicate)\n const joiner = predicate.op === \"and\" ? \" AND \" : \" OR \"\n return {\n sql: `(${items.map((item) => item.sql).join(joiner)})`,\n args: items.flatMap((item) => item.args),\n }\n }\n case \"not\": {\n const item = compilePredicate(predicate.item)\n return negatePredicate(item)\n }\n case \"constant\":\n return { sql: predicate.value ? \"1\" : \"0\", args: [] }\n case \"eq\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, [predicate.value])\n : compileEqualityPredicate(predicate.propertyId, \"eq\", predicate.value)\n case \"neq\":\n return predicate.scalarKind === \"userRef\"\n ? negatePredicate(compileUserRefInPredicate(predicate.propertyId, [predicate.value]))\n : compileEqualityPredicate(predicate.propertyId, \"neq\", predicate.value)\n case \"lt\":\n case \"lte\":\n case \"gt\":\n case \"gte\": {\n const op = sqlComparisonOperator(predicate.op)\n return {\n sql: `${jsonValueExpression()} ${op} ?`,\n args: [jsonPath(predicate.propertyId), sqlValue(predicate.value)],\n }\n }\n case \"in\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefInPredicate(predicate.propertyId, predicate.values)\n : compileInPredicate(predicate.propertyId, predicate.values)\n case \"exists\": {\n const sql = `${jsonTypeExpression()} IS NOT NULL`\n const item: CompiledPredicate = { sql, args: [jsonPath(predicate.propertyId)] }\n return predicate.value ? item : negatePredicate(item)\n }\n case \"contains\":\n return predicate.scalarKind === \"userRef\"\n ? compileUserRefContainsPredicate(predicate.propertyId, predicate.value)\n : compileContainsPredicate(predicate.propertyId, predicate.value)\n }\n}\n\n/**\n * User references are JSON objects, so they match on both fields rather than on serialized text,\n * which would depend on key order.\n */\nfunction compileUserRefInPredicate(\n propertyId: string,\n values: readonly unknown[]\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n const ids = values.flatMap((value) => {\n const id = userRefId(value)\n return id === undefined ? [] : [id]\n })\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.includes(null)) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n if (ids.length > 0) {\n clauses.push(\n `(${jsonValueExpression()} = 'user' AND ${jsonValueExpression()} IN (${ids.map(() => \"?\").join(\", \")}))`\n )\n args.push(`${path}.type`, `${path}.id`, ...ids)\n }\n if (clauses.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileUserRefContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const id = userRefId(value)\n if (id === undefined) return { sql: \"0 = 1\", args: [] }\n const path = jsonPath(propertyId)\n return {\n sql: `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.type = 'object' AND json_extract(item.value, '$.type') = 'user' AND json_extract(item.value, '$.id') = ?))`,\n args: [path, path, id],\n }\n}\n\nfunction userRefId(value: unknown): string | undefined {\n if (typeof value !== \"object\" || value === null) return undefined\n const { type, id } = value as { type?: unknown; id?: unknown }\n return type === \"user\" && typeof id === \"string\" ? id : undefined\n}\n\nfunction negatePredicate(predicate: CompiledPredicate): CompiledPredicate {\n return {\n sql: `(NOT COALESCE((${predicate.sql}), 0))`,\n args: predicate.args,\n }\n}\n\nfunction compileEqualityPredicate(\n propertyId: string,\n op: \"eq\" | \"neq\",\n value: unknown\n): CompiledPredicate {\n const path = jsonPath(propertyId)\n if (value === null) {\n const sql = `${jsonTypeExpression()} = 'null'`\n const item: CompiledPredicate = { sql, args: [path] }\n return op === \"eq\" ? item : negatePredicate(item)\n }\n\n if (op === \"eq\") {\n return {\n sql: `${jsonValueExpression()} = ?`,\n args: [path, sqlValue(value)],\n }\n }\n\n // JS predicate semantics treat missing/null properties as not equal to any\n // non-null scalar. SQL three-valued null logic needs those cases explicit.\n return {\n sql: `(${jsonTypeExpression()} IS NULL OR ${jsonTypeExpression()} = 'null' OR ${jsonValueExpression()} != ?)`,\n args: [path, path, path, sqlValue(value)],\n }\n}\n\nfunction compileInPredicate(propertyId: string, values: readonly unknown[]): CompiledPredicate {\n if (values.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const path = jsonPath(propertyId)\n const nonNullValues = values.filter((value) => value !== null)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (values.length !== nonNullValues.length) {\n clauses.push(`${jsonTypeExpression()} = 'null'`)\n args.push(path)\n }\n\n if (nonNullValues.length > 0) {\n clauses.push(`${jsonValueExpression()} IN (${nonNullValues.map(() => \"?\").join(\", \")})`)\n args.push(path, ...nonNullValues.map(sqlValue))\n }\n\n return {\n sql: `(${clauses.join(\" OR \")})`,\n args,\n }\n}\n\nfunction compileContainsPredicate(propertyId: string, value: unknown): CompiledPredicate {\n const path = jsonPath(propertyId)\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n if (typeof value === \"string\") {\n clauses.push(`(${jsonTypeExpression()} = 'text' AND instr(${jsonValueExpression()}, ?) > 0)`)\n args.push(path, path, value)\n }\n\n clauses.push(\n `(${jsonTypeExpression()} = 'array' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.value IS ?))`\n )\n args.push(path, path, sqlValue(value))\n\n if (typeof value === \"string\") {\n clauses.push(\n `(${jsonTypeExpression()} = 'object' AND EXISTS (SELECT 1 FROM json_each(properties, ?) AS item WHERE item.key = ?))`\n )\n args.push(path, path, value)\n }\n\n return { sql: `(${clauses.join(\" OR \")})`, args }\n}\n\nfunction compileTextPredicate(query: string, fields: readonly string[]): CompiledPredicate {\n const terms = tokenize(query)\n if (terms.length === 0) return { sql: \"0 = 1\", args: [] }\n\n const clauses = terms.map(() => {\n const fieldClauses = fields.map(\n () => `instr(lower(COALESCE(CAST(${jsonValueExpression()} AS TEXT), '')), ?) > 0`\n )\n return `(${fieldClauses.join(\" OR \")})`\n })\n const args = terms.flatMap((term) => fields.flatMap((field) => [jsonPath(field), term]))\n\n return { sql: `(${clauses.join(\" AND \")})`, args }\n}\n\nfunction compileScopedTextPredicate(\n query: string,\n fieldsByObjectType: Readonly<Record<string, readonly string[]>> | undefined\n): CompiledPredicate | null {\n const scopedPredicates: CompiledPredicate[] = []\n\n for (const [objectTypeId, fields] of Object.entries(fieldsByObjectType ?? {})) {\n if (fields.length === 0) continue\n const predicate = compileTextPredicate(query, fields)\n scopedPredicates.push({\n sql: `(object_type_id = ? AND ${predicate.sql})`,\n args: [objectTypeId, ...predicate.args],\n })\n }\n\n if (scopedPredicates.length === 0) return null\n\n return {\n sql: `(${scopedPredicates.map((predicate) => predicate.sql).join(\" OR \")})`,\n args: scopedPredicates.flatMap((predicate) => predicate.args),\n }\n}\n\nfunction compileOrder(\n fields: readonly CompiledOrderField[],\n qualifier?: string,\n propertyColumn = \"properties\"\n): CompiledOrder {\n const clauses: string[] = []\n const args: SqliteValue[] = []\n\n for (const field of fields) {\n if (field.kind === \"column\") {\n clauses.push(\n `${columnExpression(field.column, qualifier)}${field.binary ? \" COLLATE BINARY\" : \"\"} ${field.direction.toUpperCase()}`\n )\n continue\n }\n\n const direction = field.direction === \"desc\" ? \"DESC\" : \"ASC\"\n const path = jsonPath(field.propertyId)\n clauses.push(\n `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END ASC`,\n `${jsonValueExpression(propertyColumn)} ${direction}`\n )\n args.push(path, path, path)\n }\n\n return { sql: clauses.join(\", \"), args, fields, propertyColumn }\n}\n\nfunction sortOrderFields(fields: readonly ObjectQuerySortField[]): readonly CompiledOrderField[] {\n const orderFields: CompiledOrderField[] = []\n for (const field of fields) {\n if (field.kind !== \"property\") {\n throw new Error(\"[Sixb] SQLite object storage does not support relevance sorting\")\n }\n if (field.scalarKind === \"decimal\") {\n throw new ObjectQueryExecutionError(\n \"exact_decimal_not_supported\",\n \"SQLite object storage cannot push down exact decimal sorting\",\n \"$.sort\"\n )\n }\n\n orderFields.push({\n kind: \"property\",\n propertyId: field.propertyId,\n direction: field.direction === \"desc\" ? \"desc\" : \"asc\",\n })\n }\n orderFields.push(...identityOrderFields())\n return orderFields\n}\n\nfunction identityOrderFields(): readonly CompiledOrderField[] {\n return [\n { kind: \"column\", column: \"object_type_id\", direction: \"asc\" },\n { kind: \"column\", column: \"primary_id\", direction: \"asc\" },\n ]\n}\n\nfunction compileKeysetPredicate(\n fields: readonly CompiledOrderField[],\n cursor: readonly EncodedCursorValue[],\n propertyColumn = \"properties\"\n): CompiledPredicate {\n const disjuncts: CompiledPredicate[] = []\n\n for (let index = 0; index < fields.length; index += 1) {\n const equalityPredicates = fields\n .slice(0, index)\n .map((field, equalityIndex) =>\n compileFieldEquality(field, cursor[equalityIndex], propertyColumn)\n )\n const advancePredicate = compileFieldAfter(fields[index], cursor[index], propertyColumn)\n if (!advancePredicate) continue\n\n const parts = [...equalityPredicates, advancePredicate]\n disjuncts.push({\n sql: `(${parts.map((part) => part.sql).join(\" AND \")})`,\n args: parts.flatMap((part) => part.args),\n })\n }\n\n if (disjuncts.length === 0) return { sql: \"0 = 1\", args: [] }\n\n return {\n sql: `(${disjuncts.map((part) => part.sql).join(\" OR \")})`,\n args: disjuncts.flatMap((part) => part.args),\n }\n}\n\nfunction compileFieldEquality(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} = ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n const path = jsonPath(field.propertyId)\n if (cursor.nullish) {\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null')`,\n args: [path, path],\n }\n }\n\n return {\n sql: `(${jsonTypeExpression(propertyColumn)} IS NOT NULL AND ${jsonTypeExpression(propertyColumn)} != 'null' AND ${jsonValueExpression(propertyColumn)} = ?)`,\n args: [path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction compileFieldAfter(\n field: CompiledOrderField,\n cursor: EncodedCursorValue,\n propertyColumn = \"properties\"\n): CompiledPredicate | null {\n if (field.kind === \"column\") {\n return {\n sql: `${columnExpression(field.column)} ${field.direction === \"desc\" ? \"<\" : \">\"} ?`,\n args: [sqlValue(cursor.value)],\n }\n }\n\n if (cursor.nullish) return null\n\n const path = jsonPath(field.propertyId)\n const rankSql = `CASE WHEN ${jsonTypeExpression(propertyColumn)} IS NULL OR ${jsonTypeExpression(propertyColumn)} = 'null' THEN 1 ELSE 0 END`\n const valueOperator = field.direction === \"desc\" ? \"<\" : \">\"\n\n return {\n sql: `(${rankSql} > 0 OR (${rankSql} = 0 AND ${jsonValueExpression(propertyColumn)} ${valueOperator} ?))`,\n args: [path, path, path, path, path, sqlValue(cursor.value)],\n }\n}\n\nfunction encodePageToken(\n row: SqliteObjectQueryPageRow,\n fields: readonly CompiledOrderField[]\n): string {\n const properties = JSON.parse(row._cursor_properties ?? row.properties) as Record<string, unknown>\n const token: EncodedPageToken = {\n version: 1,\n order: fields.map(orderFieldKey),\n values: fields.map((field) => cursorValueForField(row, properties, field)),\n }\n return `${PAGE_TOKEN_PREFIX}${Buffer.from(JSON.stringify(token)).toString(\"base64url\")}`\n}\n\nfunction decodePageToken(\n token: string,\n fields: readonly CompiledOrderField[]\n): readonly EncodedCursorValue[] {\n if (!token.startsWith(PAGE_TOKEN_PREFIX)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const raw = token.slice(PAGE_TOKEN_PREFIX.length)\n let decoded: unknown\n try {\n decoded = JSON.parse(Buffer.from(raw, \"base64url\").toString(\"utf8\"))\n } catch {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n if (!isEncodedPageToken(decoded)) {\n throwInvalidPageToken(\"Invalid SQLite object query page token\")\n }\n\n const expectedOrder = fields.map(orderFieldKey)\n if (\n decoded.order.length !== expectedOrder.length ||\n decoded.order.some((field, index) => field !== expectedOrder[index])\n ) {\n throwInvalidPageToken(\"SQLite object query page token does not match query order\")\n }\n\n return decoded.values\n}\n\nfunction throwInvalidPageToken(message: string): never {\n throw new ObjectQueryExecutionError(\"invalid_page_token\", message, \"$.pageToken\")\n}\n\nfunction isEncodedPageToken(value: unknown): value is EncodedPageToken {\n if (!isPlainObject(value)) return false\n if (value.version !== 1) return false\n if (!Array.isArray(value.order) || value.order.some((item) => typeof item !== \"string\")) {\n return false\n }\n if (!Array.isArray(value.values)) return false\n return value.values.every(\n (item) =>\n isPlainObject(item) &&\n typeof item.nullish === \"boolean\" &&\n (item.nullish || Object.hasOwn(item, \"value\"))\n )\n}\n\nfunction cursorValueForField(\n row: SqliteObjectQueryPageRow,\n properties: Record<string, unknown>,\n field: CompiledOrderField\n): EncodedCursorValue {\n const value =\n field.kind === \"column\"\n ? field.column === \"object_type_id\"\n ? row.object_type_id\n : row.primary_id\n : properties[field.propertyId]\n\n return value === null || value === undefined ? { nullish: true } : { nullish: false, value }\n}\n\nfunction orderFieldKey(field: CompiledOrderField): string {\n return field.kind === \"column\"\n ? `column:${field.column}:${field.direction}`\n : `property:${field.propertyId}:${field.direction}`\n}\n\nfunction columnExpression(\n column: \"object_type_id\" | \"primary_id\" | \"_vector_score\",\n qualifier?: string\n): string {\n return qualifier ? `${qualifier}.${column}` : column\n}\n\nfunction jsonValueExpression(column = \"properties\"): string {\n return `json_extract(${column}, ?)`\n}\n\nfunction jsonTypeExpression(column = \"properties\"): string {\n return `json_type(${column}, ?)`\n}\n\nfunction jsonPath(propertyId: string): string {\n return `$.\"${propertyId.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction sqlValue(value: unknown): SqliteValue {\n if (value instanceof Date) return value.toISOString()\n if (typeof value === \"boolean\") return value ? 1 : 0\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n value === null\n ) {\n return value\n }\n return JSON.stringify(value)\n}\n\nfunction tokenize(query: string): string[] {\n return query\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((term) => term.length > 0)\n}\n\nfunction sqlComparisonOperator(op: \"lt\" | \"lte\" | \"gt\" | \"gte\"): \"<\" | \"<=\" | \">\" | \">=\" {\n switch (op) {\n case \"lt\":\n return \"<\"\n case \"lte\":\n return \"<=\"\n case \"gt\":\n return \">\"\n case \"gte\":\n return \">=\"\n }\n}\n\nfunction identityRows<T>(rows: readonly T[]): readonly T[] {\n return rows\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
46
49
|
"/** Shared little-endian float32 encoding for stored vectors and sqlite-vec query bindings. */\nexport function encodeSqliteVector(values: readonly number[]): Uint8Array {\n const bytes = new Uint8Array(values.length * 4)\n const view = new DataView(bytes.buffer)\n for (let index = 0; index < values.length; index++) {\n view.setFloat32(index * 4, values[index]!, true)\n }\n return bytes\n}\n",
|
|
47
50
|
"import type {\n CompiledConditionalObjectReadScope,\n CompiledSelectedObjectReadScope,\n} from \"@sixb/core/storage\"\nimport {\n type CompiledObjectQuery,\n compilePredicate,\n type SqliteObjectQuerySource,\n type SqliteValue,\n sqliteJsonEachValue,\n} from \"./query-compiler\"\n\nexport interface SqliteSelectedObjectReadSource extends SqliteObjectQuerySource {\n readonly objectPropertyPermissionsTable: string\n readonly traversalProbe: {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n }\n}\n\n/**\n * Prepare one immutable selected scope as live, path-sensitive SQLite relations.\n *\n * The complete compiled scope is serialized once. Every statement receives that one JSON document\n * and the bound project id, keeping the host-parameter count constant as selections grow.\n * CROSS JOIN keeps authorized parents/grants before indexed edge/object lookups, even when\n * statistics would otherwise make SQLite rescan all grants for every stored object.\n * Property grants are grouped only after path-sensitive reachability has been resolved.\n * Expose identities from grants/visible, so flattened joins can seek those relations by key\n * before loading stored values. Exposing stored identities makes traversal rescan grants per edge.\n */\nexport function compileSqliteSelectedObjectReadSource(\n projectId: string,\n scope: CompiledSelectedObjectReadScope,\n maxTraversalFacts: number\n): SqliteSelectedObjectReadSource {\n const scopeJson = JSON.stringify({\n roots: scope.roots,\n objects: scope.objects,\n steps: scope.steps,\n })\n const source = scopedQuerySource(compileSelectedReadScopeCte(scopeJson, projectId))\n\n return Object.freeze({\n ...source,\n objectPropertyPermissionsTable: \"_sixb_scope_object_permissions\",\n traversalProbe: source.wrapStatement(\n `\n SELECT COUNT(*) AS total\n FROM (\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_root_facts\n\n UNION ALL\n\n SELECT 1 AS traversal_fact\n FROM _sixb_scope_reached_links\n\n LIMIT ?\n ) AS bounded_traversal_facts\n `,\n [BigInt(maxTraversalFacts) + 1n]\n ),\n })\n}\n\n/**\n * Prepare a conditional scope as SQLite relations that filter stored rows as they are read.\n *\n * Both relations are NOT MATERIALIZED, so SQLite flattens them into each statement: its filters,\n * index seeks and LIMIT reach the stored tables, and the conditions become one more filter. An\n * object of a conditioned type is visible while its condition matches; a link while each of its\n * conditioned endpoints is a visible object.\n */\nexport function compileSqliteConditionalObjectReadSource(\n projectId: string,\n scope: CompiledConditionalObjectReadScope\n): SqliteObjectQuerySource {\n const filters = new Map(\n scope.conditions.map((condition) => [\n condition.objectTypeId,\n compilePredicate(condition.predicate),\n ])\n )\n\n return Object.freeze({\n ...scopedQuerySource(compileConditionalReadScopeCte(projectId, filters)),\n // One type's visible objects are the stored ones its own condition matches.\n objectsOfType: (objectTypeId: string) => {\n const filter = filters.get(objectTypeId)\n return filter ? { table: \"objects\", filter } : { table: \"objects\" }\n },\n })\n}\n\ninterface CompiledReadScopeCte {\n readonly sql: string\n readonly args: readonly SqliteValue[]\n}\n\n/** Prefix every statement of a query with the scope's relations, ahead of its own arguments. */\nfunction scopedQuerySource(compiled: CompiledReadScopeCte): SqliteObjectQuerySource {\n const wrapStatement = (sql: string, args: readonly SqliteValue[] = []) => ({\n sql: `${compiled.sql}\\n${sql}`,\n args: [...compiled.args, ...args],\n })\n\n return {\n objectsTable: \"_sixb_scope_objects\",\n linksTable: \"_sixb_scope_links\",\n wrapStatement,\n wrapQuery: (query: CompiledObjectQuery): CompiledObjectQuery => ({\n ...query,\n ...wrapStatement(query.sql, query.args),\n vectorProbe: query.vectorProbe\n ? { ...query.vectorProbe, ...wrapStatement(query.vectorProbe.sql, query.vectorProbe.args) }\n : undefined,\n totalSql: `${compiled.sql}\\n${query.totalSql}`,\n totalArgs: [...compiled.args, ...query.totalArgs],\n ...(query.hasMoreProbe\n ? {\n hasMoreProbe: {\n ...query.hasMoreProbe,\n ...wrapStatement(query.hasMoreProbe.sql, query.hasMoreProbe.args),\n },\n }\n : {}),\n }),\n }\n}\n\n/** Conditions keyed by their concrete type, each compiled over that type's `properties`. */\ntype ConditionFilters = ReadonlyMap<\n string,\n { readonly sql: string; readonly args: readonly SqliteValue[] }\n>\n\nfunction compileConditionalReadScopeCte(\n projectId: string,\n filters: ConditionFilters\n): CompiledReadScopeCte {\n if (filters.size === 0) {\n return {\n sql: `\n WITH\n _sixb_scope_objects AS NOT MATERIALIZED (\n SELECT * FROM objects WHERE project_id = ?\n ),\n _sixb_scope_links AS NOT MATERIALIZED (\n SELECT * FROM links WHERE project_id = ?\n )\n `,\n args: [projectId, projectId],\n }\n }\n\n const conditionedTypeArgs = [...filters.keys()]\n const conditionedTypes = conditionedTypeArgs.map(() => \"?\").join(\", \")\n\n const matches: string[] = []\n const matchArgs: SqliteValue[] = []\n for (const [objectTypeId, filter] of filters) {\n matches.push(`(object_type_id = ? AND ${filter.sql})`)\n matchArgs.push(objectTypeId, ...filter.args)\n }\n\n const visibleEndpoint = (end: \"source\" | \"target\") => `\n (\n stored.${end}_type_id NOT IN (${conditionedTypes})\n OR EXISTS (\n SELECT 1\n FROM _sixb_scope_objects AS endpoint\n WHERE endpoint.project_id = stored.project_id\n AND endpoint.object_type_id = stored.${end}_type_id\n AND endpoint.primary_id = stored.${end}_id\n )\n )\n `\n\n return {\n sql: `\n WITH\n _sixb_scope_objects AS NOT MATERIALIZED (\n SELECT *\n FROM objects\n WHERE project_id = ?\n AND (object_type_id NOT IN (${conditionedTypes}) OR ${matches.join(\" OR \")})\n ),\n _sixb_scope_links AS NOT MATERIALIZED (\n SELECT stored.*\n FROM links AS stored\n WHERE stored.project_id = ?\n AND ${visibleEndpoint(\"source\")}\n AND ${visibleEndpoint(\"target\")}\n )\n `,\n args: [\n projectId,\n ...conditionedTypeArgs,\n ...matchArgs,\n projectId,\n ...conditionedTypeArgs,\n ...conditionedTypeArgs,\n ],\n }\n}\n\nfunction compileSelectedReadScopeCte(scopeJson: string, projectId: string): CompiledReadScopeCte {\n return {\n sql: `\n WITH RECURSIVE\n _sixb_scope_document(scope) AS (\n SELECT json(?)\n ),\n _sixb_scope_roots(root_id, node_id, object_type_id, primary_id) AS (\n SELECT\n CAST(root.key AS INTEGER),\n CAST(json_extract(root.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(root.value, '$.objectTypeId') AS TEXT),\n CAST(json_extract(root.value, '$.primaryId') AS TEXT)\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.roots')) AS root\n ),\n _sixb_scope_root_facts(project_id, root_id, node_id, object_type_id, primary_id) AS (\n SELECT anchor.project_id, root.root_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_roots AS root\n CROSS JOIN objects AS anchor\n ON anchor.project_id = ?\n AND anchor.object_type_id = root.object_type_id\n AND anchor.primary_id = root.primary_id\n ),\n _sixb_scope_object_selections(node_id, object_type_id, property_ids) AS (\n SELECT\n CAST(json_extract(selection.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(selection.value, '$.objectTypeId') AS TEXT),\n json_extract(selection.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.objects')) AS selection\n ),\n _sixb_scope_link_selections(\n step_id,\n node_id,\n parent_node_id,\n source_object_type_id,\n link_id,\n target_object_type_id,\n property_ids\n ) AS (\n SELECT\n CAST(step.key AS INTEGER),\n CAST(json_extract(step.value, '$.nodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.parentNodeId') AS INTEGER),\n CAST(json_extract(step.value, '$.sourceObjectTypeId') AS TEXT),\n CAST(json_extract(step.value, '$.linkId') AS TEXT),\n CAST(json_extract(step.value, '$.targetObjectTypeId') AS TEXT),\n json_extract(step.value, '$.propertyIds')\n FROM _sixb_scope_document AS document,\n json_each(json_extract(document.scope, '$.steps')) AS step\n ),\n _sixb_scope_reachable(project_id, node_id, object_type_id, primary_id) AS (\n SELECT root.project_id, root.node_id, root.object_type_id, root.primary_id\n FROM _sixb_scope_root_facts AS root\n\n UNION\n\n SELECT edge.project_id, selection.node_id, edge.target_type_id, edge.target_id\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_object_permissions(project_id, object_type_id, primary_id, property_id) AS (\n SELECT DISTINCT\n reachable.project_id,\n reachable.object_type_id,\n reachable.primary_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reachable AS reachable\n JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n JOIN json_each(selection.property_ids) AS selected_property\n ),\n _sixb_scope_object_ids(project_id, object_type_id, primary_id) AS (\n SELECT DISTINCT project_id, object_type_id, primary_id\n FROM _sixb_scope_reachable\n ),\n _sixb_scope_object_grants AS (\n SELECT reachable.project_id, reachable.object_type_id, reachable.primary_id,\n json_group_array(DISTINCT selected_property.value) FILTER (WHERE selected_property.value IS NOT NULL) AS property_ids\n FROM _sixb_scope_reachable AS reachable\n LEFT JOIN _sixb_scope_object_selections AS selection\n ON selection.node_id = reachable.node_id\n AND selection.object_type_id = reachable.object_type_id\n LEFT JOIN json_each(selection.property_ids) AS selected_property ON true\n GROUP BY reachable.project_id, reachable.object_type_id, reachable.primary_id\n ),\n _sixb_scope_objects AS (\n SELECT grants.project_id, grants.object_type_id, grants.primary_id,\n COALESCE((\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n WHERE property.key IN (SELECT value FROM json_each(grants.property_ids))\n ), json('{}')) AS properties,\n stored.created_at, stored.updated_at, stored.version, stored.last_commit_id\n FROM _sixb_scope_object_grants AS grants\n CROSS JOIN objects AS stored\n ON stored.project_id = grants.project_id\n AND stored.object_type_id = grants.object_type_id\n AND stored.primary_id = grants.primary_id\n ),\n _sixb_scope_reached_links(\n project_id,\n step_id,\n node_id,\n parent_node_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_ids\n ) AS (\n SELECT\n edge.project_id,\n selection.step_id,\n selection.node_id,\n selection.parent_node_id,\n edge.source_type_id,\n edge.source_id,\n edge.link_id,\n edge.target_type_id,\n edge.target_id,\n selection.property_ids\n FROM _sixb_scope_reachable AS parent\n CROSS JOIN _sixb_scope_link_selections AS selection\n ON selection.parent_node_id = parent.node_id\n AND selection.source_object_type_id = parent.object_type_id\n CROSS JOIN links AS edge\n ON edge.project_id = parent.project_id\n AND edge.source_type_id = parent.object_type_id\n AND edge.source_id = parent.primary_id\n AND edge.link_id = selection.link_id\n AND edge.target_type_id = selection.target_object_type_id\n CROSS JOIN objects AS target\n ON target.project_id = edge.project_id\n AND target.object_type_id = edge.target_type_id\n AND target.primary_id = edge.target_id\n ),\n _sixb_scope_link_permissions(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id,\n property_id\n ) AS (\n SELECT DISTINCT\n reached.project_id,\n reached.source_type_id,\n reached.source_id,\n reached.link_id,\n reached.target_type_id,\n reached.target_id,\n CAST(selected_property.value AS TEXT)\n FROM _sixb_scope_reached_links AS reached\n JOIN json_each(reached.property_ids) AS selected_property\n ),\n _sixb_scope_link_ids(\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n ) AS (\n SELECT DISTINCT\n project_id,\n source_type_id,\n source_id,\n link_id,\n target_type_id,\n target_id\n FROM _sixb_scope_reached_links\n ),\n _sixb_scope_links AS (\n SELECT\n visible.project_id,\n visible.source_type_id,\n visible.source_id,\n visible.link_id,\n visible.target_type_id,\n visible.target_id,\n CASE\n WHEN stored.properties IS NULL THEN NULL\n ELSE NULLIF(\n (\n SELECT json_group_object(property.key, ${sqliteJsonEachValue(\"property\")})\n FROM json_each(stored.properties) AS property\n JOIN _sixb_scope_link_permissions AS permission\n ON permission.project_id = stored.project_id\n AND permission.source_type_id = stored.source_type_id\n AND permission.source_id = stored.source_id\n AND permission.link_id = stored.link_id\n AND permission.target_type_id = stored.target_type_id\n AND permission.target_id = stored.target_id\n AND permission.property_id = property.key\n ),\n json('{}')\n )\n END AS properties,\n stored.created_at,\n stored.updated_at,\n stored.last_commit_id\n FROM links AS stored\n JOIN _sixb_scope_link_ids AS visible\n ON visible.project_id = stored.project_id\n AND visible.source_type_id = stored.source_type_id\n AND visible.source_id = stored.source_id\n AND visible.link_id = stored.link_id\n AND visible.target_type_id = stored.target_type_id\n AND visible.target_id = stored.target_id\n )\n `,\n args: [scopeJson, projectId],\n }\n}\n",
|
|
48
51
|
"import type { Database } from \"bun:sqlite\"\nimport type {\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertObjectReaderProject,\n assertObjectReadFacetCount,\n assertObjectReadOutputWithinLimit,\n} from \"@sixb/core/storage\"\nimport { runDeferredReadTransaction } from \"../transactions\"\nimport type { SqliteObjectQuerySource } from \"./query-compiler\"\nimport { assertLinkQueryLimit, SqliteObjectReader } from \"./reader\"\n\n/**\n * Answer every terminal from one scoped source, each in its own synchronous snapshot so the\n * statements of one read, and the scope's own checks before them, agree.\n */\nexport function createSqliteScopedReader(\n db: Database,\n params: {\n projectId: string\n source: SqliteObjectQuerySource\n /** Runs first in each read's snapshot. */\n beforeRead?: () => void\n limits?: ObjectReadExecutionLimits\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n const { projectId, source, beforeRead, limits } = params\n const reader = new SqliteObjectReader(db, source)\n const assertProject = (actualProjectId: string): void =>\n assertObjectReaderProject(projectId, actualProjectId)\n const read = <T>(run: () => T): T =>\n runDeferredReadTransaction(db, () => {\n beforeRead?.()\n const value = run()\n if (limits) assertObjectReadOutputWithinLimit(value, limits)\n return value\n })\n const readMap = <TKey, TValue>(run: () => Map<TKey, TValue>): Map<TKey, TValue> =>\n runDeferredReadTransaction(db, () => {\n beforeRead?.()\n const value = run()\n if (limits) assertObjectReadOutputWithinLimit([...value.entries()], limits)\n return value\n })\n\n return Object.freeze({\n queryCapabilities,\n queryObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.queryObjects(input))\n },\n countObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.countObjects(input))\n },\n existsObjects: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.existsObjects(input))\n },\n facetObjects: async (input) => {\n assertProject(input.projectId)\n assertObjectReadFacetCount(input.facets.length)\n return read(() => reader.facetObjects(input))\n },\n getByPrimaryId: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.getByPrimaryId(input))\n },\n getByUniqueValue: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.getByUniqueValue(input))\n },\n selectsObjectProperties: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.selectsObjectProperties(input))\n },\n listLinks: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.listLinks(input))\n },\n getByPrimaryIdBatch: async (input) => {\n assertProject(input.projectId)\n return readMap(() => reader.getByPrimaryIdBatch(input))\n },\n listLinksBatch: async (input) => {\n assertProject(input.projectId)\n return readMap(() => reader.listLinksBatch(input))\n },\n queryLinks: async (input) => {\n assertProject(input.projectId)\n assertLinkQueryLimit(input.limit)\n return read(() => reader.queryLinks(input))\n },\n list: async (input) => {\n assertProject(input.projectId)\n return read(() => reader.list(input))\n },\n } satisfies ObjectReadStorage)\n}\n",
|
|
@@ -52,8 +55,8 @@
|
|
|
52
55
|
"import type { Database } from \"bun:sqlite\"\nimport type {\n CompiledConditionalObjectReadScope,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n} from \"@sixb/core/storage\"\nimport { compileSqliteConditionalObjectReadSource } from \"./read-scope\"\nimport { createSqliteScopedReader } from \"./scoped-reader\"\n\n/** Read objects and links through relations that apply the scope's conditions as they are read. */\nexport function createSqliteConditionalReader(\n db: Database,\n params: {\n projectId: string\n scope: CompiledConditionalObjectReadScope\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n return createSqliteScopedReader(\n db,\n {\n projectId: params.projectId,\n source: compileSqliteConditionalObjectReadSource(params.projectId, params.scope),\n },\n queryCapabilities\n )\n}\n",
|
|
53
56
|
"import type { Database } from \"bun:sqlite\"\nimport type {\n CompiledSelectedObjectReadScope,\n ObjectQueryCapabilities,\n ObjectReadExecutionLimits,\n ObjectReadStorage,\n} from \"@sixb/core/storage\"\nimport { ObjectReadLimitExceededError, snapshotObjectReadExecutionLimits } from \"@sixb/core/storage\"\nimport {\n compileSqliteSelectedObjectReadSource,\n type SqliteSelectedObjectReadSource,\n} from \"./read-scope\"\nimport { createSqliteScopedReader } from \"./scoped-reader\"\n\n/** Keep the traversal probe and every terminal statement in the same synchronous snapshot. */\nexport function createSqliteSelectedReader(\n db: Database,\n params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n const projectId = params.projectId\n const limits = snapshotObjectReadExecutionLimits(params.limits)\n const source = compileSqliteSelectedObjectReadSource(\n projectId,\n params.scope,\n limits.maxTraversalFacts\n )\n\n return createSqliteScopedReader(\n db,\n {\n projectId,\n source,\n beforeRead: () => assertTraversalBudget(db, source, limits.maxTraversalFacts),\n limits,\n },\n queryCapabilities\n )\n}\n\nfunction assertTraversalBudget(\n db: Database,\n source: SqliteSelectedObjectReadSource,\n maxTraversalFacts: number\n): void {\n const row = db.query(source.traversalProbe.sql).get(...source.traversalProbe.args) as {\n total: number | bigint\n }\n if (BigInt(row.total) > BigInt(maxTraversalFacts)) {\n throw new ObjectReadLimitExceededError(\"traversalFacts\", maxTraversalFacts)\n }\n}\n",
|
|
54
57
|
"import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure } from \"@sixb/core/internal/errors\"\nimport { MaterializationConflictError } from \"@sixb/core/internal/materialization\"\nimport {\n type ClaimedOutboxDraft,\n sourceAssertionFromColumns,\n sourceEntityFromKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n OntologyCommitRecord,\n OntologyCommitWrite,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"@sixb/core/storage\"\nimport { ONTOLOGY_OUTBOX_FAILURE_CODES } from \"@sixb/core/storage\"\n\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n originColumns,\n originWhere,\n sourceEntityKey,\n} from \"@sixb/core/internal/ontology-storage-provider\"\n\nexport type SqliteRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nexport interface SqliteOntologyCommitRow {\n readonly project_id: string\n readonly id: string\n readonly idempotency_key: string\n readonly request_hash: string\n readonly execution_id: string\n readonly origin_kind: string\n readonly origin_run_id: string | null\n readonly origin_batch_ordinal: number | null\n readonly origin: string\n readonly ontology_revision: string\n readonly projection_revision: string | null\n readonly ownership_hash: string | null\n readonly intent: string\n readonly result: string\n readonly committed_at: string\n}\n\nexport interface SqliteOntologySourceRow {\n readonly version_id: number\n readonly project_id: string\n readonly source_id: string\n readonly materialization_id: string\n readonly projection_run_id: string\n readonly projection_kind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly status: OntologySourceRecord[\"status\"]\n readonly execution_token: string | null\n readonly dataset_id: string\n readonly dataset_version_id: string\n readonly dataset_version_created_at: string\n readonly projection_revision: string\n readonly ownership_hash: string\n readonly ontology_revision: string\n readonly root_count: number | null\n readonly base_materialization_id: string | null\n readonly base_commit_id: string | null\n readonly assertion_count: number | null\n readonly created_at: string\n readonly ready_at: string | null\n readonly activated_at: string | null\n readonly terminal_at: string | null\n readonly last_commit_id: string | null\n readonly updated_at: string\n}\n\n/** An assertion with its root and version, as `SOURCE_ASSERTION_COLUMNS` selects it. */\nexport interface SqliteOntologySourceAssertionRow {\n readonly source_id: string\n readonly materialization_id: string\n readonly root_key: string\n readonly staging_ordinal: number\n readonly entity_kind: \"object\" | \"link\"\n readonly object_type_id: string | null\n readonly primary_id: string | null\n readonly source_type_id: string | null\n readonly source_primary_id: string | null\n readonly link_id: string | null\n readonly target_type_id: string | null\n readonly target_primary_id: string | null\n readonly payload: string | null\n}\n\nexport interface SqliteStoredOverrideRow {\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\nexport interface SqliteOntologyOutboxRow {\n readonly id: string\n readonly commit_id: string\n readonly commit_ordinal: number\n readonly event: string\n readonly available_at: string\n readonly attempts: number\n readonly lease_id: string | null\n readonly lease_expires_at: string | null\n readonly published_at: string | null\n readonly last_failure: string | null\n readonly created_at: string\n}\n\nexport function parseJson<T>(value: string): T {\n return JSON.parse(value) as T\n}\n\nexport function sourceRecord(row: SqliteOntologySourceRow): OntologySourceRecord {\n return {\n projectId: row.project_id,\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n projectionRunId: row.projection_run_id,\n projectionKind: row.projection_kind,\n protocol: row.protocol,\n status: row.status,\n executionToken: row.execution_token,\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 ownershipHash: row.ownership_hash,\n ontologyRevision: row.ontology_revision,\n ...(row.base_materialization_id === null\n ? {}\n : {\n base: {\n materializationId: row.base_materialization_id,\n lastCommitId: row.base_commit_id!,\n },\n }),\n rootCount: row.root_count,\n assertionCount: row.assertion_count,\n createdAt: row.created_at,\n readyAt: row.ready_at,\n activatedAt: row.activated_at,\n terminalAt: row.terminal_at,\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nexport function sourceAssertion(row: SqliteOntologySourceAssertionRow): StageSourceAssertion {\n return {\n root: sourceEntityFromKey(row.root_key),\n assertion: sourceAssertionFromColumns(\n row,\n row.payload === null ? null : parseJson<unknown>(row.payload)\n ),\n stagingOrdinal: row.staging_ordinal,\n }\n}\n\nexport function commitRecord(row: SqliteOntologyCommitRow): OntologyCommitRecord {\n const base = {\n projectId: row.project_id,\n id: row.id,\n idempotencyKey: row.idempotency_key,\n requestHash: row.request_hash,\n executionId: row.execution_id,\n origin: parseJson<OntologyCommitWrite[\"origin\"]>(row.origin),\n ontologyRevision: row.ontology_revision,\n ...(row.projection_revision === null ? {} : { projectionRevision: row.projection_revision }),\n ...(row.ownership_hash === null ? {} : { ownershipHash: row.ownership_hash }),\n committedAt: row.committed_at,\n }\n const intent = parseJson<OntologyCommitWrite[\"intent\"]>(row.intent)\n const result = parseJson<OntologyCommitRecord[\"result\"]>(row.result)\n return { ...base, intent, result } as OntologyCommitRecord\n}\n\n/** A claimed row as stored: its draft, to rebuild from its commit. */\nexport function claimedOutboxDraft(row: SqliteOntologyOutboxRow): ClaimedOutboxDraft {\n if (row.lease_id === null || row.lease_expires_at === null) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox claim returned an unpaired lease.\"\n )\n }\n return {\n id: row.id,\n commitId: row.commit_id,\n commitOrdinal: row.commit_ordinal,\n event: parseJson<ClaimedOutboxDraft[\"event\"]>(row.event),\n availableAt: row.available_at,\n attempts: row.attempts,\n leaseId: row.lease_id,\n leaseExpiresAt: row.lease_expires_at,\n publishedAt: row.published_at,\n lastFailure:\n row.last_failure === null\n ? null\n : parseSixbFailure(row.last_failure, ONTOLOGY_OUTBOX_FAILURE_CODES),\n createdAt: row.created_at,\n }\n}\n\nexport function assertProjectionExecution(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly projectionRunId: string\n readonly executionToken: string\n readonly identity?: AssertSourceMaterializationExecutionInput[\"identity\"]\n }\n): void {\n const run = db\n .query(\n `\n SELECT projection_id, projection_kind, status, materialization_protocol, execution_token,\n dataset_id, dataset_version_id, dataset_version_created_at,\n ontology_revision, projection_revision, ownership_hash\n FROM projection_runs\n WHERE project_id = ? AND id = ?\n `\n )\n .get(input.projectId, input.projectionRunId) as {\n projection_id: string\n projection_kind: string\n status: string\n materialization_protocol: string | null\n execution_token: string | 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 } | null\n if (!run || run.status !== \"running\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' is missing or is not running.`\n )\n }\n if (run.projection_id !== input.sourceId || run.materialization_protocol !== \"replacement\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' does not own replacement source '${input.sourceId}'.`\n )\n }\n if (run.execution_token !== input.executionToken) {\n throw new MaterializationConflictError(\n \"execution-lost\",\n `Projection run '${input.projectionRunId}' execution token is stale.`\n )\n }\n const identity = input.identity\n if (\n identity &&\n (run.projection_kind !== identity.projectionKind ||\n run.materialization_protocol !== identity.protocol ||\n run.dataset_id !== identity.datasetVersion.datasetId ||\n run.dataset_version_id !== identity.datasetVersion.versionId ||\n run.dataset_version_created_at !== identity.datasetVersion.createdAt ||\n run.ontology_revision !== identity.ontologyRevision ||\n run.projection_revision !== identity.projectionRevision ||\n run.ownership_hash !== identity.ownershipHash)\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n `Projection run '${input.projectionRunId}' immutable source identity does not match.`\n )\n }\n}\n\nexport function requireChanges(\n changes: number,\n kind: ConstructorParameters<typeof MaterializationConflictError>[0],\n message: string\n): void {\n if (changes !== 1) throw new MaterializationConflictError(kind, message)\n}\n\nexport function isSqliteConstraintError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n const details = error as Error & { readonly code?: unknown; readonly errno?: unknown }\n if (typeof details.code === \"string\") {\n return [\n \"SQLITE_CONSTRAINT_CHECK\",\n \"SQLITE_CONSTRAINT_FOREIGNKEY\",\n \"SQLITE_CONSTRAINT_NOTNULL\",\n \"SQLITE_CONSTRAINT_PRIMARYKEY\",\n \"SQLITE_CONSTRAINT_UNIQUE\",\n ].includes(details.code)\n }\n return details.errno === 19\n}\n",
|
|
55
|
-
"import type { Database } from \"bun:sqlite\"\nimport type {\n GetOntologyCommitByIdempotencyKeyInput,\n GetOntologyCommitByIdInput,\n GetOntologyCommitByOriginInput,\n ListOntologyCommitsInput,\n ListOntologyCommitsResult,\n OntologyCommitRecord,\n OntologyCommitStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n commitRecord,\n originWhere,\n type SqliteOntologyCommitRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\nexport class SqliteOntologyCommitStorage implements OntologyCommitStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async getByIdempotencyKey(\n input: GetOntologyCommitByIdempotencyKeyInput\n ): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.idempotencyKey, \"Ontology commit idempotency key\")\n return this.readOne(\n \"project_id = ? AND idempotency_key = ?\",\n input.projectId,\n input.idempotencyKey\n )\n })\n }\n\n async getById(input: GetOntologyCommitByIdInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.id, \"Ontology commit id\")\n return this.readOne(\"project_id = ? AND id = ?\", input.projectId, input.id)\n })\n }\n\n async getByOrigin(input: GetOntologyCommitByOriginInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n const origin = originWhere(input.origin)\n assertNonblank(origin.runId, \"Ontology commit origin run id\")\n if (origin.batchOrdinal !== null) {\n assertNonnegativeInteger(origin.batchOrdinal, \"Ontology telemetry commit batch ordinal\")\n }\n return origin.batchOrdinal === null\n ? this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal IS NULL\",\n input.projectId,\n origin.kind,\n origin.runId\n )\n : this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal = ?\",\n input.projectId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal\n )\n })\n }\n\n async list(input: ListOntologyCommitsInput): Promise<ListOntologyCommitsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n if (input.run) assertNonblank(input.run.id, \"Ontology commit run id\")\n const offset = input.offset ?? 0\n const limit = input.limit ?? -1\n assertNonnegativeInteger(offset, \"Ontology commit list offset\")\n if (limit !== -1) assertNonnegativeInteger(limit, \"Ontology commit list limit\")\n const filters = [\"project_id = ?\"]\n const values: (string | number)[] = [input.projectId]\n if (input.run?.kind === \"action\") {\n filters.push(\"origin_kind = 'action' AND origin_run_id = ?\")\n values.push(input.run.id)\n } else if (input.run?.kind === \"projection\") {\n filters.push(\"origin_run_id = ? AND origin_kind IN ('projection', 'telemetry')\")\n values.push(input.run.id)\n }\n const where = filters.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM ontology_commits WHERE ${where}`)\n .get(...values) as { readonly total: number }\n const direction = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const order =\n input.run?.kind === \"projection\"\n ? `CASE WHEN origin_kind = 'telemetry' THEN origin_batch_ordinal ELSE -1 END ${direction}, committed_at ${direction}, id ${direction}`\n : `committed_at ${direction}, id ${direction}`\n const rows = this.db\n .query(\n `\n SELECT * FROM ontology_commits\n WHERE ${where}\n ORDER BY ${order}\n LIMIT ? OFFSET ?\n `\n )\n .all(...values, limit, offset) as SqliteOntologyCommitRow[]\n const commits = rows.map(commitRecord)\n return {\n commits,\n total: totalRow.total,\n hasMore: offset + commits.length < totalRow.total,\n }\n })\n }\n\n private readOne(\n where: string,\n ...values: readonly (string | number)[]\n ): OntologyCommitRecord | null {\n const row = this.db\n .query(`SELECT * FROM ontology_commits WHERE ${where}`)\n .get(...values) as SqliteOntologyCommitRow | null\n return row ? commitRecord(row) : null\n }\n}\n",
|
|
56
|
-
"import type { Database } from \"bun:sqlite\"\nimport {\n assertPinnedDatasetWatermark,\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n MaterializationConflictError,\n MaterializationValidationError,\n objectRefKey,\n objectRefSortKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertExpectedLinkRevision,\n assertExpectedLinkScopeRevision,\n assertExpectedObjectRevision,\n assertMaterializationFinalizationCorrelation,\n assertMaterializationHeader,\n assertPageRows,\n assertSourceActivationCorrelation,\n beginMaterializationApply,\n beginMaterializationVectorChanges,\n createCardinalityValidator,\n invalidCorrelation,\n materializationOutboxWrite,\n materializationPlanChunk,\n sameNonnegativeCounts as sameCounts,\n uniqueSorted,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AppliedMaterialization,\n ApplyMaterializationInput,\n ApplyMaterializationResult,\n FinalizeMaterializationInput,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationVectorChangePage,\n OntologyCommitRecord,\n OntologyMaterializationStorage,\n SourceActivationWrite,\n StageMaterializationWorkInput,\n StreamMaterializationStateInput,\n StreamMaterializationVectorChangesInput,\n} from \"@sixb/core/storage\"\nimport { yieldSqliteEventLoop } from \"../transactions\"\nimport {\n type SqliteMaterializationSessionState,\n SqliteMaterializationSessions,\n type SqliteOntologyTransactionContext,\n} from \"./materialization-session\"\nimport { SqliteMaterializationStateReader } from \"./materialization-state\"\nimport { SqliteMaterializationWriter } from \"./materialization-writer\"\nimport { boundReplacementPlan } from \"./replacement-plans\"\nimport {\n assertProjectionExecution,\n canonicalJson,\n commitRecord,\n isSqliteConstraintError,\n originColumns,\n requireChanges,\n type SqliteOntologyCommitRow,\n type SqliteOntologySourceRow,\n} from \"./shared\"\nimport { activateSourceRoots } from \"./source-roots\"\nimport { sqliteUniqueHolder } from \"./unique-values\"\n\n/** Rows the provider reads and writes at once while it applies a staged plan. */\nconst APPLY_PAGE_ROWS = 1_000\n\n/**\n * Records the entities whose plan inputs a commit's applied work changed, once each, as the\n * in-memory `touchPlanItem` does: a replacement plan's refresh rechecks only those.\n */\nfunction touchAppliedWorkStatement(workTable: string): string {\n return `\n INSERT INTO ontology_commit_touches (project_id, commit_id, entity_kind, identity_key)\n SELECT DISTINCT $projectId, $commitId, kind, CASE kind\n WHEN 'object' THEN\n json_array(json_extract(ref, '$.objectTypeId'), json_extract(ref, '$.primaryId'))\n WHEN 'scope' THEN json_array(\n json_extract(ref, '$.source.objectTypeId'), json_extract(ref, '$.source.primaryId'),\n json_extract(ref, '$.linkId')\n )\n ELSE json_array(\n json_extract(ref, '$.source.objectTypeId'), json_extract(ref, '$.source.primaryId'),\n json_extract(ref, '$.linkId'), json_extract(ref, '$.target.objectTypeId'),\n json_extract(ref, '$.target.primaryId')\n )\n END\n FROM (\n SELECT CASE json_extract(payload, '$.item.kind')\n WHEN 'object-upsert' THEN 'object'\n WHEN 'object-delete' THEN 'object'\n WHEN 'object-override-upsert' THEN 'object'\n WHEN 'object-override-delete' THEN 'object'\n WHEN 'point-upsert' THEN 'object'\n WHEN 'link-upsert' THEN 'link'\n WHEN 'link-delete' THEN 'link'\n WHEN 'link-override-upsert' THEN 'link'\n WHEN 'link-override-delete' THEN 'link'\n WHEN 'link-slot-override-upsert' THEN 'scope'\n WHEN 'link-slot-override-delete' THEN 'scope'\n END AS kind,\n CASE json_extract(payload, '$.item.kind')\n WHEN 'object-upsert' THEN json_extract(payload, '$.item.value.row.ref')\n WHEN 'link-upsert' THEN json_extract(payload, '$.item.value.row.ref')\n WHEN 'point-upsert' THEN json_extract(payload, '$.item.value.point.series.object')\n ELSE json_extract(payload, '$.item.value.ref')\n END AS ref\n FROM ${workTable}\n WHERE work_id = $workId AND lane = 'apply'\n )\n -- Unique values are no plan input: a stale claim fails when it applies.\n WHERE kind IS NOT NULL`\n}\n\nexport class SqliteOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions: SqliteMaterializationSessions\n private readonly writer: SqliteMaterializationWriter\n\n constructor(\n private readonly db: Database,\n context: SqliteOntologyTransactionContext | null\n ) {\n this.sessions = new SqliteMaterializationSessions(db, context)\n this.writer = new SqliteMaterializationWriter(db)\n }\n\n assertVectorSession(session: MaterializationSession, projectId: string, commitId?: string): void {\n const active = this.sessions.require(session)\n if (\n active.header.commit.projectId !== projectId ||\n (commitId !== undefined && active.header.commit.id !== commitId)\n ) {\n throw new MaterializationValidationError(\n \"Vector mutation does not belong to this materialization session.\"\n )\n }\n }\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n assertMaterializationHeader(input)\n const session = this.sessions.create(\n input,\n input.plan ? boundReplacementPlan(this.db, input) : null\n )\n try {\n this.assertCommitAbsent(input)\n const reader = new SqliteMaterializationStateReader(this.db, input.commit.projectId)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects) {\n assertExpectedObjectRevision(reader.effectiveObjectRevision(expected.ref), expected)\n }\n for (const expected of input.expected.links) {\n assertExpectedLinkRevision(reader.effectiveLinkLastCommit(expected.ref), expected)\n }\n const linkScopeRevisions = reader.linkScopeRevisions(input.expected.linkScopes)\n for (const [index, expected] of input.expected.linkScopes.entries()) {\n assertExpectedLinkScopeRevision(linkScopeRevisions[index]?.fingerprint, expected)\n }\n for (const expected of input.expected.points) {\n const point = reader.exactPoint(expected.series, expected.at)\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n return session.publicSession()\n } catch (error) {\n this.sessions.release(session)\n throw error\n }\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const reader = new SqliteMaterializationStateReader(this.db, session.header.commit.projectId)\n for await (const request of input.requests) {\n this.sessions.require(input.session)\n const objects = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objects.length; offset += input.pageRows) {\n const page = reader.objectStates(objects.slice(offset, offset + input.pageRows))\n yield { objects: page, links: [], linkScopes: [], points: [] }\n }\n const links = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < links.length; offset += input.pageRows) {\n const page = reader.linkStates(links.slice(offset, offset + input.pageRows))\n yield { objects: [], links: page, linkScopes: [], points: [] }\n }\n for (const refs of reader.incidentLinks(request.incidentObjects, input.pageRows)) {\n this.sessions.require(input.session)\n yield {\n objects: [],\n links: reader.linkStates(refs),\n linkScopes: [],\n points: [],\n }\n }\n const scopes = uniqueSorted(\n request.linkScopes,\n (scope) =>\n JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId]),\n (scope) => linkScopeSortKey(scope.source, scope.linkId)\n )\n for (let offset = 0; offset < scopes.length; offset += input.pageRows) {\n yield {\n objects: [],\n links: [],\n linkScopes: reader.linkSlotStates(scopes.slice(offset, offset + input.pageRows)),\n points: [],\n }\n }\n const points = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < points.length; offset += input.pageRows) {\n const page = reader.exactPoints(points.slice(offset, offset + input.pageRows))\n if (page.length > 0) yield { objects: [], links: [], linkScopes: [], points: page }\n }\n const uniqueValues = request.uniqueValues ?? []\n for (let offset = 0; offset < uniqueValues.length; offset += input.pageRows) {\n const uniqueHolders = uniqueValues\n .slice(offset, offset + input.pageRows)\n .flatMap((value) => {\n const primaryId = sqliteUniqueHolder(this.db, session.header.commit.projectId, value)\n return primaryId === null ? [] : [{ ...value, primaryId }]\n })\n if (uniqueHolders.length > 0) {\n yield { objects: [], links: [], linkScopes: [], points: [], uniqueHolders }\n }\n }\n }\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n this.sessions.stage(input)\n await yieldSqliteEventLoop()\n }\n\n async *streamVectorChanges(\n input: StreamMaterializationVectorChangesInput\n ): AsyncIterable<MaterializationVectorChangePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n beginMaterializationVectorChanges(session)\n for (const items of this.sessions.vectorChangePages(\n session,\n input.objectTypeIds,\n input.pageRows\n )) {\n yield { items }\n }\n }\n\n async apply(input: ApplyMaterializationInput): Promise<AppliedMaterialization> {\n const session = this.sessions.require(input.session)\n beginMaterializationApply(session)\n const { commit } = session.header\n const cardinality = createCardinalityValidator()\n for (const records of this.sessions.lanePages(session, \"cardinality\", APPLY_PAGE_ROWS)) {\n for (const record of records) cardinality.accept(record)\n }\n let eventCount = 0\n this.db.run(\"SAVEPOINT sixb_ontology_apply\")\n try {\n for (const records of this.sessions.lanePages(session, \"apply\", APPLY_PAGE_ROWS)) {\n // The writer orders tables its own way within a chunk; one phase per chunk keeps the\n // canonical phase order.\n for (const phase of splitByPhase(records)) {\n this.writer.apply(\n commit.projectId,\n commit.id,\n materializationPlanChunk(phase.map((record) => record.item))\n )\n }\n await yieldSqliteEventLoop()\n }\n for (const records of this.sessions.lanePages(session, \"event\", APPLY_PAGE_ROWS)) {\n const outbox = records.map((record) =>\n materializationOutboxWrite(commit, record.draft, eventCount++)\n )\n this.writer.apply(commit.projectId, commit.id, materializationPlanChunk([], outbox))\n await yieldSqliteEventLoop()\n }\n this.db\n .query(touchAppliedWorkStatement(session.workTable))\n .run({ $projectId: commit.projectId, $commitId: commit.id, $workId: session.workId })\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply\")\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_apply\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply\")\n throw error\n }\n session.appliedEventCount = eventCount\n return { eventCount }\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.sessions.require(input.session)\n this.assertCommitAbsent(session.header)\n await this.assertFinalization(session, input)\n for (const activation of input.finalization.sourceActivations) {\n this.activateSource(session, activation)\n }\n const record = this.insertCommit(session.header, input)\n this.sessions.release(session)\n return { commit: record }\n }\n\n deactivateSessions(): void {\n this.sessions.deactivateAll()\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n const origin = originColumns(header.commit.origin)\n const duplicate = this.db\n .query(\n `\n SELECT CASE\n WHEN id = ? THEN 'id'\n WHEN idempotency_key = ? THEN 'idempotency'\n ELSE 'origin'\n END AS duplicate\n FROM ontology_commits\n WHERE project_id = ? AND (\n id = ? OR idempotency_key = ? OR (\n ? IS NOT NULL AND origin_kind = ? AND origin_run_id = ?\n AND (origin_batch_ordinal IS ? OR origin_batch_ordinal = ?)\n )\n )\n LIMIT 1\n `\n )\n .get(\n header.commit.id,\n header.commit.idempotencyKey,\n header.commit.projectId,\n header.commit.id,\n header.commit.idempotencyKey,\n origin.runId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n origin.batchOrdinal\n ) as { readonly duplicate: \"id\" | \"idempotency\" | \"origin\" } | null\n if (!duplicate) return\n if (duplicate.duplicate === \"origin\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n throw new MaterializationConflictError(\n \"idempotency\",\n duplicate.duplicate === \"id\"\n ? `Ontology commit '${header.commit.id}' already exists.`\n : \"Ontology idempotency key already exists.\"\n )\n }\n\n private assertSource(\n expected: MaterializationPlanHeader[\"expected\"][\"sources\"][number],\n projectId: string\n ): void {\n const active = this.getActiveSource(projectId, expected.source.projectionId)\n if (\n (active?.materialization_id ?? null) !== expected.activeMaterializationId ||\n (active?.last_commit_id ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertFinalization(\n session: SqliteMaterializationSessionState,\n input: FinalizeMaterializationInput\n ): Promise<void> {\n const { commit } = session.header\n const { result } = input.finalization\n assertMaterializationFinalizationCorrelation(session, input)\n this.assertFinalCardinality(session)\n await yieldSqliteEventLoop()\n const eventCount = session.appliedEventCount\n const outbox = this.db\n .query(\n `\n SELECT COUNT(*) AS count, MIN(commit_ordinal) AS minimum, MAX(commit_ordinal) AS maximum\n FROM ontology_outbox WHERE project_id = ? AND commit_id = ?\n `\n )\n .get(commit.projectId, commit.id) as {\n readonly count: number\n readonly minimum: number | null\n readonly maximum: number | null\n }\n if (\n outbox.count !== eventCount ||\n (eventCount > 0 && (outbox.minimum !== 0 || outbox.maximum !== eventCount - 1))\n ) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n await yieldSqliteEventLoop()\n\n if (commit.intent.kind === \"telemetry\") {\n const summary = this.sessions.telemetrySummary(session, commit.intent.pointCount)\n await yieldSqliteEventLoop()\n if (summary.classifiedPoints !== commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n if (result.kind !== \"telemetry\" || !sameCounts(result, summary.counts)) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n }\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\") return\n this.sessions.assertClassificationCoverage(session)\n await yieldSqliteEventLoop()\n const counts = this.sessions.projectionCounts(session)\n await yieldSqliteEventLoop()\n if (!sameCounts(result.counts, counts)) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n }\n }\n\n private assertFinalCardinality(session: SqliteMaterializationSessionState): void {\n const violation = this.db\n .query(\n `\n WITH scopes AS (\n SELECT sort_one AS scope_sort_key,\n cardinality_source_type_id AS source_type_id,\n cardinality_source_primary_id AS source_id,\n cardinality_link_id AS link_id,\n SUM(cardinality_occupied) AS expected_count,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_type_id END) AS expected_target_type_id,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_primary_id END) AS expected_target_id\n FROM ${session.workTable}\n WHERE work_id = ? AND kind = 'cardinality'\n AND cardinality_view = 'effective'\n GROUP BY sort_one, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id\n ), validated AS (\n SELECT scopes.scope_sort_key, scopes.expected_count,\n COUNT(links.source_id) AS actual_count,\n COUNT(links.source_id) FILTER (\n WHERE links.target_type_id = scopes.expected_target_type_id\n AND links.target_id = scopes.expected_target_id\n ) AS matching_count\n FROM scopes\n LEFT JOIN links\n ON links.project_id = ?\n AND links.source_type_id = scopes.source_type_id\n AND links.source_id = scopes.source_id\n AND links.link_id = scopes.link_id\n GROUP BY scopes.scope_sort_key, scopes.expected_count,\n scopes.expected_target_type_id, scopes.expected_target_id\n )\n SELECT 1 AS mismatch\n FROM validated\n WHERE actual_count <> expected_count OR matching_count <> expected_count\n LIMIT 1\n `\n )\n .get(session.workId, session.header.commit.projectId)\n // Apply already rejected a scope with two staged occupants; this checks what it wrote.\n if (violation) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n\n private activateSource(\n session: SqliteMaterializationSessionState,\n activation: SourceActivationWrite\n ): void {\n const { commit } = session.header\n assertSourceActivationCorrelation(session, activation)\n const candidate = this.getSource(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n assertProjectionExecution(this.db, {\n projectId: commit.projectId,\n sourceId: activation.source.projectionId,\n projectionRunId: activation.execution.projectionRunId,\n executionToken: activation.execution.executionToken,\n })\n if (\n candidate.projection_run_id !== activation.execution.projectionRunId ||\n candidate.execution_token !== activation.execution.executionToken ||\n candidate.projection_kind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n candidate.dataset_id !== activation.datasetVersion.datasetId ||\n candidate.dataset_version_id !== activation.datasetVersion.versionId ||\n candidate.dataset_version_created_at !== activation.datasetVersion.createdAt ||\n candidate.projection_revision !== activation.projectionRevision ||\n candidate.ownership_hash !== activation.ownershipHash ||\n candidate.ontology_revision !== activation.ontologyRevision ||\n candidate.ready_at === null ||\n activation.updatedAt < candidate.ready_at\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n this.assertSource(activation.expected, commit.projectId)\n activateSourceRoots(this.db, commit.projectId, commit.id, candidate, activation)\n const previous = this.getActiveSource(commit.projectId, activation.source.projectionId)\n if (previous) {\n assertPinnedDatasetWatermark(\n {\n datasetId: previous.dataset_id,\n versionId: previous.dataset_version_id,\n createdAt: previous.dataset_version_created_at,\n },\n activation.datasetVersion,\n \"Source activation\"\n )\n if (activation.updatedAt < previous.updated_at) {\n invalidCorrelation(\"Source activation cannot precede the active materialization update.\")\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'superseded', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'active' AND last_commit_id = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n previous.materialization_id,\n activation.expected.lastCommitId\n ).changes,\n \"projection-fence\",\n `Source '${activation.source.projectionId}' changed.`\n )\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'active', execution_token = NULL, activated_at = ?,\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'ready' AND execution_token = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.lastCommitId,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId,\n activation.execution.executionToken\n ).changes,\n \"source-materialization\",\n \"Source activation candidate changed.\"\n )\n }\n\n private insertCommit(\n header: MaterializationPlanHeader,\n input: FinalizeMaterializationInput\n ): OntologyCommitRecord {\n const { commit } = header\n const origin = originColumns(commit.origin)\n try {\n this.db\n .query(\n `\n INSERT INTO ontology_commits (\n project_id, id, idempotency_key, request_hash, execution_id,\n origin_kind, origin_run_id, origin_batch_ordinal, origin,\n ontology_revision, projection_revision, ownership_hash,\n intent, result, committed_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, json(?), ?, ?, ?, json(?), json(?), ?)\n `\n )\n .run(\n commit.projectId,\n commit.id,\n commit.idempotencyKey,\n commit.requestHash,\n commit.executionId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n canonicalJson(commit.origin),\n commit.ontologyRevision,\n commit.projectionRevision ?? null,\n commit.ownershipHash ?? null,\n canonicalJson(commit.intent),\n canonicalJson(input.finalization.result),\n commit.committedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology commit identity already exists.\"\n )\n }\n throw error\n }\n const row = this.db\n .query(\"SELECT * FROM ontology_commits WHERE project_id = ? AND id = ?\")\n .get(commit.projectId, commit.id) as SqliteOntologyCommitRow\n return commitRecord(row)\n }\n\n private getActiveSource(projectId: string, sourceId: string): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'`\n )\n .get(projectId, sourceId) as SqliteOntologySourceRow | null\n }\n\n private getSource(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.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\nfunction splitByPhase(\n records: readonly MaterializationPlanWorkRecord[]\n): MaterializationPlanWorkRecord[][] {\n const phases: MaterializationPlanWorkRecord[][] = []\n for (const record of records) {\n const current = phases[phases.length - 1]\n if (current && current[0]!.applyPhase === record.applyPhase) current.push(record)\n else phases.push([record])\n }\n return phases\n}\n",
|
|
58
|
+
"import type { Database } from \"bun:sqlite\"\nimport type {\n GetOntologyCommitByIdempotencyKeyInput,\n GetOntologyCommitByIdInput,\n GetOntologyCommitByOriginInput,\n ListOntologyCommitsInput,\n ListOntologyCommitsResult,\n OntologyCommitRecord,\n OntologyCommitStorage,\n} from \"@sixb/core/storage\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertTimestamp,\n commitRecord,\n originWhere,\n type SqliteOntologyCommitRow,\n type SqliteRootOperation,\n} from \"./shared\"\n\nexport class SqliteOntologyCommitStorage implements OntologyCommitStorage {\n constructor(\n private readonly db: Database,\n private readonly runRootOperation: SqliteRootOperation\n ) {}\n\n async getByIdempotencyKey(\n input: GetOntologyCommitByIdempotencyKeyInput\n ): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.idempotencyKey, \"Ontology commit idempotency key\")\n return this.readOne(\n \"project_id = ? AND idempotency_key = ?\",\n input.projectId,\n input.idempotencyKey\n )\n })\n }\n\n async getById(input: GetOntologyCommitByIdInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n assertNonblank(input.id, \"Ontology commit id\")\n return this.readOne(\"project_id = ? AND id = ?\", input.projectId, input.id)\n })\n }\n\n async getByOrigin(input: GetOntologyCommitByOriginInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n const origin = originWhere(input.origin)\n assertNonblank(origin.runId, \"Ontology commit origin run id\")\n if (origin.batchOrdinal !== null) {\n assertNonnegativeInteger(origin.batchOrdinal, \"Ontology telemetry commit batch ordinal\")\n }\n return origin.batchOrdinal === null\n ? this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal IS NULL\",\n input.projectId,\n origin.kind,\n origin.runId\n )\n : this.readOne(\n \"project_id = ? AND origin_kind = ? AND origin_run_id = ? AND origin_batch_ordinal = ?\",\n input.projectId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal\n )\n })\n }\n\n async list(input: ListOntologyCommitsInput): Promise<ListOntologyCommitsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology commit project id\")\n if (input.run) assertNonblank(input.run.id, \"Ontology commit run id\")\n const offset = input.offset ?? 0\n const limit = input.limit ?? -1\n assertNonnegativeInteger(offset, \"Ontology commit list offset\")\n if (limit !== -1) assertNonnegativeInteger(limit, \"Ontology commit list limit\")\n if (input.committedAt !== undefined) {\n assertTimestamp(input.committedAt, \"Ontology commit list committedAt\")\n }\n const filters = [\"project_id = ?\"]\n const values: (string | number)[] = [input.projectId]\n if (input.run?.kind === \"action\") {\n filters.push(\"origin_kind = 'action' AND origin_run_id = ?\")\n values.push(input.run.id)\n } else if (input.run?.kind === \"projection\") {\n filters.push(\"origin_run_id = ? AND origin_kind IN ('projection', 'telemetry')\")\n values.push(input.run.id)\n }\n if (input.committedAt !== undefined) {\n // Commit times are stored canonical, so text equality is exact and the index serves it.\n filters.push(\"committed_at = ?\")\n values.push(input.committedAt)\n }\n const where = filters.join(\" AND \")\n const totalRow = this.db\n .query(`SELECT COUNT(*) AS total FROM ontology_commits WHERE ${where}`)\n .get(...values) as { readonly total: number }\n const direction = input.order === \"desc\" ? \"DESC\" : \"ASC\"\n const order =\n input.run?.kind === \"projection\"\n ? `CASE WHEN origin_kind = 'telemetry' THEN origin_batch_ordinal ELSE -1 END ${direction}, committed_at ${direction}, id ${direction}`\n : `committed_at ${direction}, id ${direction}`\n const rows = this.db\n .query(\n `\n SELECT * FROM ontology_commits\n WHERE ${where}\n ORDER BY ${order}\n LIMIT ? OFFSET ?\n `\n )\n .all(...values, limit, offset) as SqliteOntologyCommitRow[]\n const commits = rows.map(commitRecord)\n return {\n commits,\n total: totalRow.total,\n hasMore: offset + commits.length < totalRow.total,\n }\n })\n }\n\n private readOne(\n where: string,\n ...values: readonly (string | number)[]\n ): OntologyCommitRecord | null {\n const row = this.db\n .query(`SELECT * FROM ontology_commits WHERE ${where}`)\n .get(...values) as SqliteOntologyCommitRow | null\n return row ? commitRecord(row) : null\n }\n}\n",
|
|
59
|
+
"import type { Database } from \"bun:sqlite\"\nimport {\n assertPinnedDatasetWatermark,\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n MaterializationConflictError,\n MaterializationValidationError,\n objectRefKey,\n objectRefSortKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n assertExpectedLinkRevision,\n assertExpectedLinkScopeRevision,\n assertExpectedObjectRevision,\n assertMaterializationFinalizationCorrelation,\n assertMaterializationHeader,\n assertPageRows,\n assertSourceActivationCorrelation,\n beginMaterializationApply,\n beginMaterializationVectorChanges,\n createCardinalityValidator,\n invalidCorrelation,\n materializationOutboxWrite,\n materializationPlanChunk,\n prepareMaterializationStateRead,\n sameNonnegativeCounts as sameCounts,\n uniqueSorted,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n AppliedMaterialization,\n ApplyMaterializationInput,\n ApplyMaterializationResult,\n FinalizeMaterializationInput,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationState,\n MaterializationStatePage,\n MaterializationVectorChangePage,\n OntologyCommitRecord,\n OntologyMaterializationStorage,\n ReadMaterializationStateInput,\n SourceActivationWrite,\n StageMaterializationWorkInput,\n StreamMaterializationStateInput,\n StreamMaterializationVectorChangesInput,\n} from \"@sixb/core/storage\"\nimport { runDeferredReadTransaction, yieldSqliteEventLoop } from \"../transactions\"\nimport {\n type SqliteMaterializationSessionState,\n SqliteMaterializationSessions,\n type SqliteOntologyTransactionContext,\n} from \"./materialization-session\"\nimport { SqliteMaterializationStateReader } from \"./materialization-state\"\nimport { SqliteMaterializationWriter } from \"./materialization-writer\"\nimport { boundReplacementPlan } from \"./replacement-plans\"\nimport {\n assertProjectionExecution,\n canonicalJson,\n commitRecord,\n isSqliteConstraintError,\n originColumns,\n requireChanges,\n type SqliteOntologyCommitRow,\n type SqliteOntologySourceRow,\n} from \"./shared\"\nimport { activateSourceRoots } from \"./source-roots\"\nimport { sqliteUniqueHolder } from \"./unique-values\"\n\n/** Rows the provider reads and writes at once while it applies a staged plan. */\nconst APPLY_PAGE_ROWS = 1_000\n\n/**\n * Records the entities whose plan inputs a commit's applied work changed, once each, as the\n * in-memory `touchPlanItem` does: a replacement plan's refresh rechecks only those.\n */\nfunction touchAppliedWorkStatement(workTable: string): string {\n return `\n INSERT INTO ontology_commit_touches (project_id, commit_id, entity_kind, identity_key)\n SELECT DISTINCT $projectId, $commitId, kind, CASE kind\n WHEN 'object' THEN\n json_array(json_extract(ref, '$.objectTypeId'), json_extract(ref, '$.primaryId'))\n WHEN 'scope' THEN json_array(\n json_extract(ref, '$.source.objectTypeId'), json_extract(ref, '$.source.primaryId'),\n json_extract(ref, '$.linkId')\n )\n ELSE json_array(\n json_extract(ref, '$.source.objectTypeId'), json_extract(ref, '$.source.primaryId'),\n json_extract(ref, '$.linkId'), json_extract(ref, '$.target.objectTypeId'),\n json_extract(ref, '$.target.primaryId')\n )\n END\n FROM (\n SELECT CASE json_extract(payload, '$.item.kind')\n WHEN 'object-upsert' THEN 'object'\n WHEN 'object-delete' THEN 'object'\n WHEN 'object-override-upsert' THEN 'object'\n WHEN 'object-override-delete' THEN 'object'\n WHEN 'point-upsert' THEN 'object'\n WHEN 'link-upsert' THEN 'link'\n WHEN 'link-delete' THEN 'link'\n WHEN 'link-override-upsert' THEN 'link'\n WHEN 'link-override-delete' THEN 'link'\n WHEN 'link-slot-override-upsert' THEN 'scope'\n WHEN 'link-slot-override-delete' THEN 'scope'\n END AS kind,\n CASE json_extract(payload, '$.item.kind')\n WHEN 'object-upsert' THEN json_extract(payload, '$.item.value.row.ref')\n WHEN 'link-upsert' THEN json_extract(payload, '$.item.value.row.ref')\n WHEN 'point-upsert' THEN json_extract(payload, '$.item.value.point.series.object')\n ELSE json_extract(payload, '$.item.value.ref')\n END AS ref\n FROM ${workTable}\n WHERE work_id = $workId AND lane = 'apply'\n )\n -- Unique values are no plan input: a stale claim fails when it applies.\n WHERE kind IS NOT NULL`\n}\n\nexport class SqliteOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions: SqliteMaterializationSessions\n private readonly writer: SqliteMaterializationWriter\n\n constructor(\n private readonly db: Database,\n context: SqliteOntologyTransactionContext | null\n ) {\n this.sessions = new SqliteMaterializationSessions(db, context)\n this.writer = new SqliteMaterializationWriter(db)\n }\n\n assertVectorSession(session: MaterializationSession, projectId: string, commitId?: string): void {\n const active = this.sessions.require(session)\n if (\n active.header.commit.projectId !== projectId ||\n (commitId !== undefined && active.header.commit.id !== commitId)\n ) {\n throw new MaterializationValidationError(\n \"Vector mutation does not belong to this materialization session.\"\n )\n }\n }\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n assertMaterializationHeader(input)\n const session = this.sessions.create(\n input,\n input.plan ? boundReplacementPlan(this.db, input) : null\n )\n try {\n this.assertCommitAbsent(input)\n const reader = new SqliteMaterializationStateReader(this.db, input.commit.projectId)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects) {\n assertExpectedObjectRevision(reader.effectiveObjectRevision(expected.ref), expected)\n }\n for (const expected of input.expected.links) {\n assertExpectedLinkRevision(reader.effectiveLinkLastCommit(expected.ref), expected)\n }\n const linkScopeRevisions = reader.linkScopeRevisions(input.expected.linkScopes)\n for (const [index, expected] of input.expected.linkScopes.entries()) {\n assertExpectedLinkScopeRevision(linkScopeRevisions[index]?.fingerprint, expected)\n }\n for (const expected of input.expected.points) {\n const point = reader.exactPoint(expected.series, expected.at)\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n return session.publicSession()\n } catch (error) {\n this.sessions.release(session)\n throw error\n }\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n const reader = new SqliteMaterializationStateReader(this.db, session.header.commit.projectId)\n for await (const request of input.requests) {\n this.sessions.require(input.session)\n const objects = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objects.length; offset += input.pageRows) {\n const page = reader.objectStates(objects.slice(offset, offset + input.pageRows))\n yield { objects: page, links: [], linkScopes: [], points: [] }\n }\n const links = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < links.length; offset += input.pageRows) {\n const page = reader.linkStates(links.slice(offset, offset + input.pageRows))\n yield { objects: [], links: page, linkScopes: [], points: [] }\n }\n for (const refs of reader.incidentLinks(request.incidentObjects, input.pageRows)) {\n this.sessions.require(input.session)\n yield {\n objects: [],\n links: reader.linkStates(refs),\n linkScopes: [],\n points: [],\n }\n }\n const scopes = uniqueSorted(\n request.linkScopes,\n (scope) =>\n JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId]),\n (scope) => linkScopeSortKey(scope.source, scope.linkId)\n )\n for (let offset = 0; offset < scopes.length; offset += input.pageRows) {\n yield {\n objects: [],\n links: [],\n linkScopes: reader.linkSlotStates(scopes.slice(offset, offset + input.pageRows)),\n points: [],\n }\n }\n const points = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < points.length; offset += input.pageRows) {\n const page = reader.exactPoints(points.slice(offset, offset + input.pageRows))\n if (page.length > 0) yield { objects: [], links: [], linkScopes: [], points: page }\n }\n const uniqueValues = request.uniqueValues ?? []\n for (let offset = 0; offset < uniqueValues.length; offset += input.pageRows) {\n const uniqueHolders = uniqueValues\n .slice(offset, offset + input.pageRows)\n .flatMap((value) => {\n const primaryId = sqliteUniqueHolder(this.db, session.header.commit.projectId, value)\n return primaryId === null ? [] : [{ ...value, primaryId }]\n })\n if (uniqueHolders.length > 0) {\n yield { objects: [], links: [], linkScopes: [], points: [], uniqueHolders }\n }\n }\n }\n }\n\n async readState(input: ReadMaterializationStateInput): Promise<MaterializationState> {\n const request = prepareMaterializationStateRead(input)\n\n // One snapshot for every statement, so the read never straddles a commit.\n return runDeferredReadTransaction(this.db, () => {\n const reader = new SqliteMaterializationStateReader(this.db, request.projectId)\n return {\n objects: reader.objectStates(request.objects),\n links: reader.linkStates(request.links),\n linkScopes: reader.linkSlotStates(request.linkScopes),\n }\n })\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n this.sessions.stage(input)\n await yieldSqliteEventLoop()\n }\n\n async *streamVectorChanges(\n input: StreamMaterializationVectorChangesInput\n ): AsyncIterable<MaterializationVectorChangePage> {\n const session = this.sessions.require(input.session)\n assertPageRows(input.pageRows)\n beginMaterializationVectorChanges(session)\n for (const items of this.sessions.vectorChangePages(\n session,\n input.objectTypeIds,\n input.pageRows\n )) {\n yield { items }\n }\n }\n\n async apply(input: ApplyMaterializationInput): Promise<AppliedMaterialization> {\n const session = this.sessions.require(input.session)\n beginMaterializationApply(session)\n const { commit } = session.header\n const cardinality = createCardinalityValidator()\n for (const records of this.sessions.lanePages(session, \"cardinality\", APPLY_PAGE_ROWS)) {\n for (const record of records) cardinality.accept(record)\n }\n let eventCount = 0\n this.db.run(\"SAVEPOINT sixb_ontology_apply\")\n try {\n for (const records of this.sessions.lanePages(session, \"apply\", APPLY_PAGE_ROWS)) {\n // The writer orders tables its own way within a chunk; one phase per chunk keeps the\n // canonical phase order.\n for (const phase of splitByPhase(records)) {\n this.writer.apply(\n commit.projectId,\n commit.id,\n materializationPlanChunk(phase.map((record) => record.item))\n )\n }\n await yieldSqliteEventLoop()\n }\n for (const records of this.sessions.lanePages(session, \"event\", APPLY_PAGE_ROWS)) {\n const outbox = records.map((record) =>\n materializationOutboxWrite(commit, record.draft, eventCount++)\n )\n this.writer.apply(commit.projectId, commit.id, materializationPlanChunk([], outbox))\n await yieldSqliteEventLoop()\n }\n this.db\n .query(touchAppliedWorkStatement(session.workTable))\n .run({ $projectId: commit.projectId, $commitId: commit.id, $workId: session.workId })\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply\")\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_apply\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_apply\")\n throw error\n }\n session.appliedEventCount = eventCount\n return { eventCount }\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.sessions.require(input.session)\n this.assertCommitAbsent(session.header)\n await this.assertFinalization(session, input)\n for (const activation of input.finalization.sourceActivations) {\n this.activateSource(session, activation)\n }\n const record = this.insertCommit(session.header, input)\n this.sessions.release(session)\n return { commit: record }\n }\n\n deactivateSessions(): void {\n this.sessions.deactivateAll()\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n const origin = originColumns(header.commit.origin)\n const duplicate = this.db\n .query(\n `\n SELECT CASE\n WHEN id = ? THEN 'id'\n WHEN idempotency_key = ? THEN 'idempotency'\n ELSE 'origin'\n END AS duplicate\n FROM ontology_commits\n WHERE project_id = ? AND (\n id = ? OR idempotency_key = ? OR (\n ? IS NOT NULL AND origin_kind = ? AND origin_run_id = ?\n AND (origin_batch_ordinal IS ? OR origin_batch_ordinal = ?)\n )\n )\n LIMIT 1\n `\n )\n .get(\n header.commit.id,\n header.commit.idempotencyKey,\n header.commit.projectId,\n header.commit.id,\n header.commit.idempotencyKey,\n origin.runId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n origin.batchOrdinal\n ) as { readonly duplicate: \"id\" | \"idempotency\" | \"origin\" } | null\n if (!duplicate) return\n if (duplicate.duplicate === \"origin\") {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n throw new MaterializationConflictError(\n \"idempotency\",\n duplicate.duplicate === \"id\"\n ? `Ontology commit '${header.commit.id}' already exists.`\n : \"Ontology idempotency key already exists.\"\n )\n }\n\n private assertSource(\n expected: MaterializationPlanHeader[\"expected\"][\"sources\"][number],\n projectId: string\n ): void {\n const active = this.getActiveSource(projectId, expected.source.projectionId)\n if (\n (active?.materialization_id ?? null) !== expected.activeMaterializationId ||\n (active?.last_commit_id ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertFinalization(\n session: SqliteMaterializationSessionState,\n input: FinalizeMaterializationInput\n ): Promise<void> {\n const { commit } = session.header\n const { result } = input.finalization\n assertMaterializationFinalizationCorrelation(session, input)\n this.assertFinalCardinality(session)\n await yieldSqliteEventLoop()\n const eventCount = session.appliedEventCount\n const outbox = this.db\n .query(\n `\n SELECT COUNT(*) AS count, MIN(commit_ordinal) AS minimum, MAX(commit_ordinal) AS maximum\n FROM ontology_outbox WHERE project_id = ? AND commit_id = ?\n `\n )\n .get(commit.projectId, commit.id) as {\n readonly count: number\n readonly minimum: number | null\n readonly maximum: number | null\n }\n if (\n outbox.count !== eventCount ||\n (eventCount > 0 && (outbox.minimum !== 0 || outbox.maximum !== eventCount - 1))\n ) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n await yieldSqliteEventLoop()\n\n if (commit.intent.kind === \"telemetry\") {\n const summary = this.sessions.telemetrySummary(session, commit.intent.pointCount)\n await yieldSqliteEventLoop()\n if (summary.classifiedPoints !== commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n if (result.kind !== \"telemetry\" || !sameCounts(result, summary.counts)) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n }\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\") return\n this.sessions.assertClassificationCoverage(session)\n await yieldSqliteEventLoop()\n const counts = this.sessions.projectionCounts(session)\n await yieldSqliteEventLoop()\n if (!sameCounts(result.counts, counts)) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n }\n }\n\n private assertFinalCardinality(session: SqliteMaterializationSessionState): void {\n const violation = this.db\n .query(\n `\n WITH scopes AS (\n SELECT sort_one AS scope_sort_key,\n cardinality_source_type_id AS source_type_id,\n cardinality_source_primary_id AS source_id,\n cardinality_link_id AS link_id,\n SUM(cardinality_occupied) AS expected_count,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_type_id END) AS expected_target_type_id,\n MAX(CASE WHEN cardinality_occupied = 1\n THEN cardinality_target_primary_id END) AS expected_target_id\n FROM ${session.workTable}\n WHERE work_id = ? AND kind = 'cardinality'\n AND cardinality_view = 'effective'\n GROUP BY sort_one, cardinality_source_type_id,\n cardinality_source_primary_id, cardinality_link_id\n ), validated AS (\n SELECT scopes.scope_sort_key, scopes.expected_count,\n COUNT(links.source_id) AS actual_count,\n COUNT(links.source_id) FILTER (\n WHERE links.target_type_id = scopes.expected_target_type_id\n AND links.target_id = scopes.expected_target_id\n ) AS matching_count\n FROM scopes\n LEFT JOIN links\n ON links.project_id = ?\n AND links.source_type_id = scopes.source_type_id\n AND links.source_id = scopes.source_id\n AND links.link_id = scopes.link_id\n GROUP BY scopes.scope_sort_key, scopes.expected_count,\n scopes.expected_target_type_id, scopes.expected_target_id\n )\n SELECT 1 AS mismatch\n FROM validated\n WHERE actual_count <> expected_count OR matching_count <> expected_count\n LIMIT 1\n `\n )\n .get(session.workId, session.header.commit.projectId)\n // Apply already rejected a scope with two staged occupants; this checks what it wrote.\n if (violation) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n\n private activateSource(\n session: SqliteMaterializationSessionState,\n activation: SourceActivationWrite\n ): void {\n const { commit } = session.header\n assertSourceActivationCorrelation(session, activation)\n const candidate = this.getSource(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n if (!candidate || candidate.status !== \"ready\" || candidate.execution_token === null) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n assertProjectionExecution(this.db, {\n projectId: commit.projectId,\n sourceId: activation.source.projectionId,\n projectionRunId: activation.execution.projectionRunId,\n executionToken: activation.execution.executionToken,\n })\n if (\n candidate.projection_run_id !== activation.execution.projectionRunId ||\n candidate.execution_token !== activation.execution.executionToken ||\n candidate.projection_kind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n candidate.dataset_id !== activation.datasetVersion.datasetId ||\n candidate.dataset_version_id !== activation.datasetVersion.versionId ||\n candidate.dataset_version_created_at !== activation.datasetVersion.createdAt ||\n candidate.projection_revision !== activation.projectionRevision ||\n candidate.ownership_hash !== activation.ownershipHash ||\n candidate.ontology_revision !== activation.ontologyRevision ||\n candidate.ready_at === null ||\n activation.updatedAt < candidate.ready_at\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n this.assertSource(activation.expected, commit.projectId)\n activateSourceRoots(this.db, commit.projectId, commit.id, candidate, activation)\n const previous = this.getActiveSource(commit.projectId, activation.source.projectionId)\n if (previous) {\n assertPinnedDatasetWatermark(\n {\n datasetId: previous.dataset_id,\n versionId: previous.dataset_version_id,\n createdAt: previous.dataset_version_created_at,\n },\n activation.datasetVersion,\n \"Source activation\"\n )\n if (activation.updatedAt < previous.updated_at) {\n invalidCorrelation(\"Source activation cannot precede the active materialization update.\")\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'superseded', execution_token = NULL, terminal_at = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'active' AND last_commit_id = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n previous.materialization_id,\n activation.expected.lastCommitId\n ).changes,\n \"projection-fence\",\n `Source '${activation.source.projectionId}' changed.`\n )\n }\n requireChanges(\n this.db\n .query(\n `\n UPDATE ontology_sources\n SET status = 'active', execution_token = NULL, activated_at = ?,\n last_commit_id = ?, updated_at = ?\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?\n AND status = 'ready' AND execution_token = ?\n `\n )\n .run(\n activation.updatedAt,\n activation.lastCommitId,\n activation.updatedAt,\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId,\n activation.execution.executionToken\n ).changes,\n \"source-materialization\",\n \"Source activation candidate changed.\"\n )\n }\n\n private insertCommit(\n header: MaterializationPlanHeader,\n input: FinalizeMaterializationInput\n ): OntologyCommitRecord {\n const { commit } = header\n const origin = originColumns(commit.origin)\n try {\n this.db\n .query(\n `\n INSERT INTO ontology_commits (\n project_id, id, idempotency_key, request_hash, execution_id,\n origin_kind, origin_run_id, origin_batch_ordinal, origin,\n ontology_revision, projection_revision, ownership_hash,\n intent, result, committed_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, json(?), ?, ?, ?, json(?), json(?), ?)\n `\n )\n .run(\n commit.projectId,\n commit.id,\n commit.idempotencyKey,\n commit.requestHash,\n commit.executionId,\n origin.kind,\n origin.runId,\n origin.batchOrdinal,\n canonicalJson(commit.origin),\n commit.ontologyRevision,\n commit.projectionRevision ?? null,\n commit.ownershipHash ?? null,\n canonicalJson(commit.intent),\n canonicalJson(input.finalization.result),\n commit.committedAt\n )\n } catch (error) {\n if (isSqliteConstraintError(error)) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology commit identity already exists.\"\n )\n }\n throw error\n }\n const row = this.db\n .query(\"SELECT * FROM ontology_commits WHERE project_id = ? AND id = ?\")\n .get(commit.projectId, commit.id) as SqliteOntologyCommitRow\n return commitRecord(row)\n }\n\n private getActiveSource(projectId: string, sourceId: string): SqliteOntologySourceRow | null {\n return this.db\n .query(\n `SELECT * FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status = 'active'`\n )\n .get(projectId, sourceId) as SqliteOntologySourceRow | null\n }\n\n private getSource(\n projectId: string,\n sourceId: string,\n materializationId: string\n ): SqliteOntologySourceRow | null {\n return this.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\nfunction splitByPhase(\n records: readonly MaterializationPlanWorkRecord[]\n): MaterializationPlanWorkRecord[][] {\n const phases: MaterializationPlanWorkRecord[][] = []\n for (const record of records) {\n const current = phases[phases.length - 1]\n if (current && current[0]!.applyPhase === record.applyPhase) current.push(record)\n else phases.push([record])\n }\n return phases\n}\n",
|
|
57
60
|
"import type { Database } from \"bun:sqlite\"\nimport {\n type EffectiveChangeCounts,\n MaterializationConflictError,\n} from \"@sixb/core/internal/materialization\"\nimport {\n duplicateMaterializationWork as duplicateWork,\n ProviderMaterializationSessionState,\n type ProviderMaterializationTransactionLifecycle,\n prepareMaterializationWork,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationCardinalityOccupantWorkRecord,\n MaterializationEventWorkRecord,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationVectorChange,\n MaterializationWorkRecord,\n StageMaterializationWorkInput,\n} from \"@sixb/core/storage\"\nimport { SQLITE_MATERIALIZATION_WORK_TABLE } from \"./materialization-state\"\nimport {\n assertReplacementPlanCoverage,\n replacementPlanCounts,\n SQLITE_PLAN_WORK_TABLE,\n type SqliteReplacementPlan,\n} from \"./replacement-plans\"\nimport { canonicalJson, isSqliteConstraintError, parseJson } from \"./shared\"\n\nexport interface SqliteOntologyTransactionContext {\n readonly id: object\n readonly materializations: ProviderMaterializationTransactionLifecycle\n active: boolean\n}\n\ninterface WorkCursor {\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n readonly recordKey: string\n}\n\ninterface WorkDatabaseRow {\n readonly record_key: string\n readonly major_order: number\n readonly minor_order: number\n readonly sort_one: string\n readonly sort_two: string\n readonly payload: string\n}\n\ninterface WorkSummary {\n objectClassifications: number\n linkClassifications: number\n pointClassifications: number\n objectsCreated: number\n objectsUpdated: number\n objectsDeleted: number\n linksCreated: number\n linksUpdated: number\n linksDeleted: number\n pointsCreated: number\n pointsUpdated: number\n latestObjectsChanged: number\n}\n\ntype WorkLane = \"apply\" | \"cardinality\" | \"event\"\n\ninterface LaneRecord {\n readonly apply: MaterializationPlanWorkRecord\n readonly cardinality: MaterializationCardinalityOccupantWorkRecord\n readonly event: MaterializationEventWorkRecord\n}\n\nexport class SqliteMaterializationSessionState extends ProviderMaterializationSessionState {\n readonly summary: WorkSummary = emptyWorkSummary()\n /** Work staged on the session lives in a temp table; a plan-bound session reads its plan's. */\n readonly workTable: string\n readonly workId: string | number\n\n constructor(\n header: MaterializationPlanHeader,\n transactionId: object,\n readonly plan: SqliteReplacementPlan | null\n ) {\n super(header, transactionId)\n this.workTable = plan ? SQLITE_PLAN_WORK_TABLE : SQLITE_MATERIALIZATION_WORK_TABLE\n this.workId = plan ? plan.versionId : this.id\n }\n}\n\nexport class SqliteMaterializationSessions {\n private readonly sessions = new WeakMap<object, SqliteMaterializationSessionState>()\n private readonly live = new Set<SqliteMaterializationSessionState>()\n\n constructor(\n private readonly db: Database,\n private readonly context: SqliteOntologyTransactionContext | null\n ) {}\n\n create(\n header: MaterializationPlanHeader,\n plan: SqliteReplacementPlan | null\n ): SqliteMaterializationSessionState {\n if (!this.context?.active) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n this.ensureTables()\n const session = new SqliteMaterializationSessionState(\n structuredClone(header),\n this.context.id,\n plan\n )\n this.sessions.set(session.providerToken, session)\n this.live.add(session)\n this.context.materializations.register(session.providerToken)\n return session\n }\n\n require(session: MaterializationSession): SqliteMaterializationSessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.context?.active ||\n value.transactionId !== this.context.id\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n release(session: SqliteMaterializationSessionState): void {\n if (!session.active) return\n session.active = false\n this.live.delete(session)\n // The normal transaction has one session. Dropping its transaction-local spool avoids an\n // indexed DELETE over hundreds of thousands of rows and releases temp pages immediately.\n // Preserve per-session deletion only when another live session still shares the tables.\n // A plan's rows outlive the session: maintenance deletes them once the candidate moved on.\n if (this.live.size === 0) this.dropWorkTables()\n else if (!session.plan) this.deleteWork(session.id)\n this.context?.materializations.complete(session.providerToken)\n }\n\n deactivateAll(): void {\n for (const session of this.live) this.release(session)\n }\n\n stage(input: StageMaterializationWorkInput): void {\n const session = this.require(input.session)\n const records = prepareMaterializationWork(session, input)\n if (records.length === 0) return\n const insert = this.db.query(\n `\n INSERT INTO ${SQLITE_MATERIALIZATION_WORK_TABLE} (\n work_id, 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 )\n this.db.run(\"SAVEPOINT sixb_ontology_stage_work\")\n let currentRecordKey: string | undefined\n try {\n for (const { record, uniqueKey, columns } of records) {\n currentRecordKey = record.recordKey\n const classification = record.kind === \"classification\" ? record : null\n const cardinality = record.kind === \"cardinality\" ? record : null\n insert.run(\n session.id,\n record.recordKey,\n uniqueKey,\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 this.db.run(\"RELEASE SAVEPOINT sixb_ontology_stage_work\")\n } catch (error) {\n this.db.run(\"ROLLBACK TO SAVEPOINT sixb_ontology_stage_work\")\n this.db.run(\"RELEASE SAVEPOINT sixb_ontology_stage_work\")\n if (isSqliteConstraintError(error)) {\n throw duplicateWork(currentRecordKey)\n }\n throw error\n }\n for (const prepared of records) recordSummary(session.summary, prepared.record)\n }\n\n /** Pages of one work lane in canonical order. */\n *lanePages<TLane extends WorkLane>(\n session: SqliteMaterializationSessionState,\n lane: TLane,\n pageRows: number\n ): Iterable<readonly LaneRecord[TLane][]> {\n let cursor: WorkCursor | null = null\n while (true) {\n this.require(session.publicSession())\n const rows = this.readLane(session, lane, cursor, pageRows)\n if (rows.length === 0) return\n cursor = workCursor(rows[rows.length - 1]!)\n yield rows.map((row) => parseJson<LaneRecord[TLane]>(row.payload))\n }\n }\n\n /** Staged object upserts and deletes of profiled types, or of objects with a stored vector. */\n *vectorChangePages(\n session: SqliteMaterializationSessionState,\n objectTypeIds: readonly string[],\n pageRows: number\n ): Iterable<readonly MaterializationVectorChange[]> {\n if (\n objectTypeIds.length === 0 &&\n !this.db\n .query(`SELECT 1 FROM object_vectors WHERE project_id = ? LIMIT 1`)\n .get(session.header.commit.projectId)\n ) {\n return\n }\n const query = this.db.query(\n `\n WITH changes AS (\n SELECT record_key, payload,\n coalesce(\n json_extract(payload, '$.item.value.row.ref.objectTypeId'),\n json_extract(payload, '$.item.value.ref.objectTypeId')\n ) AS object_type_id,\n coalesce(\n json_extract(payload, '$.item.value.row.ref.primaryId'),\n json_extract(payload, '$.item.value.ref.primaryId')\n ) AS primary_id\n FROM ${session.workTable}\n WHERE work_id = ? AND lane = 'apply' AND kind = 'plan'\n AND json_extract(payload, '$.item.kind') IN ('object-upsert', 'object-delete')\n AND record_key > ?\n )\n SELECT record_key, payload FROM changes\n WHERE object_type_id IN (SELECT value FROM json_each(?))\n OR EXISTS (\n SELECT 1 FROM object_vectors\n WHERE project_id = ? AND object_type_id = changes.object_type_id\n AND primary_id = changes.primary_id\n )\n ORDER BY record_key\n LIMIT ?\n `\n )\n let after = \"\"\n while (true) {\n this.require(session.publicSession())\n const rows = query.all(\n session.workId,\n after,\n JSON.stringify(objectTypeIds),\n session.header.commit.projectId,\n pageRows\n ) as { readonly record_key: string; readonly payload: string }[]\n if (rows.length === 0) return\n after = rows[rows.length - 1]!.record_key\n yield rows.map(\n (row) => parseJson<MaterializationPlanWorkRecord>(row.payload).item\n ) as MaterializationVectorChange[]\n }\n }\n\n projectionCounts(session: SqliteMaterializationSessionState): EffectiveChangeCounts {\n if (session.plan) return replacementPlanCounts(this.db, session.plan.versionId)\n const summary = session.summary\n return {\n objectsCreated: summary.objectsCreated,\n objectsUpdated: summary.objectsUpdated,\n objectsDeleted: summary.objectsDeleted,\n objectsUnchanged:\n summary.objectClassifications -\n summary.objectsCreated -\n summary.objectsUpdated -\n summary.objectsDeleted,\n linksCreated: summary.linksCreated,\n linksUpdated: summary.linksUpdated,\n linksDeleted: summary.linksDeleted,\n linksUnchanged:\n summary.linkClassifications -\n summary.linksCreated -\n summary.linksUpdated -\n summary.linksDeleted,\n }\n }\n\n telemetrySummary(session: SqliteMaterializationSessionState, pointCount: number) {\n const summary = session.summary\n return {\n classifiedPoints: summary.pointClassifications,\n counts: {\n pointsCreated: summary.pointsCreated,\n pointsUpdated: summary.pointsUpdated,\n pointsUnchanged: pointCount - summary.pointsCreated - summary.pointsUpdated,\n latestObjectsChanged: summary.latestObjectsChanged,\n },\n }\n }\n\n assertClassificationCoverage(session: SqliteMaterializationSessionState): void {\n if (session.plan) assertReplacementPlanCoverage(this.db, session.plan)\n }\n\n private readLane(\n session: SqliteMaterializationSessionState,\n lane: WorkLane,\n cursor: WorkCursor | null,\n limit: number\n ): WorkDatabaseRow[] {\n if (limit === 0) return []\n const selected = `record_key, major_order, minor_order, sort_one, sort_two, payload`\n if (!cursor) {\n return this.db\n .query(\n `SELECT ${selected} FROM ${session.workTable}\n WHERE work_id = ? AND lane = ?\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ?`\n )\n .all(session.workId, lane, limit) as WorkDatabaseRow[]\n }\n return this.db\n .query(\n `SELECT ${selected} FROM ${session.workTable}\n WHERE work_id = ? AND lane = ?\n AND (major_order, minor_order, sort_one, sort_two, record_key) > (?, ?, ?, ?, ?)\n ORDER BY major_order, minor_order, sort_one, sort_two, record_key\n LIMIT ?`\n )\n .all(\n session.workId,\n lane,\n cursor.majorOrder,\n cursor.minorOrder,\n cursor.sortOne,\n cursor.sortTwo,\n cursor.recordKey,\n limit\n ) as WorkDatabaseRow[]\n }\n\n private ensureTables(): void {\n this.db.run(`\n CREATE TEMP TABLE IF NOT EXISTS ${SQLITE_MATERIALIZATION_WORK_TABLE} (\n work_id TEXT NOT NULL,\n record_key TEXT NOT NULL,\n unique_key TEXT NOT NULL,\n kind TEXT NOT NULL,\n lane TEXT NOT NULL,\n major_order INTEGER NOT NULL,\n minor_order INTEGER NOT NULL,\n sort_one TEXT NOT NULL,\n sort_two TEXT NOT NULL,\n classification_entity_kind TEXT,\n classification_identity_key TEXT,\n cardinality_view TEXT,\n cardinality_occupied INTEGER,\n cardinality_source_type_id TEXT,\n cardinality_source_primary_id TEXT,\n cardinality_link_id TEXT,\n cardinality_target_type_id TEXT,\n cardinality_target_primary_id TEXT,\n payload TEXT NOT NULL CHECK (json_valid(payload)),\n PRIMARY KEY (work_id, record_key),\n UNIQUE (work_id, unique_key)\n );\n CREATE INDEX IF NOT EXISTS idx_ontology_materialization_work_lane\n ON ${SQLITE_MATERIALIZATION_WORK_TABLE}(\n work_id, lane, major_order, minor_order, sort_one, sort_two, record_key\n );\n `)\n }\n\n private deleteWork(sessionId: string): void {\n this.db\n .query(`DELETE FROM ${SQLITE_MATERIALIZATION_WORK_TABLE} WHERE work_id = ?`)\n .run(sessionId)\n }\n\n private dropWorkTables(): void {\n this.db.run(`\n DROP TABLE IF EXISTS ${SQLITE_MATERIALIZATION_WORK_TABLE};\n `)\n }\n}\n\nfunction workCursor(row: WorkDatabaseRow): WorkCursor {\n return {\n majorOrder: row.major_order,\n minorOrder: row.minor_order,\n sortOne: row.sort_one,\n sortTwo: row.sort_two,\n recordKey: row.record_key,\n }\n}\n\nfunction emptyWorkSummary(): WorkSummary {\n return {\n objectClassifications: 0,\n linkClassifications: 0,\n pointClassifications: 0,\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n pointsCreated: 0,\n pointsUpdated: 0,\n latestObjectsChanged: 0,\n }\n}\n\nfunction recordSummary(summary: WorkSummary, record: MaterializationWorkRecord): void {\n if (record.kind === \"classification\") {\n if (record.entityKind === \"object\") summary.objectClassifications += 1\n if (record.entityKind === \"link\") summary.linkClassifications += 1\n if (record.entityKind === \"point\") summary.pointClassifications += 1\n return\n }\n if (record.kind !== \"plan\") return\n\n switch (record.item.kind) {\n case \"object-upsert\":\n summary.latestObjectsChanged += 1\n if (record.item.value.expected.exists) summary.objectsUpdated += 1\n else summary.objectsCreated += 1\n return\n case \"object-delete\":\n summary.objectsDeleted += 1\n return\n case \"link-upsert\":\n if (record.item.value.expected.exists) summary.linksUpdated += 1\n else summary.linksCreated += 1\n return\n case \"link-delete\":\n summary.linksDeleted += 1\n return\n case \"point-upsert\":\n if (record.item.value.expected.lastCommitId === null) summary.pointsCreated += 1\n else summary.pointsUpdated += 1\n return\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n return\n }\n}\n",
|
|
58
61
|
"import type { Database } from \"bun:sqlite\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"@sixb/core/internal/materialization\"\nimport {\n linkRefKey,\n linkScopeSortKey,\n MaterializationConflictError,\n objectRefKey,\n projectionEntityKey,\n telemetryPointSortKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n appendScopeSnapshot,\n finishScopeAccumulator,\n linkSlotOverrideValue,\n startScopeAccumulator,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type {\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectState,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n StoredTelemetryPoint,\n} from \"@sixb/core/storage\"\nimport {\n canonicalJson,\n linkRefFromColumns,\n objectRefFromColumns,\n parseJson,\n type SqliteOntologySourceAssertionRow,\n type SqliteStoredOverrideRow,\n sourceAssertion,\n} from \"./shared\"\nimport {\n activeSourceRows,\n LIVE_SOURCE_ROWS_JOIN,\n replacementAssertionRows,\n SOURCE_ASSERTION_COLUMNS,\n} from \"./source-roots\"\n\nexport const SQLITE_MATERIALIZATION_WORK_TABLE = \"ontology_materialization_work\"\n\ninterface EffectiveObjectRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly properties: string\n readonly created_at: string\n readonly updated_at: string\n readonly version: number\n readonly last_commit_id: string | null\n}\n\ninterface EffectiveLinkRow {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n readonly properties: string | null\n readonly created_at: string\n readonly updated_at: string\n readonly last_commit_id: string | null\n}\n\ninterface TelemetryRow {\n readonly object_type_id: string\n readonly object_id: string\n readonly property_id: string\n readonly value: string\n readonly unit: string | null\n readonly at: string\n readonly last_commit_id: string | null\n}\n\ninterface LinkScopeRow extends EffectiveLinkRow {\n readonly scope_sort_key: string\n}\n\nfunction linkScopeRequestJson(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n): string {\n return canonicalJson(\n scopes.map(({ source, linkId }) => ({\n scopeSortKey: linkScopeSortKey(source, linkId),\n sourceTypeId: source.objectTypeId,\n sourceId: source.primaryId,\n linkId,\n }))\n )\n}\n\ninterface ObjectOverrideRow extends SqliteStoredOverrideRow {\n readonly object_type_id: string\n readonly primary_id: string\n readonly edited_at: string\n}\n\ninterface LinkOverrideRow extends SqliteStoredOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n}\n\ninterface LinkSlotOverrideRow {\n readonly source_type_id: string\n readonly source_primary_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_primary_id: string\n readonly value: string\n readonly last_commit_id: string\n readonly updated_at: string\n}\n\ninterface ReplacementSources {\n readonly owned: ReadonlySet<string>\n readonly byMaterialization: ReadonlyMap<string, ReadonlyMap<string, StoredSourceAssertion>>\n}\n\n/** A link a replacement plan decides, and whether its plan needs a diff. */\nexport interface ReplacementLinkIdentity {\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n readonly diffRequired: boolean\n}\n\nexport class SqliteMaterializationStateReader {\n constructor(\n private readonly db: Database,\n readonly projectId: string\n ) {}\n\n objectState(ref: OntologyObjectRef): MaterializationObjectState {\n return this.objectStates([ref])[0]!\n }\n\n objectStates(refs: readonly OntologyObjectRef[]): readonly MaterializationObjectState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId }))\n )\n const requestedObjects = `\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id\n FROM json_each(?)\n `\n // Keep the JSON request set on the outer side of each lookup. SQLite cannot estimate the\n // cardinality of json_each() and otherwise scans every project row once per requested key.\n // CROSS JOIN deliberately fixes the loop order so the existing composite indexes are used.\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT objects.* FROM requested\n CROSS JOIN objects\n ON objects.project_id = ?\n AND objects.object_type_id = requested.object_type_id\n AND objects.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as EffectiveObjectRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"object\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${requestedObjects})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_object_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.object_type_id = requested.object_type_id\n AND overrides.primary_id = requested.primary_id`\n )\n .all(requested, this.projectId) as ObjectOverrideRow[]\n const telemetryRows = this.db\n .query(\n `WITH requested AS (${requestedObjects}), ranked AS (\n SELECT timeseries.*,\n ROW_NUMBER() OVER (\n PARTITION BY timeseries.object_type_id, timeseries.object_id,\n timeseries.property_id\n ORDER BY timeseries.at DESC\n ) AS rank\n FROM requested\n CROSS JOIN timeseries\n ON timeseries.project_id = ?\n AND timeseries.object_type_id = requested.object_type_id\n AND timeseries.object_id = requested.primary_id\n )\n SELECT * FROM ranked WHERE rank = 1`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n\n const effective = new Map(\n effectiveRows.map((row) => [objectRefKey(objectRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [objectRefKey(objectRefFromColumns(row)), storedObjectOverride(row)] as const\n )\n )\n const telemetry = new Map<string, StoredTelemetryPoint[]>()\n for (const row of telemetryRows) {\n const key = objectRefKey({ objectTypeId: row.object_type_id, primaryId: row.object_id })\n const points = telemetry.get(key) ?? []\n points.push(storedPoint(row))\n telemetry.set(key, points)\n }\n for (const points of telemetry.values()) {\n points.sort((left, right) =>\n telemetryPointSortKey(left.series, left.at).localeCompare(\n telemetryPointSortKey(right.series, right.at)\n )\n )\n }\n\n return refs.map((ref) => {\n const key = objectRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceObject(sources.get(projectionEntityKey({ kind: \"object\", ref }))),\n override: overrides.get(key) ?? null,\n effective: effectiveRow ? effectiveObjectSnapshot(effectiveRow) : null,\n latestTelemetry: telemetry.get(key) ?? [],\n }\n })\n }\n\n linkState(ref: OntologyLinkRef): MaterializationLinkState {\n return this.linkStates([ref])[0]!\n }\n\n linkStates(refs: readonly OntologyLinkRef[]): readonly MaterializationLinkState[] {\n if (refs.length === 0) return []\n const requested = canonicalJson(\n refs.map((ref) => ({\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n }))\n )\n const effectiveRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_id\n FROM json_each(?)\n `\n const sourceRequest = `\n SELECT DISTINCT json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetId') AS target_primary_id\n FROM json_each(?)\n `\n const effectiveRows = this.db\n .query(\n `WITH requested AS (${effectiveRequest})\n SELECT links.* FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n AND links.target_type_id = requested.target_type_id\n AND links.target_id = requested.target_id`\n )\n .all(requested, this.projectId) as EffectiveLinkRow[]\n const sourceRows = activeSourceRows(\n this.db,\n this.projectId,\n refs.map((ref) => ({ kind: \"link\", ref }))\n )\n const overrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'edge'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id\n AND overrides.target_type_id = requested.target_type_id\n AND overrides.target_primary_id = requested.target_primary_id`\n )\n .all(requested, this.projectId) as LinkOverrideRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (${sourceRequest})\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requested, this.projectId) as LinkSlotOverrideRow[]\n const effective = new Map(\n effectiveRows.map((row) => [linkRefKey(linkRefFromColumns(row)), row] as const)\n )\n const sources = activeSourceMap(sourceRows)\n const overrides = new Map(\n overrideRows.map(\n (row) => [linkRefKey(linkRefFromOverrideColumns(row)), storedLinkOverride(row)] as const\n )\n )\n const slotOverrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n return refs.map((ref) => {\n const key = linkRefKey(ref)\n const effectiveRow = effective.get(key)\n return {\n ref: structuredClone(ref),\n source: sourceLink(sources.get(projectionEntityKey({ kind: \"link\", ref }))),\n override: overrides.get(key) ?? null,\n slotOverride: slotOverrides.get(linkScopeSortKey(ref.source, ref.linkId)) ?? null,\n effective: effectiveRow ? effectiveLinkSnapshot(effectiveRow) : null,\n }\n })\n }\n\n exactPoint(series: TelemetrySeriesRef, at: string): StoredTelemetryPoint | null {\n return this.exactPoints([{ series, at }])[0] ?? null\n }\n\n exactPoints(\n points: readonly { readonly series: TelemetrySeriesRef; readonly at: string }[]\n ): readonly StoredTelemetryPoint[] {\n if (points.length === 0) return []\n const requested = canonicalJson(\n points.map(({ series, at }) => ({\n objectTypeId: series.object.objectTypeId,\n objectId: series.object.primaryId,\n propertyId: series.propertyId,\n at,\n }))\n )\n const rows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.objectId') AS object_id,\n json_extract(value, '$.propertyId') AS property_id,\n json_extract(value, '$.at') AS at\n FROM json_each(?)\n )\n SELECT timeseries.* FROM requested\n CROSS 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 AND timeseries.at = requested.at`\n )\n .all(requested, this.projectId) as TelemetryRow[]\n const found = new Map(\n rows.map((row) => {\n const point = storedPoint(row)\n return [telemetryPointSortKey(point.series, point.at), point] as const\n })\n )\n return points.flatMap((point) => {\n const stored = found.get(telemetryPointSortKey(point.series, point.at))\n return stored ? [stored] : []\n })\n }\n\n linkScopeRevisions(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeRevision[] {\n if (scopes.length === 0) return []\n return this.readEffectiveLinkScopes(scopes, linkScopeRequestJson(scopes)).revisions\n }\n\n linkSlotStates(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]\n ): readonly MaterializationLinkScopeState[] {\n if (scopes.length === 0) return []\n const requestedJson = linkScopeRequestJson(scopes)\n const sourceRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested\n CROSS JOIN ontology_source_rows AS rows\n ON rows.entity_kind = 'link'\n AND rows.source_type_id = requested.source_type_id\n AND rows.source_primary_id = requested.source_primary_id\n AND rows.link_id = requested.link_id\n ${LIVE_SOURCE_ROWS_JOIN}`\n )\n .all(requestedJson, this.projectId) as SqliteOntologySourceAssertionRow[]\n const slotOverrideRows = this.db\n .query(\n `WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT overrides.* FROM requested\n CROSS JOIN ontology_link_overrides AS overrides\n ON overrides.project_id = ?\n AND overrides.identity_kind = 'slot'\n AND overrides.source_type_id = requested.source_type_id\n AND overrides.source_primary_id = requested.source_primary_id\n AND overrides.link_id = requested.link_id`\n )\n .all(requestedJson, this.projectId) as LinkSlotOverrideRow[]\n const sources = activeScopeSourceMap(sourceRows)\n const overrides = new Map(\n slotOverrideRows.map((row) => {\n const stored = storedLinkSlotOverride(row)\n return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const\n })\n )\n const { revisions, effective } = this.readEffectiveLinkScopes(scopes, requestedJson)\n return scopes.map(({ source, linkId }, index) => {\n const key = linkScopeSortKey(source, linkId)\n return {\n ...revisions[index]!,\n sourceAssertion: sources.get(key) ?? null,\n override: overrides.get(key) ?? null,\n effective: effective.get(key) ?? null,\n }\n })\n }\n\n private readEffectiveLinkScopes(\n scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[],\n requestedJson: string\n ): {\n readonly revisions: readonly MaterializationLinkScopeRevision[]\n readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>\n } {\n const accumulators = new Map(\n scopes.map(({ source, linkId }) => {\n const key = linkScopeSortKey(source, linkId)\n return [key, startScopeAccumulator(source, linkId)] as const\n })\n )\n const effective = new Map<string, EffectiveLinkSnapshot | null>()\n const rows = this.db\n .query(\n `\n WITH requested AS (\n SELECT DISTINCT\n json_extract(value, '$.scopeSortKey') AS scope_sort_key,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourceId') AS source_id,\n json_extract(value, '$.linkId') AS link_id\n FROM json_each(?)\n )\n SELECT requested.scope_sort_key, links.*\n FROM requested\n CROSS JOIN links\n ON links.project_id = ?\n AND links.source_type_id = requested.source_type_id\n AND links.source_id = requested.source_id\n AND links.link_id = requested.link_id\n ORDER BY requested.scope_sort_key, ${linkSortExpression(\"links\")}\n `\n )\n .iterate(requestedJson, this.projectId) as Iterable<LinkScopeRow>\n for (const row of rows) {\n const accumulator = accumulators.get(row.scope_sort_key)\n if (!accumulator) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Unexpected link scope '${row.scope_sort_key}' returned by storage.`\n )\n }\n const snapshot = effectiveLinkSnapshot(row)\n appendScopeSnapshot(accumulator, snapshot)\n effective.set(row.scope_sort_key, accumulator.effectiveCount === 1 ? snapshot : null)\n }\n return {\n revisions: scopes.map(({ source, linkId }) =>\n finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)\n ),\n effective,\n }\n }\n\n *incidentLinks(\n objects: readonly OntologyObjectRef[],\n pageRows: number\n ): Iterable<OntologyLinkRef[]> {\n if (objects.length === 0) return\n const values = objects.map(() => \"(?, ?)\").join(\", \")\n const args = objects.flatMap((ref) => [ref.objectTypeId, ref.primaryId])\n let cursor: string | null = null\n while (true) {\n const rows = this.db\n .query(\n `\n WITH requested(object_type_id, primary_id) AS (VALUES ${values}),\n authority_links AS (\n SELECT source_type_id, source_id, link_id, target_type_id, target_id\n FROM links WHERE project_id = ?\n UNION\n SELECT source_type_id, source_primary_id, link_id, target_type_id, target_primary_id\n FROM ontology_link_overrides\n WHERE project_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 ontology_source_rows AS rows\n ${LIVE_SOURCE_ROWS_JOIN}\n WHERE rows.entity_kind = 'link'\n ), selected AS (\n SELECT DISTINCT links.*,\n ${linkSortExpression(\"links\")} AS sort_key\n FROM authority_links AS links\n WHERE EXISTS (\n SELECT 1 FROM requested\n WHERE (requested.object_type_id = links.source_type_id\n AND requested.primary_id = links.source_id)\n OR (requested.object_type_id = links.target_type_id\n AND requested.primary_id = links.target_id)\n )\n )\n SELECT * FROM selected\n WHERE (? IS NULL OR sort_key > ?)\n ORDER BY sort_key\n LIMIT ?\n `\n )\n .all(\n ...args,\n this.projectId,\n this.projectId,\n this.projectId,\n cursor,\n cursor,\n pageRows\n ) as (EffectiveLinkRow & { readonly sort_key: string })[]\n if (rows.length === 0) break\n yield rows.map(linkRefFromColumns)\n cursor = rows[rows.length - 1]?.sort_key ?? null\n }\n }\n\n replacementObjectStates(\n sourceId: string,\n candidateMaterializationId: string,\n refs: readonly OntologyObjectRef[]\n ): readonly SourceReplacementObjectState[] {\n const base = this.objectStates(refs)\n const candidates = this.replacementSources(\n sourceId,\n [candidateMaterializationId],\n refs.map((ref) => ({ kind: \"object\" as const, ref }))\n )\n return base.map((state) => ({\n ref: state.ref,\n candidateSource: sourceObject(\n candidates.byMaterialization\n .get(candidateMaterializationId)\n ?.get(projectionEntityKey({ kind: \"object\", ref: state.ref }))\n ),\n override: state.override,\n effective: state.effective,\n latestTelemetry: state.latestTelemetry,\n }))\n }\n\n replacementLinkStates(\n sourceId: string,\n candidateMaterializationId: string,\n materializationIds: readonly string[],\n identities: readonly ReplacementLinkIdentity[],\n incremental = false\n ): readonly SourceReplacementLinkState[] {\n const refs = identities.map((identity) => identity.ref)\n const base = this.linkStates(refs)\n const replacements = this.replacementSources(\n sourceId,\n materializationIds,\n refs.map((ref) => ({ kind: \"link\" as const, ref })),\n incremental\n )\n const candidate = replacements.byMaterialization.get(candidateMaterializationId)\n return base.map((state, index) => {\n const key = projectionEntityKey({ kind: \"link\", ref: state.ref })\n return {\n ref: state.ref,\n candidateSource: replacements.owned.has(key)\n ? sourceLink(candidate?.get(key))\n : state.source,\n override: state.override,\n slotOverride: state.slotOverride,\n effective: state.effective,\n diffRequired: identities[index]!.diffRequired,\n }\n })\n }\n\n effectiveObjectRevision(ref: OntologyObjectRef): {\n readonly version: number\n readonly lastCommitId: string | null\n } | null {\n const row = this.db\n .query(\n `SELECT version, last_commit_id FROM objects\n WHERE project_id = ? AND object_type_id = ? AND primary_id = ?`\n )\n .get(this.projectId, ref.objectTypeId, ref.primaryId) as {\n readonly version: number\n readonly last_commit_id: string | null\n } | null\n return row ? { version: row.version, lastCommitId: row.last_commit_id } : null\n }\n\n effectiveLinkLastCommit(ref: OntologyLinkRef): string | null | undefined {\n const row = this.db\n .query(\n `\n SELECT last_commit_id FROM links\n WHERE project_id = ? AND source_type_id = ? AND source_id = ? AND link_id = ?\n AND target_type_id = ? AND target_id = ?\n `\n )\n .get(\n this.projectId,\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId\n ) as { readonly last_commit_id: string | null } | null\n return row ? row.last_commit_id : undefined\n }\n\n private replacementSources(\n sourceId: string,\n materializationIds: readonly string[],\n refs: readonly ProjectionEntityRef[],\n incremental = false\n ): ReplacementSources {\n if (materializationIds.length === 0 || refs.length === 0) {\n return { owned: new Set(), byMaterialization: new Map() }\n }\n const rows = replacementAssertionRows(this.db, {\n projectId: this.projectId,\n sourceId,\n materializationId: materializationIds[0]!,\n incremental,\n includePrevious: materializationIds.length > 1,\n refs,\n })\n const owned = new Set<string>()\n const byMaterialization = new Map<string, Map<string, StoredSourceAssertion>>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n owned.add(key)\n const materialization = byMaterialization.get(row.materialization_id) ?? new Map()\n materialization.set(key, source)\n byMaterialization.set(row.materialization_id, materialization)\n }\n return { owned, byMaterialization }\n }\n}\n\nfunction activeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceAssertion> {\n const result = new Map<string, StoredSourceAssertion>()\n for (const row of rows) {\n const source = storedSource(row)\n const key = projectionEntityKey(source.assertion)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction activeScopeSourceMap(\n rows: readonly SqliteOntologySourceAssertionRow[]\n): ReadonlyMap<string, StoredSourceLinkAssertion> {\n const result = new Map<string, StoredSourceLinkAssertion>()\n for (const row of rows) {\n const source = sourceLink(storedSource(row))\n if (!source) continue\n const ref = source.assertion.ref\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (result.has(key)) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert cardinality-one link slot ${key}.`\n )\n }\n result.set(key, source)\n }\n return result\n}\n\nfunction sourceObject(\n source: StoredSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n return source?.assertion.kind === \"object\" ? (source as StoredSourceObjectAssertion) : null\n}\n\nfunction sourceLink(source: StoredSourceAssertion | undefined): StoredSourceLinkAssertion | null {\n return source?.assertion.kind === \"link\" ? (source as StoredSourceLinkAssertion) : null\n}\n\nfunction storedObjectOverride(row: ObjectOverrideRow): StoredObjectOverride {\n const ref = objectRefFromColumns(row)\n return {\n ref,\n value: parseJson<StoredObjectOverride[\"value\"]>(row.value),\n editedAt: parseJson<Readonly<Record<string, string>>>(row.edited_at),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkOverride(row: LinkOverrideRow): StoredLinkOverride {\n const ref = linkRefFromOverrideColumns(row)\n return {\n ref,\n value: parseJson<StoredLinkOverride[\"value\"]>(row.value),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction storedLinkSlotOverride(row: LinkSlotOverrideRow): StoredLinkSlotOverride {\n const ref = {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n }\n return {\n ref,\n value: linkSlotOverrideValue(parseJson<unknown>(row.value), linkScopeLabel(ref)),\n lastCommitId: row.last_commit_id,\n updatedAt: row.updated_at,\n }\n}\n\nfunction linkRefFromOverrideColumns(row: LinkOverrideRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_primary_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_primary_id },\n }\n}\n\nfunction linkScopeLabel(scope: {\n readonly source: OntologyObjectRef\n readonly linkId: string\n}): string {\n return JSON.stringify([scope.source.objectTypeId, scope.source.primaryId, scope.linkId])\n}\n\nfunction storedSource(row: SqliteOntologySourceAssertionRow): StoredSourceAssertion {\n return {\n source: { projectionId: row.source_id },\n materializationId: row.materialization_id,\n ...sourceAssertion(row),\n } as StoredSourceAssertion\n}\n\nfunction effectiveObjectSnapshot(row: EffectiveObjectRow): EffectiveObjectSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.object_type_id}:${row.primary_id} lacks materializer provenance.`\n )\n }\n return {\n ref: objectRefFromColumns(row),\n properties: parseJson<EffectiveObjectSnapshot[\"properties\"]>(row.properties),\n version: row.version,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction effectiveLinkSnapshot(row: EffectiveLinkRow): EffectiveLinkSnapshot {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link ${linkRefKey(linkRefFromColumns(row))} lacks materializer provenance.`\n )\n }\n return {\n ref: linkRefFromColumns(row),\n ...(row.properties === null\n ? {}\n : {\n properties: parseJson<NonNullable<EffectiveLinkSnapshot[\"properties\"]>>(row.properties),\n }),\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nfunction storedPoint(row: TelemetryRow): StoredTelemetryPoint {\n if (!row.last_commit_id) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointSortKey(\n {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n row.at\n )} lacks materializer provenance.`\n )\n }\n return {\n series: {\n object: { objectTypeId: row.object_type_id, primaryId: row.object_id },\n propertyId: row.property_id,\n },\n value: parseJson<StoredTelemetryPoint[\"value\"]>(row.value),\n ...(row.unit === null ? {} : { unit: row.unit }),\n at: row.at,\n lastCommitId: row.last_commit_id,\n }\n}\n\nexport function linkSortExpression(alias?: string): string {\n const prefix = alias ? `${alias}.` : \"\"\n return `LOWER(HEX(CAST(json_array(${prefix}source_type_id, ${prefix}source_id, ${prefix}link_id, ${prefix}target_type_id, ${prefix}target_id) AS BLOB)))`\n}\n",
|
|
59
62
|
"import type { Database } from \"bun:sqlite\"\nimport type { ProjectionEntityRef } from \"@sixb/core/internal/materialization\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n projectionEntityKey,\n} from \"@sixb/core/internal/materialization\"\nimport {\n sourceEntityColumns,\n sourceStageRoots,\n} from \"@sixb/core/internal/ontology-storage-provider\"\nimport type { SourceActivationWrite, StageSourceRowsInput } from \"@sixb/core/storage\"\nimport type { SqliteOntologySourceAssertionRow } from \"./shared\"\nimport { canonicalJson, type SqliteOntologySourceRow } from \"./shared\"\n\n/**\n * Source storage in three levels: a version (`ontology_sources`, one per run), its roots (one per\n * logical dataset row, keyed by the canonical entity key) and their rows (what each root asserts).\n *\n * A root is live while its version is published (active or superseded), it is not retired and it\n * is not a deletion. Activation retires the live roots its candidate replaces and flips the\n * version; the candidate's own roots are never rewritten. One live root per source and key holds\n * because activation, under the source fence, retires every root the candidate replaces.\n */\nexport const PUBLISHED = \"('active', 'superseded')\"\n\n/** The columns `sourceAssertion` reads, over `versions`, `roots` and `rows`. */\nexport const SOURCE_ASSERTION_COLUMNS = `versions.source_id, versions.materialization_id,\n roots.root_key, roots.staging_ordinal, rows.entity_kind, rows.object_type_id, rows.primary_id,\n rows.source_type_id, rows.source_primary_id, rows.link_id, rows.target_type_id,\n rows.target_primary_id, rows.payload`\n\n/**\n * Keeps `rows` to those of live roots, joined as `roots` and `versions`; binds the project id.\n * CROSS JOIN keeps it a filter on the rows already selected: as a plain JOIN, SQLite may start\n * from every live root of the project instead.\n */\nexport const LIVE_SOURCE_ROWS_JOIN = `\n CROSS JOIN ontology_source_roots AS roots ON roots.id = rows.root_id\n AND roots.project_id = ? 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/** The typed identity of `rows` equals the one requested (`IS` matches NULLs). */\nconst ENTITY_MATCH = `rows.entity_kind = requested.entity_kind\n AND rows.object_type_id IS requested.object_type_id\n AND rows.primary_id IS requested.primary_id\n AND rows.source_type_id IS requested.source_type_id\n AND rows.source_primary_id IS requested.source_primary_id\n AND rows.link_id IS requested.link_id\n AND rows.target_type_id IS requested.target_type_id\n AND rows.target_primary_id IS requested.target_primary_id`\n\nconst REQUESTED_ENTITY = `json_extract(value, '$.entityKind') AS entity_kind,\n json_extract(value, '$.objectTypeId') AS object_type_id,\n json_extract(value, '$.primaryId') AS primary_id,\n json_extract(value, '$.sourceTypeId') AS source_type_id,\n json_extract(value, '$.sourcePrimaryId') AS source_primary_id,\n json_extract(value, '$.linkId') AS link_id,\n json_extract(value, '$.targetTypeId') AS target_type_id,\n json_extract(value, '$.targetPrimaryId') AS target_primary_id`\n\n/** An entity's own key, and for a link the key of the object root that may assert it. */\nfunction requestedEntity(ref: ProjectionEntityRef) {\n const key = projectionEntityKey(ref)\n return {\n entityKind: ref.kind,\n ...sourceEntityColumns(ref),\n rootKeys:\n ref.kind === \"object\"\n ? [key]\n : [key, projectionEntityKey({ kind: \"object\", ref: ref.ref.source })],\n }\n}\n\nfunction sourceVersionId(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n }\n): number | null {\n const version = db\n .query(`SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND materialization_id = ?`)\n .get(input.projectId, input.sourceId, input.materializationId) as {\n readonly version_id: number\n } | null\n return version?.version_id ?? null\n}\n\n/** The candidate's rows, plus the rows of the live roots it may replace. */\nexport function replacementSourceRows(\n db: Database,\n input: {\n readonly projectId: string\n readonly sourceId: string\n readonly materializationId: string\n readonly incremental: boolean\n }\n): { readonly sql: string; readonly values: readonly (string | number | null)[] } {\n const version = sourceVersionId(db, input)\n const live = `live.retired_at IS NULL AND live.deleted = 0\n AND versions.source_id = ? AND versions.status IN ${PUBLISHED}`\n const replaced = input.incremental\n ? `SELECT live.id FROM ontology_source_roots AS changed\n CROSS JOIN ontology_source_roots AS live\n ON live.project_id = ? AND live.root_key = changed.root_key\n CROSS JOIN ontology_sources AS versions ON versions.version_id = live.version_id\n WHERE changed.version_id = ? AND ${live}`\n : `SELECT live.id FROM ontology_sources AS versions\n CROSS JOIN ontology_source_roots AS live ON live.version_id = versions.version_id\n WHERE versions.project_id = ? AND ${live}`\n return {\n sql: `SELECT rows.* 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 = ?\n UNION ALL\n SELECT rows.* FROM (${replaced}) AS roots\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id`,\n values: [version, input.projectId, ...(input.incremental ? [version] : []), input.sourceId],\n }\n}\n\nexport function stageSourceRoots(\n db: Database,\n manifest: SqliteOntologySourceRow,\n input: StageSourceRowsInput\n): void {\n const roots = sourceStageRoots(manifest.projection_kind, input)\n if (!manifest.base_materialization_id && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n const existing = db.query(`SELECT staging_ordinal, deleted FROM ontology_source_roots\n WHERE version_id = ? AND root_key = ?`)\n const insert = db.query(`INSERT INTO ontology_source_roots (\n version_id, project_id, root_key, staging_ordinal, deleted\n ) VALUES (?, ?, ?, ?, ?) ON CONFLICT DO NOTHING RETURNING id`)\n for (const root of roots) {\n const inserted = insert.get(\n manifest.version_id,\n input.projectId,\n root.rootKey,\n root.stagingOrdinal,\n Number(root.deleted)\n )\n if (inserted) continue\n const previous = existing.get(manifest.version_id, root.rootKey) as {\n staging_ordinal: number\n deleted: number\n } | null\n if (\n !previous ||\n previous.staging_ordinal !== root.stagingOrdinal ||\n Boolean(previous.deleted) !== root.deleted\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n }\n}\n\n/**\n * Retires what the candidate replaces; its own roots go live when its version turns active. Every\n * link those roots assert changes its live source, which commit `commitId` records as touched.\n */\nexport function activateSourceRoots(\n db: Database,\n projectId: string,\n commitId: string,\n candidate: SqliteOntologySourceRow,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base_materialization_id !== null &&\n (candidate.base_materialization_id !== activation.expected.activeMaterializationId ||\n candidate.base_commit_id !== activation.expected.lastCommitId)\n )\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n if (candidate.base_materialization_id !== null && candidate.root_count === 0) return\n const delta = candidate.base_materialization_id !== null\n const replaced = `retired_at IS NULL AND deleted = 0\n AND version_id IN (SELECT version_id FROM ontology_sources\n WHERE project_id = ? AND source_id = ? AND status IN ${PUBLISHED})\n ${\n delta\n ? `AND project_id = ? AND root_key IN (\n SELECT root_key FROM ontology_source_roots WHERE version_id = ?)`\n : \"\"\n }`\n const replacedParams = [\n projectId,\n activation.source.projectionId,\n ...(delta ? [projectId, candidate.version_id] : []),\n ]\n db.query(`INSERT INTO ontology_commit_touches (project_id, commit_id, entity_kind, identity_key)\n SELECT DISTINCT ?, ?, 'link', json_array(\n rows.source_type_id, rows.source_primary_id, rows.link_id, rows.target_type_id,\n rows.target_primary_id\n )\n FROM (\n SELECT id FROM ontology_source_roots WHERE ${replaced}\n UNION ALL\n SELECT id FROM ontology_source_roots WHERE version_id = ?\n ) AS changed\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = changed.id\n WHERE rows.entity_kind = 'link'`).run(\n projectId,\n commitId,\n ...replacedParams,\n candidate.version_id\n )\n db.query(`UPDATE ontology_source_roots SET retired_at = ? WHERE ${replaced}`).run(\n activation.updatedAt,\n ...replacedParams\n )\n // Deletions are never live; retiring them lets cleanup remove them with their version.\n db.query(`UPDATE ontology_source_roots SET retired_at = ?\n WHERE version_id = ? AND deleted = 1`).run(activation.updatedAt, candidate.version_id)\n}\n\nexport function assertSourceRootCoverage(db: Database, manifest: SqliteOntologySourceRow): void {\n const invalid = db\n .query(`SELECT 1 FROM ontology_source_roots AS roots\n WHERE roots.version_id = ?\n AND roots.deleted = EXISTS (\n SELECT 1 FROM ontology_source_rows AS rows WHERE rows.root_id = roots.id\n ) LIMIT 1`)\n .get(manifest.version_id)\n if (invalid)\n throw new MaterializationValidationError(\n \"Source roots must have complete assertions or an explicit deletion, never both.\"\n )\n}\n\n/** The live assertions of `refs`, whichever source asserts them. */\nexport function activeSourceRows(\n db: Database,\n projectId: string,\n refs: readonly ProjectionEntityRef[]\n): SqliteOntologySourceAssertionRow[] {\n const requested = refs.flatMap((ref) => {\n const { rootKeys, ...entity } = requestedEntity(ref)\n return rootKeys.map((rootKey) => ({ ...entity, rootKey }))\n })\n return db\n .query(`WITH requested AS (\n SELECT DISTINCT json_extract(value, '$.rootKey') AS root_key, ${REQUESTED_ENTITY}\n FROM json_each(?)\n ) SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.root_key = requested.root_key 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 CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}`)\n .all(canonicalJson(requested), projectId) as SqliteOntologySourceAssertionRow[]\n}\n\n/** The candidate's assertions of `refs`, and optionally the live ones they would replace. */\nexport function replacementAssertionRows(\n db: Database,\n input: {\n projectId: string\n sourceId: string\n materializationId: string\n incremental: boolean\n includePrevious: boolean\n refs: readonly ProjectionEntityRef[]\n }\n): SqliteOntologySourceAssertionRow[] {\n const version = sourceVersionId(db, input)\n const previous = !input.includePrevious\n ? \"\"\n : `UNION ALL\n SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.project_id = ?\n AND roots.root_key IN (SELECT value FROM json_each(requested.root_keys))\n 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.source_id = ? AND versions.status IN ${PUBLISHED}\n CROSS JOIN ontology_source_rows AS rows ON rows.root_id = roots.id AND ${ENTITY_MATCH}\n ${\n !input.incremental\n ? \"\"\n : `WHERE EXISTS (SELECT 1 FROM ontology_source_roots AS changed\n WHERE changed.version_id = ? AND changed.root_key = roots.root_key)`\n }`\n return db\n .query(`WITH requested_entities AS (\n SELECT DISTINCT ${REQUESTED_ENTITY}, json_extract(value, '$.rootKeys') AS root_keys\n FROM json_each(?)\n ) SELECT ${SOURCE_ASSERTION_COLUMNS} FROM requested_entities AS requested\n CROSS JOIN ontology_source_roots AS roots ON roots.version_id = ?\n AND roots.root_key IN (SELECT value FROM json_each(requested.root_keys))\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 AND ${ENTITY_MATCH}\n ${previous}`)\n .all(\n canonicalJson(input.refs.map(requestedEntity)),\n version,\n ...(input.includePrevious\n ? [input.projectId, input.sourceId, ...(input.incremental ? [version] : [])]\n : [])\n ) as SqliteOntologySourceAssertionRow[]\n}\n",
|
|
@@ -66,20 +69,20 @@
|
|
|
66
69
|
"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",
|
|
67
70
|
"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",
|
|
68
71
|
"import type { Database } from \"bun:sqlite\"\nimport type { OntologyStorage } from \"@sixb/core/storage\"\nimport { SqliteOntologyCommitStorage } from \"./commits\"\nimport type { SqliteOntologyTransactionContext } from \"./materialization-session\"\nimport { SqliteOntologyMaterializationStorage } from \"./materializations\"\nimport { SqliteOntologyOutboxStorage } from \"./outbox\"\nimport { SqliteOntologyReplacementPlanStorage } from \"./replacement-plans\"\nimport type { SqliteRootOperation } from \"./shared\"\nimport { SqliteOntologySourceStorage } from \"./sources\"\nimport { SqliteOntologyUniqueValueStorage } from \"./unique-values\"\nimport { SqliteVectorIndexingStorage } from \"./vector-indexing\"\nimport { SqliteOntologyVectorStorage } from \"./vectors\"\n\nexport class SqliteOntologyStorage implements OntologyStorage {\n readonly commits: SqliteOntologyCommitStorage\n readonly sources: SqliteOntologySourceStorage\n readonly materializations: SqliteOntologyMaterializationStorage\n readonly replacementPlans: SqliteOntologyReplacementPlanStorage\n readonly vectorIndexing: SqliteVectorIndexingStorage\n readonly vectors: SqliteOntologyVectorStorage\n readonly outbox: SqliteOntologyOutboxStorage\n readonly uniqueValues: SqliteOntologyUniqueValueStorage\n\n constructor(input: {\n readonly db: Database\n readonly runRootOperation: SqliteRootOperation\n readonly transactionContext: SqliteOntologyTransactionContext | null\n }) {\n this.commits = new SqliteOntologyCommitStorage(input.db, input.runRootOperation)\n this.sources = new SqliteOntologySourceStorage(input.db, input.runRootOperation)\n this.materializations = new SqliteOntologyMaterializationStorage(\n input.db,\n input.transactionContext\n )\n this.replacementPlans = new SqliteOntologyReplacementPlanStorage(\n input.db,\n input.runRootOperation\n )\n this.vectorIndexing = new SqliteVectorIndexingStorage(\n input.db,\n input.runRootOperation,\n (session, projectId) => this.materializations.assertVectorSession(session, projectId)\n )\n this.vectors = new SqliteOntologyVectorStorage(\n input.db,\n input.runRootOperation,\n (session, projectId, commitId) =>\n this.materializations.assertVectorSession(session, projectId, commitId)\n )\n this.outbox = new SqliteOntologyOutboxStorage(input.db, input.runRootOperation)\n this.uniqueValues = new SqliteOntologyUniqueValueStorage(input.db, input.runRootOperation)\n }\n\n deactivateSessions(): void {\n this.materializations.deactivateSessions()\n }\n}\n\nexport type { SqliteOntologyTransactionContext } from \"./materialization-session\"\n",
|
|
69
|
-
"import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { assertPipelineRunExecution } from \"@sixb/core/internal/pipeline-run-storage-provider\"\nimport { canRequeuePipelineRunAfterEnqueueFailure } from \"@sixb/core/internal/storage\"\nimport type { DatasetVersionRef } from \"@sixb/core/lake-storage\"\nimport type {\n ExecutionStorage,\n FinishPipelineRunInput,\n FinishPipelineStepRunInput,\n ListLatestPipelineRunsInput,\n ListLatestPipelineRunsResult,\n ListPipelineRunsInput,\n ListPipelineRunsResult,\n ListPipelineStepRunsInput,\n ListPipelineStepRunsResult,\n PipelineRunRecord,\n PipelineRunStorage,\n PipelineStepRunRecord,\n QueuePipelineRunInput,\n StartPipelineRunInput,\n StartPipelineStepRunInput,\n} from \"@sixb/core/storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, PipelineRunError } 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 SqlitePipelineRunStorageOptions {\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 SqlitePipelineRunStorage implements PipelineRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqlitePipelineRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async queue(input: QueuePipelineRunInput): Promise<PipelineRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertPipelineRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n pipelineId: input.pipelineId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_runs (\n project_id,\n id,\n execution_id,\n pipeline_id,\n status,\n queued_at,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, NULL)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.pipelineId,\n \"queued\",\n queuedAt.toISOString()\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 PipelineRunError(\n `[SixbSqlite] Failed to load pipeline run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueuePipelineRunInput,\n queuedAt: Date\n ): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n if (\n !existing ||\n !canRequeuePipelineRunAfterEnqueueFailure(rowToPipelineRunRecord(existing), input)\n ) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET status = ?, queued_at = ?, started_at = NULL, finished_at = NULL,\n output_dataset_id = NULL, output_version_id = NULL, error = 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 pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async start(input: StartPipelineRunInput): Promise<PipelineRunRecord> {\n const result = this.db\n .query(\n `\n UPDATE pipeline_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 PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n async finish(input: FinishPipelineRunInput): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline 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 PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot finish from status '${existing.status}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET\n status = ?,\n finished_at = ?,\n output_dataset_id = ?,\n output_version_id = ?,\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?.datasetId ?? null) : null,\n input.status === \"succeeded\" ? (input.output?.versionId ?? null) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async startStep(input: StartPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n return this.db.transaction(() => {\n const pipelineRun = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.pipelineRunId) as PipelineRunDatabaseRow | null\n\n if (!pipelineRun) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (pipelineRun.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (pipelineRun.pipeline_id !== input.pipelineId) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' pipeline '${input.pipelineId}' does not match pipeline run '${input.pipelineRunId}' pipeline '${pipelineRun.pipeline_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_step_runs (\n project_id,\n id,\n pipeline_run_id,\n pipeline_id,\n step_id,\n dataset_id,\n mode,\n status,\n started_at,\n inputs\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.pipelineRunId,\n input.pipelineId,\n input.stepId,\n input.datasetId,\n input.mode,\n \"running\",\n startedAt.toISOString(),\n serializeDatasetVersionRefs(input.inputs)\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step 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 pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!row) {\n throw new PipelineRunError(\n `[SixbSqlite] Failed to load pipeline step run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToPipelineStepRunRecord(row)\n })()\n }\n\n async finishStep(input: FinishPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n assertOptionalNonNegativeInteger(input.rowsWritten, \"rowsWritten\")\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (input.status === \"succeeded\" && input.output.datasetId !== existing.dataset_id) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' output dataset '${input.output.datasetId}' does not match '${existing.dataset_id}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_step_runs\n SET\n status = ?,\n finished_at = ?,\n output_version_id = ?,\n rows_written = ?,\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.versionId : null,\n input.rowsWritten ?? existing.rows_written ?? null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow\n\n return rowToPipelineStepRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<PipelineRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as PipelineRunDatabaseRow | null\n\n return row ? rowToPipelineRunRecord(row) : null\n }\n\n async list(input: ListPipelineRunsInput): Promise<ListPipelineRunsResult> {\n if (hasEmptyStatuses(input) || input.pipelineIds?.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.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.pipelineIds) {\n whereClauses.push(`pipeline_id IN (${input.pipelineIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.pipelineIds)\n }\n\n appendRunListFilters(whereClauses, args, input, \"COALESCE(started_at, queued_at)\")\n\n const { rows, total, hasMore } = queryRunList<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_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(rowToPipelineRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByPipelineIds(\n input: ListLatestPipelineRunsInput\n ): Promise<ListLatestPipelineRunsResult> {\n const rows = queryLatestRunsByOwnerId<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_runs\",\n ownerColumn: \"pipeline_id\",\n ownerIds: input.pipelineIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.pipeline_id,\n })\n\n return {\n runs: rows.map(rowToPipelineRunRecord),\n }\n }\n\n async listSteps(input: ListPipelineStepRunsInput): Promise<ListPipelineStepRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n steps: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.pipelineRunId) {\n whereClauses.push(\"pipeline_run_id = ?\")\n args.push(input.pipelineRunId)\n }\n\n if (input.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.stepId) {\n whereClauses.push(\"step_id = ?\")\n args.push(input.stepId)\n }\n\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<PipelineStepRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_step_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n steps: rows.map(rowToPipelineStepRunRecord),\n hasMore,\n total,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction serializeDatasetVersionRefs(refs: readonly DatasetVersionRef[]): string {\n return JSON.stringify(refs)\n}\n\nfunction parseDatasetVersionRefs(value: string): readonly DatasetVersionRef[] {\n return JSON.parse(value) as readonly DatasetVersionRef[]\n}\n\nfunction rowToPipelineRunRecord(row: PipelineRunDatabaseRow): PipelineRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n pipelineId: row.pipeline_id,\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 output:\n row.output_dataset_id && row.output_version_id\n ? {\n datasetId: row.output_dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction rowToPipelineStepRunRecord(row: PipelineStepRunDatabaseRow): PipelineStepRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n pipelineRunId: row.pipeline_run_id,\n pipelineId: row.pipeline_id,\n stepId: row.step_id,\n datasetId: row.dataset_id,\n mode: row.mode,\n status: row.status,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n inputs: parseDatasetVersionRefs(row.inputs),\n output: row.output_version_id\n ? {\n datasetId: row.dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n rowsWritten: row.rows_written ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertOptionalNonNegativeInteger(value: number | undefined, fieldName: string): void {\n if (value !== undefined && (!Number.isInteger(value) || value < 0)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface PipelineRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n pipeline_id: string\n status: PipelineRunRecord[\"status\"]\n queued_at: string\n started_at: string | null\n finished_at: string | null\n output_dataset_id: string | null\n output_version_id: string | null\n error: string | null\n}\n\ninterface PipelineStepRunDatabaseRow {\n project_id: string\n id: string\n pipeline_run_id: string\n pipeline_id: string\n step_id: string\n dataset_id: string\n mode: PipelineStepRunRecord[\"mode\"]\n status: PipelineStepRunRecord[\"status\"]\n started_at: string\n finished_at: string | null\n inputs: string\n output_version_id: string | null\n rows_written: number | null\n error: string | null\n}\n",
|
|
72
|
+
"import type { Database } from \"bun:sqlite\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { assertPipelineRunExecution } from \"@sixb/core/internal/pipeline-run-storage-provider\"\nimport {\n canFinishPipelineRun,\n canRequeuePipelineRunAfterEnqueueFailure,\n} from \"@sixb/core/internal/storage\"\nimport type { DatasetVersionRef } from \"@sixb/core/lake-storage\"\nimport type {\n ExecutionStorage,\n FinishPipelineRunInput,\n FinishPipelineStepRunInput,\n ListLatestPipelineRunsInput,\n ListLatestPipelineRunsResult,\n ListPipelineRunsInput,\n ListPipelineRunsResult,\n ListPipelineStepRunsInput,\n ListPipelineStepRunsResult,\n PipelineRunRecord,\n PipelineRunStorage,\n PipelineStepRunRecord,\n QueuePipelineRunInput,\n StartPipelineRunInput,\n StartPipelineStepRunInput,\n} from \"@sixb/core/storage\"\nimport { PIPELINE_RUN_FAILURE_CODES, PipelineRunError } 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 SqlitePipelineRunStorageOptions {\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 SqlitePipelineRunStorage implements PipelineRunStorage {\n private readonly connection: SqliteStoreConnection\n private readonly db: Database\n private readonly executions: ExecutionStorage\n\n constructor(options: SqlitePipelineRunStorageOptions) {\n this.connection = openSqliteStoreConnection(options)\n this.db = this.connection.db\n this.executions = options.executions\n }\n\n async queue(input: QueuePipelineRunInput): Promise<PipelineRunRecord> {\n const queuedAt = input.queuedAt ?? new Date()\n await assertPipelineRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n pipelineId: input.pipelineId,\n })\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_runs (\n project_id,\n id,\n execution_id,\n pipeline_id,\n status,\n queued_at,\n started_at\n ) VALUES (?, ?, ?, ?, ?, ?, NULL)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.executionId,\n input.pipelineId,\n \"queued\",\n queuedAt.toISOString()\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 PipelineRunError(\n `[SixbSqlite] Failed to load pipeline run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return record\n }\n\n private async requeueAfterEnqueueFailure(\n input: QueuePipelineRunInput,\n queuedAt: Date\n ): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n if (\n !existing ||\n !canRequeuePipelineRunAfterEnqueueFailure(rowToPipelineRunRecord(existing), input)\n ) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET status = ?, queued_at = ?, started_at = NULL, finished_at = NULL,\n output_dataset_id = NULL, output_version_id = NULL, error = 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 pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async start(input: StartPipelineRunInput): Promise<PipelineRunRecord> {\n const result = this.db\n .query(\n `\n UPDATE pipeline_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 PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n async finish(input: FinishPipelineRunInput): Promise<PipelineRunRecord> {\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (!canFinishPipelineRun(existing.status, input)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.id}' cannot finish from status '${existing.status}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_runs\n SET\n status = ?,\n finished_at = ?,\n output_dataset_id = ?,\n output_version_id = ?,\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?.datasetId ?? null) : null,\n input.status === \"succeeded\" ? (input.output?.versionId ?? null) : null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineRunDatabaseRow\n\n return rowToPipelineRunRecord(updated)\n })()\n }\n\n async startStep(input: StartPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n return this.db.transaction(() => {\n const pipelineRun = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.pipelineRunId) as PipelineRunDatabaseRow | null\n\n if (!pipelineRun) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' not found for project '${input.projectId}'.`\n )\n }\n\n if (pipelineRun.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run '${input.pipelineRunId}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (pipelineRun.pipeline_id !== input.pipelineId) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' pipeline '${input.pipelineId}' does not match pipeline run '${input.pipelineRunId}' pipeline '${pipelineRun.pipeline_id}'.`\n )\n }\n\n const startedAt = input.startedAt ?? new Date()\n\n try {\n this.db\n .query(\n `\n INSERT INTO pipeline_step_runs (\n project_id,\n id,\n pipeline_run_id,\n pipeline_id,\n step_id,\n dataset_id,\n mode,\n status,\n started_at,\n inputs\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .run(\n input.projectId,\n input.id,\n input.pipelineRunId,\n input.pipelineId,\n input.stepId,\n input.datasetId,\n input.mode,\n \"running\",\n startedAt.toISOString(),\n serializeDatasetVersionRefs(input.inputs)\n )\n } catch (error) {\n if (isUniqueConstraintError(error)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step 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 pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!row) {\n throw new PipelineRunError(\n `[SixbSqlite] Failed to load pipeline step run '${input.id}' for project '${input.projectId}'.`\n )\n }\n\n return rowToPipelineStepRunRecord(row)\n })()\n }\n\n async finishStep(input: FinishPipelineStepRunInput): Promise<PipelineStepRunRecord> {\n assertOptionalNonNegativeInteger(input.rowsWritten, \"rowsWritten\")\n\n return this.db.transaction(() => {\n const existing = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow | null\n\n if (!existing) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"running\") {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' for project '${input.projectId}' is already terminal.`\n )\n }\n\n if (input.status === \"succeeded\" && input.output.datasetId !== existing.dataset_id) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline step run '${input.id}' output dataset '${input.output.datasetId}' does not match '${existing.dataset_id}'.`\n )\n }\n\n this.db\n .query(\n `\n UPDATE pipeline_step_runs\n SET\n status = ?,\n finished_at = ?,\n output_version_id = ?,\n rows_written = ?,\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.versionId : null,\n input.rowsWritten ?? existing.rows_written ?? null,\n input.status === \"succeeded\" || input.error === undefined\n ? null\n : serializeSixbFailure(input.error, PIPELINE_RUN_FAILURE_CODES),\n input.projectId,\n input.id\n )\n\n const updated = this.db\n .query(\"SELECT * FROM pipeline_step_runs WHERE project_id = ? AND id = ?\")\n .get(input.projectId, input.id) as PipelineStepRunDatabaseRow\n\n return rowToPipelineStepRunRecord(updated)\n })()\n }\n\n async getById(params: { projectId: string; id: string }): Promise<PipelineRunRecord | null> {\n const row = this.db\n .query(\"SELECT * FROM pipeline_runs WHERE project_id = ? AND id = ?\")\n .get(params.projectId, params.id) as PipelineRunDatabaseRow | null\n\n return row ? rowToPipelineRunRecord(row) : null\n }\n\n async list(input: ListPipelineRunsInput): Promise<ListPipelineRunsResult> {\n if (hasEmptyStatuses(input) || input.pipelineIds?.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.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.pipelineIds) {\n whereClauses.push(`pipeline_id IN (${input.pipelineIds.map(() => \"?\").join(\", \")})`)\n args.push(...input.pipelineIds)\n }\n\n appendRunListFilters(whereClauses, args, input, \"COALESCE(started_at, queued_at)\")\n\n const { rows, total, hasMore } = queryRunList<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_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(rowToPipelineRunRecord),\n hasMore,\n total,\n }\n }\n\n async listLatestByPipelineIds(\n input: ListLatestPipelineRunsInput\n ): Promise<ListLatestPipelineRunsResult> {\n const rows = queryLatestRunsByOwnerId<PipelineRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_runs\",\n ownerColumn: \"pipeline_id\",\n ownerIds: input.pipelineIds,\n projectId: input.projectId,\n ownerIdFor: (row) => row.pipeline_id,\n })\n\n return {\n runs: rows.map(rowToPipelineRunRecord),\n }\n }\n\n async listSteps(input: ListPipelineStepRunsInput): Promise<ListPipelineStepRunsResult> {\n if (hasEmptyStatuses(input)) {\n return {\n steps: [],\n hasMore: false,\n total: 0,\n }\n }\n\n const whereClauses = [\"project_id = ?\"]\n const args: SqliteValue[] = [input.projectId]\n\n if (input.pipelineRunId) {\n whereClauses.push(\"pipeline_run_id = ?\")\n args.push(input.pipelineRunId)\n }\n\n if (input.pipelineId) {\n whereClauses.push(\"pipeline_id = ?\")\n args.push(input.pipelineId)\n }\n\n if (input.stepId) {\n whereClauses.push(\"step_id = ?\")\n args.push(input.stepId)\n }\n\n if (input.datasetId) {\n whereClauses.push(\"dataset_id = ?\")\n args.push(input.datasetId)\n }\n\n appendRunListFilters(whereClauses, args, input)\n\n const { rows, total, hasMore } = queryRunList<PipelineStepRunDatabaseRow>({\n db: this.db,\n tableName: \"pipeline_step_runs\",\n whereClauses,\n args,\n order: input.order,\n limit: input.limit,\n offset: input.offset,\n })\n\n return {\n steps: rows.map(rowToPipelineStepRunRecord),\n hasMore,\n total,\n }\n }\n\n close(): void {\n closeSqliteStoreConnection(this.connection)\n }\n}\n\nfunction serializeDatasetVersionRefs(refs: readonly DatasetVersionRef[]): string {\n return JSON.stringify(refs)\n}\n\nfunction parseDatasetVersionRefs(value: string): readonly DatasetVersionRef[] {\n return JSON.parse(value) as readonly DatasetVersionRef[]\n}\n\nfunction rowToPipelineRunRecord(row: PipelineRunDatabaseRow): PipelineRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n executionId: row.execution_id,\n pipelineId: row.pipeline_id,\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 output:\n row.output_dataset_id && row.output_version_id\n ? {\n datasetId: row.output_dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction rowToPipelineStepRunRecord(row: PipelineStepRunDatabaseRow): PipelineStepRunRecord {\n return {\n id: row.id,\n projectId: row.project_id,\n pipelineRunId: row.pipeline_run_id,\n pipelineId: row.pipeline_id,\n stepId: row.step_id,\n datasetId: row.dataset_id,\n mode: row.mode,\n status: row.status,\n startedAt: new Date(row.started_at),\n finishedAt: row.finished_at ? new Date(row.finished_at) : undefined,\n inputs: parseDatasetVersionRefs(row.inputs),\n output: row.output_version_id\n ? {\n datasetId: row.dataset_id,\n versionId: row.output_version_id,\n }\n : undefined,\n rowsWritten: row.rows_written ?? undefined,\n error: row.error === null ? undefined : parseSixbFailure(row.error, PIPELINE_RUN_FAILURE_CODES),\n }\n}\n\nfunction assertOptionalNonNegativeInteger(value: number | undefined, fieldName: string): void {\n if (value !== undefined && (!Number.isInteger(value) || value < 0)) {\n throw new PipelineRunError(\n `[SixbSqlite] Pipeline run ${fieldName} must be a non-negative integer.`\n )\n }\n}\n\ninterface PipelineRunDatabaseRow {\n project_id: string\n id: string\n execution_id: string\n pipeline_id: string\n status: PipelineRunRecord[\"status\"]\n queued_at: string\n started_at: string | null\n finished_at: string | null\n output_dataset_id: string | null\n output_version_id: string | null\n error: string | null\n}\n\ninterface PipelineStepRunDatabaseRow {\n project_id: string\n id: string\n pipeline_run_id: string\n pipeline_id: string\n step_id: string\n dataset_id: string\n mode: PipelineStepRunRecord[\"mode\"]\n status: PipelineStepRunRecord[\"status\"]\n started_at: string\n finished_at: string | null\n inputs: string\n output_version_id: string | null\n rows_written: number | null\n error: string | null\n}\n",
|
|
70
73
|
"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",
|
|
71
74
|
"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",
|
|
72
75
|
"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",
|
|
73
76
|
"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",
|
|
74
77
|
"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",
|
|
75
|
-
"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",
|
|
78
|
+
"import type { Database } from \"bun:sqlite\"\nimport type { JsonValue } from \"@sixb/core\"\nimport { parseSixbFailure, serializeSixbFailure } from \"@sixb/core/internal/errors\"\nimport { canFinishSyncRun, 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 if (!canFinishSyncRun(existing.status, input)) {\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",
|
|
76
79
|
"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",
|
|
77
80
|
"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",
|
|
78
81
|
"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",
|
|
79
82
|
"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",
|
|
80
83
|
"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"
|
|
81
84
|
],
|
|
82
|
-
"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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",
|
|
83
|
-
"debugId": "
|
|
85
|
+
"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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",
|
|
86
|
+
"debugId": "70BDC079F392018764756E2164756E21",
|
|
84
87
|
"names": []
|
|
85
88
|
}
|