@cat-factory/worker 0.224.2 → 0.225.2

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 (44) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +9 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/infrastructure/config/retention.d.ts.map +1 -1
  5. package/dist/infrastructure/config/retention.js +1 -0
  6. package/dist/infrastructure/config/retention.js.map +1 -1
  7. package/dist/infrastructure/container-assembly.d.ts.map +1 -1
  8. package/dist/infrastructure/container-assembly.js +4 -1
  9. package/dist/infrastructure/container-assembly.js.map +1 -1
  10. package/dist/infrastructure/container-notification-deps.d.ts +6 -0
  11. package/dist/infrastructure/container-notification-deps.d.ts.map +1 -1
  12. package/dist/infrastructure/container-notification-deps.js +23 -1
  13. package/dist/infrastructure/container-notification-deps.js.map +1 -1
  14. package/dist/infrastructure/env.d.ts +6 -0
  15. package/dist/infrastructure/env.d.ts.map +1 -1
  16. package/dist/infrastructure/env.js.map +1 -1
  17. package/dist/infrastructure/repositories/D1DirectoryRepository.d.ts +25 -0
  18. package/dist/infrastructure/repositories/D1DirectoryRepository.d.ts.map +1 -0
  19. package/dist/infrastructure/repositories/D1DirectoryRepository.js +240 -0
  20. package/dist/infrastructure/repositories/D1DirectoryRepository.js.map +1 -0
  21. package/dist/infrastructure/repositories/D1DirectoryWebhookRepository.d.ts +17 -0
  22. package/dist/infrastructure/repositories/D1DirectoryWebhookRepository.d.ts.map +1 -0
  23. package/dist/infrastructure/repositories/D1DirectoryWebhookRepository.js +88 -0
  24. package/dist/infrastructure/repositories/D1DirectoryWebhookRepository.js.map +1 -0
  25. package/dist/infrastructure/repositories/D1MembershipRepository.d.ts +3 -1
  26. package/dist/infrastructure/repositories/D1MembershipRepository.d.ts.map +1 -1
  27. package/dist/infrastructure/repositories/D1MembershipRepository.js +1 -1
  28. package/dist/infrastructure/repositories/D1MembershipRepository.js.map +1 -1
  29. package/dist/infrastructure/repositories/D1PublicApiKeyRepository.d.ts +11 -4
  30. package/dist/infrastructure/repositories/D1PublicApiKeyRepository.d.ts.map +1 -1
  31. package/dist/infrastructure/repositories/D1PublicApiKeyRepository.js +65 -22
  32. package/dist/infrastructure/repositories/D1PublicApiKeyRepository.js.map +1 -1
  33. package/dist/infrastructure/workflows/retention.d.ts +7 -2
  34. package/dist/infrastructure/workflows/retention.d.ts.map +1 -1
  35. package/dist/infrastructure/workflows/retention.js +2 -1
  36. package/dist/infrastructure/workflows/retention.js.map +1 -1
  37. package/migrations/0107_directory_changes.sql +1 -1
  38. package/migrations/0108_public_api_key_workspaces.sql +23 -0
  39. package/migrations/0109_directory_webhooks.sql +18 -0
  40. package/package.json +19 -19
  41. package/dist/infrastructure/repositories/D1DirectoryChangeRepository.d.ts +0 -12
  42. package/dist/infrastructure/repositories/D1DirectoryChangeRepository.d.ts.map +0 -1
  43. package/dist/infrastructure/repositories/D1DirectoryChangeRepository.js +0 -39
  44. package/dist/infrastructure/repositories/D1DirectoryChangeRepository.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { AgentContextSnapshotRepository, AgentSearchQueryRepository, AgentToolCallRepository, AuditEventRepository, Clock, CommitProjectionRepository, LlmCallMetricRepository, GateOutcomeRepository, NotificationRepository, AuthAttemptRepository, MachineNodeRepository, PasswordResetTokenRepository, PlatformMetricsRepository, PipelineScheduleRepository, ProvisioningLogRepository, RateLimitRepository, SpendRollupRepository, SubscriptionQuotaCycleRepository, TokenUsageRepository, Logger } from '@cat-factory/kernel';
1
+ import type { AgentContextSnapshotRepository, AgentSearchQueryRepository, AgentToolCallRepository, AuditEventRepository, DirectoryRepository, Clock, CommitProjectionRepository, LlmCallMetricRepository, GateOutcomeRepository, NotificationRepository, AuthAttemptRepository, MachineNodeRepository, PasswordResetTokenRepository, PlatformMetricsRepository, PipelineScheduleRepository, ProvisioningLogRepository, RateLimitRepository, SpendRollupRepository, SubscriptionQuotaCycleRepository, TokenUsageRepository, Logger } from '@cat-factory/kernel';
2
2
  /** Per-table retention ages in milliseconds; 0 (or less) disables that table's pass. */
3
3
  interface RetentionPolicy {
4
4
  tokenUsageMs: number;
@@ -20,6 +20,8 @@ interface RetentionPolicy {
20
20
  runDaysMs: number;
21
21
  /** The account audit log (`audit_events`), in its own AUDIT_DB. The longest window here. */
22
22
  auditEventsMs: number;
23
+ /** The directory change feed (`directory_changes`); each account's newest row is always kept. */
24
+ directoryChangesMs: number;
23
25
  }
24
26
  export interface RetentionDeps {
25
27
  tokenUsageRepository: TokenUsageRepository;
@@ -66,6 +68,8 @@ export interface RetentionDeps {
66
68
  * prune on the one table that is otherwise unbounded for years.
67
69
  */
68
70
  auditEventRepository: AuditEventRepository;
71
+ /** The directory change feed, pruned to `directoryChangesMs`. Required for the reason above. */
72
+ directoryRepository: Pick<DirectoryRepository, 'pruneChanges'>;
69
73
  /**
70
74
  * The durable cost-attribution rollup. This pass only WRITES it: `spend_days` has no prune,
71
75
  * here or on Node, and no `deleteOlderThan` on its port to call. A TCO table that expires is
@@ -96,6 +100,7 @@ export interface RetentionResult {
96
100
  gateOutcomes: number;
97
101
  runDays: number;
98
102
  auditEvents: number;
103
+ directoryChanges: number;
99
104
  /** Daily buckets (re)written by this pass's rollup: a WRITE, not rows reclaimed. */
100
105
  runDaysRolledUp: number;
101
106
  /** Durable cost-attribution buckets (re)written by this pass: a WRITE, never a prune. */
@@ -118,6 +123,6 @@ export interface RetentionResult {
118
123
  * since the same table failed on every subsequent pass too. Shared with the Node twin via
119
124
  * `createRetentionPass`, so the two facades cannot drift on it.
120
125
  */
121
- export declare function sweepRetention({ tokenUsageRepository, rateLimitRepository, commitRepository, llmCallMetricRepository, agentContextSnapshotRepository, agentSearchQueryRepository, agentToolCallRepository, subscriptionQuotaCycleRepository, pipelineScheduleRepository, provisioningLogRepository, passwordResetTokenRepository, machineNodeRepository, authAttemptRepository, notificationRepository, gateOutcomeRepository, platformMetricsRepository, auditEventRepository, spendRollupRepository, clock, policy, logger, }: RetentionDeps): Promise<RetentionResult>;
126
+ export declare function sweepRetention({ tokenUsageRepository, rateLimitRepository, commitRepository, llmCallMetricRepository, agentContextSnapshotRepository, agentSearchQueryRepository, agentToolCallRepository, subscriptionQuotaCycleRepository, pipelineScheduleRepository, provisioningLogRepository, passwordResetTokenRepository, machineNodeRepository, authAttemptRepository, notificationRepository, gateOutcomeRepository, platformMetricsRepository, auditEventRepository, directoryRepository, spendRollupRepository, clock, policy, logger, }: RetentionDeps): Promise<RetentionResult>;
122
127
  export {};
123
128
  //# sourceMappingURL=retention.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/retention.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/retention.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ const SUBSCRIPTION_QUOTA_CYCLE_RETENTION_MS = 30 * 24 * 60 * 60 * 1000;
25
25
  * since the same table failed on every subsequent pass too. Shared with the Node twin via
26
26
  * `createRetentionPass`, so the two facades cannot drift on it.
27
27
  */
28
- export async function sweepRetention({ tokenUsageRepository, rateLimitRepository, commitRepository, llmCallMetricRepository, agentContextSnapshotRepository, agentSearchQueryRepository, agentToolCallRepository, subscriptionQuotaCycleRepository, pipelineScheduleRepository, provisioningLogRepository, passwordResetTokenRepository, machineNodeRepository, authAttemptRepository, notificationRepository, gateOutcomeRepository, platformMetricsRepository, auditEventRepository, spendRollupRepository, clock, policy, logger, }) {
28
+ export async function sweepRetention({ tokenUsageRepository, rateLimitRepository, commitRepository, llmCallMetricRepository, agentContextSnapshotRepository, agentSearchQueryRepository, agentToolCallRepository, subscriptionQuotaCycleRepository, pipelineScheduleRepository, provisioningLogRepository, passwordResetTokenRepository, machineNodeRepository, authAttemptRepository, notificationRepository, gateOutcomeRepository, platformMetricsRepository, auditEventRepository, directoryRepository, spendRollupRepository, clock, policy, logger, }) {
29
29
  const now = clock.now();
30
30
  const pass = createRetentionPass(logger);
31
31
  return {
@@ -75,6 +75,7 @@ export async function sweepRetention({ tokenUsageRepository, rateLimitRepository
75
75
  // The audit log, in its own database. Last because it is the only pass whose window is
76
76
  // measured in years: the others reclaim on most ticks, this one usually reclaims nothing.
77
77
  auditEvents: await pass.prune('audit_events', policy.auditEventsMs, now, (c) => auditEventRepository.deleteOlderThan(c)),
78
+ directoryChanges: await pass.prune('directory_changes', policy.directoryChangesMs, now, (c) => directoryRepository.pruneChanges(c)),
78
79
  failedTables: pass.failed,
79
80
  };
80
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/retention.ts"],"names":[],"mappings":"AAsBA,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AAEnC,+EAA+E;AAC/E,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzD,8FAA8F;AAC9F,+FAA+F;AAC/F,iGAAiG;AACjG,iGAAiG;AACjG,8DAA8D;AAC9D,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEhD;;;;;GAKG;AACH,MAAM,qCAAqC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAwHtE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,EAC1B,uBAAuB,EACvB,gCAAgC,EAChC,0BAA0B,EAC1B,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,EACL,MAAM,EACN,MAAM,GACQ;IACd,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;IACvB,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO;QACL,yFAAyF;QACzF,yFAAyF;QACzF,uFAAuF;QACvF,yFAAyF;QACzF,yFAAyF;QACzF,uFAAuF;QACvF,+CAA+C;QAC/C,iBAAiB,EAAE,MAAM,sBAAsB,CAC7C,IAAI,EACJ,qBAAqB,EACrB,GAAG,EACH,MAAM,CAAC,YAAY,EACnB,MAAM,CACP;QACD,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAC1E,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC,CACxC;QACD,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAChF,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CACvC;QACD,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACtE,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CACpC;QACD,cAAc,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACvF,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC,CAC3C;QACD,+EAA+E;QAC/E,qBAAqB,EAAE,MAAM,IAAI,CAAC,KAAK,CACrC,yBAAyB,EACzB,MAAM,CAAC,gBAAgB,EACvB,GAAG,EACH,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,eAAe,CAAC,CAAC,CAAC,CACzD;QACD,wEAAwE;QACxE,kBAAkB,EAAE,MAAM,IAAI,CAAC,KAAK,CAClC,sBAAsB,EACtB,MAAM,CAAC,gBAAgB,EACvB,GAAG,EACH,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,CACrD;QACD,sFAAsF;QACtF,cAAc,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACvF,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC,CAC3C;QACD,+EAA+E;QAC/E,uBAAuB,EAAE,MAAM,IAAI,CAAC,KAAK,CACvC,2BAA2B,EAC3B,qCAAqC,EACrC,GAAG,EACH,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC,CAAC,CAC3D;QACD,YAAY,EAAE,0BAA0B;YACtC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAC/E,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,CAC9C;YACH,CAAC,CAAC,CAAC;QACL,eAAe,EAAE,yBAAyB;YACxC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACxE,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,CAC7C;YACH,CAAC,CAAC,CAAC;QACL,4DAA4D;QAC5D,mBAAmB,EAAE,4BAA4B;YAC/C,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAC9C,4BAA4B,CAAC,aAAa,CAAC,GAAG,CAAC,CAChD;YACH,CAAC,CAAC,CAAC;QACL,8EAA8E;QAC9E,YAAY,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CACpD,qBAAqB,CAAC,aAAa,CAAC,GAAG,CAAC,CACzC;QACD,mEAAmE;QACnE,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CACpF,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CACzC;QACD,kFAAkF;QAClF,aAAa,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAClF,sBAAsB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAClD;QACD,2DAA2D;QAC3D,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAChF,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CACzC;QACD,wFAAwF;QACxF,wFAAwF;QACxF,sDAAsD;QACtD,eAAe,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAChE,yBAAyB,CAAC,aAAa,CAAC,GAAG,GAAG,0BAA0B,EAAE,GAAG,CAAC,CAC/E;QACD,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAC1E,yBAAyB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CACpD;QACD,uFAAuF;QACvF,0FAA0F;QAC1F,WAAW,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7E,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC,CACxC;QACD,YAAY,EAAE,IAAI,CAAC,MAAM;KAC1B,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/retention.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- -- The directory change feed (docs/initiatives/directory-sync.md): an append-only, per-account
1
+ -- The directory change feed (backend/docs/adr/0067-directory-sync.md): an append-only, per-account
2
2
  -- ordered record of which directory entity changed. Rows name an entity and never carry its state.
3
3
  -- `seq` is assigned as MAX(seq) + ROW_NUMBER() inside the writer's batch, which SQLite serializes,
4
4
  -- so commit order equals seq order. No foreign keys: a row must outlive the entity it names.
@@ -0,0 +1,23 @@
1
+ -- Public-API keys become account-level credentials that may be limited to a subset of the account's
2
+ -- workspaces (backend/docs/adr/0067-directory-sync.md). A key with `all_workspaces = 1` reaches
3
+ -- every workspace in its account, including later ones; otherwise it reaches exactly the workspaces
4
+ -- granted in `public_api_key_workspaces`. Every existing key keeps the one workspace it had. The
5
+ -- grant table carries `workspace_id`, so deleting a board removes its grants through the shared
6
+ -- workspace cascade, where it used to delete the key row itself.
7
+ CREATE TABLE public_api_key_workspaces (
8
+ key_id TEXT NOT NULL,
9
+ workspace_id TEXT NOT NULL,
10
+ PRIMARY KEY (key_id, workspace_id)
11
+ );
12
+
13
+ CREATE INDEX idx_public_api_key_workspaces_workspace ON public_api_key_workspaces (workspace_id);
14
+
15
+ INSERT INTO public_api_key_workspaces (key_id, workspace_id)
16
+ SELECT id, workspace_id FROM public_api_keys;
17
+
18
+ ALTER TABLE public_api_keys ADD COLUMN all_workspaces INTEGER NOT NULL DEFAULT 0;
19
+
20
+ DROP INDEX idx_public_api_keys_workspace;
21
+ ALTER TABLE public_api_keys DROP COLUMN workspace_id;
22
+
23
+ CREATE INDEX idx_public_api_keys_account ON public_api_keys (account_id);
@@ -0,0 +1,18 @@
1
+ -- Account-level endpoints that receive the directory change feed as signed pushes
2
+ -- (backend/docs/adr/0067-directory-sync.md). `delivered_seq` is the feed position pushed
3
+ -- through. A sweeper takes the lease (`lease_token`, held until `lease_until`) before a push and
4
+ -- moves `delivered_seq` only after the push succeeds, so two sweepers never push overlapping
5
+ -- pages, a failed push is retried, and a page whose sweeper died is offered again once the lease
6
+ -- expires.
7
+ CREATE TABLE directory_webhooks (
8
+ account_id TEXT NOT NULL,
9
+ id TEXT NOT NULL,
10
+ url TEXT NOT NULL,
11
+ enabled INTEGER NOT NULL DEFAULT 1,
12
+ secret_sealed TEXT,
13
+ delivered_seq INTEGER NOT NULL DEFAULT 0,
14
+ lease_token TEXT,
15
+ lease_until INTEGER,
16
+ updated_at INTEGER NOT NULL,
17
+ PRIMARY KEY (account_id, id)
18
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/worker",
3
- "version": "0.224.2",
3
+ "version": "0.225.2",
4
4
  "description": "Reusable Cloudflare Worker library (Hono + D1) exposing the Agent Architecture Board core: the `createApp()` Hono factory, the default fetch/scheduled/queue handler, and the Durable Object + Workflow classes. Deployments (see deploy/backend) supply the wrangler.toml + config and re-export these.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -36,23 +36,23 @@
36
36
  "@ai-sdk/anthropic": "^4.0.75",
37
37
  "@ai-sdk/openai": "^4.0.87",
38
38
  "@ai-sdk/openai-compatible": "^3.0.65",
39
- "@cat-factory/agents": "0.171.6",
40
- "@cat-factory/binary-generators": "0.3.67",
41
- "@cat-factory/caching": "0.20.101",
42
- "@cat-factory/consensus": "0.19.15",
43
- "@cat-factory/contracts": "0.365.0",
44
- "@cat-factory/eks": "0.1.406",
45
- "@cat-factory/gates": "0.12.3",
46
- "@cat-factory/gitlab": "0.24.3",
47
- "@cat-factory/integrations": "0.175.3",
48
- "@cat-factory/kernel": "0.358.1",
49
- "@cat-factory/observability-langfuse": "0.11.67",
50
- "@cat-factory/observability-otel": "0.23.60",
51
- "@cat-factory/orchestration": "0.320.4",
52
- "@cat-factory/prompt-fragments": "1.1.63",
53
- "@cat-factory/provider-cloudflare": "0.7.561",
54
- "@cat-factory/server": "0.333.0",
55
- "@cat-factory/spend": "0.23.12",
39
+ "@cat-factory/agents": "0.172.0",
40
+ "@cat-factory/binary-generators": "0.3.69",
41
+ "@cat-factory/caching": "0.20.103",
42
+ "@cat-factory/consensus": "0.19.17",
43
+ "@cat-factory/contracts": "0.367.0",
44
+ "@cat-factory/eks": "0.1.408",
45
+ "@cat-factory/gates": "0.12.5",
46
+ "@cat-factory/gitlab": "0.24.5",
47
+ "@cat-factory/integrations": "0.176.1",
48
+ "@cat-factory/kernel": "0.359.1",
49
+ "@cat-factory/observability-langfuse": "0.11.69",
50
+ "@cat-factory/observability-otel": "0.23.62",
51
+ "@cat-factory/orchestration": "0.322.0",
52
+ "@cat-factory/prompt-fragments": "1.1.65",
53
+ "@cat-factory/provider-cloudflare": "0.7.563",
54
+ "@cat-factory/server": "0.335.0",
55
+ "@cat-factory/spend": "0.23.14",
56
56
  "@cloudflare/containers": "^0.3.7",
57
57
  "@hono/valibot-validator": "^0.6.1",
58
58
  "ai": "^7.0.131",
@@ -62,7 +62,7 @@
62
62
  "workers-ai-provider": "^4.0.0"
63
63
  },
64
64
  "devDependencies": {
65
- "@cat-factory/conformance": "0.64.4",
65
+ "@cat-factory/conformance": "0.64.7",
66
66
  "@cloudflare/vitest-plugin": "^1.3.7",
67
67
  "@cloudflare/workers-types": "5.20261006.1",
68
68
  "typescript": "7.0.2",
@@ -1,12 +0,0 @@
1
- import type { DirectoryChangeRecord, DirectoryChangeRepository } from '@cat-factory/kernel';
2
- import type { D1Database } from '@cloudflare/workers-types';
3
- /** D1-backed read side of the directory change feed (migration 0107). */
4
- export declare class D1DirectoryChangeRepository implements DirectoryChangeRepository {
5
- private readonly db;
6
- constructor({ db }: {
7
- db: D1Database;
8
- });
9
- listAfter(accountId: string, afterSeq: number, limit: number): Promise<DirectoryChangeRecord[]>;
10
- headSeq(accountId: string): Promise<number>;
11
- }
12
- //# sourceMappingURL=D1DirectoryChangeRepository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"D1DirectoryChangeRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1DirectoryChangeRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAE3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA2B3D,yEAAyE;AACzE,qBAAa,2BAA4B,YAAW,yBAAyB;IAC3E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,EAAE,CAAC,CASlC;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhD;CACF"}
@@ -1,39 +0,0 @@
1
- import { isDirectoryEntityType } from '@cat-factory/contracts';
2
- function rowToChange(row) {
3
- // The vocabulary is append-only, so an unknown value is a row this build cannot interpret, not
4
- // one to skip: a reader that dropped it would advance its cursor past a change it never served.
5
- if (!isDirectoryEntityType(row.entity_type)) {
6
- throw new Error(`Unknown directory entity type '${row.entity_type}' at seq ${row.seq}`);
7
- }
8
- return {
9
- accountId: row.account_id,
10
- seq: row.seq,
11
- entityType: row.entity_type,
12
- workspaceId: row.workspace_id,
13
- entityId: row.entity_id,
14
- at: row.at,
15
- };
16
- }
17
- /** D1-backed read side of the directory change feed (migration 0107). */
18
- export class D1DirectoryChangeRepository {
19
- db;
20
- constructor({ db }) {
21
- this.db = db;
22
- }
23
- async listAfter(accountId, afterSeq, limit) {
24
- const { results } = await this.db
25
- .prepare(`SELECT * FROM directory_changes WHERE account_id = ? AND seq > ?
26
- ORDER BY seq ASC LIMIT ?`)
27
- .bind(accountId, afterSeq, limit)
28
- .all();
29
- return results.map(rowToChange);
30
- }
31
- async headSeq(accountId) {
32
- const row = await this.db
33
- .prepare('SELECT MAX(seq) AS head FROM directory_changes WHERE account_id = ?')
34
- .bind(accountId)
35
- .first();
36
- return row?.head ?? 0;
37
- }
38
- }
39
- //# sourceMappingURL=D1DirectoryChangeRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"D1DirectoryChangeRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1DirectoryChangeRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAY9D,SAAS,WAAW,CAAC,GAAuB;IAC1C,+FAA+F;IAC/F,gGAAgG;IAChG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,WAAW,YAAY,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;IACzF,CAAC;IACD,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,EAAE,EAAE,GAAG,CAAC,EAAE;KACX,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,OAAO,2BAA2B;IACrB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CACb,SAAiB,EACjB,QAAgB,EAChB,KAAa;QAEb,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;mCAC2B,CAC5B;aACA,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;aAChC,GAAG,EAAsB,CAAA;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,qEAAqE,CAAC;aAC9E,IAAI,CAAC,SAAS,CAAC;aACf,KAAK,EAA2B,CAAA;QACnC,OAAO,GAAG,EAAE,IAAI,IAAI,CAAC,CAAA;IACvB,CAAC;CACF"}