@principles/core 1.151.0 → 1.153.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/runtime-v2/__tests__/adversarial-loop.test.d.ts +2 -0
  2. package/dist/runtime-v2/__tests__/adversarial-loop.test.d.ts.map +1 -0
  3. package/dist/runtime-v2/__tests__/adversarial-loop.test.js +435 -0
  4. package/dist/runtime-v2/__tests__/adversarial-loop.test.js.map +1 -0
  5. package/dist/runtime-v2/__tests__/architecture-regression.test.js +5 -0
  6. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  7. package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.d.ts +2 -0
  8. package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.d.ts.map +1 -0
  9. package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.js +169 -0
  10. package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.js.map +1 -0
  11. package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.d.ts +2 -0
  12. package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.d.ts.map +1 -0
  13. package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +815 -0
  14. package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -0
  15. package/dist/runtime-v2/__tests__/internalization-peer-runner-contracts.test.js +6 -0
  16. package/dist/runtime-v2/__tests__/internalization-peer-runner-contracts.test.js.map +1 -1
  17. package/dist/runtime-v2/__tests__/pitask-metadata.test.js +4 -0
  18. package/dist/runtime-v2/__tests__/pitask-metadata.test.js.map +1 -1
  19. package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.d.ts +2 -0
  20. package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.d.ts.map +1 -0
  21. package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.js +510 -0
  22. package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.js.map +1 -0
  23. package/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts +47 -0
  24. package/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -0
  25. package/dist/runtime-v2/adapter/artificer-l2-adapter.js +307 -0
  26. package/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -0
  27. package/dist/runtime-v2/adversarial-loop.d.ts +65 -0
  28. package/dist/runtime-v2/adversarial-loop.d.ts.map +1 -0
  29. package/dist/runtime-v2/adversarial-loop.js +203 -0
  30. package/dist/runtime-v2/adversarial-loop.js.map +1 -0
  31. package/dist/runtime-v2/golden-trace.d.ts +30 -0
  32. package/dist/runtime-v2/golden-trace.d.ts.map +1 -1
  33. package/dist/runtime-v2/golden-trace.js +57 -0
  34. package/dist/runtime-v2/golden-trace.js.map +1 -1
  35. package/dist/runtime-v2/index.d.ts +10 -6
  36. package/dist/runtime-v2/index.d.ts.map +1 -1
  37. package/dist/runtime-v2/index.js +7 -3
  38. package/dist/runtime-v2/index.js.map +1 -1
  39. package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.d.ts +2 -0
  40. package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.d.ts.map +1 -0
  41. package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.js +139 -0
  42. package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.js.map +1 -0
  43. package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.d.ts +2 -0
  44. package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.d.ts.map +1 -0
  45. package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js +62 -0
  46. package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js.map +1 -0
  47. package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.d.ts +2 -0
  48. package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.d.ts.map +1 -0
  49. package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.js +249 -0
  50. package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.js.map +1 -0
  51. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.d.ts +2 -0
  52. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.d.ts.map +1 -0
  53. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.js +24 -0
  54. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.js.map +1 -0
  55. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +2 -2
  56. package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
  57. package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.d.ts +2 -0
  58. package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.d.ts.map +1 -0
  59. package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.js +209 -0
  60. package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.js.map +1 -0
  61. package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.d.ts +2 -0
  62. package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.d.ts.map +1 -0
  63. package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.js +125 -0
  64. package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.js.map +1 -0
  65. package/dist/runtime-v2/internalization/adversarial-case.d.ts +32 -0
  66. package/dist/runtime-v2/internalization/adversarial-case.d.ts.map +1 -0
  67. package/dist/runtime-v2/internalization/adversarial-case.js +68 -0
  68. package/dist/runtime-v2/internalization/adversarial-case.js.map +1 -0
  69. package/dist/runtime-v2/internalization/adversarial-feedback.d.ts +23 -0
  70. package/dist/runtime-v2/internalization/adversarial-feedback.d.ts.map +1 -0
  71. package/dist/runtime-v2/internalization/adversarial-feedback.js +20 -0
  72. package/dist/runtime-v2/internalization/adversarial-feedback.js.map +1 -0
  73. package/dist/runtime-v2/internalization/artificer-output.d.ts +42 -0
  74. package/dist/runtime-v2/internalization/artificer-output.d.ts.map +1 -1
  75. package/dist/runtime-v2/internalization/artificer-output.js +147 -0
  76. package/dist/runtime-v2/internalization/artificer-output.js.map +1 -1
  77. package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +10 -2
  78. package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  79. package/dist/runtime-v2/internalization/artificer-prompt-builder.js +26 -3
  80. package/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  81. package/dist/runtime-v2/internalization/artificer-runner.d.ts +7 -0
  82. package/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
  83. package/dist/runtime-v2/internalization/artificer-runner.js +11 -2
  84. package/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
  85. package/dist/runtime-v2/internalization/evaluator-output.d.ts +63 -0
  86. package/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
  87. package/dist/runtime-v2/internalization/evaluator-output.js +158 -0
  88. package/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
  89. package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +8 -1
  90. package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
  91. package/dist/runtime-v2/internalization/evaluator-prompt-builder.js +16 -3
  92. package/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
  93. package/dist/runtime-v2/internalization/evaluator-runner.d.ts +82 -2
  94. package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  95. package/dist/runtime-v2/internalization/evaluator-runner.js +496 -4
  96. package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  97. package/dist/runtime-v2/internalization/index.d.ts +9 -4
  98. package/dist/runtime-v2/internalization/index.d.ts.map +1 -1
  99. package/dist/runtime-v2/internalization/index.js +6 -2
  100. package/dist/runtime-v2/internalization/index.js.map +1 -1
  101. package/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +2 -0
  102. package/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
  103. package/dist/runtime-v2/internalization/peer-runner-contracts.js +19 -9
  104. package/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
  105. package/dist/runtime-v2/internalization/pitask-metadata.d.ts +7 -0
  106. package/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
  107. package/dist/runtime-v2/internalization/pitask-metadata.js +15 -5
  108. package/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
  109. package/dist/runtime-v2/internalization/prompt-serializer.d.ts +3 -0
  110. package/dist/runtime-v2/internalization/prompt-serializer.d.ts.map +1 -0
  111. package/dist/runtime-v2/internalization/prompt-serializer.js +22 -0
  112. package/dist/runtime-v2/internalization/prompt-serializer.js.map +1 -0
  113. package/dist/telemetry-event.d.ts +2 -2
  114. package/dist/telemetry-event.d.ts.map +1 -1
  115. package/dist/telemetry-event.js +21 -0
  116. package/dist/telemetry-event.js.map +1 -1
  117. package/package.json +1 -1
@@ -0,0 +1,510 @@
1
+ /**
2
+ * ArtificerL2Adapter tests (RuleHost MVP Activation, ADR-0014 Amendment 2026-06-17,
3
+ * PRD Decision 8, test module 7).
4
+ *
5
+ * TDD Phase 4.1 RED — asserts behavior not yet implemented in
6
+ * artificer-l2-adapter.ts.
7
+ *
8
+ * The adapter encapsulates a write-test-fix loop (generate code → sandbox replay →
9
+ * inject RefinerSandboxFailedCase[] feedback → regenerate, max 3 attempts) inside
10
+ * a PDRuntimeAdapter. BasePeerRunner sees a single startRun(); the loop is invisible
11
+ * to it. This follows the Dreamer L2 precedent (L2AgentLoopAdapter) of putting the
12
+ * multi-attempt logic in the adapter, not in succeedTask().
13
+ *
14
+ * Testability: LLM calls are mocked via an injected `generateCode` function.
15
+ * Sandbox replay uses real evaluateRefinerRuleHostGate with a controllable
16
+ * RefinerRuleHostGateDeps. No real LLM calls.
17
+ *
18
+ * Coverage (PRD test module 7):
19
+ * - happy path: 1st attempt passes replay → V2 output (1 LLM call)
20
+ * - fix path: 1st attempt fails → feedback injected → 2nd passes → V2 (2 LLM calls)
21
+ * - exhaustion: 3 attempts all fail → V1 degraded output (no code fields)
22
+ * - error types: forbidden_pattern / runtime_error / timeout / validation_failed
23
+ * - V1 backward compat: degraded V1 output is NOT detected as V2 by isArtificerOutputV2
24
+ *
25
+ * ERR checklist (EP-05 Loop State Freshness): each attempt reads fresh sandbox
26
+ * errors; the feedback injected into attempt N+1 is from attempt N's failure,
27
+ * never stale. (ERR-015/018/019)
28
+ */
29
+ import { describe, it, expect } from 'vitest';
30
+ import { ArtificerL2Adapter } from '../artificer-l2-adapter.js';
31
+ import { isArtificerOutputV2, DefaultArtificerValidator } from '../../internalization/artificer-output.js';
32
+ import { validateGoldenTrace } from '../../golden-trace.js';
33
+ import { Value } from '@sinclair/typebox/value';
34
+ import { RunHandleSchema, RuntimeKindSchema } from '../../runtime-protocol.js';
35
+ const TASK_ID = 'task-artificer-l2-001';
36
+ /** A valid V2 output the LLM might produce. */
37
+ function makeV2Output(overrides = {}) {
38
+ return {
39
+ taskId: TASK_ID,
40
+ sourceScribeArtifactId: 'pi-art-scribe-001-run-001',
41
+ implementationPlan: {
42
+ summary: 'Block writes to system dirs',
43
+ targetSurface: 'edit gate',
44
+ changes: ['path prefix check'],
45
+ tests: ['golden trace replay'],
46
+ rolloutNotes: ['shadow first'],
47
+ confidence: 0.8,
48
+ },
49
+ sourceTrace: { scribeArtifactId: 'pi-art-scribe-001-run-001' },
50
+ risks: [],
51
+ generatedAt: '2026-06-17T00:00:00.000Z',
52
+ implementationCode: 'function evaluate(input, helpers) { return { decision: "allow", matched: false, reason: "ok" }; }',
53
+ goldenTraceCases: [
54
+ { caseId: 'negative-1', kind: 'negative', toolName: 'edit', params: { path: '/etc/x' }, expectedDecision: 'block' },
55
+ { caseId: 'positive-1', kind: 'positive', toolName: 'read', params: { path: '/tmp/y' }, expectedDecision: 'allow' },
56
+ ],
57
+ affectedTools: ['edit'],
58
+ ...overrides,
59
+ };
60
+ }
61
+ /** Build a gateDeps whose sandbox always accepts (replay passes). */
62
+ function makeAlwaysPassGateDeps() {
63
+ const passingResult = {
64
+ success: true,
65
+ failedCases: [],
66
+ executionTimeMs: 1,
67
+ forbiddenPatternViolations: [],
68
+ };
69
+ return {
70
+ evaluateInSandbox: (_code, _trace, _opts) => passingResult,
71
+ };
72
+ }
73
+ /**
74
+ * Build a gateDeps whose sandbox fails N times then passes.
75
+ * Each failure carries a distinct RefinerSandboxFailedCase so tests can assert
76
+ * that the RIGHT feedback was injected into the next attempt (EP-05 freshness).
77
+ */
78
+ function makeFailNTimesGateDeps(failures) {
79
+ const calls = [];
80
+ let attempt = 0;
81
+ const deps = {
82
+ evaluateInSandbox: (code, _trace, _opts) => {
83
+ calls.push({ code });
84
+ const result = failures[attempt] ?? { success: true, failedCases: [], executionTimeMs: 1, forbiddenPatternViolations: [] };
85
+ attempt += 1;
86
+ return result;
87
+ },
88
+ };
89
+ return { deps, calls };
90
+ }
91
+ const FAILED_FORBIDDEN = {
92
+ success: false,
93
+ failedCases: [{ caseId: '__sandbox__', errorType: 'forbidden_pattern', message: 'require() detected' }],
94
+ executionTimeMs: 1,
95
+ forbiddenPatternViolations: ['require'],
96
+ };
97
+ const FAILED_RUNTIME = {
98
+ success: false,
99
+ failedCases: [{ caseId: 'negative-1', errorType: 'runtime_error', message: 'TypeError: x is undefined' }],
100
+ executionTimeMs: 1,
101
+ forbiddenPatternViolations: [],
102
+ };
103
+ const FAILED_TIMEOUT = {
104
+ success: false,
105
+ failedCases: [{ caseId: 'negative-1', errorType: 'timeout', message: 'exceeded 1000ms' }],
106
+ executionTimeMs: 1001,
107
+ forbiddenPatternViolations: [],
108
+ };
109
+ const FAILED_VALIDATION = {
110
+ success: false,
111
+ failedCases: [{ caseId: 'negative-1', errorType: 'validation_failed', message: 'expected block got allow' }],
112
+ executionTimeMs: 1,
113
+ forbiddenPatternViolations: [],
114
+ };
115
+ describe('ArtificerL2Adapter (RuleHost MVP Activation, PRI-424)', () => {
116
+ // ── happy path ─────────────────────────────────────────────────────────────
117
+ it('returns V2 output on 1st attempt when sandbox replay passes (1 LLM call)', async () => {
118
+ const generateCalls = [];
119
+ const generateCode = async (prompt) => {
120
+ generateCalls.push(prompt);
121
+ return makeV2Output();
122
+ };
123
+ const adapter = new ArtificerL2Adapter({
124
+ generateCode,
125
+ gateDeps: makeAlwaysPassGateDeps(),
126
+ validator: new DefaultArtificerValidator(),
127
+ });
128
+ const handle = await adapter.startRun({
129
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
130
+ taskRef: { taskId: TASK_ID },
131
+ inputPayload: 'initial prompt',
132
+ contextItems: [],
133
+ outputSchemaRef: 'artificer-output-v2',
134
+ timeoutMs: 300_000,
135
+ });
136
+ expect(generateCalls).toHaveLength(1);
137
+ const output = await adapter.fetchOutput(handle.runId);
138
+ expect(output).not.toBeNull();
139
+ if (!output)
140
+ return;
141
+ expect(isArtificerOutputV2(output.payload)).toBe(true);
142
+ });
143
+ // ── fix path ───────────────────────────────────────────────────────────────
144
+ it('injects sandbox failure feedback into 2nd attempt and returns V2 when it passes (2 LLM calls)', async () => {
145
+ const generateCalls = [];
146
+ const generateCode = async (prompt) => {
147
+ generateCalls.push(prompt);
148
+ return makeV2Output();
149
+ };
150
+ const { deps } = makeFailNTimesGateDeps([FAILED_RUNTIME]);
151
+ const adapter = new ArtificerL2Adapter({
152
+ generateCode,
153
+ gateDeps: deps,
154
+ validator: new DefaultArtificerValidator(),
155
+ });
156
+ const handle = await adapter.startRun({
157
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
158
+ taskRef: { taskId: TASK_ID },
159
+ inputPayload: 'initial prompt',
160
+ contextItems: [],
161
+ outputSchemaRef: 'artificer-output-v2',
162
+ timeoutMs: 300_000,
163
+ });
164
+ expect(generateCalls).toHaveLength(2);
165
+ // 2nd prompt MUST contain the failure feedback from attempt 1 (EP-05 freshness).
166
+ expect(generateCalls[1]).toContain('TypeError: x is undefined');
167
+ const output = await adapter.fetchOutput(handle.runId);
168
+ expect(output).not.toBeNull();
169
+ if (!output)
170
+ return;
171
+ expect(isArtificerOutputV2(output.payload)).toBe(true);
172
+ });
173
+ // ── exhaustion → V1 degradation ────────────────────────────────────────────
174
+ it('degrades to V1 output (no code fields) when all 3 attempts fail (3 LLM calls)', async () => {
175
+ const generateCalls = [];
176
+ const generateCode = async (prompt) => {
177
+ generateCalls.push(prompt);
178
+ return makeV2Output();
179
+ };
180
+ const { deps } = makeFailNTimesGateDeps([FAILED_RUNTIME, FAILED_RUNTIME, FAILED_RUNTIME]);
181
+ const adapter = new ArtificerL2Adapter({
182
+ generateCode,
183
+ gateDeps: deps,
184
+ validator: new DefaultArtificerValidator(),
185
+ });
186
+ const handle = await adapter.startRun({
187
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
188
+ taskRef: { taskId: TASK_ID },
189
+ inputPayload: 'initial prompt',
190
+ contextItems: [],
191
+ outputSchemaRef: 'artificer-output-v2',
192
+ timeoutMs: 300_000,
193
+ });
194
+ expect(generateCalls).toHaveLength(3);
195
+ const output = await adapter.fetchOutput(handle.runId);
196
+ expect(output).not.toBeNull();
197
+ if (!output)
198
+ return;
199
+ // Degraded output must NOT be detected as V2 — downstream Evaluator skips code review.
200
+ expect(isArtificerOutputV2(output.payload)).toBe(false);
201
+ // V1 fields preserved (plan, lineage) so principle artifact path still works.
202
+ expect(output.payload).toHaveProperty('implementationPlan');
203
+ });
204
+ it('degraded V1 output still passes the V1 validator (principle artifact path intact)', async () => {
205
+ const generateCode = async () => makeV2Output();
206
+ const { deps } = makeFailNTimesGateDeps([FAILED_RUNTIME, FAILED_RUNTIME, FAILED_RUNTIME]);
207
+ const validator = new DefaultArtificerValidator();
208
+ const adapter = new ArtificerL2Adapter({
209
+ generateCode,
210
+ gateDeps: deps,
211
+ validator,
212
+ });
213
+ const handle = await adapter.startRun({
214
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
215
+ taskRef: { taskId: TASK_ID },
216
+ inputPayload: 'initial prompt',
217
+ contextItems: [],
218
+ outputSchemaRef: 'artificer-output-v2',
219
+ timeoutMs: 300_000,
220
+ });
221
+ const output = await adapter.fetchOutput(handle.runId);
222
+ expect(output).not.toBeNull();
223
+ if (!output)
224
+ return;
225
+ const result = await validator.validate(output.payload, TASK_ID);
226
+ expect(result.valid).toBe(true);
227
+ });
228
+ // ── error type coverage ────────────────────────────────────────────────────
229
+ it('handles forbidden_pattern failure and injects it as feedback', async () => {
230
+ const generateCalls = [];
231
+ const generateCode = async (prompt) => {
232
+ generateCalls.push(prompt);
233
+ return makeV2Output();
234
+ };
235
+ const { deps } = makeFailNTimesGateDeps([FAILED_FORBIDDEN]);
236
+ const adapter = new ArtificerL2Adapter({
237
+ generateCode,
238
+ gateDeps: deps,
239
+ validator: new DefaultArtificerValidator(),
240
+ });
241
+ await adapter.startRun({
242
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
243
+ taskRef: { taskId: TASK_ID },
244
+ inputPayload: 'initial prompt',
245
+ contextItems: [],
246
+ outputSchemaRef: 'artificer-output-v2',
247
+ timeoutMs: 300_000,
248
+ });
249
+ expect(generateCalls).toHaveLength(2);
250
+ expect(generateCalls[1]).toContain('require');
251
+ });
252
+ it('handles timeout failure and injects it as feedback', async () => {
253
+ const generateCalls = [];
254
+ const generateCode = async (prompt) => {
255
+ generateCalls.push(prompt);
256
+ return makeV2Output();
257
+ };
258
+ const { deps } = makeFailNTimesGateDeps([FAILED_TIMEOUT]);
259
+ const adapter = new ArtificerL2Adapter({
260
+ generateCode,
261
+ gateDeps: deps,
262
+ validator: new DefaultArtificerValidator(),
263
+ });
264
+ await adapter.startRun({
265
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
266
+ taskRef: { taskId: TASK_ID },
267
+ inputPayload: 'initial prompt',
268
+ contextItems: [],
269
+ outputSchemaRef: 'artificer-output-v2',
270
+ timeoutMs: 300_000,
271
+ });
272
+ expect(generateCalls[1]).toContain('timeout');
273
+ });
274
+ it('handles validation_failed failure and injects it as feedback', async () => {
275
+ const generateCalls = [];
276
+ const generateCode = async (prompt) => {
277
+ generateCalls.push(prompt);
278
+ return makeV2Output();
279
+ };
280
+ const { deps } = makeFailNTimesGateDeps([FAILED_VALIDATION]);
281
+ const adapter = new ArtificerL2Adapter({
282
+ generateCode,
283
+ gateDeps: deps,
284
+ validator: new DefaultArtificerValidator(),
285
+ });
286
+ await adapter.startRun({
287
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
288
+ taskRef: { taskId: TASK_ID },
289
+ inputPayload: 'initial prompt',
290
+ contextItems: [],
291
+ outputSchemaRef: 'artificer-output-v2',
292
+ timeoutMs: 300_000,
293
+ });
294
+ expect(generateCalls[1]).toContain('expected block got allow');
295
+ });
296
+ // ── EP-05 freshness: each attempt uses the immediately-prior failure ───────
297
+ it('injects attempt-N failure (not stale) into attempt N+1 prompt', async () => {
298
+ const generateCalls = [];
299
+ const generateCode = async (prompt) => {
300
+ generateCalls.push(prompt);
301
+ return makeV2Output();
302
+ };
303
+ // attempt 1 fails with runtime_error, attempt 2 fails with timeout, attempt 3 passes
304
+ const { deps } = makeFailNTimesGateDeps([FAILED_RUNTIME, FAILED_TIMEOUT]);
305
+ const adapter = new ArtificerL2Adapter({
306
+ generateCode,
307
+ gateDeps: deps,
308
+ validator: new DefaultArtificerValidator(),
309
+ });
310
+ await adapter.startRun({
311
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
312
+ taskRef: { taskId: TASK_ID },
313
+ inputPayload: 'initial prompt',
314
+ contextItems: [],
315
+ outputSchemaRef: 'artificer-output-v2',
316
+ timeoutMs: 300_000,
317
+ });
318
+ // attempt 2 prompt must mention attempt 1's runtime_error, NOT attempt 2's timeout
319
+ expect(generateCalls[1]).toContain('TypeError: x is undefined');
320
+ expect(generateCalls[1]).not.toContain('exceeded 1000ms');
321
+ // attempt 3 prompt must mention attempt 2's timeout, NOT attempt 1's runtime_error
322
+ expect(generateCalls[2]).toContain('exceeded 1000ms');
323
+ });
324
+ // ── golden trace used for replay must be valid ──────────────────────────────
325
+ it('builds a valid golden trace from the V2 output for sandbox replay', async () => {
326
+ const generateCode = async () => makeV2Output();
327
+ let capturedTrace = null;
328
+ const deps = {
329
+ evaluateInSandbox: (_code, trace, _opts) => {
330
+ capturedTrace = trace;
331
+ return { success: true, failedCases: [], executionTimeMs: 1, forbiddenPatternViolations: [] };
332
+ },
333
+ };
334
+ const adapter = new ArtificerL2Adapter({
335
+ generateCode,
336
+ gateDeps: deps,
337
+ validator: new DefaultArtificerValidator(),
338
+ });
339
+ await adapter.startRun({
340
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
341
+ taskRef: { taskId: TASK_ID },
342
+ inputPayload: 'initial prompt',
343
+ contextItems: [],
344
+ outputSchemaRef: 'artificer-output-v2',
345
+ timeoutMs: 300_000,
346
+ });
347
+ expect(capturedTrace).not.toBeNull();
348
+ expect(validateGoldenTrace(capturedTrace).valid).toBe(true);
349
+ });
350
+ // ── invalid LLM output (fails validator) is retried, not silently accepted ─
351
+ it('retries when LLM output fails the ArtificerValidator (malformed V2)', async () => {
352
+ let attempt = 0;
353
+ const generateCode = async () => {
354
+ attempt += 1;
355
+ if (attempt === 1) {
356
+ // Malformed: missing affectedTools
357
+ const bad = makeV2Output();
358
+ delete bad.affectedTools;
359
+ return bad;
360
+ }
361
+ return makeV2Output();
362
+ };
363
+ const adapter = new ArtificerL2Adapter({
364
+ generateCode,
365
+ gateDeps: makeAlwaysPassGateDeps(),
366
+ validator: new DefaultArtificerValidator(),
367
+ });
368
+ const handle = await adapter.startRun({
369
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
370
+ taskRef: { taskId: TASK_ID },
371
+ inputPayload: 'initial prompt',
372
+ contextItems: [],
373
+ outputSchemaRef: 'artificer-output-v2',
374
+ timeoutMs: 300_000,
375
+ });
376
+ const output = await adapter.fetchOutput(handle.runId);
377
+ expect(output).not.toBeNull();
378
+ if (!output)
379
+ return;
380
+ // 2nd attempt produces valid V2 → replay passes → V2 output
381
+ expect(isArtificerOutputV2(output.payload)).toBe(true);
382
+ });
383
+ // ── P1+P2 fixes: validator-rejected candidates never degrade, total failure throws ─
384
+ it('throws (does NOT degrade) when all 3 attempts fail validation — no validated V2 to degrade from', async () => {
385
+ // P2 fix: validator rejection must NOT set lastValidV2. Without a validated
386
+ // candidate, degradation is impossible (Runtime Contract Rule 1/3 — never
387
+ // emit an unvalidated object). The adapter throws PDRuntimeError instead,
388
+ // which BasePeerRunner.handlePostLeaseError catches → task fails.
389
+ const generateCode = async () => {
390
+ // Every attempt returns malformed V2 (missing affectedTools).
391
+ const bad = makeV2Output();
392
+ delete bad.affectedTools;
393
+ return bad;
394
+ };
395
+ const adapter = new ArtificerL2Adapter({
396
+ generateCode,
397
+ gateDeps: makeAlwaysPassGateDeps(),
398
+ validator: new DefaultArtificerValidator(),
399
+ });
400
+ await expect(adapter.startRun({
401
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
402
+ taskRef: { taskId: TASK_ID },
403
+ inputPayload: 'initial prompt',
404
+ contextItems: [],
405
+ outputSchemaRef: 'artificer-output-v2',
406
+ timeoutMs: 300_000,
407
+ })).rejects.toThrow(/without a validated candidate/);
408
+ });
409
+ it('degrades to V1 only when a VALIDATED V2 candidate existed (replay failed, not validation)', async () => {
410
+ // Confirms the positive side of the P2 fix: a validated V2 that fails replay
411
+ // CAN degrade. This is the legitimate degradation path (plan is valid, only
412
+ // the code was wrong).
413
+ const generateCode = async () => makeV2Output();
414
+ const { deps } = makeFailNTimesGateDeps([FAILED_RUNTIME, FAILED_RUNTIME, FAILED_RUNTIME]);
415
+ const adapter = new ArtificerL2Adapter({
416
+ generateCode,
417
+ gateDeps: deps,
418
+ validator: new DefaultArtificerValidator(),
419
+ });
420
+ const handle = await adapter.startRun({
421
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
422
+ taskRef: { taskId: TASK_ID },
423
+ inputPayload: 'initial prompt',
424
+ contextItems: [],
425
+ outputSchemaRef: 'artificer-output-v2',
426
+ timeoutMs: 300_000,
427
+ });
428
+ const output = await adapter.fetchOutput(handle.runId);
429
+ expect(output).not.toBeNull();
430
+ if (!output)
431
+ return;
432
+ expect(isArtificerOutputV2(output.payload)).toBe(false);
433
+ });
434
+ // ── runtime metadata ─────────────────────────────────────────────────────────
435
+ it('pollRun returns terminal status after startRun completes', async () => {
436
+ const generateCode = async () => makeV2Output();
437
+ const adapter = new ArtificerL2Adapter({
438
+ generateCode,
439
+ gateDeps: makeAlwaysPassGateDeps(),
440
+ validator: new DefaultArtificerValidator(),
441
+ });
442
+ const handle = await adapter.startRun({
443
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
444
+ taskRef: { taskId: TASK_ID },
445
+ inputPayload: 'initial prompt',
446
+ contextItems: [],
447
+ outputSchemaRef: 'artificer-output-v2',
448
+ timeoutMs: 300_000,
449
+ });
450
+ const status = await adapter.pollRun(handle.runId);
451
+ // RunStatus is an object { runId, status, ... }; status.status is the execution state.
452
+ expect(['succeeded', 'failed']).toContain(status.status);
453
+ });
454
+ it('kind() returns a stable runtime kind identifier', () => {
455
+ const adapter = new ArtificerL2Adapter({
456
+ generateCode: async () => makeV2Output(),
457
+ gateDeps: makeAlwaysPassGateDeps(),
458
+ validator: new DefaultArtificerValidator(),
459
+ });
460
+ expect(Value.Check(RuntimeKindSchema, adapter.kind())).toBe(true);
461
+ expect(adapter.kind()).toBe('pi-ai-l2');
462
+ });
463
+ it('returns a RunHandle that satisfies the runtime protocol schema', async () => {
464
+ const adapter = new ArtificerL2Adapter({
465
+ generateCode: async () => makeV2Output(),
466
+ gateDeps: makeAlwaysPassGateDeps(),
467
+ validator: new DefaultArtificerValidator(),
468
+ });
469
+ const handle = await adapter.startRun({
470
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
471
+ taskRef: { taskId: TASK_ID },
472
+ inputPayload: '{}',
473
+ contextItems: [],
474
+ outputSchemaRef: 'artificer-output-v2',
475
+ timeoutMs: 30_000,
476
+ });
477
+ expect(Value.Check(RunHandleSchema, handle)).toBe(true);
478
+ });
479
+ it.each([0, -1, 1.5, Number.POSITIVE_INFINITY])('rejects invalid maxAttempts=%s', (maxAttempts) => {
480
+ expect(() => new ArtificerL2Adapter({
481
+ generateCode: async () => makeV2Output(),
482
+ gateDeps: makeAlwaysPassGateDeps(),
483
+ validator: new DefaultArtificerValidator(),
484
+ maxAttempts,
485
+ })).toThrow(/maxAttempts/);
486
+ });
487
+ it('bounds and safely serializes an unknown prompt payload', async () => {
488
+ const circular = { text: 'x'.repeat(60_000) };
489
+ circular.self = circular;
490
+ let receivedPrompt = '';
491
+ const adapter = new ArtificerL2Adapter({
492
+ generateCode: async (prompt) => {
493
+ receivedPrompt = prompt;
494
+ return makeV2Output();
495
+ },
496
+ gateDeps: makeAlwaysPassGateDeps(),
497
+ validator: new DefaultArtificerValidator(),
498
+ });
499
+ await adapter.startRun({
500
+ agentSpec: { agentId: 'artificer', schemaVersion: 'v1' },
501
+ taskRef: { taskId: TASK_ID },
502
+ inputPayload: circular,
503
+ contextItems: [],
504
+ outputSchemaRef: 'artificer-output-v2',
505
+ timeoutMs: 30_000,
506
+ });
507
+ expect(receivedPrompt.length).toBeLessThanOrEqual(50_003);
508
+ });
509
+ });
510
+ //# sourceMappingURL=artificer-l2-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artificer-l2-adapter.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { PDRuntimeAdapter, RuntimeKind, RuntimeCapabilities, RuntimeHealth, RunHandle, RunStatus, StartRunInput, StructuredRunOutput, RuntimeArtifactRef, ContextItem } from '../runtime-protocol.js';
2
+ import type { RefinerRuleHostGateDeps } from '../internalization/refiner-rulehost-gate.js';
3
+ import type { ArtificerValidator } from '../internalization/artificer-output.js';
4
+ import type { StoreEventEmitter } from '../store/event-emitter.js';
5
+ /**
6
+ * Mockable LLM call. Receives the assembled prompt (initial prompt + optional
7
+ * sandbox failure feedback) and returns an UNTRUSTED candidate output. The
8
+ * caller (adapter) validates it before use — never trust the shape here.
9
+ */
10
+ export type ArtificerL2GenerateCodeFn = (prompt: string) => Promise<unknown>;
11
+ export interface ArtificerL2AdapterConfig {
12
+ /** Injected LLM call (mockable; production wires completeSimple). */
13
+ readonly generateCode: ArtificerL2GenerateCodeFn;
14
+ /** Sandbox replay deps (real or test double). */
15
+ readonly gateDeps: RefinerRuleHostGateDeps;
16
+ /** Artificer output validator (V1/V2 accepting). */
17
+ readonly validator: ArtificerValidator;
18
+ /** Max write-test-fix attempts (default 3). */
19
+ readonly maxAttempts?: number;
20
+ /** Optional event emitter; defaults to the shared singleton. */
21
+ readonly eventEmitter?: StoreEventEmitter;
22
+ }
23
+ export declare class ArtificerL2Adapter implements PDRuntimeAdapter {
24
+ private readonly config;
25
+ private readonly generateCode;
26
+ private readonly gateDeps;
27
+ private readonly validator;
28
+ private readonly eventEmitter;
29
+ private readonly runs;
30
+ constructor(config: ArtificerL2AdapterConfig);
31
+ kind(): RuntimeKind;
32
+ getCapabilities(): Promise<RuntimeCapabilities>;
33
+ refreshCapabilities(): Promise<RuntimeCapabilities>;
34
+ healthCheck(): Promise<RuntimeHealth>;
35
+ startRun(input: StartRunInput): Promise<RunHandle>;
36
+ pollRun(runId: string): Promise<RunStatus>;
37
+ cancelRun(runId: string): Promise<void>;
38
+ fetchOutput(runId: string): Promise<StructuredRunOutput | null>;
39
+ fetchArtifacts(_runId: string): Promise<RuntimeArtifactRef[]>;
40
+ appendContext(_runId: string, _items: ContextItem[]): Promise<void>;
41
+ private completeRun;
42
+ private runHandle;
43
+ private emitAttempt;
44
+ private emitComplete;
45
+ private evictOldRuns;
46
+ }
47
+ //# sourceMappingURL=artificer-l2-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artificer-l2-adapter.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/adapter/artificer-l2-adapter.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,uBAAuB,EAA6B,MAAM,6CAA6C,CAAC;AAGtH,OAAO,KAAK,EAAE,kBAAkB,EAAwC,MAAM,wCAAwC,CAAC;AAIvH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAInE;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;IACjD,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAC3C;AAuDD,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuG;IAC9H,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0C;gBAEnD,MAAM,EAAE,wBAAwB;IAa5C,IAAI,IAAI,WAAW;IAKb,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAc/C,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAKnD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IASrC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAsHlD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAc1C,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAM/D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAK7D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzE,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,YAAY;CAQrB"}