zelari-code 2.1.0 → 2.1.2

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 (114) hide show
  1. package/README.md +4 -4
  2. package/package.json +8 -5
  3. package/dist/cli/ast/engine.test.js +0 -101
  4. package/dist/cli/ast/engine.test.js.map +0 -1
  5. package/dist/cli/ast/tools.test.js +0 -124
  6. package/dist/cli/ast/tools.test.js.map +0 -1
  7. package/dist/cli/headless.test.js +0 -107
  8. package/dist/cli/headless.test.js.map +0 -1
  9. package/dist/cli/headlessE2eSession.test.js +0 -189
  10. package/dist/cli/headlessE2eSession.test.js.map +0 -1
  11. package/dist/cli/headlessHistorySeed.test.js +0 -158
  12. package/dist/cli/headlessHistorySeed.test.js.map +0 -1
  13. package/dist/cli/headlessSessionEvent.test.js +0 -83
  14. package/dist/cli/headlessSessionEvent.test.js.map +0 -1
  15. package/dist/cli/headlessSpine.test.js +0 -153
  16. package/dist/cli/headlessSpine.test.js.map +0 -1
  17. package/dist/cli/hooks/observationStore.test.js +0 -135
  18. package/dist/cli/hooks/observationStore.test.js.map +0 -1
  19. package/dist/cli/hooks/sessionSurface.test.js +0 -112
  20. package/dist/cli/hooks/sessionSurface.test.js.map +0 -1
  21. package/dist/cli/kraken/candidateRegistry.test.js +0 -211
  22. package/dist/cli/kraken/candidateRegistry.test.js.map +0 -1
  23. package/dist/cli/kraken/completionGate.test.js +0 -172
  24. package/dist/cli/kraken/completionGate.test.js.map +0 -1
  25. package/dist/cli/kraken/evidenceAnchoring.test.js +0 -92
  26. package/dist/cli/kraken/evidenceAnchoring.test.js.map +0 -1
  27. package/dist/cli/kraken/evidenceProvenance.test.js +0 -113
  28. package/dist/cli/kraken/evidenceProvenance.test.js.map +0 -1
  29. package/dist/cli/kraken/executor.workbench.test.js +0 -134
  30. package/dist/cli/kraken/executor.workbench.test.js.map +0 -1
  31. package/dist/cli/kraken/metrics.test.js +0 -145
  32. package/dist/cli/kraken/metrics.test.js.map +0 -1
  33. package/dist/cli/kraken/nativeVerification.test.js +0 -207
  34. package/dist/cli/kraken/nativeVerification.test.js.map +0 -1
  35. package/dist/cli/kraken/planner.test.js +0 -43
  36. package/dist/cli/kraken/planner.test.js.map +0 -1
  37. package/dist/cli/kraken/scriptPlanner.test.js +0 -152
  38. package/dist/cli/kraken/scriptPlanner.test.js.map +0 -1
  39. package/dist/cli/kraken/selectionPlaybook.test.js +0 -55
  40. package/dist/cli/kraken/selectionPlaybook.test.js.map +0 -1
  41. package/dist/cli/kraken/skillSuggest.test.js +0 -157
  42. package/dist/cli/kraken/skillSuggest.test.js.map +0 -1
  43. package/dist/cli/kraken/strictDefaults.test.js +0 -149
  44. package/dist/cli/kraken/strictDefaults.test.js.map +0 -1
  45. package/dist/cli/kraken/strictGatePackIndependence.test.js +0 -112
  46. package/dist/cli/kraken/strictGatePackIndependence.test.js.map +0 -1
  47. package/dist/cli/kraken/turnRuntime.test.js +0 -377
  48. package/dist/cli/kraken/turnRuntime.test.js.map +0 -1
  49. package/dist/cli/kraken/verificationBridge.session.test.js +0 -104
  50. package/dist/cli/kraken/verificationBridge.session.test.js.map +0 -1
  51. package/dist/cli/kraken/verificationBridge.test.js +0 -177
  52. package/dist/cli/kraken/verificationBridge.test.js.map +0 -1
  53. package/dist/cli/kraken/verifier.test.js +0 -232
  54. package/dist/cli/kraken/verifier.test.js.map +0 -1
  55. package/dist/cli/kraken/verifierAdvisoryLock.test.js +0 -154
  56. package/dist/cli/kraken/verifierAdvisoryLock.test.js.map +0 -1
  57. package/dist/cli/kraken/verifierLifecycle.test.js +0 -181
  58. package/dist/cli/kraken/verifierLifecycle.test.js.map +0 -1
  59. package/dist/cli/kraken/verifierRoundTrip.test.js +0 -166
  60. package/dist/cli/kraken/verifierRoundTrip.test.js.map +0 -1
  61. package/dist/cli/kraken/verifierSettings.test.js +0 -237
  62. package/dist/cli/kraken/verifierSettings.test.js.map +0 -1
  63. package/dist/cli/kraken/verifyReport.test.js +0 -111
  64. package/dist/cli/kraken/verifyReport.test.js.map +0 -1
  65. package/dist/cli/kraken/weaknessMeter.test.js +0 -212
  66. package/dist/cli/kraken/weaknessMeter.test.js.map +0 -1
  67. package/dist/cli/kraken/workbench.test.js +0 -253
  68. package/dist/cli/kraken/workbench.test.js.map +0 -1
  69. package/dist/cli/kraken/workbenchView.test.js +0 -130
  70. package/dist/cli/kraken/workbenchView.test.js.map +0 -1
  71. package/dist/cli/legacyContextIsolation.test.js +0 -65
  72. package/dist/cli/legacyContextIsolation.test.js.map +0 -1
  73. package/dist/cli/lsp/tools.test.js +0 -90
  74. package/dist/cli/lsp/tools.test.js.map +0 -1
  75. package/dist/cli/missionContinuation.test.js +0 -117
  76. package/dist/cli/missionContinuation.test.js.map +0 -1
  77. package/dist/cli/profileMatrix.test.js +0 -130
  78. package/dist/cli/profileMatrix.test.js.map +0 -1
  79. package/dist/cli/provider/capabilities.test.js +0 -46
  80. package/dist/cli/provider/capabilities.test.js.map +0 -1
  81. package/dist/cli/provider/openai-compatible.timeout.test.js +0 -72
  82. package/dist/cli/provider/openai-compatible.timeout.test.js.map +0 -1
  83. package/dist/cli/providerConfig.test.js +0 -85
  84. package/dist/cli/providerConfig.test.js.map +0 -1
  85. package/dist/cli/sessionReplayInvariant.test.js +0 -187
  86. package/dist/cli/sessionReplayInvariant.test.js.map +0 -1
  87. package/dist/cli/sessionSpine.test.js +0 -171
  88. package/dist/cli/sessionSpine.test.js.map +0 -1
  89. package/dist/cli/thinking.test.js +0 -214
  90. package/dist/cli/thinking.test.js.map +0 -1
  91. package/dist/cli/tools/inspectCommand.schema.test.js +0 -82
  92. package/dist/cli/tools/inspectCommand.schema.test.js.map +0 -1
  93. package/dist/cli/tools/inspectCommand.test.js +0 -311
  94. package/dist/cli/tools/inspectCommand.test.js.map +0 -1
  95. package/dist/cli/tools/krakenCsvFanout.test.js +0 -200
  96. package/dist/cli/tools/krakenCsvFanout.test.js.map +0 -1
  97. package/dist/cli/tools/krakenSelectTool.test.js +0 -246
  98. package/dist/cli/tools/krakenSelectTool.test.js.map +0 -1
  99. package/dist/cli/tools/observeBatch.test.js +0 -329
  100. package/dist/cli/tools/observeBatch.test.js.map +0 -1
  101. package/dist/cli/tools/taskTool.dynamicChecks.test.js +0 -156
  102. package/dist/cli/tools/taskTool.dynamicChecks.test.js.map +0 -1
  103. package/dist/cli/tools/taskTool.planSafety.test.js +0 -280
  104. package/dist/cli/tools/taskTool.planSafety.test.js.map +0 -1
  105. package/dist/cli/tools/taskTool.verifyReport.test.js +0 -140
  106. package/dist/cli/tools/taskTool.verifyReport.test.js.map +0 -1
  107. package/dist/cli/utils/contextGrowthSummary.test.js +0 -74
  108. package/dist/cli/utils/contextGrowthSummary.test.js.map +0 -1
  109. package/dist/cli/workspace/planDriftCheck.test.js +0 -146
  110. package/dist/cli/workspace/planDriftCheck.test.js.map +0 -1
  111. package/dist/cli/workspace/planStore.test.js +0 -295
  112. package/dist/cli/workspace/planStore.test.js.map +0 -1
  113. package/dist/cli/zelariMission.test.js +0 -44
  114. package/dist/cli/zelariMission.test.js.map +0 -1
@@ -1,43 +0,0 @@
1
- /**
2
- * Tests for the planner system prompt builder.
3
- *
4
- * Today the only knob is the Bennett's Razor opt-in. Future knobs (e.g.
5
- * "include the Gauntlet Loop recipe", "include an example plan") belong
6
- * here as well — keep all prompt-shape decisions in one tested place.
7
- *
8
- * @since v1.31.x — Bennett's Razor opt-in
9
- */
10
- import { describe, expect, it } from 'vitest';
11
- import { KRAKEN_PLANNER_SYSTEM_PROMPT, buildPlannerSystemPrompt, } from './planner.js';
12
- describe('buildPlannerSystemPrompt', () => {
13
- it('returns the base prompt unchanged when the env var is unset', () => {
14
- expect(buildPlannerSystemPrompt({})).toBe(KRAKEN_PLANNER_SYSTEM_PROMPT);
15
- expect(buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: '' })).toBe(KRAKEN_PLANNER_SYSTEM_PROMPT);
16
- });
17
- it('returns the base prompt for non-truthy env values', () => {
18
- expect(buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: '0' })).toBe(KRAKEN_PLANNER_SYSTEM_PROMPT);
19
- expect(buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: 'false' })).toBe(KRAKEN_PLANNER_SYSTEM_PROMPT);
20
- expect(buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: 'no' })).toBe(KRAKEN_PLANNER_SYSTEM_PROMPT);
21
- });
22
- it('appends the Bennett\'s Razor section when ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR=1', () => {
23
- const prompt = buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: '1' });
24
- expect(prompt).toContain(KRAKEN_PLANNER_SYSTEM_PROMPT);
25
- expect(prompt).toMatch(/Bennett/i);
26
- expect(prompt).toMatch(/assumes? the least/i);
27
- expect(prompt).toMatch(/tie-breaker/i);
28
- expect(prompt.length).toBeGreaterThan(KRAKEN_PLANNER_SYSTEM_PROMPT.length + 200);
29
- });
30
- it('also accepts "true" (case-insensitive) as truthy', () => {
31
- const prompt = buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: 'TRUE' });
32
- expect(prompt).toMatch(/Bennett/i);
33
- });
34
- it('appends the section AFTER the base prompt (not before)', () => {
35
- const prompt = buildPlannerSystemPrompt({ ZELARI_KRAKEN_PLANNER_BENNETTS_RAZOR: '1' });
36
- const baseIdx = prompt.indexOf(KRAKEN_PLANNER_SYSTEM_PROMPT);
37
- const razorIdx = prompt.indexOf("Bennett's Razor");
38
- expect(baseIdx).toBe(0);
39
- expect(razorIdx).toBeGreaterThan(0);
40
- expect(razorIdx).toBeGreaterThan(KRAKEN_PLANNER_SYSTEM_PROMPT.length);
41
- });
42
- });
43
- //# sourceMappingURL=planner.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planner.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/planner.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACxE,MAAM,CAAC,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACjF,4BAA4B,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAClF,4BAA4B,CAC7B,CAAC;QACF,MAAM,CAAC,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CACtF,4BAA4B,CAC7B,CAAC;QACF,MAAM,CAAC,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACnF,4BAA4B,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,4BAA4B,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,152 +0,0 @@
1
- /**
2
- * Kraken script planner — tests.
3
- *
4
- * Covers:
5
- * - `extractCodeBlock` — markdown fence stripping
6
- * - `planScript` — happy path, retry on compile failure, empty response
7
- *
8
- * Tests pass a `llmClient` override so the planner never hits the network.
9
- */
10
- import { describe, it, expect } from 'vitest';
11
- import { promises as fs } from 'node:fs';
12
- import os from 'node:os';
13
- import path from 'node:path';
14
- import { extractCodeBlock, planScript, KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT, } from './scriptPlanner.js';
15
- function fakeClient(responses) {
16
- const calls = [];
17
- let i = 0;
18
- const client = {
19
- async complete({ system, user }) {
20
- calls.push(user);
21
- const out = responses[i] ?? responses[responses.length - 1] ?? '';
22
- i += 1;
23
- // Sanity: the system prompt should mention the SDK.
24
- if (!system.includes('tentacle')) {
25
- throw new Error('system prompt missing tentacle mention');
26
- }
27
- return out;
28
- },
29
- };
30
- return { client, calls };
31
- }
32
- describe('extractCodeBlock', () => {
33
- it('strips a ```ts fence', () => {
34
- expect(extractCodeBlock('```ts\nconst x = 1;\n```', 'ts')).toBe('const x = 1;');
35
- });
36
- it('strips a ```typescript fence', () => {
37
- expect(extractCodeBlock('```typescript\nconst x = 1;\n```', 'ts')).toBe('const x = 1;');
38
- });
39
- it('strips a ``` fence with no language', () => {
40
- expect(extractCodeBlock('```\nconst x = 1;\n```', 'ts')).toBe('const x = 1;');
41
- });
42
- it('returns the original text if no fence is present', () => {
43
- const src = 'const x = 1;';
44
- expect(extractCodeBlock(src, 'ts')).toBe(src);
45
- });
46
- it('trims surrounding whitespace', () => {
47
- expect(extractCodeBlock(' \n const x = 1;\n ', 'ts')).toBe('const x = 1;');
48
- });
49
- });
50
- describe('KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT', () => {
51
- it('mentions the SDK capabilities', () => {
52
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('tentacle');
53
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('merge');
54
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('while_');
55
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('until');
56
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('checkpoint');
57
- });
58
- it('warns against process / require / Buffer', () => {
59
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('process');
60
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('require');
61
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toContain('Buffer');
62
- });
63
- it('says return ONLY code (no fence)', () => {
64
- expect(KRAKEN_SCRIPT_PLANNER_SYSTEM_PROMPT).toMatch(/no markdown fence/i);
65
- });
66
- });
67
- describe('planScript', () => {
68
- it('writes a compilable plan to .zelari/kraken/runs/<graphId>/plan.ts', async () => {
69
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'kraken-scriptplan-'));
70
- const goodSource = `
71
- import { tentacle, merge } from '@zelari/kraken-runtime';
72
- const a = await tentacle({ kind: 'explore', label: 'map', prompt: 'x' });
73
- await merge([a]);
74
- `;
75
- const { client, calls } = fakeClient([goodSource]);
76
- const result = await planScript({
77
- prompt: 'map the auth system',
78
- graphId: 'g-happy',
79
- cwd: tmp,
80
- llmClient: client,
81
- });
82
- expect(result.compiled).toBe(true);
83
- expect(result.attempts).toBe(1);
84
- expect(result.source).toContain("import { tentacle");
85
- expect(calls).toHaveLength(1);
86
- // The file is on disk.
87
- const written = await fs.readFile(result.planPath, 'utf8');
88
- expect(written).toBe(goodSource.trim());
89
- // Path is the expected one.
90
- expect(result.planPath).toBe(path.join(tmp, '.zelari', 'kraken', 'runs', 'g-happy', 'plan.ts'));
91
- });
92
- it('retries on compile failure and succeeds on the second attempt', async () => {
93
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'kraken-scriptplan-'));
94
- // A real SYNTAX error: unbalanced brace. esbuild fails on parse.
95
- const broken = `function oops( { return 1;`;
96
- const good = `import { log } from '@zelari/kraken-runtime';\nlog('hello');`;
97
- const { client, calls } = fakeClient([broken, good]);
98
- const result = await planScript({
99
- prompt: 'do a thing',
100
- graphId: 'g-retry',
101
- cwd: tmp,
102
- llmClient: client,
103
- });
104
- expect(result.attempts).toBe(2);
105
- expect(result.compiled).toBe(true);
106
- expect(calls).toHaveLength(2);
107
- // The corrective user message should mention the previous error.
108
- expect(calls[1]).toMatch(/failed to compile/i);
109
- });
110
- it('throws after MAX_PLAN_ATTEMPTS on persistent compile failure', async () => {
111
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'kraken-scriptplan-'));
112
- const broken = `function oops( { return 1;`;
113
- const { client } = fakeClient([broken, broken]);
114
- await expect(planScript({
115
- prompt: 'still broken',
116
- graphId: 'g-fail',
117
- cwd: tmp,
118
- llmClient: client,
119
- })).rejects.toThrowError(/failed to produce a compilable plan/);
120
- });
121
- it('retries on empty response and succeeds on the second attempt', async () => {
122
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'kraken-scriptplan-'));
123
- const good = `import { log } from '@zelari/kraken-runtime';\nlog('ok');`;
124
- const { client } = fakeClient(['', good]);
125
- const result = await planScript({
126
- prompt: 'empty first',
127
- graphId: 'g-empty',
128
- cwd: tmp,
129
- llmClient: client,
130
- });
131
- expect(result.attempts).toBe(2);
132
- expect(result.compiled).toBe(true);
133
- });
134
- it('strips a ```ts fence from the LLM reply', async () => {
135
- const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'kraken-scriptplan-'));
136
- const fenced = '```ts\nimport { log } from \'@zelari/kraken-runtime\';\nlog(\'ok\');\n```';
137
- const { client } = fakeClient([fenced]);
138
- const result = await planScript({
139
- prompt: 'fenced',
140
- graphId: 'g-fence',
141
- cwd: tmp,
142
- llmClient: client,
143
- });
144
- expect(result.compiled).toBe(true);
145
- expect(result.source.startsWith('import')).toBe(true);
146
- expect(result.source).not.toContain('```');
147
- });
148
- it('rejects an empty prompt (Zod schema)', async () => {
149
- await expect(planScript({ prompt: '', llmClient: fakeClient(['']).client })).rejects.toThrowError(/prompt|Too small/i);
150
- });
151
- });
152
- //# sourceMappingURL=scriptPlanner.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scriptPlanner.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/scriptPlanner.test.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import { describe, it, expect, afterEach } from 'vitest';
2
- import { krakenSelectionPlaybook } from './selectionPlaybook.js';
3
- import { KRAKEN_LEAD_PLAYBOOK_MODULE } from '@zelari/core/skills';
4
- const FLAG = 'ZELARI_KRAKEN_SELECTION';
5
- describe('krakenSelectionPlaybook (Fase 5 — adaptive playbook)', () => {
6
- const prev = process.env[FLAG];
7
- afterEach(() => {
8
- if (prev === undefined)
9
- delete process.env[FLAG];
10
- else
11
- process.env[FLAG] = prev;
12
- });
13
- it('flag off ⇒ no module (prompt byte-identical, regression guard)', () => {
14
- delete process.env[FLAG];
15
- expect(krakenSelectionPlaybook(true)).toEqual([]);
16
- });
17
- it('non-kraken call site ⇒ no module even with flag on', () => {
18
- process.env[FLAG] = '1';
19
- expect(krakenSelectionPlaybook(false)).toEqual([]);
20
- });
21
- it('flag on + kraken path ⇒ exactly one module', () => {
22
- process.env[FLAG] = '1';
23
- const mods = krakenSelectionPlaybook(true);
24
- expect(mods).toHaveLength(1);
25
- expect(mods[0].title).toMatch(/Verified Selection/i);
26
- });
27
- it('carries the adaptive thresholds (simple→direct, ambiguous→2, uncertainty→3)', () => {
28
- process.env[FLAG] = '1';
29
- const c = krakenSelectionPlaybook(true)[0].content;
30
- expect(c).toMatch(/DIRECT/i);
31
- expect(c).toMatch(/2 candidates/);
32
- expect(c).toMatch(/up to 3 candidates/);
33
- });
34
- it('carries the orchestration contract (purpose=candidate, kraken_select, single path)', () => {
35
- process.env[FLAG] = '1';
36
- const c = krakenSelectionPlaybook(true)[0].content;
37
- expect(c).toContain('purpose="candidate"');
38
- expect(c).toContain('kraken_select');
39
- expect(c).toContain('needs_more_evidence');
40
- expect(c).toMatch(/Never blend/i);
41
- });
42
- it('carries check routing (PLAN → plan section, BUILD → verify Acceptance) + integrity', () => {
43
- process.env[FLAG] = '1';
44
- const c = krakenSelectionPlaybook(true)[0].content;
45
- expect(c).toMatch(/verification section/i);
46
- expect(c).toMatch(/Acceptance/i);
47
- expect(c).toMatch(/proof of absence/i);
48
- });
49
- it('sorts after the lead playbook (priority ordering preserved)', () => {
50
- process.env[FLAG] = '1';
51
- const [m] = krakenSelectionPlaybook(true);
52
- expect(m.priority).toBeGreaterThan(KRAKEN_LEAD_PLAYBOOK_MODULE.priority);
53
- });
54
- });
55
- //# sourceMappingURL=selectionPlaybook.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectionPlaybook.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/selectionPlaybook.test.ts"],"names":[],"mappings":"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"}
@@ -1,157 +0,0 @@
1
- /**
2
- * Kraken skill auto-suggest — tests.
3
- *
4
- * Covers:
5
- * - `slugifyLabel` produces kebab-case ids
6
- * - No suggestions when the run did not converge
7
- * - No suggestions when no reviewer failed
8
- * - One suggestion produced for a typical FAIL→fix pattern
9
- * - Suggestion contains the failure findings and the promote command
10
- * - Confidence scales with the depth of evidence
11
- */
12
- import { describe, it, expect } from 'vitest';
13
- import { slugifyLabel, suggestSkillsFromRun, renderSuggestionCard, } from './skillSuggest.js';
14
- function makeRef(over) {
15
- return {
16
- scope: [],
17
- findings: '',
18
- ...over,
19
- };
20
- }
21
- function makeResult(opts) {
22
- const tentaclesById = new Map();
23
- for (const r of opts.refs)
24
- tentaclesById.set(r.id, r);
25
- return {
26
- tentacles: tentaclesById,
27
- mergeCount: 1,
28
- converged: opts.converged,
29
- cancelled: false,
30
- durationMs: 1000,
31
- unresolvedFindings: [],
32
- };
33
- }
34
- describe('slugifyLabel', () => {
35
- it('converts a label to kebab-case', () => {
36
- expect(slugifyLabel('Acceptance Test 1')).toBe('acceptance-test-1');
37
- });
38
- it('drops punctuation and trims', () => {
39
- expect(slugifyLabel(' Hello, World! ')).toBe('hello-world');
40
- });
41
- it('falls back to "kraken-skill" for empty input', () => {
42
- expect(slugifyLabel('')).toBe('kraken-skill');
43
- expect(slugifyLabel('!!!')).toBe('kraken-skill');
44
- });
45
- it('caps at 40 chars', () => {
46
- const long = 'a'.repeat(100);
47
- expect(slugifyLabel(long).length).toBeLessThanOrEqual(40);
48
- });
49
- });
50
- describe('suggestSkillsFromRun', () => {
51
- it('returns [] when the run did not converge', () => {
52
- const result = makeResult({
53
- converged: false,
54
- refs: [
55
- makeRef({ id: 't0001', kind: 'verify', label: 'judge', status: 'done', verdict: 'fail', findings: 'x'.repeat(200) }),
56
- makeRef({ id: 't0002', kind: 'fix', label: 'rework', status: 'done', findings: 'y'.repeat(200) }),
57
- ],
58
- });
59
- expect(suggestSkillsFromRun(result, { graphId: 'g1', goal: 'x' })).toEqual([]);
60
- });
61
- it('returns [] when no reviewer failed', () => {
62
- const result = makeResult({
63
- converged: true,
64
- refs: [
65
- makeRef({ id: 't0001', kind: 'general', label: 'do', status: 'done', findings: 'ok' }),
66
- makeRef({ id: 't0002', kind: 'verify', label: 'judge', status: 'done', verdict: 'pass', findings: 'ok' }),
67
- ],
68
- });
69
- expect(suggestSkillsFromRun(result, { graphId: 'g2', goal: 'x' })).toEqual([]);
70
- });
71
- it('returns [] when there are no fix-nodes', () => {
72
- const result = makeResult({
73
- converged: true,
74
- refs: [
75
- makeRef({ id: 't0001', kind: 'general', label: 'do', status: 'done' }),
76
- makeRef({ id: 't0002', kind: 'verify', label: 'judge', status: 'done', verdict: 'fail', findings: 'broken' }),
77
- ],
78
- });
79
- expect(suggestSkillsFromRun(result, { graphId: 'g3', goal: 'x' })).toEqual([]);
80
- });
81
- it('produces one suggestion for a FAIL→fix pattern', () => {
82
- const result = makeResult({
83
- converged: true,
84
- refs: [
85
- makeRef({ id: 't0001', kind: 'general', label: 'refactor auth', status: 'done', findings: 'wrote code' }),
86
- makeRef({
87
- id: 't0002',
88
- kind: 'verify',
89
- label: 'acceptance check',
90
- status: 'done',
91
- verdict: 'fail',
92
- findings: 'function `slugify` is missing from src/util.ts',
93
- }),
94
- makeRef({
95
- id: 't0003',
96
- kind: 'fix',
97
- label: 'rework: refactor auth',
98
- status: 'done',
99
- findings: 'added slugify, removed unused import',
100
- }),
101
- ],
102
- });
103
- const out = suggestSkillsFromRun(result, { graphId: 'g-abc', goal: 'refactor auth' });
104
- expect(out).toHaveLength(1);
105
- const s = out[0];
106
- expect(s.id).toMatch(/^kraken-skill-/);
107
- expect(s.id).toContain('g-abc');
108
- expect(s.title).toMatch(/acceptance check/);
109
- expect(s.sourceKind).toBe('verify');
110
- expect(s.body).toContain('slugify');
111
- expect(s.body).toContain('/promote-skill');
112
- expect(s.confidence).toBeGreaterThan(0);
113
- });
114
- it('confidence is high when findings are concrete and the goal is non-trivial', () => {
115
- const failure = 'function `slugify` is missing from src/util.ts: it should take a string and return a slugified version. '.repeat(5);
116
- const fix = 'added slugify, removed unused import, updated test to cover unicode. '.repeat(5);
117
- const result = makeResult({
118
- converged: true,
119
- refs: [
120
- makeRef({ id: 't0001', kind: 'general', label: 'do', status: 'done' }),
121
- makeRef({ id: 't0002', kind: 'verify', label: 'judge', status: 'done', verdict: 'fail', findings: failure }),
122
- makeRef({ id: 't0003', kind: 'fix', label: 'rework', status: 'done', findings: fix }),
123
- makeRef({ id: 't0004', kind: 'merge', label: 'merge', status: 'done' }),
124
- ],
125
- });
126
- const out = suggestSkillsFromRun(result, { graphId: 'g-rich', goal: 'ship a working slugify that handles unicode' });
127
- expect(out[0].confidence).toBeGreaterThanOrEqual(0.9);
128
- });
129
- it('handles spec and conformance reviewers the same way as verify', () => {
130
- const result = makeResult({
131
- converged: true,
132
- refs: [
133
- makeRef({ id: 't0001', kind: 'general', label: 'do', status: 'done' }),
134
- makeRef({ id: 't0002', kind: 'spec', label: 'spec review', status: 'done', verdict: 'fail', findings: 'spec mismatch' }),
135
- makeRef({ id: 't0003', kind: 'conformance', label: 'conformance', status: 'done', verdict: 'fail', findings: 'literal mismatch' }),
136
- makeRef({ id: 't0004', kind: 'fix', label: 'rework', status: 'done', findings: 'fixed' }),
137
- ],
138
- });
139
- const out = suggestSkillsFromRun(result, { graphId: 'g-multi', goal: 'match the spec' });
140
- expect(out).toHaveLength(1);
141
- expect(out[0].sourceKind).toBe('spec'); // first reviewer fail wins
142
- });
143
- });
144
- describe('renderSuggestionCard', () => {
145
- it('returns the suggestion body unchanged', () => {
146
- const s = {
147
- id: 'test',
148
- title: 'T',
149
- body: 'hello',
150
- sourceKind: 'verify',
151
- failureFindings: 'broken',
152
- confidence: 0.5,
153
- };
154
- expect(renderSuggestionCard(s)).toBe('hello');
155
- });
156
- });
157
- //# sourceMappingURL=skillSuggest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skillSuggest.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/skillSuggest.test.ts"],"names":[],"mappings":"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"}
@@ -1,149 +0,0 @@
1
- /**
2
- * ADR-0025 lock tests — strict done defaults per surface.
3
- *
4
- * Kraken (default surface): opt-in via ZELARI_STRICT_DONE, else off (1.x compat).
5
- * Mission: strict evidence gate ON by default; ZELARI_MISSION_STRICT=0|false
6
- * is the only opt-out. These defaults are product decisions, not accidents —
7
- * a regression here changes what "done" means for autonomous missions.
8
- */
9
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
10
- import { evaluateStrictBuildGate, strictDoneEnabled, } from './verificationBridge.js';
11
- import { resetKrakenCandidates, setKrakenCheckResults, setKrakenSelection, } from './candidateRegistry.js';
12
- const CHECKS = ['mission slice keeps the spine replayable', 'export round-trips'];
13
- function emitSeq() {
14
- let n = 1;
15
- return async () => ({ seq: n++ });
16
- }
17
- function selectWithChecks(checks) {
18
- resetKrakenCandidates();
19
- setKrakenSelection({
20
- status: 'selected',
21
- winnerIndex: 0,
22
- rationale: 'test',
23
- requiredChecks: checks,
24
- degraded: false,
25
- verifier: null,
26
- judgedBy: 'llm',
27
- });
28
- }
29
- let prevKraken;
30
- let prevMission;
31
- let prevPack;
32
- /** Swap both strict envs for the duration of fn; restore in finally. */
33
- async function withEnv(kraken, mission, fn) {
34
- const k = process.env.ZELARI_STRICT_DONE;
35
- const m = process.env.ZELARI_MISSION_STRICT;
36
- if (kraken === undefined)
37
- delete process.env.ZELARI_STRICT_DONE;
38
- else
39
- process.env.ZELARI_STRICT_DONE = kraken;
40
- if (mission === undefined)
41
- delete process.env.ZELARI_MISSION_STRICT;
42
- else
43
- process.env.ZELARI_MISSION_STRICT = mission;
44
- try {
45
- return await fn();
46
- }
47
- finally {
48
- if (k === undefined)
49
- delete process.env.ZELARI_STRICT_DONE;
50
- else
51
- process.env.ZELARI_STRICT_DONE = k;
52
- if (m === undefined)
53
- delete process.env.ZELARI_MISSION_STRICT;
54
- else
55
- process.env.ZELARI_MISSION_STRICT = m;
56
- }
57
- }
58
- beforeEach(() => {
59
- prevKraken = process.env.ZELARI_STRICT_DONE;
60
- prevMission = process.env.ZELARI_MISSION_STRICT;
61
- prevPack = process.env.ZELARI_VERIFY_PACK;
62
- delete process.env.ZELARI_VERIFY_PACK;
63
- resetKrakenCandidates();
64
- });
65
- afterEach(() => {
66
- if (prevKraken === undefined)
67
- delete process.env.ZELARI_STRICT_DONE;
68
- else
69
- process.env.ZELARI_STRICT_DONE = prevKraken;
70
- if (prevMission === undefined)
71
- delete process.env.ZELARI_MISSION_STRICT;
72
- else
73
- process.env.ZELARI_MISSION_STRICT = prevMission;
74
- if (prevPack === undefined)
75
- delete process.env.ZELARI_VERIFY_PACK;
76
- else
77
- process.env.ZELARI_VERIFY_PACK = prevPack;
78
- resetKrakenCandidates();
79
- });
80
- describe('strictDoneEnabled defaults (ADR-0025)', () => {
81
- it('kraken: default OFF, opt-in via ZELARI_STRICT_DONE', async () => {
82
- await withEnv(undefined, undefined, () => {
83
- expect(strictDoneEnabled()).toBe(false);
84
- expect(strictDoneEnabled('kraken')).toBe(false);
85
- });
86
- await withEnv('1', undefined, () => expect(strictDoneEnabled()).toBe(true));
87
- await withEnv('true', undefined, () => expect(strictDoneEnabled()).toBe(true));
88
- await withEnv('0', undefined, () => expect(strictDoneEnabled()).toBe(false));
89
- });
90
- it('mission: default ON regardless of ZELARI_STRICT_DONE', async () => {
91
- await withEnv(undefined, undefined, () => expect(strictDoneEnabled('mission')).toBe(true));
92
- await withEnv('0', undefined, () => expect(strictDoneEnabled('mission')).toBe(true));
93
- await withEnv('false', undefined, () => expect(strictDoneEnabled('mission')).toBe(true));
94
- });
95
- it('mission: ZELARI_MISSION_STRICT=0|false is the only opt-out', async () => {
96
- await withEnv(undefined, '0', () => expect(strictDoneEnabled('mission')).toBe(false));
97
- await withEnv(undefined, 'false', () => expect(strictDoneEnabled('mission')).toBe(false));
98
- await withEnv(undefined, '1', () => expect(strictDoneEnabled('mission')).toBe(true));
99
- await withEnv('1', '0', () => expect(strictDoneEnabled('mission')).toBe(false));
100
- });
101
- });
102
- describe('evaluateStrictBuildGate surface wiring (ADR-0025)', () => {
103
- it('mission surface enforces the evidence contract by default (unknown → blocked)', async () => {
104
- await withEnv(undefined, undefined, async () => {
105
- selectWithChecks(CHECKS);
106
- // No check results reported → every required criterion is unknown.
107
- const gate = await evaluateStrictBuildGate('build', { surface: 'mission' });
108
- expect(gate.strict).toBe(true);
109
- expect(gate.blocked).toBe(true);
110
- });
111
- });
112
- it('mission opt-out restores the legacy-only outcome', async () => {
113
- await withEnv(undefined, '0', async () => {
114
- selectWithChecks(CHECKS);
115
- setKrakenCheckResults(CHECKS.map((c) => ({ check: c, status: 'pass', note: 'ok (stub)' })));
116
- const gate = await evaluateStrictBuildGate('build', { surface: 'mission' });
117
- expect(gate.strict).toBe(false);
118
- expect(gate.blocked).toBe(false); // legacy gate green + no strict overlay
119
- });
120
- });
121
- it('kraken surface (default) stays opt-in even with checks registered', async () => {
122
- await withEnv(undefined, undefined, async () => {
123
- selectWithChecks(CHECKS);
124
- setKrakenCheckResults(CHECKS.map((c) => ({ check: c, status: 'pass', note: 'ok (stub)' })));
125
- const gate = await evaluateStrictBuildGate('build'); // no surface → kraken
126
- expect(gate.strict).toBe(false);
127
- expect(gate.blocked).toBe(false);
128
- });
129
- });
130
- it('mission default does not run the native pack without ZELARI_VERIFY_PACK', async () => {
131
- // The mission default gates on the selection contract only; the native
132
- // criteria pack (real typecheck/test/build commands) stays opt-in so the
133
- // default never adds process spawns the user did not ask for.
134
- await withEnv(undefined, undefined, async () => {
135
- selectWithChecks([CHECKS[0]]);
136
- setKrakenCheckResults([
137
- { check: CHECKS[0], status: 'pass', note: 'spine replay ok (stub)' },
138
- ]);
139
- const gate = await evaluateStrictBuildGate('build', { surface: 'mission', emit: emitSeq() });
140
- expect(gate.strict).toBe(true);
141
- expect(gate.native).toBeNull();
142
- expect(gate.blocked).toBe(false); // pass with event-backed note → PASS
143
- });
144
- });
145
- });
146
- // Type-level lock: the surface union is exactly the two ADR-0025 surfaces.
147
- const _surfaceUnionLock = ['kraken', 'mission'];
148
- void _surfaceUnionLock;
149
- //# sourceMappingURL=strictDefaults.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strictDefaults.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/strictDefaults.test.ts"],"names":[],"mappings":"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"}