zelari-code 2.0.1 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +5 -5
  2. package/dist/cli/hooks/useChatTurn.js +2 -1
  3. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  4. package/dist/cli/kraken/candidateRegistry.js +15 -1
  5. package/dist/cli/kraken/candidateRegistry.js.map +1 -1
  6. package/dist/cli/kraken/verificationBridge.js +125 -14
  7. package/dist/cli/kraken/verificationBridge.js.map +1 -1
  8. package/dist/cli/kraken/verifierLifecycle.js +88 -0
  9. package/dist/cli/kraken/verifierLifecycle.js.map +1 -0
  10. package/dist/cli/kraken/verifyReport.js.map +1 -1
  11. package/dist/cli/main.bundled.js +272 -89
  12. package/dist/cli/main.bundled.js.map +4 -4
  13. package/dist/cli/runHeadless.js +44 -93
  14. package/dist/cli/runHeadless.js.map +1 -1
  15. package/dist/cli/tools/taskTool.js +49 -3
  16. package/dist/cli/tools/taskTool.js.map +1 -1
  17. package/package.json +8 -5
  18. package/dist/cli/ast/engine.test.js +0 -101
  19. package/dist/cli/ast/engine.test.js.map +0 -1
  20. package/dist/cli/ast/tools.test.js +0 -124
  21. package/dist/cli/ast/tools.test.js.map +0 -1
  22. package/dist/cli/headless.test.js +0 -107
  23. package/dist/cli/headless.test.js.map +0 -1
  24. package/dist/cli/headlessE2eSession.test.js +0 -189
  25. package/dist/cli/headlessE2eSession.test.js.map +0 -1
  26. package/dist/cli/headlessHistorySeed.test.js +0 -158
  27. package/dist/cli/headlessHistorySeed.test.js.map +0 -1
  28. package/dist/cli/headlessSessionEvent.test.js +0 -83
  29. package/dist/cli/headlessSessionEvent.test.js.map +0 -1
  30. package/dist/cli/headlessSpine.test.js +0 -153
  31. package/dist/cli/headlessSpine.test.js.map +0 -1
  32. package/dist/cli/hooks/observationStore.test.js +0 -135
  33. package/dist/cli/hooks/observationStore.test.js.map +0 -1
  34. package/dist/cli/hooks/sessionSurface.test.js +0 -112
  35. package/dist/cli/hooks/sessionSurface.test.js.map +0 -1
  36. package/dist/cli/kraken/candidateRegistry.test.js +0 -211
  37. package/dist/cli/kraken/candidateRegistry.test.js.map +0 -1
  38. package/dist/cli/kraken/completionGate.test.js +0 -172
  39. package/dist/cli/kraken/completionGate.test.js.map +0 -1
  40. package/dist/cli/kraken/evidenceAnchoring.test.js +0 -92
  41. package/dist/cli/kraken/evidenceAnchoring.test.js.map +0 -1
  42. package/dist/cli/kraken/executor.workbench.test.js +0 -134
  43. package/dist/cli/kraken/executor.workbench.test.js.map +0 -1
  44. package/dist/cli/kraken/metrics.test.js +0 -145
  45. package/dist/cli/kraken/metrics.test.js.map +0 -1
  46. package/dist/cli/kraken/nativeVerification.test.js +0 -207
  47. package/dist/cli/kraken/nativeVerification.test.js.map +0 -1
  48. package/dist/cli/kraken/planner.test.js +0 -43
  49. package/dist/cli/kraken/planner.test.js.map +0 -1
  50. package/dist/cli/kraken/scriptPlanner.test.js +0 -152
  51. package/dist/cli/kraken/scriptPlanner.test.js.map +0 -1
  52. package/dist/cli/kraken/selectionPlaybook.test.js +0 -55
  53. package/dist/cli/kraken/selectionPlaybook.test.js.map +0 -1
  54. package/dist/cli/kraken/skillSuggest.test.js +0 -157
  55. package/dist/cli/kraken/skillSuggest.test.js.map +0 -1
  56. package/dist/cli/kraken/strictDefaults.test.js +0 -149
  57. package/dist/cli/kraken/strictDefaults.test.js.map +0 -1
  58. package/dist/cli/kraken/turnRuntime.test.js +0 -377
  59. package/dist/cli/kraken/turnRuntime.test.js.map +0 -1
  60. package/dist/cli/kraken/verificationBridge.session.test.js +0 -104
  61. package/dist/cli/kraken/verificationBridge.session.test.js.map +0 -1
  62. package/dist/cli/kraken/verificationBridge.test.js +0 -177
  63. package/dist/cli/kraken/verificationBridge.test.js.map +0 -1
  64. package/dist/cli/kraken/verifier.test.js +0 -232
  65. package/dist/cli/kraken/verifier.test.js.map +0 -1
  66. package/dist/cli/kraken/verifierAdvisoryLock.test.js +0 -154
  67. package/dist/cli/kraken/verifierAdvisoryLock.test.js.map +0 -1
  68. package/dist/cli/kraken/verifierRoundTrip.test.js +0 -166
  69. package/dist/cli/kraken/verifierRoundTrip.test.js.map +0 -1
  70. package/dist/cli/kraken/verifierSettings.test.js +0 -237
  71. package/dist/cli/kraken/verifierSettings.test.js.map +0 -1
  72. package/dist/cli/kraken/verifyReport.test.js +0 -111
  73. package/dist/cli/kraken/verifyReport.test.js.map +0 -1
  74. package/dist/cli/kraken/weaknessMeter.test.js +0 -212
  75. package/dist/cli/kraken/weaknessMeter.test.js.map +0 -1
  76. package/dist/cli/kraken/workbench.test.js +0 -253
  77. package/dist/cli/kraken/workbench.test.js.map +0 -1
  78. package/dist/cli/kraken/workbenchView.test.js +0 -130
  79. package/dist/cli/kraken/workbenchView.test.js.map +0 -1
  80. package/dist/cli/legacyContextIsolation.test.js +0 -65
  81. package/dist/cli/legacyContextIsolation.test.js.map +0 -1
  82. package/dist/cli/lsp/tools.test.js +0 -90
  83. package/dist/cli/lsp/tools.test.js.map +0 -1
  84. package/dist/cli/missionContinuation.test.js +0 -117
  85. package/dist/cli/missionContinuation.test.js.map +0 -1
  86. package/dist/cli/profileMatrix.test.js +0 -130
  87. package/dist/cli/profileMatrix.test.js.map +0 -1
  88. package/dist/cli/provider/capabilities.test.js +0 -46
  89. package/dist/cli/provider/capabilities.test.js.map +0 -1
  90. package/dist/cli/provider/openai-compatible.timeout.test.js +0 -72
  91. package/dist/cli/provider/openai-compatible.timeout.test.js.map +0 -1
  92. package/dist/cli/providerConfig.test.js +0 -85
  93. package/dist/cli/providerConfig.test.js.map +0 -1
  94. package/dist/cli/sessionReplayInvariant.test.js +0 -187
  95. package/dist/cli/sessionReplayInvariant.test.js.map +0 -1
  96. package/dist/cli/sessionSpine.test.js +0 -171
  97. package/dist/cli/sessionSpine.test.js.map +0 -1
  98. package/dist/cli/thinking.test.js +0 -214
  99. package/dist/cli/thinking.test.js.map +0 -1
  100. package/dist/cli/tools/inspectCommand.schema.test.js +0 -82
  101. package/dist/cli/tools/inspectCommand.schema.test.js.map +0 -1
  102. package/dist/cli/tools/inspectCommand.test.js +0 -311
  103. package/dist/cli/tools/inspectCommand.test.js.map +0 -1
  104. package/dist/cli/tools/krakenCsvFanout.test.js +0 -200
  105. package/dist/cli/tools/krakenCsvFanout.test.js.map +0 -1
  106. package/dist/cli/tools/krakenSelectTool.test.js +0 -246
  107. package/dist/cli/tools/krakenSelectTool.test.js.map +0 -1
  108. package/dist/cli/tools/observeBatch.test.js +0 -329
  109. package/dist/cli/tools/observeBatch.test.js.map +0 -1
  110. package/dist/cli/tools/taskTool.dynamicChecks.test.js +0 -156
  111. package/dist/cli/tools/taskTool.dynamicChecks.test.js.map +0 -1
  112. package/dist/cli/tools/taskTool.planSafety.test.js +0 -280
  113. package/dist/cli/tools/taskTool.planSafety.test.js.map +0 -1
  114. package/dist/cli/tools/taskTool.verifyReport.test.js +0 -140
  115. package/dist/cli/tools/taskTool.verifyReport.test.js.map +0 -1
  116. package/dist/cli/utils/contextGrowthSummary.test.js +0 -74
  117. package/dist/cli/utils/contextGrowthSummary.test.js.map +0 -1
  118. package/dist/cli/workspace/planDriftCheck.test.js +0 -146
  119. package/dist/cli/workspace/planDriftCheck.test.js.map +0 -1
  120. package/dist/cli/workspace/planStore.test.js +0 -295
  121. package/dist/cli/workspace/planStore.test.js.map +0 -1
  122. package/dist/cli/zelariMission.test.js +0 -44
  123. package/dist/cli/zelariMission.test.js.map +0 -1
@@ -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":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,GAAG,CAAC,0CAA0C,EAAE,oBAAoB,CAAC,CAAC;AAElF,SAAS,OAAO;IACd,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB;IACxC,qBAAqB,EAAE,CAAC;IACxB,kBAAkB,CAAC;QACjB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,UAA8B,CAAC;AACnC,IAAI,WAA+B,CAAC;AACpC,IAAI,QAA4B,CAAC;AAEjC,wEAAwE;AACxE,KAAK,UAAU,OAAO,CACpB,MAA0B,EAC1B,OAA2B,EAC3B,EAAwB;IAExB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACzC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;QAC3D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;;QAC/D,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;YACtD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;;YACzD,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5C,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAChD,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACtC,qBAAqB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;QAC/D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC;IACjD,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;;QACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,WAAW,CAAC;IACrD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;QAC7D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IAC/C,qBAAqB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,MAAM,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7C,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACzB,mEAAmE;YACnE,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;YACvC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACzB,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YACrG,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,wCAAwC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7C,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACzB,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YACrG,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;YAC3E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,uEAAuE;QACvE,yEAAyE;QACzE,8DAA8D;QAC9D,MAAM,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAC7C,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,qBAAqB,CAAC;gBACpB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE;aACrE,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7F,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAqC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,iBAAiB,GAAwB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACrE,KAAK,iBAAiB,CAAC"}