@cat-factory/orchestration 0.24.2 → 0.25.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.
- package/dist/container.d.ts +16 -0
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +42 -0
- package/dist/container.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts +15 -1
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +16 -1
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/kaizen/KaizenService.d.ts +71 -0
- package/dist/modules/kaizen/KaizenService.d.ts.map +1 -0
- package/dist/modules/kaizen/KaizenService.js +322 -0
- package/dist/modules/kaizen/KaizenService.js.map +1 -0
- package/dist/modules/kaizen/kaizen.logic.d.ts +29 -0
- package/dist/modules/kaizen/kaizen.logic.d.ts.map +1 -0
- package/dist/modules/kaizen/kaizen.logic.js +52 -0
- package/dist/modules/kaizen/kaizen.logic.js.map +1 -0
- package/dist/modules/settings/WorkspaceSettingsService.d.ts.map +1 -1
- package/dist/modules/settings/WorkspaceSettingsService.js +1 -0
- package/dist/modules/settings/WorkspaceSettingsService.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { DEFAULT_WORKSPACE_SETTINGS, extractJson, inlineModelRef, resolveScopedModelProvider, } from '@cat-factory/kernel';
|
|
2
|
+
import { generateText } from 'ai';
|
|
3
|
+
import { catFactoryObservability, KAIZEN_SYSTEM_PROMPT, promptVersionForKind, } from '@cat-factory/agents';
|
|
4
|
+
import { comboKeyFor, isVerified, nextComboState } from './kaizen.logic.js';
|
|
5
|
+
/** The agent kind keying the workspace default model + observability for the grader. */
|
|
6
|
+
const KAIZEN_AGENT_KIND = 'kaizen';
|
|
7
|
+
/** Newest LLM calls to digest into the grader prompt (the bodies are heavy). */
|
|
8
|
+
const MAX_CALLS_DIGESTED = 40;
|
|
9
|
+
/**
|
|
10
|
+
* The Kaizen agent: after a run completes, it grades each completed agent step by how
|
|
11
|
+
* smooth / guided / efficient the interaction was vs confused / chaotic, and recommends
|
|
12
|
+
* improvements. A combo `(promptVersion, agentKind, model)` that earns a high grade with
|
|
13
|
+
* no recommendations enough times in a row is VERIFIED and stops being graded.
|
|
14
|
+
*
|
|
15
|
+
* Grading is two-phase so it never blocks a run: {@link scheduleForRun} (called from the
|
|
16
|
+
* engine's terminal hook) only inserts `scheduled` rows; {@link runGrading} (driven by the
|
|
17
|
+
* background sweep) does the LLM analysis. The grader resolves its model exactly like an
|
|
18
|
+
* agent step — for the `kaizen` kind — so operators configure it in Model Configuration.
|
|
19
|
+
*/
|
|
20
|
+
export class KaizenService {
|
|
21
|
+
deps;
|
|
22
|
+
constructor(deps) {
|
|
23
|
+
this.deps = deps;
|
|
24
|
+
}
|
|
25
|
+
/** Whether the LLM-backed grader is available (else gradings settle as `failed`). */
|
|
26
|
+
get enabled() {
|
|
27
|
+
return (!!this.deps.modelProviderResolver || !!this.deps.modelProvider) && !!this.deps.modelRef;
|
|
28
|
+
}
|
|
29
|
+
// ---- phase 1: schedule (called at run completion, never blocks) ----------
|
|
30
|
+
/**
|
|
31
|
+
* Schedule a grading for each completed agent step of a finished run, skipping verified
|
|
32
|
+
* combos and steps already graded. Best-effort: a failure here must never derail the
|
|
33
|
+
* engine's emit (the caller wraps it), and re-driving the same run is idempotent.
|
|
34
|
+
*/
|
|
35
|
+
async scheduleForRun(workspaceId, instance) {
|
|
36
|
+
// No grader model wired ⇒ every scheduled row could only ever settle `failed`, so don't
|
|
37
|
+
// flood the table (and the run-window event stream) with rows for a disabled grader.
|
|
38
|
+
if (!this.enabled)
|
|
39
|
+
return;
|
|
40
|
+
if (!(await this.kaizenEnabled(workspaceId)))
|
|
41
|
+
return;
|
|
42
|
+
for (let stepIndex = 0; stepIndex < instance.steps.length; stepIndex++) {
|
|
43
|
+
const step = instance.steps[stepIndex];
|
|
44
|
+
if (!step || !this.isGradeable(step) || !step.model)
|
|
45
|
+
continue;
|
|
46
|
+
const model = step.model;
|
|
47
|
+
const promptVersion = promptVersionForKind(step.agentKind);
|
|
48
|
+
const comboKey = comboKeyFor(step.agentKind, model, promptVersion);
|
|
49
|
+
const combo = await this.deps.kaizenVerifiedComboRepository.getByKey(workspaceId, comboKey);
|
|
50
|
+
if (isVerified(combo))
|
|
51
|
+
continue;
|
|
52
|
+
const existing = await this.deps.kaizenGradingRepository.getByStep(workspaceId, instance.id, stepIndex);
|
|
53
|
+
if (existing)
|
|
54
|
+
continue;
|
|
55
|
+
const now = this.deps.clock.now();
|
|
56
|
+
const grading = {
|
|
57
|
+
id: this.deps.idGenerator.next('kzn'),
|
|
58
|
+
executionId: instance.id,
|
|
59
|
+
blockId: instance.blockId,
|
|
60
|
+
stepIndex,
|
|
61
|
+
agentKind: step.agentKind,
|
|
62
|
+
model,
|
|
63
|
+
promptVersion,
|
|
64
|
+
comboKey,
|
|
65
|
+
status: 'scheduled',
|
|
66
|
+
grade: null,
|
|
67
|
+
summary: '',
|
|
68
|
+
recommendations: [],
|
|
69
|
+
graderModel: null,
|
|
70
|
+
error: null,
|
|
71
|
+
createdAt: now,
|
|
72
|
+
updatedAt: now,
|
|
73
|
+
};
|
|
74
|
+
await this.deps.kaizenGradingRepository.upsert(workspaceId, grading);
|
|
75
|
+
await this.emit(workspaceId, grading);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// ---- phase 2: run (driven by the background sweep) -----------------------
|
|
79
|
+
/**
|
|
80
|
+
* Run a batch of pending gradings: `scheduled` rows plus `running` rows orphaned by a
|
|
81
|
+
* crashed sweep (older than `staleBefore`). Returns how many it processed.
|
|
82
|
+
*/
|
|
83
|
+
async runPending(staleBefore, limit) {
|
|
84
|
+
const pending = await this.deps.kaizenGradingRepository.listPending(staleBefore, limit);
|
|
85
|
+
let processed = 0;
|
|
86
|
+
for (const { workspaceId, grading } of pending) {
|
|
87
|
+
// Atomically claim before working it: a concurrent/overlapping sweep pass that listed
|
|
88
|
+
// the same row loses the claim and skips it, so a grading is processed at most once.
|
|
89
|
+
const claimed = await this.deps.kaizenGradingRepository.claim(workspaceId, grading.id, staleBefore, this.deps.clock.now());
|
|
90
|
+
if (!claimed)
|
|
91
|
+
continue;
|
|
92
|
+
try {
|
|
93
|
+
await this.runGrading(workspaceId, grading);
|
|
94
|
+
processed++;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// runGrading already records a `failed` row; never let one bad grading abort the batch.
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return processed;
|
|
101
|
+
}
|
|
102
|
+
/** Grade one step: mark running, digest telemetry, call the grader, record + update streak. */
|
|
103
|
+
async runGrading(workspaceId, grading) {
|
|
104
|
+
const running = {
|
|
105
|
+
...grading,
|
|
106
|
+
status: 'running',
|
|
107
|
+
updatedAt: this.deps.clock.now(),
|
|
108
|
+
};
|
|
109
|
+
await this.deps.kaizenGradingRepository.upsert(workspaceId, running);
|
|
110
|
+
await this.emit(workspaceId, running);
|
|
111
|
+
if (!this.enabled) {
|
|
112
|
+
await this.fail(workspaceId, running, 'No model is configured for the Kaizen agent');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
// Fetch only THIS step kind's calls (filtered in SQL) so the cap is spent on the
|
|
117
|
+
// graded kind rather than being crowded out by a long run's other kinds. The metric
|
|
118
|
+
// store keys calls by (execution, agentKind) — there is no per-step discriminator —
|
|
119
|
+
// so if a run ran the SAME kind in two steps their calls are merged here; the
|
|
120
|
+
// provided-context snapshot below is still matched precisely by stepIndex.
|
|
121
|
+
const [snapshot, stepCalls] = await Promise.all([
|
|
122
|
+
this.snapshotForStep(workspaceId, grading),
|
|
123
|
+
this.deps.llmCallMetricRepository.listByExecution(workspaceId, grading.executionId, MAX_CALLS_DIGESTED, grading.agentKind),
|
|
124
|
+
]);
|
|
125
|
+
// Don't grade blind. With neither a provided-context snapshot NOR any recorded LLM
|
|
126
|
+
// calls (e.g. the deployment has prompt recording off), the grader has no evidence to
|
|
127
|
+
// judge the interaction on — it would be guessing, and a guessed high-grade-with-no-recs
|
|
128
|
+
// would advance the combo streak toward a bogus `verified`, after which the engine stops
|
|
129
|
+
// grading that combo for good. Settle `failed` instead so the combo is left untouched.
|
|
130
|
+
if (!snapshot && stepCalls.length === 0) {
|
|
131
|
+
await this.fail(workspaceId, running, 'No telemetry was captured for this step (prompt recording may be off), so it cannot be graded');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const { ref, provider } = await this.resolveModel(workspaceId, grading.blockId);
|
|
135
|
+
const model = provider.resolve(ref);
|
|
136
|
+
const result = await generateText({
|
|
137
|
+
model,
|
|
138
|
+
system: KAIZEN_SYSTEM_PROMPT,
|
|
139
|
+
prompt: buildKaizenPrompt(grading, snapshot, stepCalls),
|
|
140
|
+
temperature: 0.2,
|
|
141
|
+
maxOutputTokens: 2000,
|
|
142
|
+
providerOptions: catFactoryObservability({ agentKind: KAIZEN_AGENT_KIND, workspaceId }),
|
|
143
|
+
});
|
|
144
|
+
const verdict = parseVerdict(result.text);
|
|
145
|
+
const now = this.deps.clock.now();
|
|
146
|
+
const complete = {
|
|
147
|
+
...grading,
|
|
148
|
+
status: 'complete',
|
|
149
|
+
grade: verdict.grade,
|
|
150
|
+
summary: verdict.summary,
|
|
151
|
+
recommendations: verdict.recommendations,
|
|
152
|
+
graderModel: `${ref.provider}:${ref.model}`,
|
|
153
|
+
error: null,
|
|
154
|
+
updatedAt: now,
|
|
155
|
+
};
|
|
156
|
+
await this.deps.kaizenGradingRepository.upsert(workspaceId, complete);
|
|
157
|
+
await this.updateCombo(workspaceId, complete, now);
|
|
158
|
+
await this.emit(workspaceId, complete);
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
await this.fail(workspaceId, running, e instanceof Error ? e.message : String(e));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// ---- read surface -------------------------------------------------------
|
|
165
|
+
/** The Kaizen screen payload: recent history + the verified-combo library. */
|
|
166
|
+
async getOverview(workspaceId, limit = 200) {
|
|
167
|
+
const [gradings, verified] = await Promise.all([
|
|
168
|
+
this.deps.kaizenGradingRepository.listByWorkspace(workspaceId, limit),
|
|
169
|
+
this.deps.kaizenVerifiedComboRepository.listByWorkspace(workspaceId),
|
|
170
|
+
]);
|
|
171
|
+
return { gradings, verified };
|
|
172
|
+
}
|
|
173
|
+
/** The gradings recorded for a single run (the run-window status surface). */
|
|
174
|
+
listForExecution(workspaceId, executionId) {
|
|
175
|
+
return this.deps.kaizenGradingRepository.listByExecution(workspaceId, executionId);
|
|
176
|
+
}
|
|
177
|
+
// ---- internals ----------------------------------------------------------
|
|
178
|
+
async kaizenEnabled(workspaceId) {
|
|
179
|
+
if (!this.deps.workspaceSettingsRepository)
|
|
180
|
+
return DEFAULT_WORKSPACE_SETTINGS.kaizenEnabled;
|
|
181
|
+
const settings = await this.deps.workspaceSettingsRepository.get(workspaceId);
|
|
182
|
+
return settings?.kaizenEnabled ?? DEFAULT_WORKSPACE_SETTINGS.kaizenEnabled;
|
|
183
|
+
}
|
|
184
|
+
/** A step is gradeable when it ran an LLM to completion (so it has a resolved model). */
|
|
185
|
+
isGradeable(step) {
|
|
186
|
+
return step.state === 'done' && !step.skipped && !!step.model;
|
|
187
|
+
}
|
|
188
|
+
async snapshotForStep(workspaceId, grading) {
|
|
189
|
+
const snapshots = await this.deps.agentContextObservability.listByExecution(workspaceId, grading.executionId);
|
|
190
|
+
return (snapshots.find((s) => s.stepIndex === grading.stepIndex) ??
|
|
191
|
+
snapshots.find((s) => s.agentKind === grading.agentKind) ??
|
|
192
|
+
null);
|
|
193
|
+
}
|
|
194
|
+
async resolveModel(workspaceId, blockId) {
|
|
195
|
+
const provider = await resolveScopedModelProvider(workspaceId, this.deps);
|
|
196
|
+
const ref = await this.modelFor(workspaceId, blockId);
|
|
197
|
+
if (!provider || !ref)
|
|
198
|
+
throw new Error('No model is configured for the Kaizen agent');
|
|
199
|
+
return { provider, ref };
|
|
200
|
+
}
|
|
201
|
+
/** Block pin > workspace per-kind default (`kaizen`) > routing default. */
|
|
202
|
+
async modelFor(workspaceId, blockId) {
|
|
203
|
+
const fallback = this.deps.modelRef;
|
|
204
|
+
const resolve = (ref) => inlineModelRef(ref, fallback ?? ref);
|
|
205
|
+
const block = await this.deps.blockRepository.get(workspaceId, blockId);
|
|
206
|
+
const fromBlock = this.deps.resolveBlockModel?.(block?.modelId);
|
|
207
|
+
if (fromBlock)
|
|
208
|
+
return resolve(fromBlock);
|
|
209
|
+
const defaultId = await this.deps.resolveWorkspaceModelDefault?.(workspaceId, KAIZEN_AGENT_KIND, block?.modelPresetId);
|
|
210
|
+
const fromDefault = this.deps.resolveBlockModel?.(defaultId);
|
|
211
|
+
if (fromDefault)
|
|
212
|
+
return resolve(fromDefault);
|
|
213
|
+
return fallback;
|
|
214
|
+
}
|
|
215
|
+
async updateCombo(workspaceId, grading, now) {
|
|
216
|
+
const prev = await this.deps.kaizenVerifiedComboRepository.getByKey(workspaceId, grading.comboKey);
|
|
217
|
+
const next = nextComboState(prev, grading, now);
|
|
218
|
+
await this.deps.kaizenVerifiedComboRepository.upsert(workspaceId, next);
|
|
219
|
+
}
|
|
220
|
+
async fail(workspaceId, grading, message) {
|
|
221
|
+
const failed = {
|
|
222
|
+
...grading,
|
|
223
|
+
status: 'failed',
|
|
224
|
+
error: message,
|
|
225
|
+
updatedAt: this.deps.clock.now(),
|
|
226
|
+
};
|
|
227
|
+
await this.deps.kaizenGradingRepository.upsert(workspaceId, failed);
|
|
228
|
+
await this.emit(workspaceId, failed);
|
|
229
|
+
}
|
|
230
|
+
async emit(workspaceId, grading) {
|
|
231
|
+
try {
|
|
232
|
+
await this.deps.events?.kaizenGradingChanged?.(workspaceId, grading);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Best-effort push; the persisted row is the source of truth.
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/** Pull the first JSON object out of the grader's reply and coerce it to a verdict. */
|
|
240
|
+
function parseVerdict(text) {
|
|
241
|
+
// Use the shared, string-literal-aware extractor (handles prose/braces around the
|
|
242
|
+
// object and fenced code blocks) rather than a naive first-`{`/last-`}` slice.
|
|
243
|
+
const parsed = extractJson(text);
|
|
244
|
+
const json = parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
245
|
+
? parsed
|
|
246
|
+
: null;
|
|
247
|
+
if (!json)
|
|
248
|
+
throw new Error('Kaizen grader returned no parseable JSON verdict');
|
|
249
|
+
const rawGrade = typeof json.grade === 'number' ? json.grade : Number(json.grade);
|
|
250
|
+
if (!Number.isFinite(rawGrade))
|
|
251
|
+
throw new Error('Kaizen grader returned no numeric grade');
|
|
252
|
+
const grade = Math.min(5, Math.max(1, Math.round(rawGrade)));
|
|
253
|
+
const summary = typeof json.summary === 'string' ? json.summary : '';
|
|
254
|
+
const recommendations = Array.isArray(json.recommendations)
|
|
255
|
+
? json.recommendations.filter((r) => typeof r === 'string' && r.trim().length > 0)
|
|
256
|
+
: [];
|
|
257
|
+
return { grade, summary, recommendations };
|
|
258
|
+
}
|
|
259
|
+
/** Build the grader's user prompt: the provided context + an interaction-telemetry digest. */
|
|
260
|
+
function buildKaizenPrompt(grading, snapshot, calls) {
|
|
261
|
+
const parts = [];
|
|
262
|
+
parts.push(`Grade this completed agent step.\n` +
|
|
263
|
+
`Agent kind: ${grading.agentKind}\nModel: ${grading.model}\nPrompt version: ${grading.promptVersion}`);
|
|
264
|
+
if (snapshot) {
|
|
265
|
+
if (snapshot.systemPrompt)
|
|
266
|
+
parts.push(`=== SYSTEM PROMPT GIVEN TO THE AGENT ===\n${snapshot.systemPrompt}`);
|
|
267
|
+
if (snapshot.userPrompt)
|
|
268
|
+
parts.push(`=== USER PROMPT GIVEN TO THE AGENT ===\n${snapshot.userPrompt}`);
|
|
269
|
+
if (snapshot.fragments.length > 0) {
|
|
270
|
+
parts.push(`=== BEST-PRACTICE FRAGMENTS FOLDED IN ===\n` +
|
|
271
|
+
snapshot.fragments.map((f) => `- ${f.id}`).join('\n'));
|
|
272
|
+
}
|
|
273
|
+
if (snapshot.contextFiles.length > 0) {
|
|
274
|
+
parts.push(`=== CONTEXT FILES INJECTED ===\n` +
|
|
275
|
+
snapshot.contextFiles.map((f) => `- ${f.path} (${f.content.length} chars)`).join('\n'));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
parts.push('No provided-context snapshot was captured for this step (prompt recording may be off). ' +
|
|
280
|
+
'Grade primarily from the interaction telemetry below.');
|
|
281
|
+
}
|
|
282
|
+
parts.push(`=== INTERACTION TELEMETRY ===\n${digestCalls(calls)}`);
|
|
283
|
+
return parts.join('\n\n');
|
|
284
|
+
}
|
|
285
|
+
/** A compact, model-readable digest of the per-call telemetry for one step. */
|
|
286
|
+
function digestCalls(calls) {
|
|
287
|
+
if (calls.length === 0)
|
|
288
|
+
return 'No LLM calls were recorded for this step.';
|
|
289
|
+
const truncated = calls.filter((c) => c.finishReason === 'length').length;
|
|
290
|
+
const errors = calls.filter((c) => !c.ok).length;
|
|
291
|
+
const promptTokens = calls.reduce((s, c) => s + c.promptTokens, 0);
|
|
292
|
+
const completionTokens = calls.reduce((s, c) => s + c.completionTokens, 0);
|
|
293
|
+
const finishReasons = summarizeCounts(calls.map((c) => c.finishReason ?? 'unknown'));
|
|
294
|
+
const lines = [
|
|
295
|
+
`Total model calls: ${calls.length}`,
|
|
296
|
+
`Truncated calls (hit output limit): ${truncated}`,
|
|
297
|
+
`Failed calls: ${errors}`,
|
|
298
|
+
`Prompt tokens (sum): ${promptTokens}`,
|
|
299
|
+
`Completion tokens (sum): ${completionTokens}`,
|
|
300
|
+
`Finish reasons: ${finishReasons}`,
|
|
301
|
+
];
|
|
302
|
+
const last = calls[0]; // newest first
|
|
303
|
+
if (last?.responseText) {
|
|
304
|
+
lines.push(`Final visible response (truncated to 2000 chars):\n${last.responseText.slice(0, 2000)}`);
|
|
305
|
+
}
|
|
306
|
+
if (errors > 0) {
|
|
307
|
+
const messages = calls
|
|
308
|
+
.filter((c) => !c.ok && c.errorMessage)
|
|
309
|
+
.slice(0, 5)
|
|
310
|
+
.map((c) => `- ${c.errorMessage}`);
|
|
311
|
+
if (messages.length)
|
|
312
|
+
lines.push(`Error messages:\n${messages.join('\n')}`);
|
|
313
|
+
}
|
|
314
|
+
return lines.join('\n');
|
|
315
|
+
}
|
|
316
|
+
function summarizeCounts(values) {
|
|
317
|
+
const counts = new Map();
|
|
318
|
+
for (const v of values)
|
|
319
|
+
counts.set(v, (counts.get(v) ?? 0) + 1);
|
|
320
|
+
return [...counts.entries()].map(([k, n]) => `${k}×${n}`).join(', ');
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=KaizenService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KaizenService.js","sourceRoot":"","sources":["../../../src/modules/kaizen/KaizenService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { KaizenGrading, KaizenVerifiedCombo } from '@cat-factory/contracts';
|
|
2
|
+
/** The grade (on the 1..5 scale) at or above which a grading counts as "high". */
|
|
3
|
+
export declare const HIGH_GRADE = 4;
|
|
4
|
+
/** Consecutive high-grade-with-no-recommendations gradings needed to verify a combo. */
|
|
5
|
+
export declare const VERIFICATION_STREAK = 5;
|
|
6
|
+
/** `agentKind|model|promptVersion` — the key a verified combo is tracked under. */
|
|
7
|
+
export declare function comboKeyFor(agentKind: string, model: string, promptVersion: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* Whether a completed grading is a "high grade": a strong score AND no recommendations.
|
|
10
|
+
* The no-recommendations gate is the real quality signal — the grader found nothing to
|
|
11
|
+
* improve — so a grading with ANY recommendation does not advance the streak regardless of
|
|
12
|
+
* its number. Requiring a *flawless* 5 every time made the streak almost never converge
|
|
13
|
+
* (so the "stop grading a verified combo" optimization never engaged and good combos were
|
|
14
|
+
* re-graded on every run forever); a 4-or-5 with nothing to improve is the intended bar.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isHighGrade(grade: number | null, recommendations: readonly string[]): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* The combo's next verification state after folding in one completed grading.
|
|
19
|
+
* A high grade increments the streak (and flips `verified` once it reaches
|
|
20
|
+
* {@link VERIFICATION_STREAK}); anything else resets the streak to 0. Once verified,
|
|
21
|
+
* a combo stays verified (the engine stops scheduling gradings for it, so no further
|
|
22
|
+
* grading should arrive — but if one does, re-evaluate from the same rules).
|
|
23
|
+
*
|
|
24
|
+
* `prev` is null for a combo's first-ever grading.
|
|
25
|
+
*/
|
|
26
|
+
export declare function nextComboState(prev: KaizenVerifiedCombo | null, grading: Pick<KaizenGrading, 'comboKey' | 'agentKind' | 'model' | 'promptVersion' | 'grade' | 'recommendations'>, now: number): KaizenVerifiedCombo;
|
|
27
|
+
/** Whether a combo is verified and should therefore NOT be graded again. */
|
|
28
|
+
export declare function isVerified(combo: KaizenVerifiedCombo | null): boolean;
|
|
29
|
+
//# sourceMappingURL=kaizen.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kaizen.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/kaizen/kaizen.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAKhF,kFAAkF;AAClF,eAAO,MAAM,UAAU,IAAI,CAAA;AAE3B,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE3F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAChC,OAAO,EAAE,IAAI,CACX,aAAa,EACb,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,eAAe,GAAG,OAAO,GAAG,iBAAiB,CACnF,EACD,GAAG,EAAE,MAAM,GACV,mBAAmB,CAgBrB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAErE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Pure Kaizen decision logic — no I/O, no clock, no LLM. Kept separate from the
|
|
2
|
+
// service so the streak/verification rules are unit-testable in isolation.
|
|
3
|
+
/** The grade (on the 1..5 scale) at or above which a grading counts as "high". */
|
|
4
|
+
export const HIGH_GRADE = 4;
|
|
5
|
+
/** Consecutive high-grade-with-no-recommendations gradings needed to verify a combo. */
|
|
6
|
+
export const VERIFICATION_STREAK = 5;
|
|
7
|
+
/** `agentKind|model|promptVersion` — the key a verified combo is tracked under. */
|
|
8
|
+
export function comboKeyFor(agentKind, model, promptVersion) {
|
|
9
|
+
return `${agentKind}|${model}|${promptVersion}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Whether a completed grading is a "high grade": a strong score AND no recommendations.
|
|
13
|
+
* The no-recommendations gate is the real quality signal — the grader found nothing to
|
|
14
|
+
* improve — so a grading with ANY recommendation does not advance the streak regardless of
|
|
15
|
+
* its number. Requiring a *flawless* 5 every time made the streak almost never converge
|
|
16
|
+
* (so the "stop grading a verified combo" optimization never engaged and good combos were
|
|
17
|
+
* re-graded on every run forever); a 4-or-5 with nothing to improve is the intended bar.
|
|
18
|
+
*/
|
|
19
|
+
export function isHighGrade(grade, recommendations) {
|
|
20
|
+
return grade != null && grade >= HIGH_GRADE && recommendations.length === 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The combo's next verification state after folding in one completed grading.
|
|
24
|
+
* A high grade increments the streak (and flips `verified` once it reaches
|
|
25
|
+
* {@link VERIFICATION_STREAK}); anything else resets the streak to 0. Once verified,
|
|
26
|
+
* a combo stays verified (the engine stops scheduling gradings for it, so no further
|
|
27
|
+
* grading should arrive — but if one does, re-evaluate from the same rules).
|
|
28
|
+
*
|
|
29
|
+
* `prev` is null for a combo's first-ever grading.
|
|
30
|
+
*/
|
|
31
|
+
export function nextComboState(prev, grading, now) {
|
|
32
|
+
const high = isHighGrade(grading.grade, grading.recommendations);
|
|
33
|
+
const priorStreak = prev?.consecutiveHighGrades ?? 0;
|
|
34
|
+
const consecutiveHighGrades = high ? priorStreak + 1 : 0;
|
|
35
|
+
const verified = consecutiveHighGrades >= VERIFICATION_STREAK;
|
|
36
|
+
const verifiedAt = verified ? (prev?.verifiedAt ?? now) : null;
|
|
37
|
+
return {
|
|
38
|
+
comboKey: grading.comboKey,
|
|
39
|
+
agentKind: grading.agentKind,
|
|
40
|
+
model: grading.model,
|
|
41
|
+
promptVersion: grading.promptVersion,
|
|
42
|
+
consecutiveHighGrades,
|
|
43
|
+
verified,
|
|
44
|
+
verifiedAt,
|
|
45
|
+
updatedAt: now,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Whether a combo is verified and should therefore NOT be graded again. */
|
|
49
|
+
export function isVerified(combo) {
|
|
50
|
+
return combo?.verified === true;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=kaizen.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kaizen.logic.js","sourceRoot":"","sources":["../../../src/modules/kaizen/kaizen.logic.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,2EAA2E;AAE3E,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAA;AAE3B,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,KAAa,EAAE,aAAqB;IACjF,OAAO,GAAG,SAAS,IAAI,KAAK,IAAI,aAAa,EAAE,CAAA;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,eAAkC;IAClF,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,UAAU,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAgC,EAChC,OAGC,EACD,GAAW;IAEX,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAChE,MAAM,WAAW,GAAG,IAAI,EAAE,qBAAqB,IAAI,CAAC,CAAA;IACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,qBAAqB,IAAI,mBAAmB,CAAA;IAC7D,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9D,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,qBAAqB;QACrB,QAAQ;QACR,UAAU;QACV,SAAS,EAAE,GAAG;KACf,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,KAAiC;IAC1D,OAAO,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceSettingsService.d.ts","sourceRoot":"","sources":["../../../src/modules/settings/WorkspaceSettingsService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,qBAAqB,CAAA;AAG5B,MAAM,WAAW,oCAAoC;IACnD,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,mBAAmB,EAAE,mBAAmB,CAAA;CACzC;AAED;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IAEzD,YAAY,IAAI,EAAE,oCAAoC,EAGrD;IAED,0FAA0F;IACpF,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEzD;IAED,kEAAkE;IAC5D,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"WorkspaceSettingsService.d.ts","sourceRoot":"","sources":["../../../src/modules/settings/WorkspaceSettingsService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,qBAAqB,CAAA;AAG5B,MAAM,WAAW,oCAAoC;IACnD,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,mBAAmB,EAAE,mBAAmB,CAAA;CACzC;AAED;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IAEzD,YAAY,IAAI,EAAE,oCAAoC,EAGrD;IAED,0FAA0F;IACpF,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEzD;IAED,kEAAkE;IAC5D,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;CACF"}
|
|
@@ -27,6 +27,7 @@ export class WorkspaceSettingsService {
|
|
|
27
27
|
taskLimitShared: patch.taskLimitShared !== undefined ? patch.taskLimitShared : current.taskLimitShared,
|
|
28
28
|
taskLimitPerType: patch.taskLimitPerType !== undefined ? patch.taskLimitPerType : current.taskLimitPerType,
|
|
29
29
|
storeAgentContext: patch.storeAgentContext ?? current.storeAgentContext,
|
|
30
|
+
kaizenEnabled: patch.kaizenEnabled ?? current.kaizenEnabled,
|
|
30
31
|
spendCurrency: patch.spendCurrency !== undefined ? patch.spendCurrency : current.spendCurrency,
|
|
31
32
|
spendMonthlyLimit: patch.spendMonthlyLimit !== undefined ? patch.spendMonthlyLimit : current.spendMonthlyLimit,
|
|
32
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceSettingsService.js","sourceRoot":"","sources":["../../../src/modules/settings/WorkspaceSettingsService.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAOlF;;;;;;GAMG;AACH,MAAM,OAAO,wBAAwB;IAClB,QAAQ,CAA6B;IACrC,mBAAmB,CAAqB;IAEzD,YAAY,IAA0C;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAA;QAChD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAA;IACrD,CAAC;IAED,0FAA0F;IAC1F,KAAK,CAAC,GAAG,CAAC,WAAmB;QAC3B,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,0BAA0B,EAAE,CAAA;IACpF,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,MAAM,CACV,WAAmB,EACnB,KAAmC;QAEnC,MAAM,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAsB;YAC9B,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,IAAI,OAAO,CAAC,wBAAwB;YAC5F,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;YAC3D,eAAe,EACb,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe;YACvF,gBAAgB,EACd,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB;YAC1F,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;YACvE,aAAa,EACX,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;YACjF,iBAAiB,EACf,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB;SAC9F,CAAA;QACD,qFAAqF;QACrF,0CAA0C;QAC1C,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;YAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC9B,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;YAC5B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;gBAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;QAC5D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;YAC3B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;gBAAE,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC/D,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"WorkspaceSettingsService.js","sourceRoot":"","sources":["../../../src/modules/settings/WorkspaceSettingsService.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAOlF;;;;;;GAMG;AACH,MAAM,OAAO,wBAAwB;IAClB,QAAQ,CAA6B;IACrC,mBAAmB,CAAqB;IAEzD,YAAY,IAA0C;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAA;QAChD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAA;IACrD,CAAC;IAED,0FAA0F;IAC1F,KAAK,CAAC,GAAG,CAAC,WAAmB;QAC3B,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,0BAA0B,EAAE,CAAA;IACpF,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,MAAM,CACV,WAAmB,EACnB,KAAmC;QAEnC,MAAM,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAsB;YAC9B,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,IAAI,OAAO,CAAC,wBAAwB;YAC5F,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;YAC3D,eAAe,EACb,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe;YACvF,gBAAgB,EACd,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB;YAC1F,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB;YACvE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa;YAC3D,aAAa,EACX,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;YACjF,iBAAiB,EACf,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB;SAC9F,CAAA;QACD,qFAAqF;QACrF,0CAA0C;QAC1C,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;YAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC9B,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;YAC5B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;gBAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;QAC5D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;YAC3B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;gBAAE,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC/D,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/orchestration",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.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,14 +25,14 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ai": "^6.0.209",
|
|
28
|
-
"@cat-factory/agents": "0.
|
|
29
|
-
"@cat-factory/contracts": "0.
|
|
30
|
-
"@cat-factory/integrations": "0.21.
|
|
31
|
-
"@cat-factory/kernel": "0.
|
|
32
|
-
"@cat-factory/prompt-fragments": "0.7.
|
|
33
|
-
"@cat-factory/sandbox": "0.8.
|
|
34
|
-
"@cat-factory/spend": "0.10.
|
|
35
|
-
"@cat-factory/workspaces": "0.7.
|
|
28
|
+
"@cat-factory/agents": "0.16.0",
|
|
29
|
+
"@cat-factory/contracts": "0.30.0",
|
|
30
|
+
"@cat-factory/integrations": "0.21.5",
|
|
31
|
+
"@cat-factory/kernel": "0.33.0",
|
|
32
|
+
"@cat-factory/prompt-fragments": "0.7.28",
|
|
33
|
+
"@cat-factory/sandbox": "0.8.6",
|
|
34
|
+
"@cat-factory/spend": "0.10.1",
|
|
35
|
+
"@cat-factory/workspaces": "0.7.40"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"typescript": "7.0.1-rc",
|