@cat-factory/worker 0.88.1 → 0.90.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.
@@ -1 +1 @@
1
- {"version":3,"file":"D1PlatformMetricsRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PlatformMetricsRepository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAW3D,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,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAe7F;IAEK,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAkBlC;IAEK,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAejC;IAEK,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgB1E;IAEK,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAyBhC;CACF"}
1
+ {"version":3,"file":"D1PlatformMetricsRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PlatformMetricsRepository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAW3D,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,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAe7F;IAEK,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAkBlC;IAEK,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAejC;IAEK,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgB1E;IAEK,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CA6ChC;CACF"}
@@ -75,22 +75,39 @@ export class D1PlatformMetricsRepository {
75
75
  return counts;
76
76
  }
77
77
  async durationStatsSince(accountId, sinceEpochMs) {
78
+ // avg/min/max AND the p50/p90/p99 percentiles over ONE scan of the same terminal-run set.
79
+ // SQLite has no percentile aggregate, so the inner query tags each duration with its
80
+ // cumulative fraction (`row_number() / count()`, ORDER BY duration) and the outer query
81
+ // takes the smallest duration whose fraction crosses each threshold — the discrete
82
+ // nearest-rank percentile, matching Postgres `percentile_disc` (conformance pins parity).
78
83
  const row = await this.db
79
84
  .prepare(`SELECT COUNT(*) AS count,
80
- AVG(updated_at - created_at) AS avg_ms,
81
- MIN(updated_at - created_at) AS min_ms,
82
- MAX(updated_at - created_at) AS max_ms
83
- FROM agent_runs
84
- WHERE workspace_id IN (${ACCOUNT_WORKSPACES}) AND created_at >= ?
85
- AND status IN ('done', 'failed')`)
85
+ AVG(d) AS avg_ms,
86
+ MIN(d) AS min_ms,
87
+ MAX(d) AS max_ms,
88
+ MIN(CASE WHEN cume >= 0.5 THEN d END) AS p50_ms,
89
+ MIN(CASE WHEN cume >= 0.9 THEN d END) AS p90_ms,
90
+ MIN(CASE WHEN cume >= 0.99 THEN d END) AS p99_ms
91
+ FROM (
92
+ SELECT (updated_at - created_at) AS d,
93
+ CAST(ROW_NUMBER() OVER (ORDER BY (updated_at - created_at)) AS REAL)
94
+ / COUNT(*) OVER () AS cume
95
+ FROM agent_runs
96
+ WHERE workspace_id IN (${ACCOUNT_WORKSPACES}) AND created_at >= ?
97
+ AND status IN ('done', 'failed')
98
+ )`)
86
99
  .bind(accountId, sinceEpochMs)
87
100
  .first();
88
101
  const count = Number(row?.count ?? 0);
102
+ const at = (v) => (count > 0 && v != null ? Number(v) : null);
89
103
  return {
90
104
  count,
91
105
  avgMs: count > 0 && row?.avg_ms != null ? Math.round(Number(row.avg_ms)) : null,
92
- minMs: count > 0 && row?.min_ms != null ? Number(row.min_ms) : null,
93
- maxMs: count > 0 && row?.max_ms != null ? Number(row.max_ms) : null,
106
+ minMs: at(row?.min_ms),
107
+ maxMs: at(row?.max_ms),
108
+ p50Ms: at(row?.p50_ms),
109
+ p90Ms: at(row?.p90_ms),
110
+ p99Ms: at(row?.p99_ms),
94
111
  };
95
112
  }
96
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"D1PlatformMetricsRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PlatformMetricsRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"D1PlatformMetricsRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PlatformMetricsRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAS3D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhD,sFAAsF;AACtF,sFAAsF;AACtF,wEAAwE;AACxE,wFAAwF;AACxF,iBAAiB;AAEjB,0FAA0F;AAC1F,MAAM,kBAAkB,GAAG,gDAAgD,CAAA;AAE3E,MAAM,OAAO,2BAA2B;IACrB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB,EAAE,YAAoB;QAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;kCAE0B,kBAAkB;+BACrB,CACxB;aACA,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;aAC7B,GAAG,EAAmD,CAAA;QACzD,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC7F,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;SACvB,CAAC,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,SAAiB,EACjB,YAAoB,EACpB,QAAgB;QAEhB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO;QACN,qFAAqF;QACrF,sFAAsF;QACtF;;kCAE0B,kBAAkB;;+BAErB,CACxB;aACA,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC;aACjD,GAAG,EAA2D,CAAA;QACjE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;YACnC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;SACvB,CAAC,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,YAAoB;QAEpB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;kCAE0B,kBAAkB;;6BAEvB,CACtB;aACA,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;aAC7B,GAAG,EAA2C,CAAA;QACjD,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,SAAS;YACxC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;SACvB,CAAC,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;kCAE0B,kBAAkB;;yBAE3B,CAClB;aACA,IAAI,CAAC,SAAS,CAAC;aACf,GAAG,EAAqC,CAAA;QAC3C,MAAM,MAAM,GAAuB,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;QACpF,KAAK,MAAM,CAAC,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM,CAAC,CAAC,CAAC,MAAkC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACxF,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,YAAoB;QAEpB,0FAA0F;QAC1F,qFAAqF;QACrF,wFAAwF;QACxF,mFAAmF;QACnF,0FAA0F;QAC1F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CACN;;;;;;;;;;;;oCAY4B,kBAAkB;;WAE3C,CACJ;aACA,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;aAC7B,KAAK,EAQF,CAAA;QACN,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CAAA;QACrC,MAAM,EAAE,GAAG,CAAC,CAA4B,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACxF,OAAO;YACL,KAAK;YACL,KAAK,EAAE,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YAC/E,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC;SACvB,CAAA;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"D1PublicApiKeyRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PublicApiKeyRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA0B3D,uEAAuE;AACvE,qBAAa,wBAAyB,YAAW,sBAAsB;IACrE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,GAAG,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnD;IAEK,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAM5D;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAUxE;IAEK,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpD;IAEK,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE;CACF"}
1
+ {"version":3,"file":"D1PublicApiKeyRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PublicApiKeyRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAErF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA4B3D,uEAAuE;AACvE,qBAAa,wBAAyB,YAAW,sBAAsB;IACrE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,GAAG,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBnD;IAEK,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAM5D;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAUxE;IAEK,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKpD;IAEK,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE;CACF"}
@@ -4,6 +4,7 @@ function rowToRecord(row) {
4
4
  accountId: row.account_id,
5
5
  workspaceId: row.workspace_id,
6
6
  label: row.label,
7
+ scope: row.scope,
7
8
  secretHash: row.secret_hash,
8
9
  createdAt: row.created_at,
9
10
  lastUsedAt: row.last_used_at,
@@ -19,9 +20,9 @@ export class D1PublicApiKeyRepository {
19
20
  async add(record) {
20
21
  await this.db
21
22
  .prepare(`INSERT INTO public_api_keys
22
- (id, account_id, workspace_id, label, secret_hash, created_at, last_used_at, revoked_at)
23
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
24
- .bind(record.id, record.accountId, record.workspaceId, record.label, record.secretHash, record.createdAt, record.lastUsedAt, record.revokedAt)
23
+ (id, account_id, workspace_id, label, scope, secret_hash, created_at, last_used_at, revoked_at)
24
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
25
+ .bind(record.id, record.accountId, record.workspaceId, record.label, record.scope, record.secretHash, record.createdAt, record.lastUsedAt, record.revokedAt)
25
26
  .run();
26
27
  }
27
28
  async getById(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"D1PublicApiKeyRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PublicApiKeyRepository.ts"],"names":[],"mappings":"AAcA,SAAS,WAAW,CAAC,GAAoB;IACvC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,YAAY;QAC5B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,OAAO,wBAAwB;IAClB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAA0B;QAClC,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;yCAEiC,CAClC;aACA,IAAI,CACH,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CACjB;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,4CAA4C,CAAC;aACrD,IAAI,CAAC,EAAE,CAAC;aACR,KAAK,EAAmB,CAAA;QAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;mCAE2B,CAC5B;aACA,IAAI,CAAC,WAAW,CAAC;aACjB,GAAG,EAAmB,CAAA;QACzB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,EAAU;QACnC,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CAAC,0DAA0D,CAAC;aACnE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;aACZ,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,EAAU,EAAE,EAAU;QACtD,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN,oGAAoG,CACrG;aACA,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC;aACzB,GAAG,EAAE,CAAA;IACV,CAAC;CACF"}
1
+ {"version":3,"file":"D1PublicApiKeyRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1PublicApiKeyRepository.ts"],"names":[],"mappings":"AAgBA,SAAS,WAAW,CAAC,GAAoB;IACvC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,KAAuB;QAClC,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,YAAY;QAC5B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,OAAO,wBAAwB;IAClB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAA0B;QAClC,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;4CAEoC,CACrC;aACA,IAAI,CACH,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CACjB;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,4CAA4C,CAAC;aACrD,IAAI,CAAC,EAAE,CAAC;aACR,KAAK,EAAmB,CAAA;QAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;mCAE2B,CAC5B;aACA,IAAI,CAAC,WAAW,CAAC;aACjB,GAAG,EAAmB,CAAA;QACzB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,EAAU;QACnC,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CAAC,0DAA0D,CAAC;aACnE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;aACZ,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,EAAU,EAAE,EAAU;QACtD,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN,oGAAoG,CACrG;aACA,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC;aACzB,GAAG,EAAE,CAAA;IACV,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ -- Per-key permission scopes for the inbound public-API keys (initiative: public API expansion,
2
+ -- item #13). A key now carries a `scope` on the `/api/v1` surface — an inclusive ladder
3
+ -- (read ⊂ write ⊂ admin) the controller gates each endpoint on: reads need `read`, non-destructive
4
+ -- mutations need `write`, and destructive / merge-adjacent operations (e.g. DELETE a task) need
5
+ -- `admin`. Existing keys backfill to `write` — they keep every capability the surface shipped
6
+ -- before scopes existed (all of it read/write-level) but do NOT auto-gain the new destructive
7
+ -- power, which must be minted explicitly. Mirrored on Node by the `scope` column on the Drizzle
8
+ -- `public_api_keys` table.
9
+ ALTER TABLE public_api_keys ADD COLUMN scope TEXT NOT NULL DEFAULT 'write';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/worker",
3
- "version": "0.88.1",
3
+ "version": "0.90.0",
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",
@@ -42,22 +42,22 @@
42
42
  "pino": "^10.3.1",
43
43
  "valibot": "^1.4.2",
44
44
  "workers-ai-provider": "^3.3.1",
45
- "@cat-factory/agents": "0.62.1",
46
- "@cat-factory/consensus": "0.10.62",
47
- "@cat-factory/contracts": "0.141.0",
48
- "@cat-factory/eks": "0.1.89",
49
- "@cat-factory/caching": "0.9.4",
50
- "@cat-factory/gates": "0.5.46",
51
- "@cat-factory/integrations": "0.84.11",
52
- "@cat-factory/kernel": "0.134.1",
53
- "@cat-factory/gitlab": "0.10.8",
54
- "@cat-factory/observability-otel": "0.1.10",
55
- "@cat-factory/observability-langfuse": "0.7.216",
56
- "@cat-factory/orchestration": "0.117.1",
57
- "@cat-factory/prompt-fragments": "0.13.30",
58
- "@cat-factory/provider-cloudflare": "0.7.233",
59
- "@cat-factory/spend": "0.12.42",
60
- "@cat-factory/server": "0.129.1"
45
+ "@cat-factory/agents": "0.62.3",
46
+ "@cat-factory/consensus": "0.10.64",
47
+ "@cat-factory/contracts": "0.143.0",
48
+ "@cat-factory/eks": "0.1.91",
49
+ "@cat-factory/gates": "0.5.48",
50
+ "@cat-factory/caching": "0.10.0",
51
+ "@cat-factory/gitlab": "0.10.10",
52
+ "@cat-factory/kernel": "0.136.0",
53
+ "@cat-factory/observability-langfuse": "0.7.218",
54
+ "@cat-factory/observability-otel": "0.1.12",
55
+ "@cat-factory/prompt-fragments": "0.13.32",
56
+ "@cat-factory/orchestration": "0.119.0",
57
+ "@cat-factory/integrations": "0.85.0",
58
+ "@cat-factory/server": "0.130.0",
59
+ "@cat-factory/provider-cloudflare": "0.7.235",
60
+ "@cat-factory/spend": "0.12.44"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@cloudflare/vitest-pool-workers": "^0.18.0",
@@ -65,7 +65,7 @@
65
65
  "typescript": "7.0.2",
66
66
  "vitest": "^4.1.10",
67
67
  "wrangler": "^4.110.0",
68
- "@cat-factory/conformance": "0.11.5"
68
+ "@cat-factory/conformance": "0.11.7"
69
69
  },
70
70
  "scripts": {
71
71
  "build": "tsc -b tsconfig.build.json",