@substrate-ai/core 0.19.54 → 0.20.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.
- package/README.md +33 -33
- package/dist/config/types.d.ts +17 -17
- package/package.json +16 -2
- package/dist/__tests__/adapter.test.d.ts +0 -12
- package/dist/__tests__/adapter.test.d.ts.map +0 -1
- package/dist/__tests__/adapter.test.js +0 -259
- package/dist/__tests__/adapter.test.js.map +0 -1
- package/dist/__tests__/event-bus.test.d.ts +0 -14
- package/dist/__tests__/event-bus.test.d.ts.map +0 -1
- package/dist/__tests__/event-bus.test.js +0 -199
- package/dist/__tests__/event-bus.test.js.map +0 -1
- package/dist/__tests__/output-quality.test.d.ts +0 -8
- package/dist/__tests__/output-quality.test.d.ts.map +0 -1
- package/dist/__tests__/output-quality.test.js +0 -166
- package/dist/__tests__/output-quality.test.js.map +0 -1
- package/dist/__tests__/schema-suffix.test.d.ts +0 -9
- package/dist/__tests__/schema-suffix.test.d.ts.map +0 -1
- package/dist/__tests__/schema-suffix.test.js +0 -126
- package/dist/__tests__/schema-suffix.test.js.map +0 -1
- package/dist/__tests__/yaml-parser.test.d.ts +0 -18
- package/dist/__tests__/yaml-parser.test.d.ts.map +0 -1
- package/dist/__tests__/yaml-parser.test.js +0 -475
- package/dist/__tests__/yaml-parser.test.js.map +0 -1
- package/dist/__type-checks__.d.ts +0 -11
- package/dist/__type-checks__.d.ts.map +0 -1
- package/dist/__type-checks__.js +0 -19
- package/dist/__type-checks__.js.map +0 -1
- package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts +0 -12
- package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts.map +0 -1
- package/dist/adapters/__tests__/adapter-output-normalizer.test.js +0 -193
- package/dist/adapters/__tests__/adapter-output-normalizer.test.js.map +0 -1
- package/dist/persistence/dolt-adapter-transaction.test.d.ts +0 -10
- package/dist/persistence/dolt-adapter-transaction.test.d.ts.map +0 -1
- package/dist/persistence/dolt-adapter-transaction.test.js +0 -359
- package/dist/persistence/dolt-adapter-transaction.test.js.map +0 -1
|
@@ -1,475 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for packages/core/src/dispatch/yaml-parser.ts
|
|
3
|
-
*
|
|
4
|
-
* Tests the two primary exports:
|
|
5
|
-
* - extractYamlBlock(): extraction of YAML from agent output
|
|
6
|
-
* - parseYamlResult(): parsing and optional Zod schema validation
|
|
7
|
-
*
|
|
8
|
-
* Covers:
|
|
9
|
-
* - Fenced YAML extraction (```yaml...```)
|
|
10
|
-
* - Multiple fenced blocks (takes the last one)
|
|
11
|
-
* - Unfenced YAML extraction via anchor keys
|
|
12
|
-
* - Empty/null input handling
|
|
13
|
-
* - YAML parse errors
|
|
14
|
-
* - Schema validation success/failure
|
|
15
|
-
* - Invalid escape sanitization (\$ -> $)
|
|
16
|
-
*/
|
|
17
|
-
import { describe, it, expect } from 'vitest';
|
|
18
|
-
import { z } from 'zod';
|
|
19
|
-
import { extractYamlBlock, parseYamlResult } from '../dispatch/yaml-parser.js';
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// extractYamlBlock
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
describe('extractYamlBlock', () => {
|
|
24
|
-
// -----------------------------------------------------------------------
|
|
25
|
-
// Empty / null input
|
|
26
|
-
// -----------------------------------------------------------------------
|
|
27
|
-
describe('empty / null input', () => {
|
|
28
|
-
it('returns null for empty string', () => {
|
|
29
|
-
expect(extractYamlBlock('')).toBeNull();
|
|
30
|
-
});
|
|
31
|
-
it('returns null for whitespace-only string', () => {
|
|
32
|
-
expect(extractYamlBlock(' \n\n ')).toBeNull();
|
|
33
|
-
});
|
|
34
|
-
it('returns null for text with no YAML content', () => {
|
|
35
|
-
expect(extractYamlBlock('Just some regular text\nwith no YAML')).toBeNull();
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
// -----------------------------------------------------------------------
|
|
39
|
-
// Fenced YAML blocks
|
|
40
|
-
// -----------------------------------------------------------------------
|
|
41
|
-
describe('fenced YAML blocks', () => {
|
|
42
|
-
it('extracts a single fenced yaml block', () => {
|
|
43
|
-
const output = [
|
|
44
|
-
'Here is the analysis:',
|
|
45
|
-
'',
|
|
46
|
-
'```yaml',
|
|
47
|
-
'verdict: pass',
|
|
48
|
-
'score: 95',
|
|
49
|
-
'```',
|
|
50
|
-
].join('\n');
|
|
51
|
-
const result = extractYamlBlock(output);
|
|
52
|
-
expect(result).toBe('verdict: pass\nscore: 95');
|
|
53
|
-
});
|
|
54
|
-
it('extracts from ``` fence without yaml tag', () => {
|
|
55
|
-
const output = [
|
|
56
|
-
'Done.',
|
|
57
|
-
'',
|
|
58
|
-
'```',
|
|
59
|
-
'result: success',
|
|
60
|
-
'files_changed: 3',
|
|
61
|
-
'```',
|
|
62
|
-
].join('\n');
|
|
63
|
-
const result = extractYamlBlock(output);
|
|
64
|
-
expect(result).toBe('result: success\nfiles_changed: 3');
|
|
65
|
-
});
|
|
66
|
-
it('takes the LAST fenced block when multiple exist', () => {
|
|
67
|
-
const output = [
|
|
68
|
-
'First attempt:',
|
|
69
|
-
'```yaml',
|
|
70
|
-
'verdict: fail',
|
|
71
|
-
'```',
|
|
72
|
-
'',
|
|
73
|
-
'After fixing:',
|
|
74
|
-
'```yaml',
|
|
75
|
-
'verdict: pass',
|
|
76
|
-
'score: 100',
|
|
77
|
-
'```',
|
|
78
|
-
].join('\n');
|
|
79
|
-
const result = extractYamlBlock(output);
|
|
80
|
-
expect(result).toBe('verdict: pass\nscore: 100');
|
|
81
|
-
});
|
|
82
|
-
it('ignores fenced blocks that do not contain anchor keys', () => {
|
|
83
|
-
const output = [
|
|
84
|
-
'Here is some code:',
|
|
85
|
-
'```',
|
|
86
|
-
'const x = 42',
|
|
87
|
-
'```',
|
|
88
|
-
'',
|
|
89
|
-
'```yaml',
|
|
90
|
-
'result: done',
|
|
91
|
-
'```',
|
|
92
|
-
].join('\n');
|
|
93
|
-
const result = extractYamlBlock(output);
|
|
94
|
-
expect(result).toBe('result: done');
|
|
95
|
-
});
|
|
96
|
-
it('returns null when fenced block contains no anchor keys', () => {
|
|
97
|
-
const output = [
|
|
98
|
-
'```yaml',
|
|
99
|
-
'name: test',
|
|
100
|
-
'value: 123',
|
|
101
|
-
'```',
|
|
102
|
-
].join('\n');
|
|
103
|
-
// No anchor key (result:, verdict:, story_file:, expansion_priority:)
|
|
104
|
-
expect(extractYamlBlock(output)).toBeNull();
|
|
105
|
-
});
|
|
106
|
-
it('extracts multiline YAML with nested structure', () => {
|
|
107
|
-
const output = [
|
|
108
|
-
'Analysis complete.',
|
|
109
|
-
'',
|
|
110
|
-
'```yaml',
|
|
111
|
-
'verdict: pass',
|
|
112
|
-
'details:',
|
|
113
|
-
' tests_passed: 12',
|
|
114
|
-
' tests_failed: 0',
|
|
115
|
-
' coverage: 95.2',
|
|
116
|
-
'```',
|
|
117
|
-
].join('\n');
|
|
118
|
-
const result = extractYamlBlock(output);
|
|
119
|
-
expect(result).toContain('verdict: pass');
|
|
120
|
-
expect(result).toContain(' tests_passed: 12');
|
|
121
|
-
expect(result).toContain(' coverage: 95.2');
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
// -----------------------------------------------------------------------
|
|
125
|
-
// Unfenced YAML (anchor key fallback)
|
|
126
|
-
// -----------------------------------------------------------------------
|
|
127
|
-
describe('unfenced YAML extraction', () => {
|
|
128
|
-
it('extracts unfenced YAML starting with a verdict: anchor', () => {
|
|
129
|
-
const output = [
|
|
130
|
-
'I have reviewed the code and here is my assessment:',
|
|
131
|
-
'',
|
|
132
|
-
'verdict: pass',
|
|
133
|
-
'confidence: high',
|
|
134
|
-
].join('\n');
|
|
135
|
-
const result = extractYamlBlock(output);
|
|
136
|
-
expect(result).toBe('verdict: pass\nconfidence: high');
|
|
137
|
-
});
|
|
138
|
-
it('extracts unfenced YAML starting with result: anchor', () => {
|
|
139
|
-
const output = [
|
|
140
|
-
'Processing complete.',
|
|
141
|
-
'',
|
|
142
|
-
'result: success',
|
|
143
|
-
'files_modified: 5',
|
|
144
|
-
].join('\n');
|
|
145
|
-
const result = extractYamlBlock(output);
|
|
146
|
-
expect(result).toBe('result: success\nfiles_modified: 5');
|
|
147
|
-
});
|
|
148
|
-
it('extracts unfenced YAML starting with story_file: anchor', () => {
|
|
149
|
-
const output = [
|
|
150
|
-
'Generated story.',
|
|
151
|
-
'story_file: epic-1/stories/1-1.md',
|
|
152
|
-
'status: ready',
|
|
153
|
-
].join('\n');
|
|
154
|
-
const result = extractYamlBlock(output);
|
|
155
|
-
expect(result).toBe('story_file: epic-1/stories/1-1.md\nstatus: ready');
|
|
156
|
-
});
|
|
157
|
-
it('extracts unfenced YAML starting with expansion_priority: anchor', () => {
|
|
158
|
-
const output = [
|
|
159
|
-
'Priority analysis:',
|
|
160
|
-
'expansion_priority: high',
|
|
161
|
-
'reason: critical path',
|
|
162
|
-
].join('\n');
|
|
163
|
-
const result = extractYamlBlock(output);
|
|
164
|
-
expect(result).toBe('expansion_priority: high\nreason: critical path');
|
|
165
|
-
});
|
|
166
|
-
it('uses the LAST anchor key occurrence when multiple exist in unfenced text', () => {
|
|
167
|
-
const output = [
|
|
168
|
-
'First verdict: fail',
|
|
169
|
-
'Some discussion...',
|
|
170
|
-
'verdict: pass',
|
|
171
|
-
'final_score: 90',
|
|
172
|
-
].join('\n');
|
|
173
|
-
const result = extractYamlBlock(output);
|
|
174
|
-
expect(result).toBe('verdict: pass\nfinal_score: 90');
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
// -----------------------------------------------------------------------
|
|
178
|
-
// Trailing fence stripping
|
|
179
|
-
// -----------------------------------------------------------------------
|
|
180
|
-
describe('trailing fence stripping', () => {
|
|
181
|
-
it('strips a wrapping fence and extracts unfenced YAML', () => {
|
|
182
|
-
// This is a case where the YAML is wrapped in fences but the
|
|
183
|
-
// fenced extraction might not match (e.g., fence without anchor key
|
|
184
|
-
// in the regex path). The stripTrailingFence handles it.
|
|
185
|
-
const output = [
|
|
186
|
-
'```yaml',
|
|
187
|
-
'verdict: pass',
|
|
188
|
-
'notes: all good',
|
|
189
|
-
'```',
|
|
190
|
-
].join('\n');
|
|
191
|
-
const result = extractYamlBlock(output);
|
|
192
|
-
// Should find it via fenced extraction
|
|
193
|
-
expect(result).toBe('verdict: pass\nnotes: all good');
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
// ---------------------------------------------------------------------------
|
|
198
|
-
// parseYamlResult
|
|
199
|
-
// ---------------------------------------------------------------------------
|
|
200
|
-
describe('parseYamlResult', () => {
|
|
201
|
-
// -----------------------------------------------------------------------
|
|
202
|
-
// Successful parsing (no schema)
|
|
203
|
-
// -----------------------------------------------------------------------
|
|
204
|
-
describe('parsing without schema', () => {
|
|
205
|
-
it('parses valid YAML and returns the parsed object', () => {
|
|
206
|
-
const yamlText = 'verdict: pass\nscore: 95';
|
|
207
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
208
|
-
expect(error).toBeNull();
|
|
209
|
-
expect(parsed).toEqual({ verdict: 'pass', score: 95 });
|
|
210
|
-
});
|
|
211
|
-
it('parses nested YAML structures', () => {
|
|
212
|
-
const yamlText = [
|
|
213
|
-
'result: success',
|
|
214
|
-
'details:',
|
|
215
|
-
' tests: 12',
|
|
216
|
-
' coverage: 95.2',
|
|
217
|
-
'tags:',
|
|
218
|
-
' - unit',
|
|
219
|
-
' - integration',
|
|
220
|
-
].join('\n');
|
|
221
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
222
|
-
expect(error).toBeNull();
|
|
223
|
-
expect(parsed).toEqual({
|
|
224
|
-
result: 'success',
|
|
225
|
-
details: { tests: 12, coverage: 95.2 },
|
|
226
|
-
tags: ['unit', 'integration'],
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
it('parses a scalar YAML value', () => {
|
|
230
|
-
const { parsed, error } = parseYamlResult('42');
|
|
231
|
-
expect(error).toBeNull();
|
|
232
|
-
expect(parsed).toBe(42);
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
// -----------------------------------------------------------------------
|
|
236
|
-
// Parse errors
|
|
237
|
-
// -----------------------------------------------------------------------
|
|
238
|
-
describe('parse errors', () => {
|
|
239
|
-
it('returns an error for invalid YAML syntax', () => {
|
|
240
|
-
const yamlText = '{ invalid: yaml: : :';
|
|
241
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
242
|
-
expect(parsed).toBeNull();
|
|
243
|
-
expect(error).toContain('YAML parse error');
|
|
244
|
-
});
|
|
245
|
-
it('returns an error when YAML parses to null', () => {
|
|
246
|
-
const yamlText = '~'; // YAML null literal
|
|
247
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
248
|
-
expect(parsed).toBeNull();
|
|
249
|
-
expect(error).toBe('YAML parsed to null or undefined');
|
|
250
|
-
});
|
|
251
|
-
it('returns an error when YAML parses to undefined', () => {
|
|
252
|
-
const yamlText = ''; // empty string parses to undefined in js-yaml
|
|
253
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
254
|
-
expect(parsed).toBeNull();
|
|
255
|
-
expect(error).toBe('YAML parsed to null or undefined');
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
// -----------------------------------------------------------------------
|
|
259
|
-
// Schema validation
|
|
260
|
-
// -----------------------------------------------------------------------
|
|
261
|
-
describe('schema validation', () => {
|
|
262
|
-
const VerdictSchema = z.object({
|
|
263
|
-
verdict: z.enum(['pass', 'fail', 'needs_minor_fixes']),
|
|
264
|
-
score: z.number().min(0).max(100).optional(),
|
|
265
|
-
notes: z.string().optional(),
|
|
266
|
-
});
|
|
267
|
-
it('returns parsed result when YAML matches the schema', () => {
|
|
268
|
-
const yamlText = 'verdict: pass\nscore: 95\nnotes: looks great';
|
|
269
|
-
const { parsed, error } = parseYamlResult(yamlText, VerdictSchema);
|
|
270
|
-
expect(error).toBeNull();
|
|
271
|
-
expect(parsed).toEqual({
|
|
272
|
-
verdict: 'pass',
|
|
273
|
-
score: 95,
|
|
274
|
-
notes: 'looks great',
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
it('returns schema validation error for invalid values', () => {
|
|
278
|
-
const yamlText = 'verdict: invalid_value\nscore: 95';
|
|
279
|
-
const { parsed, error } = parseYamlResult(yamlText, VerdictSchema);
|
|
280
|
-
expect(parsed).toBeNull();
|
|
281
|
-
expect(error).toContain('Schema validation error');
|
|
282
|
-
});
|
|
283
|
-
it('returns schema validation error for wrong types', () => {
|
|
284
|
-
const yamlText = 'verdict: pass\nscore: not_a_number';
|
|
285
|
-
const { parsed, error } = parseYamlResult(yamlText, VerdictSchema);
|
|
286
|
-
expect(parsed).toBeNull();
|
|
287
|
-
expect(error).toContain('Schema validation error');
|
|
288
|
-
});
|
|
289
|
-
it('returns schema validation error when required field is missing', () => {
|
|
290
|
-
const yamlText = 'score: 95'; // missing verdict
|
|
291
|
-
const { parsed, error } = parseYamlResult(yamlText, VerdictSchema);
|
|
292
|
-
expect(parsed).toBeNull();
|
|
293
|
-
expect(error).toContain('Schema validation error');
|
|
294
|
-
});
|
|
295
|
-
it('strips unknown fields when schema is strict', () => {
|
|
296
|
-
const StrictSchema = z.object({
|
|
297
|
-
verdict: z.string(),
|
|
298
|
-
}).strict();
|
|
299
|
-
const yamlText = 'verdict: pass\nextra_field: surprise';
|
|
300
|
-
const { parsed, error } = parseYamlResult(yamlText, StrictSchema);
|
|
301
|
-
// strict schema rejects unknown fields
|
|
302
|
-
expect(parsed).toBeNull();
|
|
303
|
-
expect(error).toContain('Schema validation error');
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
// -----------------------------------------------------------------------
|
|
307
|
-
// YAML escape sanitization
|
|
308
|
-
// -----------------------------------------------------------------------
|
|
309
|
-
describe('escape sanitization', () => {
|
|
310
|
-
it('sanitizes invalid \\$ escapes in double-quoted YAML strings', () => {
|
|
311
|
-
const yamlText = 'verdict: pass\npath: "src/\\$lib/types"';
|
|
312
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
313
|
-
expect(error).toBeNull();
|
|
314
|
-
expect(parsed).toEqual({
|
|
315
|
-
verdict: 'pass',
|
|
316
|
-
path: 'src/$lib/types',
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
it('sanitizes invalid \\# escapes in double-quoted strings', () => {
|
|
320
|
-
const yamlText = 'result: ok\ncomment: "fix \\#123"';
|
|
321
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
322
|
-
expect(error).toBeNull();
|
|
323
|
-
expect(parsed).toEqual({
|
|
324
|
-
result: 'ok',
|
|
325
|
-
comment: 'fix #123',
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
|
-
it('preserves valid escape sequences (\\n, \\t, \\\\)', () => {
|
|
329
|
-
const yamlText = 'verdict: pass\nmessage: "line1\\nline2\\ttab\\\\backslash"';
|
|
330
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
331
|
-
expect(error).toBeNull();
|
|
332
|
-
expect(parsed).toEqual({
|
|
333
|
-
verdict: 'pass',
|
|
334
|
-
message: 'line1\nline2\ttab\\backslash',
|
|
335
|
-
});
|
|
336
|
-
});
|
|
337
|
-
it('does not modify single-quoted strings', () => {
|
|
338
|
-
// In YAML, single-quoted strings have no escape processing
|
|
339
|
-
const yamlText = "verdict: pass\npath: 'src/\\$lib'";
|
|
340
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
341
|
-
expect(error).toBeNull();
|
|
342
|
-
// single-quoted strings preserve backslashes literally
|
|
343
|
-
expect(parsed).toEqual({
|
|
344
|
-
verdict: 'pass',
|
|
345
|
-
path: 'src/\\$lib',
|
|
346
|
-
});
|
|
347
|
-
});
|
|
348
|
-
});
|
|
349
|
-
// -----------------------------------------------------------------------
|
|
350
|
-
// Duplicate key merging
|
|
351
|
-
// -----------------------------------------------------------------------
|
|
352
|
-
describe('duplicate key merging', () => {
|
|
353
|
-
it('merges duplicate top-level keys with array values', () => {
|
|
354
|
-
const yamlText = [
|
|
355
|
-
'result: success',
|
|
356
|
-
'non_functional_requirements:',
|
|
357
|
-
' - description: "API responses under 200ms"',
|
|
358
|
-
' category: "performance"',
|
|
359
|
-
' - description: "All data encrypted at rest"',
|
|
360
|
-
' category: "security"',
|
|
361
|
-
'non_functional_requirements:',
|
|
362
|
-
' - description: "99.9% uptime SLA"',
|
|
363
|
-
' category: "reliability"',
|
|
364
|
-
'tech_stack:',
|
|
365
|
-
' language: "TypeScript"',
|
|
366
|
-
].join('\n');
|
|
367
|
-
const schema = z.object({
|
|
368
|
-
result: z.enum(['success', 'failed']),
|
|
369
|
-
non_functional_requirements: z.array(z.object({
|
|
370
|
-
description: z.string(),
|
|
371
|
-
category: z.string(),
|
|
372
|
-
})).min(2),
|
|
373
|
-
tech_stack: z.record(z.string(), z.string()),
|
|
374
|
-
});
|
|
375
|
-
const { parsed, error } = parseYamlResult(yamlText, schema);
|
|
376
|
-
expect(error).toBeNull();
|
|
377
|
-
expect(parsed).not.toBeNull();
|
|
378
|
-
expect(parsed.non_functional_requirements).toHaveLength(3);
|
|
379
|
-
expect(parsed.non_functional_requirements[2].category).toBe('reliability');
|
|
380
|
-
});
|
|
381
|
-
it('still returns error for non-duplicate YAML errors', () => {
|
|
382
|
-
const yamlText = '{ invalid: yaml: : :';
|
|
383
|
-
const { parsed, error } = parseYamlResult(yamlText);
|
|
384
|
-
expect(parsed).toBeNull();
|
|
385
|
-
expect(error).toContain('YAML parse error');
|
|
386
|
-
});
|
|
387
|
-
});
|
|
388
|
-
// -----------------------------------------------------------------------
|
|
389
|
-
// End-to-end: extractYamlBlock + parseYamlResult
|
|
390
|
-
// -----------------------------------------------------------------------
|
|
391
|
-
describe('extract + parse integration', () => {
|
|
392
|
-
it('extracts and parses a complete agent output', () => {
|
|
393
|
-
const agentOutput = [
|
|
394
|
-
'I have analyzed the code and performed the review.',
|
|
395
|
-
'',
|
|
396
|
-
'The implementation looks correct. All tests pass.',
|
|
397
|
-
'',
|
|
398
|
-
'```yaml',
|
|
399
|
-
'verdict: pass',
|
|
400
|
-
'score: 92',
|
|
401
|
-
'notes: Clean implementation with good test coverage',
|
|
402
|
-
'```',
|
|
403
|
-
].join('\n');
|
|
404
|
-
const yamlBlock = extractYamlBlock(agentOutput);
|
|
405
|
-
expect(yamlBlock).not.toBeNull();
|
|
406
|
-
const schema = z.object({
|
|
407
|
-
verdict: z.enum(['pass', 'fail']),
|
|
408
|
-
score: z.number(),
|
|
409
|
-
notes: z.string(),
|
|
410
|
-
});
|
|
411
|
-
const { parsed, error } = parseYamlResult(yamlBlock, schema);
|
|
412
|
-
expect(error).toBeNull();
|
|
413
|
-
expect(parsed).toEqual({
|
|
414
|
-
verdict: 'pass',
|
|
415
|
-
score: 92,
|
|
416
|
-
notes: 'Clean implementation with good test coverage',
|
|
417
|
-
});
|
|
418
|
-
});
|
|
419
|
-
it('handles agent output with no YAML block', () => {
|
|
420
|
-
const agentOutput = 'The agent crashed and produced no structured output.';
|
|
421
|
-
const yamlBlock = extractYamlBlock(agentOutput);
|
|
422
|
-
expect(yamlBlock).toBeNull();
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
// -----------------------------------------------------------------------
|
|
426
|
-
// JSON fallback extraction
|
|
427
|
-
// -----------------------------------------------------------------------
|
|
428
|
-
describe('JSON fallback extraction', () => {
|
|
429
|
-
it('extracts JSON object containing anchor key and converts to YAML', () => {
|
|
430
|
-
const output = 'Some narrative...\n{\n"result": "success",\n"files_modified": ["src/foo.ts"]\n}\nDone.';
|
|
431
|
-
const block = extractYamlBlock(output);
|
|
432
|
-
expect(block).not.toBeNull();
|
|
433
|
-
expect(block).toContain('result: success');
|
|
434
|
-
});
|
|
435
|
-
it('ignores JSON without anchor keys', () => {
|
|
436
|
-
const output = 'Narrative\n{\n"status": "ok",\n"count": 42\n}\nEnd.';
|
|
437
|
-
const block = extractYamlBlock(output);
|
|
438
|
-
expect(block).toBeNull();
|
|
439
|
-
});
|
|
440
|
-
it('takes the last JSON object when multiple are present', () => {
|
|
441
|
-
const output = [
|
|
442
|
-
'{\n"result": "failed",\n"error": "first attempt"\n}',
|
|
443
|
-
'Retrying...',
|
|
444
|
-
'{\n"result": "success",\n"ac_met": ["AC1"]\n}',
|
|
445
|
-
].join('\n');
|
|
446
|
-
const block = extractYamlBlock(output);
|
|
447
|
-
expect(block).not.toBeNull();
|
|
448
|
-
expect(block).toContain('result: success');
|
|
449
|
-
});
|
|
450
|
-
it('handles malformed JSON gracefully', () => {
|
|
451
|
-
const output = 'Narrative\n{result: not valid json, verdict: broken\n}\nEnd.';
|
|
452
|
-
const block = extractYamlBlock(output);
|
|
453
|
-
// May or may not extract — should not throw
|
|
454
|
-
expect(() => extractYamlBlock(output)).not.toThrow();
|
|
455
|
-
});
|
|
456
|
-
it('prefers fenced YAML over JSON fallback', () => {
|
|
457
|
-
const output = [
|
|
458
|
-
'{\n"result": "failed"\n}',
|
|
459
|
-
'```yaml',
|
|
460
|
-
'result: success',
|
|
461
|
-
'verdict: SHIP_IT',
|
|
462
|
-
'```',
|
|
463
|
-
].join('\n');
|
|
464
|
-
const block = extractYamlBlock(output);
|
|
465
|
-
expect(block).toContain('verdict: SHIP_IT');
|
|
466
|
-
});
|
|
467
|
-
it('extracts JSON with verdict anchor key', () => {
|
|
468
|
-
const output = '{\n"verdict": "SHIP_IT",\n"issues": 0,\n"issue_list": []\n}';
|
|
469
|
-
const block = extractYamlBlock(output);
|
|
470
|
-
expect(block).not.toBeNull();
|
|
471
|
-
expect(block).toContain('verdict: SHIP_IT');
|
|
472
|
-
});
|
|
473
|
-
});
|
|
474
|
-
});
|
|
475
|
-
//# sourceMappingURL=yaml-parser.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/yaml-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Temporary type-assertion file for AC5 verification (Story 40-11).
|
|
3
|
-
*
|
|
4
|
-
* Uses TypeScript `satisfies` expressions to confirm structural compatibility
|
|
5
|
-
* between core package interfaces and what the monolith implements.
|
|
6
|
-
*
|
|
7
|
-
* This file is created, compiled, and then deleted — it must NOT appear in
|
|
8
|
-
* the final dist artifacts.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=__type-checks__.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"__type-checks__.d.ts","sourceRoot":"","sources":["../src/__type-checks__.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyEH,OAAO,EAAE,CAAA"}
|
package/dist/__type-checks__.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Temporary type-assertion file for AC5 verification (Story 40-11).
|
|
3
|
-
*
|
|
4
|
-
* Uses TypeScript `satisfies` expressions to confirm structural compatibility
|
|
5
|
-
* between core package interfaces and what the monolith implements.
|
|
6
|
-
*
|
|
7
|
-
* This file is created, compiled, and then deleted — it must NOT appear in
|
|
8
|
-
* the final dist artifacts.
|
|
9
|
-
*/
|
|
10
|
-
// Verify CoreEvents extends EventMap (object constraint)
|
|
11
|
-
const _coreEventsCheck = {};
|
|
12
|
-
const _dispatchReturnCheck = true;
|
|
13
|
-
const _queryReturnCheck = true;
|
|
14
|
-
const _execReturnCheck = true;
|
|
15
|
-
const _transactionReturnCheck = true;
|
|
16
|
-
const _closeReturnCheck = true;
|
|
17
|
-
const _readyStoriesReturnCheck = true;
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=__type-checks__.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"__type-checks__.js","sourceRoot":"","sources":["../src/__type-checks__.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH,yDAAyD;AACzD,MAAM,gBAAgB,GAAa,EAAgB,CAAA;AAenD,MAAM,oBAAoB,GAAiC,IAAI,CAAA;AAoB/D,MAAM,iBAAiB,GAA2B,IAAI,CAAA;AAItD,MAAM,gBAAgB,GAA0B,IAAI,CAAA;AAIpD,MAAM,uBAAuB,GAAiC,IAAI,CAAA;AAIlE,MAAM,iBAAiB,GAA2B,IAAI,CAAA;AAItD,MAAM,wBAAwB,GAAkC,IAAI,CAAA"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for AdapterOutputNormalizer (Story 53-10).
|
|
3
|
-
*
|
|
4
|
-
* Tests all 4 normalization strategies:
|
|
5
|
-
* 1. standard — direct extractYamlBlock
|
|
6
|
-
* 2. strip-prose — remove leading prose, retry
|
|
7
|
-
* 3. strip-markdown — remove markdown artifacts, retry
|
|
8
|
-
* 4. json-fallback — parse embedded JSON, dump to YAML
|
|
9
|
-
* Plus error handling when all strategies are exhausted.
|
|
10
|
-
*/
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=adapter-output-normalizer.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-output-normalizer.test.d.ts","sourceRoot":"","sources":["../../../src/adapters/__tests__/adapter-output-normalizer.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|