@cat-factory/worker 0.128.2 → 0.130.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +13 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/infrastructure/container-assembly.d.ts +3 -1
  5. package/dist/infrastructure/container-assembly.d.ts.map +1 -1
  6. package/dist/infrastructure/container-assembly.js +48 -28
  7. package/dist/infrastructure/container-assembly.js.map +1 -1
  8. package/dist/infrastructure/container-shared-services.d.ts +49 -0
  9. package/dist/infrastructure/container-shared-services.d.ts.map +1 -0
  10. package/dist/infrastructure/container-shared-services.js +130 -0
  11. package/dist/infrastructure/container-shared-services.js.map +1 -0
  12. package/dist/infrastructure/container.d.ts +60 -3
  13. package/dist/infrastructure/container.d.ts.map +1 -1
  14. package/dist/infrastructure/container.js +57 -117
  15. package/dist/infrastructure/container.js.map +1 -1
  16. package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.d.ts +2 -0
  17. package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.d.ts.map +1 -1
  18. package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.js +20 -4
  19. package/dist/infrastructure/repositories/D1AgentContextSnapshotRepository.js.map +1 -1
  20. package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.d.ts +2 -0
  21. package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.d.ts.map +1 -1
  22. package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.js +22 -4
  23. package/dist/infrastructure/repositories/D1AgentSearchQueryRepository.js.map +1 -1
  24. package/dist/infrastructure/repositories/D1FoundationalServiceRepository.d.ts +38 -0
  25. package/dist/infrastructure/repositories/D1FoundationalServiceRepository.d.ts.map +1 -0
  26. package/dist/infrastructure/repositories/D1FoundationalServiceRepository.js +280 -0
  27. package/dist/infrastructure/repositories/D1FoundationalServiceRepository.js.map +1 -0
  28. package/dist/infrastructure/repositories/D1LlmCallMetricRepository.d.ts +2 -0
  29. package/dist/infrastructure/repositories/D1LlmCallMetricRepository.d.ts.map +1 -1
  30. package/dist/infrastructure/repositories/D1LlmCallMetricRepository.js +21 -3
  31. package/dist/infrastructure/repositories/D1LlmCallMetricRepository.js.map +1 -1
  32. package/dist/infrastructure/repositories/D1NotificationWebhookRepository.d.ts +5 -1
  33. package/dist/infrastructure/repositories/D1NotificationWebhookRepository.d.ts.map +1 -1
  34. package/dist/infrastructure/repositories/D1NotificationWebhookRepository.js +11 -5
  35. package/dist/infrastructure/repositories/D1NotificationWebhookRepository.js.map +1 -1
  36. package/dist/infrastructure/workflows/ExecutionWorkflow.d.ts.map +1 -1
  37. package/dist/infrastructure/workflows/ExecutionWorkflow.js +110 -84
  38. package/dist/infrastructure/workflows/ExecutionWorkflow.js.map +1 -1
  39. package/migrations/0072_webhook_run_events.sql +11 -0
  40. package/migrations/0073_foundational_services.sql +84 -0
  41. package/package.json +18 -18
@@ -49,6 +49,11 @@ function rowToSnapshot(row) {
49
49
  extras: parseObject(row.extras),
50
50
  };
51
51
  }
52
+ /**
53
+ * Statements per `db.batch` in the batch append — small, because one snapshot row is routinely
54
+ * megabytes (the composed prompt plus every injected `.cat-context/*` file's body).
55
+ */
56
+ const SNAPSHOT_CHUNK_SIZE = 10;
52
57
  /**
53
58
  * D1-backed sink for agent-context observability. Lives in the dedicated TELEMETRY_DB
54
59
  * database (see `telemetry-migrations/`), alongside `llm_call_metrics`.
@@ -59,13 +64,24 @@ export class D1AgentContextSnapshotRepository {
59
64
  this.db = db;
60
65
  }
61
66
  async record(snapshot) {
62
- await this.db
67
+ await this.insertStatement(snapshot, false).run();
68
+ }
69
+ async recordMany(snapshots) {
70
+ // One `batch` per chunk (a single round trip each) — never a `record` loop. Chunked SMALL:
71
+ // one snapshot row carries the whole composed prompt plus every injected context file's body.
72
+ // Idempotent by id (see the port) because the ingest retries a chunk whose ack was lost.
73
+ const statements = snapshots.map((snapshot) => this.insertStatement(snapshot, true));
74
+ for (let i = 0; i < statements.length; i += SNAPSHOT_CHUNK_SIZE) {
75
+ await this.db.batch(statements.slice(i, i + SNAPSHOT_CHUNK_SIZE));
76
+ }
77
+ }
78
+ insertStatement(snapshot, ignoreDuplicateId) {
79
+ return this.db
63
80
  .prepare(`INSERT INTO agent_context_snapshots
64
81
  (id, workspace_id, execution_id, agent_kind, step_index, created_at,
65
82
  model, harness, system_prompt, user_prompt, fragments, context_files, extras)
66
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
67
- .bind(snapshot.id, snapshot.workspaceId, snapshot.executionId, snapshot.agentKind, snapshot.stepIndex, snapshot.createdAt, snapshot.model, snapshot.harness, snapshot.systemPrompt, snapshot.userPrompt, JSON.stringify(snapshot.fragments), JSON.stringify(snapshot.contextFiles), JSON.stringify(snapshot.extras))
68
- .run();
83
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)${ignoreDuplicateId ? ' ON CONFLICT(id) DO NOTHING' : ''}`)
84
+ .bind(snapshot.id, snapshot.workspaceId, snapshot.executionId, snapshot.agentKind, snapshot.stepIndex, snapshot.createdAt, snapshot.model, snapshot.harness, snapshot.systemPrompt, snapshot.userPrompt, JSON.stringify(snapshot.fragments), JSON.stringify(snapshot.contextFiles), JSON.stringify(snapshot.extras));
69
85
  }
70
86
  async listByExecution(workspaceId, executionId) {
71
87
  const { results } = await this.db
@@ -1 +1 @@
1
- {"version":3,"file":"D1AgentContextSnapshotRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AgentContextSnapshotRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"D1AgentContextSnapshotRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AgentContextSnapshotRepository.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export declare class D1AgentSearchQueryRepository implements AgentSearchQueryRep
11
11
  db: D1Database;
12
12
  });
13
13
  record(query: AgentSearchQuery): Promise<void>;
14
+ recordMany(queries: AgentSearchQuery[]): Promise<void>;
15
+ private insertStatement;
14
16
  listByExecution(workspaceId: string, executionId: string): Promise<AgentSearchQuery[]>;
15
17
  listPage(workspaceId: string, query: AgentSearchQueryPageQuery): Promise<AgentSearchQuery[]>;
16
18
  countByExecution(workspaceId: string, executionId: string): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"D1AgentSearchQueryRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AgentSearchQueryRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA2B3D;;;;GAIG;AACH,qBAAa,4BAA6B,YAAW,0BAA0B;IAC7E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnD;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAU3F;IAEK,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoB7B;IAEK,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtD;CACF"}
1
+ {"version":3,"file":"D1AgentSearchQueryRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AgentSearchQueryRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAiC3D;;;;GAIG;AACH,qBAAa,4BAA6B,YAAW,0BAA0B;IAC7E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnD;IAEK,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3D;IAED,OAAO,CAAC,eAAe;IAmBjB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAU3F;IAEK,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoB7B;IAEK,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtD;CACF"}
@@ -12,6 +12,11 @@ function rowToQuery(row) {
12
12
  createdAt: row.created_at,
13
13
  };
14
14
  }
15
+ /**
16
+ * Statements per `db.batch` in the batch append. D1 executes a batch in one round trip as an
17
+ * implicit transaction; chunking keeps a long run's ingest off any single-request ceiling.
18
+ */
19
+ const INSERT_CHUNK_SIZE = 50;
15
20
  /**
16
21
  * D1-backed sink for agent-search-query observability. Lives in the dedicated
17
22
  * TELEMETRY_DB database (see `telemetry-migrations/`), alongside `llm_call_metrics`
@@ -23,12 +28,25 @@ export class D1AgentSearchQueryRepository {
23
28
  this.db = db;
24
29
  }
25
30
  async record(query) {
26
- await this.db
31
+ await this.insertStatement(query, false).run();
32
+ }
33
+ async recordMany(queries) {
34
+ // One `batch` per chunk — a single round trip and one implicit transaction each — never a
35
+ // `record` loop (the banned N+1 write). D1 caps bound parameters per statement, so a batch of
36
+ // single-row statements is the portable shape here rather than one multi-row VALUES.
37
+ // Idempotent by id (see the port): the mothership-mode telemetry ingest retries a chunk whose
38
+ // ack was lost, and one duplicate must not abort the rest of the batch.
39
+ const statements = queries.map((query) => this.insertStatement(query, true));
40
+ for (let i = 0; i < statements.length; i += INSERT_CHUNK_SIZE) {
41
+ await this.db.batch(statements.slice(i, i + INSERT_CHUNK_SIZE));
42
+ }
43
+ }
44
+ insertStatement(query, ignoreDuplicateId) {
45
+ return this.db
27
46
  .prepare(`INSERT INTO agent_search_queries
28
47
  (id, workspace_id, execution_id, agent_kind, provider, query, result_count, created_at)
29
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
30
- .bind(query.id, query.workspaceId, query.executionId, query.agentKind, query.provider, query.query, query.resultCount, query.createdAt)
31
- .run();
48
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)${ignoreDuplicateId ? ' ON CONFLICT(id) DO NOTHING' : ''}`)
49
+ .bind(query.id, query.workspaceId, query.executionId, query.agentKind, query.provider, query.query, query.resultCount, query.createdAt);
32
50
  }
33
51
  async listByExecution(workspaceId, executionId) {
34
52
  const { results } = await this.db
@@ -1 +1 @@
1
- {"version":3,"file":"D1AgentSearchQueryRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AgentSearchQueryRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"D1AgentSearchQueryRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AgentSearchQueryRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { FoundationalServiceOwnerKind } from '@cat-factory/contracts';
2
+ import type { ApiContractManifestEntry, ApiContractRecord, ApiContractRepository, FoundationalServiceRecord, FoundationalServiceRepository, FoundationalServiceSourceRecord, FoundationalServiceSourceRepository } from '@cat-factory/kernel';
3
+ import type { D1Database } from '@cloudflare/workers-types';
4
+ export declare class D1FoundationalServiceRepository implements FoundationalServiceRepository {
5
+ private readonly db;
6
+ constructor({ db }: {
7
+ db: D1Database;
8
+ });
9
+ listByOwner(ownerKind: FoundationalServiceOwnerKind, ownerId: string, includeDeleted?: boolean): Promise<FoundationalServiceRecord[]>;
10
+ get(ownerKind: FoundationalServiceOwnerKind, ownerId: string, serviceId: string): Promise<FoundationalServiceRecord | null>;
11
+ upsert(record: FoundationalServiceRecord): Promise<void>;
12
+ softDelete(ownerKind: FoundationalServiceOwnerKind, ownerId: string, serviceId: string, at: number): Promise<void>;
13
+ listBySource(sourceId: string): Promise<FoundationalServiceRecord[]>;
14
+ softDeleteBySource(sourceId: string, at: number): Promise<void>;
15
+ }
16
+ export declare class D1ApiContractRepository implements ApiContractRepository {
17
+ private readonly db;
18
+ constructor({ db }: {
19
+ db: D1Database;
20
+ });
21
+ listManifestByOwner(ownerKind: FoundationalServiceOwnerKind, ownerId: string): Promise<ApiContractManifestEntry[]>;
22
+ listByServiceIds(ownerKind: FoundationalServiceOwnerKind, ownerId: string, serviceIds: string[]): Promise<ApiContractRecord[]>;
23
+ replaceForService(ownerKind: FoundationalServiceOwnerKind, ownerId: string, serviceId: string, contracts: ApiContractRecord[]): Promise<void>;
24
+ deleteForService(ownerKind: FoundationalServiceOwnerKind, ownerId: string, serviceId: string): Promise<void>;
25
+ }
26
+ export declare class D1FoundationalServiceSourceRepository implements FoundationalServiceSourceRepository {
27
+ private readonly db;
28
+ constructor({ db }: {
29
+ db: D1Database;
30
+ });
31
+ listByOwner(ownerKind: FoundationalServiceOwnerKind, ownerId: string): Promise<FoundationalServiceSourceRecord[]>;
32
+ get(id: string): Promise<FoundationalServiceSourceRecord | null>;
33
+ upsert(record: FoundationalServiceSourceRecord): Promise<void>;
34
+ updateSyncState(id: string, lastSyncedCommit: string | null, lastSyncedAt: number): Promise<void>;
35
+ softDelete(id: string, at: number): Promise<void>;
36
+ listStale(staleBefore: number, limit: number): Promise<FoundationalServiceSourceRecord[]>;
37
+ }
38
+ //# sourceMappingURL=D1FoundationalServiceRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1FoundationalServiceRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1FoundationalServiceRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ // D1-backed stores for the foundational-services catalog (migration 0073). The Drizzle mirrors
2
+ // live in `runtimes/node/src/repositories/foundationalServices.ts`; the two are kept honest by
3
+ // the conformance suite's foundational-services assertions.
4
+ /**
5
+ * How many service ids ride ONE `IN (…)` of the lazy contract read. D1 binds parameters
6
+ * positionally with a per-statement ceiling, so a design that declared many services is chunked
7
+ * rather than issued as a query per id (which is the banned N+1) or as one over-long statement.
8
+ */
9
+ const ID_CHUNK = 50;
10
+ function toServiceRecord(row) {
11
+ return {
12
+ serviceId: row.service_id,
13
+ ownerKind: row.owner_kind,
14
+ ownerId: row.owner_id,
15
+ name: row.name,
16
+ summary: row.summary,
17
+ description: row.description,
18
+ capabilities: parseStringArray(row.capabilities),
19
+ sourceId: row.source_id,
20
+ sourcePath: row.source_path,
21
+ pinnedCommit: row.pinned_commit,
22
+ createdAt: row.created_at,
23
+ updatedAt: row.updated_at,
24
+ deletedAt: row.deleted_at,
25
+ };
26
+ }
27
+ /**
28
+ * A JSON `string[]` column, read LENIENTLY. A malformed value degrades to `[]` rather than
29
+ * throwing: these columns are written only by our own repos, so a bad value means a hand edit or
30
+ * a partially-applied migration, and failing the whole catalog read over one row's tags would
31
+ * take down every design dispatch in the workspace.
32
+ */
33
+ function parseStringArray(value) {
34
+ if (!value)
35
+ return [];
36
+ try {
37
+ const parsed = JSON.parse(value);
38
+ return Array.isArray(parsed) ? parsed.filter((v) => typeof v === 'string') : [];
39
+ }
40
+ catch {
41
+ // silent-catch-ok: see the note above — a malformed tag list reads as no tags, and the row
42
+ // it belongs to is still served.
43
+ return [];
44
+ }
45
+ }
46
+ export class D1FoundationalServiceRepository {
47
+ db;
48
+ constructor({ db }) {
49
+ this.db = db;
50
+ }
51
+ async listByOwner(ownerKind, ownerId, includeDeleted = false) {
52
+ const where = includeDeleted ? '' : ' AND deleted_at IS NULL';
53
+ const { results } = await this.db
54
+ .prepare(`SELECT * FROM foundational_services WHERE owner_kind = ? AND owner_id = ?${where} ORDER BY service_id`)
55
+ .bind(ownerKind, ownerId)
56
+ .all();
57
+ return results.map(toServiceRecord);
58
+ }
59
+ async get(ownerKind, ownerId, serviceId) {
60
+ const row = await this.db
61
+ .prepare('SELECT * FROM foundational_services WHERE owner_kind = ? AND owner_id = ? AND service_id = ?')
62
+ .bind(ownerKind, ownerId, serviceId)
63
+ .first();
64
+ return row ? toServiceRecord(row) : null;
65
+ }
66
+ async upsert(record) {
67
+ await this.db
68
+ .prepare(`INSERT INTO foundational_services
69
+ (service_id, owner_kind, owner_id, name, summary, description, capabilities,
70
+ source_id, source_path, pinned_commit, created_at, updated_at, deleted_at)
71
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
72
+ ON CONFLICT (owner_kind, owner_id, service_id) DO UPDATE SET
73
+ name = excluded.name,
74
+ summary = excluded.summary,
75
+ description = excluded.description,
76
+ capabilities = excluded.capabilities,
77
+ source_id = excluded.source_id,
78
+ source_path = excluded.source_path,
79
+ pinned_commit = excluded.pinned_commit,
80
+ updated_at = excluded.updated_at,
81
+ deleted_at = excluded.deleted_at`)
82
+ .bind(record.serviceId, record.ownerKind, record.ownerId, record.name, record.summary, record.description, JSON.stringify(record.capabilities), record.sourceId, record.sourcePath, record.pinnedCommit, record.createdAt, record.updatedAt, record.deletedAt)
83
+ .run();
84
+ }
85
+ async softDelete(ownerKind, ownerId, serviceId, at) {
86
+ await this.db
87
+ .prepare('UPDATE foundational_services SET deleted_at = ?, updated_at = ? WHERE owner_kind = ? AND owner_id = ? AND service_id = ?')
88
+ .bind(at, at, ownerKind, ownerId, serviceId)
89
+ .run();
90
+ }
91
+ async listBySource(sourceId) {
92
+ const { results } = await this.db
93
+ .prepare('SELECT * FROM foundational_services WHERE source_id = ? AND deleted_at IS NULL ORDER BY service_id')
94
+ .bind(sourceId)
95
+ .all();
96
+ return results.map(toServiceRecord);
97
+ }
98
+ async softDeleteBySource(sourceId, at) {
99
+ await this.db
100
+ .prepare('UPDATE foundational_services SET deleted_at = ?, updated_at = ? WHERE source_id = ? AND deleted_at IS NULL')
101
+ .bind(at, at, sourceId)
102
+ .run();
103
+ }
104
+ }
105
+ export class D1ApiContractRepository {
106
+ db;
107
+ constructor({ db }) {
108
+ this.db = db;
109
+ }
110
+ async listManifestByOwner(ownerKind, ownerId) {
111
+ // `length(body)` rather than `body`: the whole point of the manifest is that a catalog read
112
+ // never transfers a document. SQLite's `length()` on TEXT counts characters, which is what
113
+ // the size is compared against everywhere else (`body.length` in JS).
114
+ const { results } = await this.db
115
+ .prepare(`SELECT service_id, contract_id, format, title, length(body) AS size,
116
+ operations, omitted_operations, source_path
117
+ FROM api_contracts
118
+ WHERE owner_kind = ? AND owner_id = ?
119
+ ORDER BY service_id, contract_id`)
120
+ .bind(ownerKind, ownerId)
121
+ .all();
122
+ return results.map((row) => ({
123
+ serviceId: row.service_id,
124
+ contractId: row.contract_id,
125
+ format: row.format,
126
+ title: row.title,
127
+ size: row.size,
128
+ operations: parseStringArray(row.operations),
129
+ omittedOperations: row.omitted_operations,
130
+ sourcePath: row.source_path,
131
+ }));
132
+ }
133
+ async listByServiceIds(ownerKind, ownerId, serviceIds) {
134
+ const ids = [...new Set(serviceIds)].filter(Boolean);
135
+ if (ids.length === 0)
136
+ return [];
137
+ const out = [];
138
+ for (let i = 0; i < ids.length; i += ID_CHUNK) {
139
+ const chunk = ids.slice(i, i + ID_CHUNK);
140
+ const placeholders = chunk.map(() => '?').join(', ');
141
+ const { results } = await this.db
142
+ .prepare(`SELECT * FROM api_contracts
143
+ WHERE owner_kind = ? AND owner_id = ? AND service_id IN (${placeholders})
144
+ ORDER BY service_id, contract_id`)
145
+ .bind(ownerKind, ownerId, ...chunk)
146
+ .all();
147
+ for (const row of results)
148
+ out.push(toContractRecord(row));
149
+ }
150
+ return out;
151
+ }
152
+ async replaceForService(ownerKind, ownerId, serviceId, contracts) {
153
+ // One BATCH so the delete and the inserts land together: a reader between the two would
154
+ // otherwise see a service whose contracts had vanished, which the catalog renders as a
155
+ // service with no interface rather than as a write in progress.
156
+ const statements = [
157
+ this.db
158
+ .prepare('DELETE FROM api_contracts WHERE owner_kind = ? AND owner_id = ? AND service_id = ?')
159
+ .bind(ownerKind, ownerId, serviceId),
160
+ ...contracts.map((contract) => this.db
161
+ .prepare(`INSERT INTO api_contracts
162
+ (owner_kind, owner_id, service_id, contract_id, format, title, body,
163
+ operations, omitted_operations, source_path, source_sha, created_at, updated_at)
164
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
165
+ .bind(ownerKind, ownerId, serviceId, contract.contractId, contract.format, contract.title, contract.body, JSON.stringify(contract.operations), contract.omittedOperations, contract.sourcePath, contract.sourceSha, contract.createdAt, contract.updatedAt)),
166
+ ];
167
+ await this.db.batch(statements);
168
+ }
169
+ async deleteForService(ownerKind, ownerId, serviceId) {
170
+ await this.db
171
+ .prepare('DELETE FROM api_contracts WHERE owner_kind = ? AND owner_id = ? AND service_id = ?')
172
+ .bind(ownerKind, ownerId, serviceId)
173
+ .run();
174
+ }
175
+ }
176
+ function toContractRecord(row) {
177
+ return {
178
+ ownerKind: row.owner_kind,
179
+ ownerId: row.owner_id,
180
+ serviceId: row.service_id,
181
+ contractId: row.contract_id,
182
+ format: row.format,
183
+ title: row.title,
184
+ body: row.body,
185
+ operations: parseStringArray(row.operations),
186
+ omittedOperations: row.omitted_operations,
187
+ sourcePath: row.source_path,
188
+ sourceSha: row.source_sha,
189
+ createdAt: row.created_at,
190
+ updatedAt: row.updated_at,
191
+ };
192
+ }
193
+ function toSourceRecord(row) {
194
+ return {
195
+ id: row.id,
196
+ ownerKind: row.owner_kind,
197
+ ownerId: row.owner_id,
198
+ repoOwner: row.repo_owner,
199
+ repoName: row.repo_name,
200
+ gitRef: row.git_ref,
201
+ mode: row.mode,
202
+ dirPath: row.dir_path,
203
+ filePaths: parseStringArray(row.file_paths),
204
+ serviceId: row.service_id,
205
+ serviceName: row.service_name,
206
+ serviceSummary: row.service_summary,
207
+ lastSyncedCommit: row.last_synced_commit,
208
+ lastSyncedAt: row.last_synced_at,
209
+ createdAt: row.created_at,
210
+ deletedAt: row.deleted_at,
211
+ };
212
+ }
213
+ export class D1FoundationalServiceSourceRepository {
214
+ db;
215
+ constructor({ db }) {
216
+ this.db = db;
217
+ }
218
+ async listByOwner(ownerKind, ownerId) {
219
+ const { results } = await this.db
220
+ .prepare('SELECT * FROM foundational_service_sources WHERE owner_kind = ? AND owner_id = ? AND deleted_at IS NULL ORDER BY created_at DESC')
221
+ .bind(ownerKind, ownerId)
222
+ .all();
223
+ return results.map(toSourceRecord);
224
+ }
225
+ async get(id) {
226
+ const row = await this.db
227
+ .prepare('SELECT * FROM foundational_service_sources WHERE id = ?')
228
+ .bind(id)
229
+ .first();
230
+ return row ? toSourceRecord(row) : null;
231
+ }
232
+ async upsert(record) {
233
+ await this.db
234
+ .prepare(`INSERT INTO foundational_service_sources
235
+ (id, owner_kind, owner_id, repo_owner, repo_name, git_ref, mode, dir_path, file_paths,
236
+ service_id, service_name, service_summary, last_synced_commit, last_synced_at,
237
+ created_at, deleted_at)
238
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
239
+ ON CONFLICT (id) DO UPDATE SET
240
+ repo_owner = excluded.repo_owner,
241
+ repo_name = excluded.repo_name,
242
+ git_ref = excluded.git_ref,
243
+ mode = excluded.mode,
244
+ dir_path = excluded.dir_path,
245
+ file_paths = excluded.file_paths,
246
+ service_id = excluded.service_id,
247
+ service_name = excluded.service_name,
248
+ service_summary = excluded.service_summary,
249
+ last_synced_commit = excluded.last_synced_commit,
250
+ last_synced_at = excluded.last_synced_at,
251
+ deleted_at = excluded.deleted_at`)
252
+ .bind(record.id, record.ownerKind, record.ownerId, record.repoOwner, record.repoName, record.gitRef, record.mode, record.dirPath, JSON.stringify(record.filePaths), record.serviceId, record.serviceName, record.serviceSummary, record.lastSyncedCommit, record.lastSyncedAt, record.createdAt, record.deletedAt)
253
+ .run();
254
+ }
255
+ async updateSyncState(id, lastSyncedCommit, lastSyncedAt) {
256
+ await this.db
257
+ .prepare('UPDATE foundational_service_sources SET last_synced_commit = ?, last_synced_at = ? WHERE id = ?')
258
+ .bind(lastSyncedCommit, lastSyncedAt, id)
259
+ .run();
260
+ }
261
+ async softDelete(id, at) {
262
+ await this.db
263
+ .prepare('UPDATE foundational_service_sources SET deleted_at = ? WHERE id = ?')
264
+ .bind(at, id)
265
+ .run();
266
+ }
267
+ async listStale(staleBefore, limit) {
268
+ // `last_synced_at IS NULL` first: a source linked but never synced is the stalest thing there
269
+ // is, and ordering by a nullable column alone would sort it unpredictably across engines.
270
+ const { results } = await this.db
271
+ .prepare(`SELECT * FROM foundational_service_sources
272
+ WHERE deleted_at IS NULL AND (last_synced_at IS NULL OR last_synced_at < ?)
273
+ ORDER BY (last_synced_at IS NULL) DESC, last_synced_at ASC
274
+ LIMIT ?`)
275
+ .bind(staleBefore, limit)
276
+ .all();
277
+ return results.map(toSourceRecord);
278
+ }
279
+ }
280
+ //# sourceMappingURL=D1FoundationalServiceRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1FoundationalServiceRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1FoundationalServiceRepository.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export declare class D1LlmCallMetricRepository implements LlmCallMetricRepositor
7
7
  db: D1Database;
8
8
  });
9
9
  record(metric: LlmCallMetric): Promise<void>;
10
+ recordMany(metrics: LlmCallMetric[]): Promise<void>;
11
+ private insertStatement;
10
12
  latestChainTip(workspaceId: string, executionId: string, agentKind: string): Promise<LlmPromptChainTip | null>;
11
13
  listByExecution(workspaceId: string, executionId: string, limit?: number, agentKind?: string): Promise<LlmCallMetric[]>;
12
14
  listPage(workspaceId: string, query: LlmCallPageQuery): Promise<LlmCallMetricPage[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"D1LlmCallMetricRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1LlmCallMetricRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAEzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA2S3D,iEAAiE;AACjE,qBAAa,yBAA0B,YAAW,uBAAuB;IACvE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDjD;IAEK,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoBnC;IAEK,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAa1B;IAEK,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsDzF;IAEK,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAUnC;IAEK,oBAAoB,CACxB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA2BjC;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtD;CACF"}
1
+ {"version":3,"file":"D1LlmCallMetricRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1LlmCallMetricRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EAEzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAiT3D,iEAAiE;AACjE,qBAAa,yBAA0B,YAAW,uBAAuB;IACvE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjD;IAEK,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxD;IAED,OAAO,CAAC,eAAe;IA+CjB,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoBnC;IAEK,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAa1B;IAEK,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsDzF;IAEK,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAUnC;IAEK,oBAAoB,CACxB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA2BjC;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOtD;CACF"}
@@ -217,6 +217,11 @@ function rowToPage(row) {
217
217
  reasoning: withMatch({ text: row.reasoning_text, totalChars: row.reasoning_chars ?? 0 }, row.reasoning_match),
218
218
  };
219
219
  }
220
+ /**
221
+ * Statements per `db.batch` in the batch append. D1 executes a batch in one round trip as an
222
+ * implicit transaction; chunking keeps a long run's ingest off any single-request ceiling.
223
+ */
224
+ const INSERT_CHUNK_SIZE = 50;
220
225
  /** D1-backed sink for LLM observability (see migration 0026). */
221
226
  export class D1LlmCallMetricRepository {
222
227
  db;
@@ -233,7 +238,21 @@ export class D1LlmCallMetricRepository {
233
238
  // violations, so a malformed metric would vanish here while still throwing on Postgres.
234
239
  // This mirrors the Drizzle repo's `onConflictDoNothing({ target: id })` exactly — only a
235
240
  // duplicate id is ignored.
236
- await this.db
241
+ await this.insertStatement(metric).run();
242
+ }
243
+ async recordMany(metrics) {
244
+ // One `batch` per chunk — a single round trip and one implicit transaction each — never a
245
+ // `record` loop (the banned N+1 write). D1 caps bound parameters per statement, so a batch of
246
+ // single-row statements is the portable shape rather than one multi-row VALUES. Same
247
+ // first-write-wins-by-id semantics as `record`, which is what lets the mothership-mode
248
+ // telemetry ingest retry a chunk whose ack was lost.
249
+ const statements = metrics.map((metric) => this.insertStatement(metric));
250
+ for (let i = 0; i < statements.length; i += INSERT_CHUNK_SIZE) {
251
+ await this.db.batch(statements.slice(i, i + INSERT_CHUNK_SIZE));
252
+ }
253
+ }
254
+ insertStatement(metric) {
255
+ return this.db
237
256
  .prepare(`INSERT INTO llm_call_metrics
238
257
  (id, workspace_id, execution_id, agent_kind, provider, model, created_at,
239
258
  streaming, phase, turn_index, message_count, tool_count, request_max_tokens,
@@ -243,8 +262,7 @@ export class D1LlmCallMetricRepository {
243
262
  prompt_text, prompt_prefix_count, prompt_hash, response_text, reasoning_text)
244
263
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
245
264
  ON CONFLICT(id) DO NOTHING`)
246
- .bind(metric.id, metric.workspaceId, metric.executionId, metric.agentKind, metric.provider, metric.model, metric.createdAt, metric.streaming ? 1 : 0, metric.phase, metric.turnIndex, metric.messageCount, metric.toolCount, metric.requestMaxTokens, metric.promptTokens, metric.cacheReadTokens, metric.cacheWriteTokens, metric.completionTokens, metric.totalTokens, metric.finishReason, metric.upstreamMs, metric.overheadMs, metric.totalMs, metric.ok ? 1 : 0, metric.httpStatus, metric.errorMessage, metric.promptText, metric.promptPrefixCount, metric.promptHash, metric.responseText, metric.reasoningText)
247
- .run();
265
+ .bind(metric.id, metric.workspaceId, metric.executionId, metric.agentKind, metric.provider, metric.model, metric.createdAt, metric.streaming ? 1 : 0, metric.phase, metric.turnIndex, metric.messageCount, metric.toolCount, metric.requestMaxTokens, metric.promptTokens, metric.cacheReadTokens, metric.cacheWriteTokens, metric.completionTokens, metric.totalTokens, metric.finishReason, metric.upstreamMs, metric.overheadMs, metric.totalMs, metric.ok ? 1 : 0, metric.httpStatus, metric.errorMessage, metric.promptText, metric.promptPrefixCount, metric.promptHash, metric.responseText, metric.reasoningText);
248
266
  }
249
267
  async latestChainTip(workspaceId, executionId, agentKind) {
250
268
  // The newest call for the conversation; one indexed row, no text columns.
@@ -1 +1 @@
1
- {"version":3,"file":"D1LlmCallMetricRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1LlmCallMetricRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"D1LlmCallMetricRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1LlmCallMetricRepository.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import type { NotificationWebhookRecord, NotificationWebhookRepository } from '@cat-factory/kernel';
2
2
  import type { D1Database } from '@cloudflare/workers-types';
3
- /** A workspace's outbound notification webhook, one row per workspace (migration 0061). */
3
+ /**
4
+ * A workspace's outbound webhook, one row per workspace (migration 0061; `run_events` added in
5
+ * 0072). Both JSON filter columns are decoded through the SHARED parsers the Drizzle repo uses,
6
+ * so the columns can't drift between runtimes.
7
+ */
4
8
  export declare class D1NotificationWebhookRepository implements NotificationWebhookRepository {
5
9
  private readonly db;
6
10
  constructor({ db }: {
@@ -1 +1 @@
1
- {"version":3,"file":"D1NotificationWebhookRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1NotificationWebhookRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AACnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAY3D,2FAA2F;AAC3F,qBAAa,+BAAgC,YAAW,6BAA6B;IACnF,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAcxE;IAEK,GAAG,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1D;IAEK,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/C;CACF"}
1
+ {"version":3,"file":"D1NotificationWebhookRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1NotificationWebhookRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AACnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAa3D;;;;GAIG;AACH,qBAAa,+BAAgC,YAAW,6BAA6B;IACnF,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAexE;IAEK,GAAG,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1D;IAEK,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/C;CACF"}