@cat-factory/orchestration 0.280.0 → 0.283.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 (27) hide show
  1. package/dist/container/modules.d.ts.map +1 -1
  2. package/dist/container/modules.js +2 -1
  3. package/dist/container/modules.js.map +1 -1
  4. package/dist/modules/execution/AgentContextBuilder.d.ts +26 -12
  5. package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
  6. package/dist/modules/execution/AgentContextBuilder.js +17 -8
  7. package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
  8. package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
  9. package/dist/modules/execution/RunDispatcher.js +1 -0
  10. package/dist/modules/execution/RunDispatcher.js.map +1 -1
  11. package/dist/modules/execution/extension-contexts.d.ts +3 -1
  12. package/dist/modules/execution/extension-contexts.d.ts.map +1 -1
  13. package/dist/modules/execution/extension-contexts.js +1 -0
  14. package/dist/modules/execution/extension-contexts.js.map +1 -1
  15. package/dist/modules/execution/run-skills.d.ts +14 -2
  16. package/dist/modules/execution/run-skills.d.ts.map +1 -1
  17. package/dist/modules/execution/run-skills.js +83 -6
  18. package/dist/modules/execution/run-skills.js.map +1 -1
  19. package/dist/modules/kaizen/KaizenService.d.ts +14 -0
  20. package/dist/modules/kaizen/KaizenService.d.ts.map +1 -1
  21. package/dist/modules/kaizen/KaizenService.js +34 -0
  22. package/dist/modules/kaizen/KaizenService.js.map +1 -1
  23. package/dist/modules/kaizen/kaizenEntries.d.ts +72 -0
  24. package/dist/modules/kaizen/kaizenEntries.d.ts.map +1 -0
  25. package/dist/modules/kaizen/kaizenEntries.js +176 -0
  26. package/dist/modules/kaizen/kaizenEntries.js.map +1 -0
  27. package/package.json +11 -11
@@ -0,0 +1,72 @@
1
+ import type { KaizenGradingStatus, PublicKaizenEntry } from '@cat-factory/contracts';
2
+ import type { Block, Clock, KaizenGradingRepository, KaizenVerifiedComboRepository } from '@cat-factory/kernel';
3
+ /** What the entry surface needs from its stores, bound by the service that owns them. */
4
+ export interface KaizenEntryDeps {
5
+ gradings: Pick<KaizenGradingRepository, 'get' | 'listPage' | 'setAcknowledgement'>;
6
+ combos: Pick<KaizenVerifiedComboRepository, 'listByKeys'>;
7
+ /**
8
+ * Resolve blocks by id in one batched read, across workspaces: a graded task can live on a
9
+ * service another workspace owns and this board only mounts, so the lookup is by id rather than
10
+ * scoped to the entry's own workspace. Ids with no block come back absent.
11
+ */
12
+ findBlocks: (blockIds: string[]) => Promise<Block[]>;
13
+ clock: Clock;
14
+ }
15
+ /** The filters `GET /api/v1/kaizen/entries` pushes into SQL, plus its page bound. */
16
+ export interface KaizenEntryQuery {
17
+ limit: number;
18
+ cursor?: {
19
+ createdAt: number;
20
+ id: string;
21
+ };
22
+ acknowledged?: boolean;
23
+ settled?: boolean;
24
+ status?: KaizenGradingStatus;
25
+ agentKind?: string;
26
+ since?: number;
27
+ }
28
+ /** What an acknowledgement records: the new state, the note, and who is asking. */
29
+ export interface KaizenAcknowledgement {
30
+ /** `true` records the acknowledgement, `false` clears it and returns the entry to the backlog. */
31
+ acknowledged: boolean;
32
+ note: string | null;
33
+ /** The user id or API key id to attribute it to; null when the caller has no identity to name. */
34
+ actor: string | null;
35
+ }
36
+ export declare class KaizenEntryReader {
37
+ private readonly deps;
38
+ constructor(deps: KaizenEntryDeps);
39
+ /** One page of entries, newest first, each joined to its board and combo context. */
40
+ listEntries(workspaceId: string, query: KaizenEntryQuery): Promise<PublicKaizenEntry[]>;
41
+ /** One entry by id, or null when this workspace holds no such grading. */
42
+ getEntry(workspaceId: string, entryId: string): Promise<PublicKaizenEntry | null>;
43
+ /**
44
+ * Record or clear an entry's acknowledgement and answer with the entry as it now stands.
45
+ *
46
+ * The refusals are two different facts and stay two: an id this workspace does not hold is a
47
+ * 404, while an entry the grader has not settled is a 409 the caller can retry once it has. The
48
+ * settled check is also carried by the repository's own conditional write, so a grading that
49
+ * settles between the read and the write cannot be missed and one that starts re-running cannot
50
+ * be acknowledged behind the check.
51
+ */
52
+ acknowledge(workspaceId: string, entryId: string, input: KaizenAcknowledgement): Promise<PublicKaizenEntry>;
53
+ /** Join a set of gradings to their board + combo context in a bounded number of reads. */
54
+ private project;
55
+ /**
56
+ * The board context per graded block: the block itself, its enclosing service frame and that
57
+ * frame's title, walked up the containment tree in batched reads (one per level).
58
+ *
59
+ * Ancestry rather than the block's own account-service stamp, because ancestry is what
60
+ * `serviceId` MEANS on this API: `GET /api/v1/services/{id}/tasks` and `GET /api/v1/tasks/{id}`
61
+ * both resolve it that way (`serviceOf`), and a board block that carries no service stamp (one
62
+ * predating services, or a workspace-local board) still sits under a frame. Reading the stamp
63
+ * instead made the same task report a service on one endpoint and null here.
64
+ *
65
+ * The walk is batched rather than done over the workspace's whole block list: each pass resolves
66
+ * exactly the parent ids it does not yet hold, and containment bottoms out at `frame`, so it
67
+ * settles within {@link MAX_ANCESTRY_HOPS} reads. Already-resolved ids are never re-read, which
68
+ * is also what stops a cycle in stored data from looping.
69
+ */
70
+ private resolveTasks;
71
+ }
72
+ //# sourceMappingURL=kaizenEntries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kaizenEntries.d.ts","sourceRoot":"","sources":["../../../src/modules/kaizen/kaizenEntries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,wBAAwB,CAAA;AAM/B,OAAO,KAAK,EACV,KAAK,EACL,KAAK,EACL,uBAAuB,EAEvB,6BAA6B,EAC9B,MAAM,qBAAqB,CAAA;AA2B5B,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,KAAK,GAAG,UAAU,GAAG,oBAAoB,CAAC,CAAA;IAClF,MAAM,EAAE,IAAI,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAA;IACzD;;;;OAIG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IACpD,KAAK,EAAE,KAAK,CAAA;CACb;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,kGAAkG;IAClG,YAAY,EAAE,OAAO,CAAA;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,kGAAkG;IAClG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,eAAe,EAAI;IAEtD,qFAAqF;IAC/E,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAG5F;IAED,0EAA0E;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAKtF;IAED;;;;;;;;OAQG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;IAED,0FAA0F;YAC5E,OAAO;IAgBrB;;;;;;;;;;;;;;OAcG;YACW,YAAY;CAmC3B"}
@@ -0,0 +1,176 @@
1
+ import { isSettledKaizenStatus, KAIZEN_ENTRY_NOT_FOUND_REASON, KAIZEN_ENTRY_NOT_SETTLED_REASON, } from '@cat-factory/contracts';
2
+ import { ConflictError, NotFoundError } from '@cat-factory/kernel';
3
+ export class KaizenEntryReader {
4
+ deps;
5
+ constructor(deps) {
6
+ this.deps = deps;
7
+ }
8
+ /** One page of entries, newest first, each joined to its board and combo context. */
9
+ async listEntries(workspaceId, query) {
10
+ const gradings = await this.deps.gradings.listPage(workspaceId, query);
11
+ return this.project(workspaceId, gradings);
12
+ }
13
+ /** One entry by id, or null when this workspace holds no such grading. */
14
+ async getEntry(workspaceId, entryId) {
15
+ const grading = await this.deps.gradings.get(workspaceId, entryId);
16
+ if (!grading)
17
+ return null;
18
+ const [entry] = await this.project(workspaceId, [grading]);
19
+ return entry ?? null;
20
+ }
21
+ /**
22
+ * Record or clear an entry's acknowledgement and answer with the entry as it now stands.
23
+ *
24
+ * The refusals are two different facts and stay two: an id this workspace does not hold is a
25
+ * 404, while an entry the grader has not settled is a 409 the caller can retry once it has. The
26
+ * settled check is also carried by the repository's own conditional write, so a grading that
27
+ * settles between the read and the write cannot be missed and one that starts re-running cannot
28
+ * be acknowledged behind the check.
29
+ */
30
+ async acknowledge(workspaceId, entryId, input) {
31
+ const grading = await this.deps.gradings.get(workspaceId, entryId);
32
+ if (!grading)
33
+ throw entryNotFound(entryId);
34
+ if (input.acknowledged && !isSettledKaizenStatus(grading.status)) {
35
+ throw new ConflictError(`Kaizen entry '${entryId}' has not been graded yet (status '${grading.status}'), so there is nothing to acknowledge`, KAIZEN_ENTRY_NOT_SETTLED_REASON, { entryId, status: grading.status });
36
+ }
37
+ // One clock read stamps both `acknowledgedAt` and `updatedAt`, so the row cannot claim to have
38
+ // been acknowledged after the last time it changed.
39
+ const updated = await this.deps.gradings.setAcknowledgement(workspaceId, entryId, input.acknowledged ? { by: input.actor, note: input.note } : null, this.deps.clock.now());
40
+ // Null here means the row went away between the read above and the write: the same fact the
41
+ // read refuses, answered the same way rather than as a write that silently did nothing.
42
+ if (!updated)
43
+ throw entryNotFound(entryId);
44
+ const [entry] = await this.project(workspaceId, [updated]);
45
+ if (!entry)
46
+ throw entryNotFound(entryId);
47
+ return entry;
48
+ }
49
+ /** Join a set of gradings to their board + combo context in a bounded number of reads. */
50
+ async project(workspaceId, gradings) {
51
+ if (gradings.length === 0)
52
+ return [];
53
+ // The combo read names exactly the keys on this page. `listByWorkspace` would answer the same
54
+ // question by reading the workspace's whole combo library, which a one-entry point read pays
55
+ // in full and which grows with every kind, model and prompt version the workspace has run.
56
+ const [tasks, combos] = await Promise.all([
57
+ this.resolveTasks(gradings.map((g) => g.blockId)),
58
+ this.deps.combos.listByKeys(workspaceId, [...new Set(gradings.map((g) => g.comboKey))]),
59
+ ]);
60
+ const comboByKey = new Map(combos.map((combo) => [combo.comboKey, combo]));
61
+ return gradings.map((grading) => toPublicEntry(grading, tasks, comboByKey));
62
+ }
63
+ /**
64
+ * The board context per graded block: the block itself, its enclosing service frame and that
65
+ * frame's title, walked up the containment tree in batched reads (one per level).
66
+ *
67
+ * Ancestry rather than the block's own account-service stamp, because ancestry is what
68
+ * `serviceId` MEANS on this API: `GET /api/v1/services/{id}/tasks` and `GET /api/v1/tasks/{id}`
69
+ * both resolve it that way (`serviceOf`), and a board block that carries no service stamp (one
70
+ * predating services, or a workspace-local board) still sits under a frame. Reading the stamp
71
+ * instead made the same task report a service on one endpoint and null here.
72
+ *
73
+ * The walk is batched rather than done over the workspace's whole block list: each pass resolves
74
+ * exactly the parent ids it does not yet hold, and containment bottoms out at `frame`, so it
75
+ * settles within {@link MAX_ANCESTRY_HOPS} reads. Already-resolved ids are never re-read, which
76
+ * is also what stops a cycle in stored data from looping.
77
+ */
78
+ async resolveTasks(blockIds) {
79
+ const wanted = [...new Set(blockIds)];
80
+ if (wanted.length === 0)
81
+ return new Map();
82
+ const resolved = new Map();
83
+ let frontier = wanted;
84
+ for (let hop = 0; hop <= MAX_ANCESTRY_HOPS && frontier.length > 0; hop++) {
85
+ const found = await this.deps.findBlocks(frontier);
86
+ for (const block of found)
87
+ resolved.set(block.id, block);
88
+ frontier = [
89
+ ...new Set(found
90
+ .filter((block) => block.level !== 'frame')
91
+ .map((block) => block.parentId)
92
+ .filter(isUnresolvedParent(resolved))),
93
+ ];
94
+ }
95
+ const out = new Map();
96
+ for (const id of wanted) {
97
+ const block = resolved.get(id);
98
+ if (!block)
99
+ continue;
100
+ // Id and title come off the SAME resolved frame, so a caller is never handed a `serviceId`
101
+ // that `GET /api/v1/services/{serviceId}` cannot answer for. A chain that reaches no frame
102
+ // (a block outside any service, or one whose parent has been deleted) answers null for both.
103
+ const frame = frameOf(block, resolved);
104
+ out.set(block.id, {
105
+ title: block.title,
106
+ status: block.status,
107
+ serviceId: frame?.id ?? null,
108
+ serviceTitle: frame?.title ?? null,
109
+ });
110
+ }
111
+ return out;
112
+ }
113
+ }
114
+ /**
115
+ * How many batched reads the ancestry walk may take before it stops.
116
+ *
117
+ * Containment is `task` under `module` under `frame` (`canReparent` admits nothing deeper), so two
118
+ * hops reach a frame from the deepest block and the third is headroom against a level added later.
119
+ * It bounds the READS; termination itself comes from never re-reading an id already resolved.
120
+ */
121
+ const MAX_ANCESTRY_HOPS = 3;
122
+ /** The service frame a block sits under, walked over already-resolved blocks; undefined if none. */
123
+ function frameOf(block, resolved) {
124
+ let cur = block;
125
+ const seen = new Set();
126
+ while (cur && cur.level !== 'frame') {
127
+ if (seen.has(cur.id))
128
+ return undefined;
129
+ seen.add(cur.id);
130
+ cur = cur.parentId ? resolved.get(cur.parentId) : undefined;
131
+ }
132
+ return cur;
133
+ }
134
+ /** The parent ids a walk pass still has to read: present, and not already resolved. */
135
+ function isUnresolvedParent(resolved) {
136
+ return (parentId) => !!parentId && !resolved.has(parentId);
137
+ }
138
+ /** The 404 both the point read and the acknowledge write answer for an id this workspace lacks. */
139
+ function entryNotFound(entryId) {
140
+ return new NotFoundError('KaizenEntry', entryId, { reason: KAIZEN_ENTRY_NOT_FOUND_REASON });
141
+ }
142
+ /** Project one grading plus its resolved context onto the wire entry. */
143
+ function toPublicEntry(grading, tasks, combos) {
144
+ const combo = combos.get(grading.comboKey);
145
+ return {
146
+ entryId: grading.id,
147
+ runId: grading.executionId,
148
+ stepIndex: grading.stepIndex,
149
+ taskId: grading.blockId,
150
+ task: tasks.get(grading.blockId) ?? null,
151
+ agentKind: grading.agentKind,
152
+ model: grading.model,
153
+ promptVersion: grading.promptVersion,
154
+ comboKey: grading.comboKey,
155
+ combo: combo
156
+ ? {
157
+ consecutiveHighGrades: combo.consecutiveHighGrades,
158
+ verified: combo.verified,
159
+ verifiedAt: combo.verifiedAt,
160
+ }
161
+ : null,
162
+ status: grading.status,
163
+ grade: grading.grade,
164
+ summary: grading.summary,
165
+ recommendations: grading.recommendations,
166
+ graderModel: grading.graderModel,
167
+ error: grading.error,
168
+ acknowledged: grading.acknowledgedAt !== null,
169
+ acknowledgedAt: grading.acknowledgedAt,
170
+ acknowledgedBy: grading.acknowledgedBy,
171
+ acknowledgementNote: grading.acknowledgementNote,
172
+ createdAt: grading.createdAt,
173
+ updatedAt: grading.updatedAt,
174
+ };
175
+ }
176
+ //# sourceMappingURL=kaizenEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kaizenEntries.js","sourceRoot":"","sources":["../../../src/modules/kaizen/kaizenEntries.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/orchestration",
3
- "version": "0.280.0",
3
+ "version": "0.283.0",
4
4
  "description": "Delivery-workflow engine for the Agent Architecture Board (execution, bootstrap, pipelines, board, boardScan, requirements, and composition root).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,20 +25,20 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "ai": "^7.0.64",
28
- "@cat-factory/agents": "0.137.0",
29
- "@cat-factory/caching": "0.20.32",
30
- "@cat-factory/contracts": "0.320.0",
31
- "@cat-factory/integrations": "0.165.5",
32
- "@cat-factory/kernel": "0.311.0",
33
- "@cat-factory/prompt-fragments": "1.0.87",
34
- "@cat-factory/sandbox": "0.12.1",
35
- "@cat-factory/spend": "0.16.3",
36
- "@cat-factory/workspaces": "0.28.20"
28
+ "@cat-factory/agents": "0.139.0",
29
+ "@cat-factory/caching": "0.20.35",
30
+ "@cat-factory/contracts": "0.323.0",
31
+ "@cat-factory/integrations": "0.166.1",
32
+ "@cat-factory/kernel": "0.314.0",
33
+ "@cat-factory/prompt-fragments": "1.0.90",
34
+ "@cat-factory/sandbox": "0.12.4",
35
+ "@cat-factory/spend": "0.16.6",
36
+ "@cat-factory/workspaces": "0.28.23"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "7.0.2",
40
40
  "vitest": "^4.1.10",
41
- "@cat-factory/sandbox-fixtures": "0.8.0"
41
+ "@cat-factory/sandbox-fixtures": "0.8.3"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc -b tsconfig.build.json",