kevlar-4u 1.6.8 → 1.6.10
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/__tests__/observations.test.d.ts +2 -0
- package/dist/__tests__/observations.test.d.ts.map +1 -0
- package/dist/__tests__/observations.test.js +357 -0
- package/dist/__tests__/observations.test.js.map +1 -0
- package/dist/execution/base.d.ts +4 -0
- package/dist/execution/base.d.ts.map +1 -1
- package/dist/execution/base.js +1 -0
- package/dist/execution/base.js.map +1 -1
- package/dist/execution/checkpoint.d.ts +73 -0
- package/dist/execution/checkpoint.d.ts.map +1 -0
- package/dist/execution/checkpoint.js +51 -0
- package/dist/execution/checkpoint.js.map +1 -0
- package/dist/execution/client.d.ts +62 -2
- package/dist/execution/client.d.ts.map +1 -1
- package/dist/execution/client.js +216 -18
- package/dist/execution/client.js.map +1 -1
- package/dist/execution/index.d.ts +30 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +109 -4
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/jsonParser.d.ts +2 -2
- package/dist/execution/modes/subagent.d.ts.map +1 -1
- package/dist/execution/modes/subagent.js +3 -0
- package/dist/execution/modes/subagent.js.map +1 -1
- package/dist/execution/observations.d.ts +58 -0
- package/dist/execution/observations.d.ts.map +1 -0
- package/dist/execution/observations.js +235 -0
- package/dist/execution/observations.js.map +1 -0
- package/dist/execution/plan.d.ts +123 -0
- package/dist/execution/plan.d.ts.map +1 -0
- package/dist/execution/plan.js +16 -0
- package/dist/execution/plan.js.map +1 -0
- package/dist/prompts/reviewWizard.d.ts.map +1 -1
- package/dist/prompts/reviewWizard.js +13 -0
- package/dist/prompts/reviewWizard.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/configureWizardTool.d.ts.map +1 -1
- package/dist/tools/configureWizardTool.js +5 -0
- package/dist/tools/configureWizardTool.js.map +1 -1
- package/dist/tools/continueWizardTool.d.ts +22 -0
- package/dist/tools/continueWizardTool.d.ts.map +1 -0
- package/dist/tools/continueWizardTool.js +185 -0
- package/dist/tools/continueWizardTool.js.map +1 -0
- package/dist/tools/getModesTool.js +1 -1
- package/dist/tools/getModesTool.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/reviewContentWizardTool.d.ts.map +1 -1
- package/dist/tools/reviewContentWizardTool.js +142 -35
- package/dist/tools/reviewContentWizardTool.js.map +1 -1
- package/dist/tools/reviewTool.d.ts.map +1 -1
- package/dist/tools/reviewTool.js +7 -2
- package/dist/tools/reviewTool.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observations.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/observations.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import * as os from "os";
|
|
6
|
+
import { setObservationCacheDir, recordHostStructuredObservation, recordCapabilityObservation, getHostStructuredObservation, listObservations, clearObservations, inferTaskClass, } from "../execution/observations.js";
|
|
7
|
+
let tmpDir;
|
|
8
|
+
let origForceEnv;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kevlar-obs-test-"));
|
|
11
|
+
setObservationCacheDir(tmpDir);
|
|
12
|
+
origForceEnv = process.env.KEVLAR_FORCE_HOST_STRUCTURED;
|
|
13
|
+
delete process.env.KEVLAR_FORCE_HOST_STRUCTURED;
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
17
|
+
if (origForceEnv !== undefined) {
|
|
18
|
+
process.env.KEVLAR_FORCE_HOST_STRUCTURED = origForceEnv;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
delete process.env.KEVLAR_FORCE_HOST_STRUCTURED;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
25
|
+
const FP_A = { name: "Claude", version: "1.0", transport: "stdio" };
|
|
26
|
+
const FP_B = { name: "Cursor", version: "0.5", transport: "stdio" };
|
|
27
|
+
function makeKey(fp, taskClass = "short", opts) {
|
|
28
|
+
return {
|
|
29
|
+
fingerprint: fp,
|
|
30
|
+
model: opts?.model,
|
|
31
|
+
protocolVersion: "kevlar-host-guided/v1",
|
|
32
|
+
taskClass,
|
|
33
|
+
locale: opts?.locale,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
37
|
+
// inferTaskClass
|
|
38
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
39
|
+
describe("inferTaskClass", () => {
|
|
40
|
+
it("returns 'short' for empty/undefined content", () => {
|
|
41
|
+
assert.equal(inferTaskClass(undefined), "short");
|
|
42
|
+
assert.equal(inferTaskClass(""), "short");
|
|
43
|
+
});
|
|
44
|
+
it("returns 'short' for content < 800 chars", () => {
|
|
45
|
+
assert.equal(inferTaskClass("a".repeat(100)), "short");
|
|
46
|
+
assert.equal(inferTaskClass("a".repeat(799)), "short");
|
|
47
|
+
});
|
|
48
|
+
it("returns 'medium' for 800-2999 chars", () => {
|
|
49
|
+
assert.equal(inferTaskClass("a".repeat(800)), "medium");
|
|
50
|
+
assert.equal(inferTaskClass("a".repeat(2999)), "medium");
|
|
51
|
+
});
|
|
52
|
+
it("returns 'long' for >= 3000 chars", () => {
|
|
53
|
+
assert.equal(inferTaskClass("a".repeat(3000)), "long");
|
|
54
|
+
assert.equal(inferTaskClass("a".repeat(10000)), "long");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
58
|
+
// Basic Record + Lookup
|
|
59
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
60
|
+
describe("recordHostStructuredObservation + getHostStructuredObservation", () => {
|
|
61
|
+
it("returns undefined when cache is empty", () => {
|
|
62
|
+
const result = getHostStructuredObservation(makeKey(FP_A));
|
|
63
|
+
assert.equal(result, undefined);
|
|
64
|
+
});
|
|
65
|
+
it("round-trips a positive observation", () => {
|
|
66
|
+
recordHostStructuredObservation({
|
|
67
|
+
key: makeKey(FP_A),
|
|
68
|
+
status: "format_verified",
|
|
69
|
+
reason: "kevlar_result_schema_matched",
|
|
70
|
+
});
|
|
71
|
+
const result = getHostStructuredObservation(makeKey(FP_A));
|
|
72
|
+
assert.ok(result);
|
|
73
|
+
assert.equal(result.status, "format_verified");
|
|
74
|
+
assert.equal(result.reason, "kevlar_result_schema_matched");
|
|
75
|
+
assert.ok(result.observedAt > 0);
|
|
76
|
+
assert.ok(result.expiresAt > result.observedAt);
|
|
77
|
+
});
|
|
78
|
+
it("round-trips a negative observation", () => {
|
|
79
|
+
recordHostStructuredObservation({
|
|
80
|
+
key: makeKey(FP_A, "medium"),
|
|
81
|
+
status: "unsupported",
|
|
82
|
+
reason: "host_rejected",
|
|
83
|
+
});
|
|
84
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "medium"));
|
|
85
|
+
assert.ok(result);
|
|
86
|
+
assert.equal(result.status, "unsupported");
|
|
87
|
+
assert.equal(result.reason, "host_rejected");
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
91
|
+
// TTL Expiry
|
|
92
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
93
|
+
describe("TTL expiry", () => {
|
|
94
|
+
it("does not return expired observations", () => {
|
|
95
|
+
// Record an observation with 1h TTL (likely_output_truncated)
|
|
96
|
+
recordHostStructuredObservation({
|
|
97
|
+
key: makeKey(FP_A),
|
|
98
|
+
status: "failed",
|
|
99
|
+
reason: "likely_output_truncated",
|
|
100
|
+
});
|
|
101
|
+
// Manually backdate the observation in the cache file
|
|
102
|
+
const cachePath = path.join(tmpDir, "kevlar-observations.json");
|
|
103
|
+
const raw = JSON.parse(fs.readFileSync(cachePath, "utf-8"));
|
|
104
|
+
raw.observations[0].expiresAt = Date.now() - 1000; // expired 1s ago
|
|
105
|
+
fs.writeFileSync(cachePath, JSON.stringify(raw));
|
|
106
|
+
const result = getHostStructuredObservation(makeKey(FP_A));
|
|
107
|
+
assert.equal(result, undefined);
|
|
108
|
+
});
|
|
109
|
+
it("format_verified has 7-day TTL", () => {
|
|
110
|
+
recordHostStructuredObservation({
|
|
111
|
+
key: makeKey(FP_A),
|
|
112
|
+
status: "format_verified",
|
|
113
|
+
reason: "kevlar_result_schema_matched",
|
|
114
|
+
});
|
|
115
|
+
const cachePath = path.join(tmpDir, "kevlar-observations.json");
|
|
116
|
+
const raw = JSON.parse(fs.readFileSync(cachePath, "utf-8"));
|
|
117
|
+
const obs = raw.observations[0];
|
|
118
|
+
const ttl = obs.expiresAt - obs.observedAt;
|
|
119
|
+
assert.equal(ttl, 7 * 24 * 60 * 60 * 1000);
|
|
120
|
+
});
|
|
121
|
+
it("unsupported has 24h TTL", () => {
|
|
122
|
+
recordHostStructuredObservation({
|
|
123
|
+
key: makeKey(FP_A),
|
|
124
|
+
status: "unsupported",
|
|
125
|
+
reason: "host_rejected",
|
|
126
|
+
});
|
|
127
|
+
const cachePath = path.join(tmpDir, "kevlar-observations.json");
|
|
128
|
+
const raw = JSON.parse(fs.readFileSync(cachePath, "utf-8"));
|
|
129
|
+
const obs = raw.observations[0];
|
|
130
|
+
const ttl = obs.expiresAt - obs.observedAt;
|
|
131
|
+
assert.equal(ttl, 24 * 60 * 60 * 1000);
|
|
132
|
+
});
|
|
133
|
+
it("likely_output_truncated has 1h TTL", () => {
|
|
134
|
+
recordHostStructuredObservation({
|
|
135
|
+
key: makeKey(FP_A),
|
|
136
|
+
status: "failed",
|
|
137
|
+
reason: "likely_output_truncated",
|
|
138
|
+
});
|
|
139
|
+
const cachePath = path.join(tmpDir, "kevlar-observations.json");
|
|
140
|
+
const raw = JSON.parse(fs.readFileSync(cachePath, "utf-8"));
|
|
141
|
+
const obs = raw.observations[0];
|
|
142
|
+
const ttl = obs.expiresAt - obs.observedAt;
|
|
143
|
+
assert.equal(ttl, 1 * 60 * 60 * 1000);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
147
|
+
// Fingerprint Matching
|
|
148
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
149
|
+
describe("fingerprint matching", () => {
|
|
150
|
+
it("does not match different fingerprints", () => {
|
|
151
|
+
recordHostStructuredObservation({
|
|
152
|
+
key: makeKey(FP_A),
|
|
153
|
+
status: "format_verified",
|
|
154
|
+
reason: "kevlar_result_schema_matched",
|
|
155
|
+
});
|
|
156
|
+
const result = getHostStructuredObservation(makeKey(FP_B));
|
|
157
|
+
assert.equal(result, undefined);
|
|
158
|
+
});
|
|
159
|
+
it("does not match different protocol versions", () => {
|
|
160
|
+
recordHostStructuredObservation({
|
|
161
|
+
key: { ...makeKey(FP_A), protocolVersion: "kevlar-host-guided/v1" },
|
|
162
|
+
status: "format_verified",
|
|
163
|
+
reason: "kevlar_result_schema_matched",
|
|
164
|
+
});
|
|
165
|
+
const result = getHostStructuredObservation({
|
|
166
|
+
...makeKey(FP_A),
|
|
167
|
+
protocolVersion: "kevlar-host-guided/v2",
|
|
168
|
+
});
|
|
169
|
+
assert.equal(result, undefined);
|
|
170
|
+
});
|
|
171
|
+
it("does not match when models differ", () => {
|
|
172
|
+
recordHostStructuredObservation({
|
|
173
|
+
key: makeKey(FP_A, "short", { model: "gpt-4" }),
|
|
174
|
+
status: "format_verified",
|
|
175
|
+
reason: "kevlar_result_schema_matched",
|
|
176
|
+
});
|
|
177
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "short", { model: "claude-3" }));
|
|
178
|
+
assert.equal(result, undefined);
|
|
179
|
+
});
|
|
180
|
+
it("matches when model is absent in both", () => {
|
|
181
|
+
recordHostStructuredObservation({
|
|
182
|
+
key: makeKey(FP_A), // no model
|
|
183
|
+
status: "format_verified",
|
|
184
|
+
reason: "kevlar_result_schema_matched",
|
|
185
|
+
});
|
|
186
|
+
const result = getHostStructuredObservation(makeKey(FP_A)); // no model
|
|
187
|
+
assert.ok(result);
|
|
188
|
+
assert.equal(result.status, "format_verified");
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
192
|
+
// TaskClass Fuzzy Matching
|
|
193
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
194
|
+
describe("taskClass matching", () => {
|
|
195
|
+
it("exact match: short matches short", () => {
|
|
196
|
+
recordHostStructuredObservation({
|
|
197
|
+
key: makeKey(FP_A, "short"),
|
|
198
|
+
status: "format_verified",
|
|
199
|
+
reason: "kevlar_result_schema_matched",
|
|
200
|
+
});
|
|
201
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "short"));
|
|
202
|
+
assert.ok(result);
|
|
203
|
+
assert.equal(result.status, "format_verified");
|
|
204
|
+
});
|
|
205
|
+
it("heavier task observation satisfies lighter query (long → medium)", () => {
|
|
206
|
+
recordHostStructuredObservation({
|
|
207
|
+
key: makeKey(FP_A, "long"),
|
|
208
|
+
status: "format_verified",
|
|
209
|
+
reason: "kevlar_result_schema_matched",
|
|
210
|
+
});
|
|
211
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "medium"));
|
|
212
|
+
assert.ok(result);
|
|
213
|
+
assert.equal(result.status, "format_verified");
|
|
214
|
+
});
|
|
215
|
+
it("heavier task observation satisfies lighter query (long → short)", () => {
|
|
216
|
+
recordHostStructuredObservation({
|
|
217
|
+
key: makeKey(FP_A, "long"),
|
|
218
|
+
status: "unsupported",
|
|
219
|
+
reason: "host_rejected",
|
|
220
|
+
});
|
|
221
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "short"));
|
|
222
|
+
assert.ok(result);
|
|
223
|
+
assert.equal(result.status, "unsupported");
|
|
224
|
+
});
|
|
225
|
+
it("lighter task observation returns with isLighter flag (short → long)", () => {
|
|
226
|
+
recordHostStructuredObservation({
|
|
227
|
+
key: makeKey(FP_A, "short"),
|
|
228
|
+
status: "format_verified",
|
|
229
|
+
reason: "kevlar_result_schema_matched",
|
|
230
|
+
});
|
|
231
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "long"));
|
|
232
|
+
assert.ok(result);
|
|
233
|
+
assert.equal(result.status, "format_verified");
|
|
234
|
+
assert.equal(result.isLighter, true);
|
|
235
|
+
});
|
|
236
|
+
it("prefers exact match over lighter match", () => {
|
|
237
|
+
// Record both a short (lighter) and a medium (exact) observation
|
|
238
|
+
recordHostStructuredObservation({
|
|
239
|
+
key: makeKey(FP_A, "short"),
|
|
240
|
+
status: "format_verified",
|
|
241
|
+
reason: "kevlar_result_schema_matched",
|
|
242
|
+
});
|
|
243
|
+
recordHostStructuredObservation({
|
|
244
|
+
key: makeKey(FP_A, "medium"),
|
|
245
|
+
status: "unsupported",
|
|
246
|
+
reason: "host_rejected",
|
|
247
|
+
});
|
|
248
|
+
// Query for medium → should get the exact medium match (unsupported), not the lighter short one
|
|
249
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "medium"));
|
|
250
|
+
assert.ok(result);
|
|
251
|
+
assert.equal(result.status, "unsupported");
|
|
252
|
+
assert.equal(result.reason, "host_rejected");
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
256
|
+
// KEVLAR_FORCE_HOST_STRUCTURED bypass
|
|
257
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
258
|
+
describe("KEVLAR_FORCE_HOST_STRUCTURED bypass", () => {
|
|
259
|
+
it("getHostStructuredObservation returns undefined when env is set", () => {
|
|
260
|
+
recordHostStructuredObservation({
|
|
261
|
+
key: makeKey(FP_A),
|
|
262
|
+
status: "format_verified",
|
|
263
|
+
reason: "kevlar_result_schema_matched",
|
|
264
|
+
});
|
|
265
|
+
process.env.KEVLAR_FORCE_HOST_STRUCTURED = "true";
|
|
266
|
+
const result = getHostStructuredObservation(makeKey(FP_A));
|
|
267
|
+
assert.equal(result, undefined);
|
|
268
|
+
});
|
|
269
|
+
it("recordHostStructuredObservation does not persist when env is set", () => {
|
|
270
|
+
process.env.KEVLAR_FORCE_HOST_STRUCTURED = "true";
|
|
271
|
+
recordHostStructuredObservation({
|
|
272
|
+
key: makeKey(FP_A),
|
|
273
|
+
status: "format_verified",
|
|
274
|
+
reason: "kevlar_result_schema_matched",
|
|
275
|
+
});
|
|
276
|
+
// Remove env and check — cache should still be empty
|
|
277
|
+
delete process.env.KEVLAR_FORCE_HOST_STRUCTURED;
|
|
278
|
+
const result = getHostStructuredObservation(makeKey(FP_A));
|
|
279
|
+
assert.equal(result, undefined);
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
283
|
+
// recordCapabilityObservation convenience wrapper
|
|
284
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
285
|
+
describe("recordCapabilityObservation", () => {
|
|
286
|
+
it("creates a properly keyed observation", () => {
|
|
287
|
+
recordCapabilityObservation(FP_A, "medium", "format_verified", "kevlar_result_schema_matched", { model: "gpt-4", locale: "zh-CN" });
|
|
288
|
+
const result = getHostStructuredObservation(makeKey(FP_A, "medium", { model: "gpt-4", locale: "zh-CN" }));
|
|
289
|
+
assert.ok(result);
|
|
290
|
+
assert.equal(result.status, "format_verified");
|
|
291
|
+
});
|
|
292
|
+
it("records negative observation", () => {
|
|
293
|
+
recordCapabilityObservation(FP_B, "long", "unsupported", "host_rejected");
|
|
294
|
+
const result = getHostStructuredObservation(makeKey(FP_B, "long"));
|
|
295
|
+
assert.ok(result);
|
|
296
|
+
assert.equal(result.status, "unsupported");
|
|
297
|
+
assert.equal(result.reason, "host_rejected");
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
301
|
+
// listObservations + clearObservations
|
|
302
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
303
|
+
describe("listObservations + clearObservations", () => {
|
|
304
|
+
it("listObservations returns all non-expired entries", () => {
|
|
305
|
+
recordHostStructuredObservation({
|
|
306
|
+
key: makeKey(FP_A, "short"),
|
|
307
|
+
status: "format_verified",
|
|
308
|
+
reason: "kevlar_result_schema_matched",
|
|
309
|
+
});
|
|
310
|
+
recordHostStructuredObservation({
|
|
311
|
+
key: makeKey(FP_B, "long"),
|
|
312
|
+
status: "unsupported",
|
|
313
|
+
reason: "host_rejected",
|
|
314
|
+
});
|
|
315
|
+
const all = listObservations();
|
|
316
|
+
assert.equal(all.length, 2);
|
|
317
|
+
});
|
|
318
|
+
it("clearObservations removes all entries", () => {
|
|
319
|
+
recordHostStructuredObservation({
|
|
320
|
+
key: makeKey(FP_A),
|
|
321
|
+
status: "format_verified",
|
|
322
|
+
reason: "kevlar_result_schema_matched",
|
|
323
|
+
});
|
|
324
|
+
clearObservations();
|
|
325
|
+
const all = listObservations();
|
|
326
|
+
assert.equal(all.length, 0);
|
|
327
|
+
const result = getHostStructuredObservation(makeKey(FP_A));
|
|
328
|
+
assert.equal(result, undefined);
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
332
|
+
// Purge on record (same fingerprint, different version)
|
|
333
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
334
|
+
describe("purge on record", () => {
|
|
335
|
+
it("purges old version entries for same fingerprint when recording new version", () => {
|
|
336
|
+
const fpV1 = { name: "Claude", version: "1.0", transport: "stdio" };
|
|
337
|
+
const fpV2 = { name: "Claude", version: "2.0", transport: "stdio" };
|
|
338
|
+
recordHostStructuredObservation({
|
|
339
|
+
key: makeKey(fpV1),
|
|
340
|
+
status: "format_verified",
|
|
341
|
+
reason: "kevlar_result_schema_matched",
|
|
342
|
+
});
|
|
343
|
+
// Record new version — old one should be purged
|
|
344
|
+
recordHostStructuredObservation({
|
|
345
|
+
key: makeKey(fpV2),
|
|
346
|
+
status: "format_verified",
|
|
347
|
+
reason: "kevlar_result_schema_matched",
|
|
348
|
+
});
|
|
349
|
+
// Old version should not be found
|
|
350
|
+
const oldResult = getHostStructuredObservation(makeKey(fpV1));
|
|
351
|
+
assert.equal(oldResult, undefined);
|
|
352
|
+
// New version should be found
|
|
353
|
+
const newResult = getHostStructuredObservation(makeKey(fpV2));
|
|
354
|
+
assert.ok(newResult);
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
//# sourceMappingURL=observations.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observations.test.js","sourceRoot":"","sources":["../../src/__tests__/observations.test.ts"],"names":[],"mappings":"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"}
|
package/dist/execution/base.d.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { Persona } from "../utils/parser.js";
|
|
5
5
|
import type { DimensionsConfig } from "./dimensions.js";
|
|
6
|
+
export type { ExecutionBackend, ExecutionPlan, HostOrchestrationStrategy, HostStructuredCapabilityStatus, DispatchFailureReason, PreAuditContext, ClientFingerprint, TaskClass, StructuredObservationKey, HostStructuredObservation, SamplingExecutionPolicy, } from "./plan.js";
|
|
7
|
+
export { DEFAULT_SAMPLING_POLICY } from "./plan.js";
|
|
6
8
|
export type ExecutionMode = "orchestration" | "mcp_sampling" | "direct_api" | "mcp_subagent";
|
|
7
9
|
export type ResolveableMode = ExecutionMode | "auto";
|
|
8
10
|
export interface BudgetPolicy {
|
|
@@ -91,6 +93,8 @@ export interface ExecutionHandler {
|
|
|
91
93
|
mode: ExecutionMode;
|
|
92
94
|
/** Check if current environment supports this mode */
|
|
93
95
|
canExecute(): boolean;
|
|
96
|
+
/** Get specific reason why it cannot be executed */
|
|
97
|
+
getReason?: () => string;
|
|
94
98
|
/** Execute the review */
|
|
95
99
|
execute(ctx: ExecutionContext): Promise<ExecutionResult>;
|
|
96
100
|
/** Default priority (lower number = higher priority) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/execution/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/execution/base.ts"],"names":[],"mappings":"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"}
|
package/dist/execution/base.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Base types and interfaces for Kevlar-4u execution modes
|
|
3
3
|
*/
|
|
4
|
+
export { DEFAULT_SAMPLING_POLICY } from "./plan.js";
|
|
4
5
|
/** Build a MECP-compliant Frame envelope. */
|
|
5
6
|
export function toFrame(source, destination, correlationId, type, payload, traceId) {
|
|
6
7
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/execution/base.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/execution/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAwFpD,6CAA6C;AAC7C,MAAM,UAAU,OAAO,CACrB,MAAc,EACd,WAAmB,EACnB,aAAqB,EACrB,IAAmB,EACnB,OAAU,EACV,OAAgB;IAEhB,OAAO;QACL,MAAM;QACN,WAAW;QACX,aAAa;QACb,OAAO;QACP,IAAI;QACJ,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpoint & Execution Transition System (v3)
|
|
3
|
+
*
|
|
4
|
+
* Defines the audit state machine checkpoints and the ExecutionTransition
|
|
5
|
+
* record that captures downgrade events when a structured collaboration
|
|
6
|
+
* attempt fails and Kevlar falls back to standard host orchestration.
|
|
7
|
+
*/
|
|
8
|
+
import type { ExecutionPlan, DispatchFailureReason, ClientFingerprint, HostStructuredCapabilityStatus } from "./plan.js";
|
|
9
|
+
/**
|
|
10
|
+
* Key milestones in the review wizard state machine.
|
|
11
|
+
*
|
|
12
|
+
* Structured collaboration is initiated after `step0_completed`.
|
|
13
|
+
* If it fails, the state machine resumes from `step0_completed`
|
|
14
|
+
* with `strategy: "standard"`.
|
|
15
|
+
*/
|
|
16
|
+
export type AuditCheckpoint = "initiated" | "step0_completed" | "preaudit_started" | "preaudit_completed" | "persona_inventory_completed";
|
|
17
|
+
/**
|
|
18
|
+
* Immutable record of a downgrade event.
|
|
19
|
+
*
|
|
20
|
+
* Created when a structured collaboration attempt fails and Kevlar
|
|
21
|
+
* switches to standard host orchestration. Appended to the
|
|
22
|
+
* executionTransitions log for observability.
|
|
23
|
+
*/
|
|
24
|
+
export interface ExecutionTransition {
|
|
25
|
+
/** The ExecutionPlan before the downgrade. */
|
|
26
|
+
from: ExecutionPlan;
|
|
27
|
+
/** The ExecutionPlan after the downgrade. */
|
|
28
|
+
to: ExecutionPlan;
|
|
29
|
+
/** What caused the structured attempt to fail. */
|
|
30
|
+
reason: DispatchFailureReason;
|
|
31
|
+
/** Unix timestamp (ms) when the transition occurred. */
|
|
32
|
+
at: number;
|
|
33
|
+
/** Which checkpoint the state machine will resume from. */
|
|
34
|
+
checkpoint: AuditCheckpoint;
|
|
35
|
+
/** Fingerprint of the Host that was being used (for telemetry). */
|
|
36
|
+
clientFingerprint?: ClientFingerprint;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Minimal wizard state shape required by resumeFromStructuredFailure().
|
|
40
|
+
*
|
|
41
|
+
* This avoids circular imports by not depending on the full ReviewWizardState
|
|
42
|
+
* from the tools layer. Any wizard state that satisfies this interface
|
|
43
|
+
* can be passed to the resume function.
|
|
44
|
+
*/
|
|
45
|
+
export interface StructuredFailureResumeState {
|
|
46
|
+
executionPlan?: ExecutionPlan;
|
|
47
|
+
checkpoint?: AuditCheckpoint;
|
|
48
|
+
structuredDowngraded?: boolean;
|
|
49
|
+
capabilityStatus?: HostStructuredCapabilityStatus;
|
|
50
|
+
executionTransitions?: ExecutionTransition[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Recover from a failed structured collaboration attempt.
|
|
54
|
+
*
|
|
55
|
+
* - Switches executionPlan to `host_orchestration + standard`
|
|
56
|
+
* - Marks `structuredDowngraded = true` to prevent repeated attempts
|
|
57
|
+
* - Resets checkpoint to `step0_completed`
|
|
58
|
+
* - Sets capabilityStatus based on the failure reason
|
|
59
|
+
* - Appends an ExecutionTransition for observability
|
|
60
|
+
*
|
|
61
|
+
* The caller must separately handle:
|
|
62
|
+
* - Preserving Step 0 artifacts (preAuditContext, content, tier, etc.)
|
|
63
|
+
* - Cleaning structured attempt scratch fields
|
|
64
|
+
* - Restarting the audit pipeline from step0_completed
|
|
65
|
+
*/
|
|
66
|
+
export declare function resumeFromStructuredFailure(state: StructuredFailureResumeState, reason: DispatchFailureReason): {
|
|
67
|
+
executionPlan: ExecutionPlan;
|
|
68
|
+
checkpoint: AuditCheckpoint;
|
|
69
|
+
structuredDowngraded: true;
|
|
70
|
+
capabilityStatus: HostStructuredCapabilityStatus;
|
|
71
|
+
executionTransitions: ExecutionTransition[];
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/execution/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,WAAW,CAAC;AAKzH;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,6BAA6B,CAAC;AAIlC;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,IAAI,EAAE,aAAa,CAAC;IACpB,6CAA6C;IAC7C,EAAE,EAAE,aAAa,CAAC;IAClB,kDAAkD;IAClD,MAAM,EAAE,qBAAqB,CAAC;IAC9B,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,UAAU,EAAE,eAAe,CAAC;IAC5B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAID;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,8BAA8B,CAAC;IAClD,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,4BAA4B,EACnC,MAAM,EAAE,qBAAqB,GAC5B;IACD,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,eAAe,CAAC;IAC5B,oBAAoB,EAAE,IAAI,CAAC;IAC3B,gBAAgB,EAAE,8BAA8B,CAAC;IACjD,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C,CA+BA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpoint & Execution Transition System (v3)
|
|
3
|
+
*
|
|
4
|
+
* Defines the audit state machine checkpoints and the ExecutionTransition
|
|
5
|
+
* record that captures downgrade events when a structured collaboration
|
|
6
|
+
* attempt fails and Kevlar falls back to standard host orchestration.
|
|
7
|
+
*/
|
|
8
|
+
import { getClientFingerprint } from "./client.js";
|
|
9
|
+
/**
|
|
10
|
+
* Recover from a failed structured collaboration attempt.
|
|
11
|
+
*
|
|
12
|
+
* - Switches executionPlan to `host_orchestration + standard`
|
|
13
|
+
* - Marks `structuredDowngraded = true` to prevent repeated attempts
|
|
14
|
+
* - Resets checkpoint to `step0_completed`
|
|
15
|
+
* - Sets capabilityStatus based on the failure reason
|
|
16
|
+
* - Appends an ExecutionTransition for observability
|
|
17
|
+
*
|
|
18
|
+
* The caller must separately handle:
|
|
19
|
+
* - Preserving Step 0 artifacts (preAuditContext, content, tier, etc.)
|
|
20
|
+
* - Cleaning structured attempt scratch fields
|
|
21
|
+
* - Restarting the audit pipeline from step0_completed
|
|
22
|
+
*/
|
|
23
|
+
export function resumeFromStructuredFailure(state, reason) {
|
|
24
|
+
const from = state.executionPlan ?? {
|
|
25
|
+
backend: "host_orchestration",
|
|
26
|
+
strategy: "structured",
|
|
27
|
+
};
|
|
28
|
+
const to = {
|
|
29
|
+
backend: "host_orchestration",
|
|
30
|
+
strategy: "standard",
|
|
31
|
+
};
|
|
32
|
+
const transition = {
|
|
33
|
+
from,
|
|
34
|
+
to,
|
|
35
|
+
reason,
|
|
36
|
+
at: Date.now(),
|
|
37
|
+
checkpoint: "step0_completed",
|
|
38
|
+
clientFingerprint: getClientFingerprint(),
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
executionPlan: to,
|
|
42
|
+
checkpoint: "step0_completed",
|
|
43
|
+
structuredDowngraded: true,
|
|
44
|
+
capabilityStatus: reason === "host_rejected" ? "unsupported" : "failed",
|
|
45
|
+
executionTransitions: [
|
|
46
|
+
...(state.executionTransitions ?? []),
|
|
47
|
+
transition,
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/execution/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AA2DnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAmC,EACnC,MAA6B;IAQ7B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,IAAI;QAClC,OAAO,EAAE,oBAA6B;QACtC,QAAQ,EAAE,YAAqB;KAChC,CAAC;IAEF,MAAM,EAAE,GAAkB;QACxB,OAAO,EAAE,oBAA6B;QACtC,QAAQ,EAAE,UAAmB;KAC9B,CAAC;IAEF,MAAM,UAAU,GAAwB;QACtC,IAAI;QACJ,EAAE;QACF,MAAM;QACN,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,UAAU,EAAE,iBAAiB;QAC7B,iBAAiB,EAAE,oBAAoB,EAAE;KAC1C,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,iBAAiB;QAC7B,oBAAoB,EAAE,IAAI;QAC1B,gBAAgB,EACd,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ;QACvD,oBAAoB,EAAE;YACpB,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC;YACrC,UAAU;SACX;KACF,CAAC;AACJ,CAAC"}
|