@cat-factory/worker 0.197.1 → 0.198.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.
@@ -1,5 +1,5 @@
1
1
  import type { KaizenGradingRepository } from '@cat-factory/kernel';
2
- import type { KaizenGrading } from '@cat-factory/contracts';
2
+ import type { KaizenGrading, KaizenGradingStatus } from '@cat-factory/contracts';
3
3
  import type { D1Database } from '@cloudflare/workers-types';
4
4
  /**
5
5
  * Kaizen gradings, one row per `(run, step)` in `kaizen_gradings` (migration 0015).
@@ -16,6 +16,22 @@ export declare class D1KaizenGradingRepository implements KaizenGradingRepositor
16
16
  getByStep(workspaceId: string, executionId: string, stepIndex: number): Promise<KaizenGrading | null>;
17
17
  listByExecution(workspaceId: string, executionId: string): Promise<KaizenGrading[]>;
18
18
  listByWorkspace(workspaceId: string, limit?: number): Promise<KaizenGrading[]>;
19
+ listPage(workspaceId: string, opts: {
20
+ limit: number;
21
+ cursor?: {
22
+ createdAt: number;
23
+ id: string;
24
+ };
25
+ acknowledged?: boolean;
26
+ settled?: boolean;
27
+ status?: KaizenGradingStatus;
28
+ agentKind?: string;
29
+ since?: number;
30
+ }): Promise<KaizenGrading[]>;
31
+ setAcknowledgement(workspaceId: string, id: string, ack: {
32
+ by: string | null;
33
+ note: string | null;
34
+ } | null, now: number): Promise<KaizenGrading | null>;
19
35
  listPending(staleBefore: number, limit: number): Promise<{
20
36
  workspaceId: string;
21
37
  grading: KaizenGrading;
@@ -1 +1 @@
1
- {"version":3,"file":"D1KaizenGradingRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenGradingRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,wBAAwB,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAqD3D;;;;GAIG;AACH,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,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCvE;IAEK,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAMxE;IAEK,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAS/B;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAUxF;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAUhF;IAEK,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,EAAE,CAAC,CAa5D;IAEK,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAY/F;CACF"}
1
+ {"version":3,"file":"D1KaizenGradingRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenGradingRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA2D3D;;;;GAIG;AACH,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,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CvE;IAEK,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAMxE;IAEK,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAS/B;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAUxF;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAUhF;IAEK,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAA;QAC1C,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,MAAM,CAAC,EAAE,mBAAmB,CAAA;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,GACA,OAAO,CAAC,aAAa,EAAE,CAAC,CAyC1B;IAEK,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,EACtD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+B/B;IAEK,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,EAAE,CAAC,CAa5D;IAEK,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAY/F;CACF"}
@@ -1,3 +1,4 @@
1
+ import { KAIZEN_SETTLED_STATUSES } from '@cat-factory/contracts';
1
2
  function parseStringArray(raw) {
2
3
  if (!raw)
3
4
  return [];
@@ -25,6 +26,9 @@ function rowToGrading(row) {
25
26
  recommendations: parseStringArray(row.recommendations),
26
27
  graderModel: row.grader_model,
27
28
  error: row.error,
29
+ acknowledgedAt: row.acknowledged_at,
30
+ acknowledgedBy: row.acknowledged_by,
31
+ acknowledgementNote: row.acknowledgement_note,
28
32
  createdAt: row.created_at,
29
33
  updatedAt: row.updated_at,
30
34
  };
@@ -40,12 +44,15 @@ export class D1KaizenGradingRepository {
40
44
  this.db = db;
41
45
  }
42
46
  async upsert(workspaceId, grading) {
47
+ // The acknowledgement columns are set on INSERT and deliberately absent from the conflict SET
48
+ // list: the sweep re-writes this row on every grader transition, and folding them in would
49
+ // erase a triage the moment a grading was re-run. `setAcknowledgement` is their only writer.
43
50
  await this.db
44
51
  .prepare(`INSERT INTO kaizen_gradings
45
52
  (workspace_id, id, execution_id, block_id, step_index, agent_kind, model,
46
53
  prompt_version, combo_key, status, grade, summary, recommendations, grader_model,
47
- error, created_at, updated_at)
48
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
54
+ error, acknowledged_at, acknowledged_by, acknowledgement_note, created_at, updated_at)
55
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
49
56
  ON CONFLICT (workspace_id, id) DO UPDATE SET
50
57
  status = excluded.status,
51
58
  grade = excluded.grade,
@@ -54,7 +61,7 @@ export class D1KaizenGradingRepository {
54
61
  grader_model = excluded.grader_model,
55
62
  error = excluded.error,
56
63
  updated_at = excluded.updated_at`)
57
- .bind(workspaceId, grading.id, grading.executionId, grading.blockId, grading.stepIndex, grading.agentKind, grading.model, grading.promptVersion, grading.comboKey, grading.status, grading.grade, grading.summary, JSON.stringify(grading.recommendations), grading.graderModel, grading.error, grading.createdAt, grading.updatedAt)
64
+ .bind(workspaceId, grading.id, grading.executionId, grading.blockId, grading.stepIndex, grading.agentKind, grading.model, grading.promptVersion, grading.comboKey, grading.status, grading.grade, grading.summary, JSON.stringify(grading.recommendations), grading.graderModel, grading.error, grading.acknowledgedAt, grading.acknowledgedBy, grading.acknowledgementNote, grading.createdAt, grading.updatedAt)
58
65
  .run();
59
66
  }
60
67
  async get(workspaceId, id) {
@@ -90,6 +97,75 @@ export class D1KaizenGradingRepository {
90
97
  .all();
91
98
  return (results ?? []).map(rowToGrading);
92
99
  }
100
+ async listPage(workspaceId, opts) {
101
+ const where = ['workspace_id = ?'];
102
+ const binds = [workspaceId];
103
+ if (opts.cursor) {
104
+ // The keyset is the composite the ORDER BY uses, so gradings sharing a millisecond (every
105
+ // step of one run is scheduled at once) page without losing the ties.
106
+ where.push('(created_at < ? OR (created_at = ? AND id < ?))');
107
+ binds.push(opts.cursor.createdAt, opts.cursor.createdAt, opts.cursor.id);
108
+ }
109
+ if (opts.acknowledged !== undefined) {
110
+ where.push(opts.acknowledged ? 'acknowledged_at IS NOT NULL' : 'acknowledged_at IS NULL');
111
+ }
112
+ if (opts.settled !== undefined) {
113
+ // The same set the acknowledge write is gated on, from the same constant, so the backlog a
114
+ // caller drains and the rows that write accepts cannot drift apart.
115
+ const settled = KAIZEN_SETTLED_STATUSES.map(() => '?').join(', ');
116
+ where.push(`status ${opts.settled ? 'IN' : 'NOT IN'} (${settled})`);
117
+ binds.push(...KAIZEN_SETTLED_STATUSES);
118
+ }
119
+ if (opts.status) {
120
+ where.push('status = ?');
121
+ binds.push(opts.status);
122
+ }
123
+ if (opts.agentKind) {
124
+ where.push('agent_kind = ?');
125
+ binds.push(opts.agentKind);
126
+ }
127
+ if (opts.since !== undefined) {
128
+ where.push('created_at >= ?');
129
+ binds.push(opts.since);
130
+ }
131
+ binds.push(opts.limit);
132
+ const { results } = await this.db
133
+ .prepare(`SELECT * FROM kaizen_gradings
134
+ WHERE ${where.join(' AND ')}
135
+ ORDER BY created_at DESC, id DESC LIMIT ?`)
136
+ .bind(...binds)
137
+ .all();
138
+ return (results ?? []).map(rowToGrading);
139
+ }
140
+ async setAcknowledgement(workspaceId, id, ack, now) {
141
+ if (ack) {
142
+ // Guarded in the statement rather than by a pre-check: `acknowledged_at IS NULL` makes a
143
+ // repeat acknowledgement a no-op (so the stamp keeps naming the FIRST triage), and the status
144
+ // list refuses a row the grader is still working on, with no window between check and write.
145
+ // `updated_at` moves with it, so a consumer watermarking on it sees triage state change.
146
+ const settled = KAIZEN_SETTLED_STATUSES.map(() => '?').join(', ');
147
+ await this.db
148
+ .prepare(`UPDATE kaizen_gradings
149
+ SET acknowledged_at = ?, acknowledged_by = ?, acknowledgement_note = ?, updated_at = ?
150
+ WHERE workspace_id = ? AND id = ? AND acknowledged_at IS NULL
151
+ AND status IN (${settled})`)
152
+ .bind(now, ack.by, ack.note, now, workspaceId, id, ...KAIZEN_SETTLED_STATUSES)
153
+ .run();
154
+ }
155
+ else {
156
+ // Guarded on there being an acknowledgement to clear, so clearing one that was never
157
+ // recorded writes nothing at all rather than touching `updated_at` on a row (a `running`
158
+ // grading, say) whose staleness stamp the sweep reads to decide what to re-drive.
159
+ await this.db
160
+ .prepare(`UPDATE kaizen_gradings
161
+ SET acknowledged_at = NULL, acknowledged_by = NULL, acknowledgement_note = NULL,
162
+ updated_at = ?
163
+ WHERE workspace_id = ? AND id = ? AND acknowledged_at IS NOT NULL`)
164
+ .bind(now, workspaceId, id)
165
+ .run();
166
+ }
167
+ return this.get(workspaceId, id);
168
+ }
93
169
  async listPending(staleBefore, limit) {
94
170
  const { results } = await this.db
95
171
  .prepare(`SELECT * FROM kaizen_gradings
@@ -1 +1 @@
1
- {"version":3,"file":"D1KaizenGradingRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenGradingRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"D1KaizenGradingRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenGradingRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AA2BhE,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAqB;IACzC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,MAAM,EAAE,GAAG,CAAC,MAA6B;QACzC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,eAAe,EAAE,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC;QACtD,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,mBAAmB,EAAE,GAAG,CAAC,oBAAoB;QAC7C,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,yBAAyB;IACnB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,OAAsB;QACtD,8FAA8F;QAC9F,2FAA2F;QAC3F,6FAA6F;QAC7F,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;;;;;;;;;;;4CAYoC,CACrC;aACA,IAAI,CACH,WAAW,EACX,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,OAAO,EACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,EACvC,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,CAClB;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,EAAU;QACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,iEAAiE,CAAC;aAC1E,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;aACrB,KAAK,EAAoB,CAAA;QAC5B,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,WAAmB,EACnB,WAAmB,EACnB,SAAiB;QAEjB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CACN;0EACkE,CACnE;aACA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;aACzC,KAAK,EAAoB,CAAA;QAC5B,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,WAAmB;QAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;mCAE2B,CAC5B;aACA,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;aAC9B,GAAG,EAAoB,CAAA;QAC1B,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,KAAK,GAAG,GAAG;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;4CAEoC,CACrC;aACA,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;aACxB,GAAG,EAAoB,CAAA;QAC1B,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,WAAmB,EACnB,IAQC;QAED,MAAM,KAAK,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAClC,MAAM,KAAK,GAAwB,CAAC,WAAW,CAAC,CAAA;QAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,0FAA0F;YAC1F,sEAAsE;YACtE,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;YAC7D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAA;QAC3F,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,2FAA2F;YAC3F,oEAAoE;YACpE,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAA;YACnE,KAAK,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,CAAA;QACxC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;mBACW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;qDACe,CAC9C;aACA,IAAI,CAAC,GAAG,KAAK,CAAC;aACd,GAAG,EAAoB,CAAA;QAC1B,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,WAAmB,EACnB,EAAU,EACV,GAAsD,EACtD,GAAW;QAEX,IAAI,GAAG,EAAE,CAAC;YACR,yFAAyF;YACzF,8FAA8F;YAC9F,6FAA6F;YAC7F,yFAAyF;YACzF,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjE,MAAM,IAAI,CAAC,EAAE;iBACV,OAAO,CACN;;;gCAGsB,OAAO,GAAG,CACjC;iBACA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,uBAAuB,CAAC;iBAC7E,GAAG,EAAE,CAAA;QACV,CAAC;aAAM,CAAC;YACN,qFAAqF;YACrF,yFAAyF;YACzF,kFAAkF;YAClF,MAAM,IAAI,CAAC,EAAE;iBACV,OAAO,CACN;;;+EAGqE,CACtE;iBACA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;iBAC1B,GAAG,EAAE,CAAA;QACV,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,WAAmB,EACnB,KAAa;QAEb,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;2CAEmC,CACpC;aACA,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;aACxB,GAAG,EAAoB,CAAA;QAC1B,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACnC,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC;SAC3B,CAAC,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,EAAU,EAAE,WAAmB,EAAE,GAAW;QAC3E,uFAAuF;QACvF,mFAAmF;QACnF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC3B,OAAO,CACN;;mFAE2E,CAC5E;aACA,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,CAAC;aACvC,GAAG,EAAE,CAAA;QACR,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;CACF"}
@@ -13,6 +13,7 @@ export declare class D1KaizenVerifiedComboRepository implements KaizenVerifiedCo
13
13
  db: D1Database;
14
14
  });
15
15
  getByKey(workspaceId: string, comboKey: string): Promise<KaizenVerifiedCombo | null>;
16
+ listByKeys(workspaceId: string, comboKeys: string[]): Promise<KaizenVerifiedCombo[]>;
16
17
  upsert(workspaceId: string, combo: KaizenVerifiedCombo): Promise<void>;
17
18
  listByWorkspace(workspaceId: string): Promise<KaizenVerifiedCombo[]>;
18
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"D1KaizenVerifiedComboRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenVerifiedComboRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA2B3D;;;;;GAKG;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,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAMzF;IAEK,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB3E;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAUzE;CACF"}
1
+ {"version":3,"file":"D1KaizenVerifiedComboRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenVerifiedComboRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA4B3D;;;;;GAKG;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,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAMzF;IAEK,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAezF;IAEK,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB3E;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAUzE;CACF"}
@@ -1,3 +1,4 @@
1
+ import { chunkForIn } from './chunk';
1
2
  function rowToCombo(row) {
2
3
  return {
3
4
  comboKey: row.combo_key,
@@ -28,6 +29,21 @@ export class D1KaizenVerifiedComboRepository {
28
29
  .first();
29
30
  return row ? rowToCombo(row) : null;
30
31
  }
32
+ async listByKeys(workspaceId, comboKeys) {
33
+ const wanted = [...new Set(comboKeys)];
34
+ if (wanted.length === 0)
35
+ return [];
36
+ const out = [];
37
+ for (const chunk of chunkForIn(wanted)) {
38
+ const { results } = await this.db
39
+ .prepare(`SELECT * FROM kaizen_verified_combos
40
+ WHERE workspace_id = ? AND combo_key IN (${chunk.map(() => '?').join(', ')})`)
41
+ .bind(workspaceId, ...chunk)
42
+ .all();
43
+ out.push(...(results ?? []).map(rowToCombo));
44
+ }
45
+ return out;
46
+ }
31
47
  async upsert(workspaceId, combo) {
32
48
  await this.db
33
49
  .prepare(`INSERT INTO kaizen_verified_combos
@@ -1 +1 @@
1
- {"version":3,"file":"D1KaizenVerifiedComboRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenVerifiedComboRepository.ts"],"names":[],"mappings":"AAgBA,SAAS,UAAU,CAAC,GAA2B;IAC7C,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,qBAAqB,EAAE,GAAG,CAAC,uBAAuB;QAClD,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;QAC5B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,+BAA+B;IACzB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,QAAgB;QAClD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,+EAA+E,CAAC;aACxF,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;aAC3B,KAAK,EAA0B,CAAA;QAClC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,KAA0B;QAC1D,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;;;;;;;4CAQoC,CACrC;aACA,IAAI,CACH,WAAW,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,CAChB;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;oCAE4B,CAC7B;aACA,IAAI,CAAC,WAAW,CAAC;aACjB,GAAG,EAA0B,CAAA;QAChC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"D1KaizenVerifiedComboRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1KaizenVerifiedComboRepository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAcpC,SAAS,UAAU,CAAC,GAA2B;IAC7C,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,qBAAqB,EAAE,GAAG,CAAC,uBAAuB;QAClD,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;QAC5B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,+BAA+B;IACzB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,QAAgB;QAClD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,+EAA+E,CAAC;aACxF,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;aAC3B,KAAK,EAA0B,CAAA;QAClC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB,EAAE,SAAmB;QACvD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QAClC,MAAM,GAAG,GAA0B,EAAE,CAAA;QACrC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;iBAC9B,OAAO,CACN;wDAC8C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjF;iBACA,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC;iBAC3B,GAAG,EAA0B,CAAA;YAChC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,KAA0B;QAC1D,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;;;;;;;4CAQoC,CACrC;aACA,IAAI,CACH,WAAW,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,qBAAqB,EAC3B,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACtB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,CAChB;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE;aAC9B,OAAO,CACN;;oCAE4B,CAC7B;aACA,IAAI,CAAC,WAAW,CAAC;aACjB,GAAG,EAA0B,CAAA;QAChC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ -- Acknowledgement state on a Kaizen grading, plus the index its public list pages on.
2
+ --
3
+ -- A grading records how an agent step went and what to change about it. Until now nothing recorded
4
+ -- whether anyone had READ one, so the only way to consume them was a bounded newest-first history
5
+ -- that re-reports the same rows on every look. `GET /api/v1/kaizen/entries?acknowledged=false` is
6
+ -- the backlog that replaces it, and these columns are what takes an entry out of it.
7
+ --
8
+ -- `acknowledged_at`: epoch ms of the FIRST acknowledgement (a repeat leaves it alone, so it
9
+ -- names when the entry was triaged rather than when a retry last fired).
10
+ -- `acknowledged_by`: the actor: a user id when the acting key is bound to a person, else the
11
+ -- public-API key id, so a follow-up has somebody to go back to.
12
+ -- `acknowledgement_note`: what the acknowledger wanted the next reader to know (a ticket id, why
13
+ -- it was dismissed).
14
+ --
15
+ -- All three are nullable with no default: unacknowledged is the state every existing row is in, and
16
+ -- writing them is never part of the grading sweep's upsert.
17
+ --
18
+ -- The index serves the list's `(workspace_id, created_at DESC, id DESC)` ordering. The existing
19
+ -- indexes cover the run window (workspace + execution) and the sweep (status + updated_at); neither
20
+ -- helps a workspace-wide chronological page.
21
+
22
+ ALTER TABLE kaizen_gradings ADD COLUMN acknowledged_at INTEGER;
23
+ ALTER TABLE kaizen_gradings ADD COLUMN acknowledged_by TEXT;
24
+ ALTER TABLE kaizen_gradings ADD COLUMN acknowledgement_note TEXT;
25
+
26
+ CREATE INDEX idx_kaizen_gradings_workspace_created
27
+ ON kaizen_gradings(workspace_id, created_at);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/worker",
3
- "version": "0.197.1",
3
+ "version": "0.198.1",
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",
@@ -43,23 +43,23 @@
43
43
  "pino": "^10.3.1",
44
44
  "valibot": "^1.4.2",
45
45
  "workers-ai-provider": "^4.0.0",
46
- "@cat-factory/agents": "0.137.0",
47
- "@cat-factory/binary-generators": "0.2.6",
48
- "@cat-factory/caching": "0.20.32",
49
- "@cat-factory/consensus": "0.16.32",
50
- "@cat-factory/contracts": "0.320.0",
51
- "@cat-factory/eks": "0.1.336",
52
- "@cat-factory/gates": "0.10.63",
53
- "@cat-factory/gitlab": "0.21.1",
54
- "@cat-factory/integrations": "0.165.5",
55
- "@cat-factory/kernel": "0.311.0",
56
- "@cat-factory/observability-langfuse": "0.10.107",
57
- "@cat-factory/observability-otel": "0.21.11",
58
- "@cat-factory/orchestration": "0.280.0",
59
- "@cat-factory/prompt-fragments": "1.0.87",
60
- "@cat-factory/provider-cloudflare": "0.7.485",
61
- "@cat-factory/server": "0.296.1",
62
- "@cat-factory/spend": "0.16.3"
46
+ "@cat-factory/agents": "0.138.0",
47
+ "@cat-factory/binary-generators": "0.3.0",
48
+ "@cat-factory/caching": "0.20.34",
49
+ "@cat-factory/consensus": "0.16.34",
50
+ "@cat-factory/contracts": "0.322.0",
51
+ "@cat-factory/eks": "0.1.338",
52
+ "@cat-factory/gates": "0.11.0",
53
+ "@cat-factory/gitlab": "0.22.0",
54
+ "@cat-factory/integrations": "0.166.0",
55
+ "@cat-factory/kernel": "0.313.0",
56
+ "@cat-factory/observability-langfuse": "0.11.0",
57
+ "@cat-factory/observability-otel": "0.22.0",
58
+ "@cat-factory/orchestration": "0.282.0",
59
+ "@cat-factory/prompt-fragments": "1.0.89",
60
+ "@cat-factory/provider-cloudflare": "0.7.487",
61
+ "@cat-factory/server": "0.298.0",
62
+ "@cat-factory/spend": "0.16.5"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@cloudflare/vitest-pool-workers": "^0.21.2",
@@ -67,7 +67,7 @@
67
67
  "typescript": "7.0.2",
68
68
  "vitest": "^4.1.10",
69
69
  "wrangler": "^4.122.0",
70
- "@cat-factory/conformance": "0.45.14"
70
+ "@cat-factory/conformance": "0.45.16"
71
71
  },
72
72
  "scripts": {
73
73
  "build": "tsc -b tsconfig.build.json",