@principles/core 1.122.0 → 1.124.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.
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +37 -73
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
- package/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +4 -0
- package/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
- package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +37 -0
- package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.js +2 -0
- package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-types.d.ts +2 -0
- package/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.js +45 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-distiller-output.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +57 -0
- package/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.js +39 -0
- package/dist/runtime-v2/diagnostician/__tests__/distiller-prompt-builder.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +34 -0
- package/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.d.ts +2 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.js +57 -0
- package/dist/runtime-v2/diagnostician/__tests__/router-prompt-builder.test.js.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.d.ts +80 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.js +103 -0
- package/dist/runtime-v2/diagnostician/diag-distiller-output.js.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +115 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js +166 -0
- package/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.d.ts +134 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.js +156 -0
- package/dist/runtime-v2/diagnostician/distiller-prompt-builder.js.map +1 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +96 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +216 -0
- package/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.d.ts +127 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.d.ts.map +1 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.js +131 -0
- package/dist/runtime-v2/diagnostician/router-prompt-builder.js.map +1 -0
- package/dist/runtime-v2/index.d.ts +6 -3
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +1 -1
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.d.ts +25 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.js +123 -0
- package/dist/runtime-v2/internalization/__tests__/__fixtures__/split-pipeline-mock-outputs.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +731 -0
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.js +437 -0
- package/dist/runtime-v2/internalization/__tests__/diag-distiller-runner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.js +336 -0
- package/dist/runtime-v2/internalization/__tests__/diag-rootcause-runner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.js +437 -0
- package/dist/runtime-v2/internalization/__tests__/diag-router-runner.test.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.d.ts +83 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.js +274 -0
- package/dist/runtime-v2/internalization/diag-distiller-runner.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +73 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.js +229 -0
- package/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -0
- package/dist/runtime-v2/internalization/diag-router-runner.d.ts +85 -0
- package/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/diag-router-runner.js +353 -0
- package/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -0
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts +66 -0
- package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/split-diagnostician-runner.js +172 -0
- package/dist/runtime-v2/internalization/split-diagnostician-runner.js.map +1 -0
- package/dist/runtime-v2/pain-signal-bridge.d.ts +22 -3
- package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-bridge.js +16 -7
- package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +3 -0
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.js +52 -24
- package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js +2 -2
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.d.ts +3 -3
- package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.js +6 -6
- package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/dist/runtime-v2/runner/peer-runner-types.d.ts +3 -3
- package/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
- package/dist/runtime-v2/store/candidate/sqlite-candidate-store.js +2 -2
- package/dist/runtime-v2/store/candidate/sqlite-candidate-store.js.map +1 -1
- package/dist/runtime-v2/types/principle-enums.d.ts +2 -2
- package/dist/runtime-v2/types/principle-enums.d.ts.map +1 -1
- package/dist/runtime-v2/types/principle-enums.js +1 -0
- package/dist/runtime-v2/types/principle-enums.js.map +1 -1
- package/dist/runtime-v2/types/principle-schema.d.ts +1 -1
- package/dist/runtime-v2/types/principle-tree-store.d.ts +1 -1
- package/dist/telemetry-event.d.ts +2 -2
- package/dist/telemetry-event.d.ts.map +1 -1
- package/dist/telemetry-event.js +1 -0
- package/dist/telemetry-event.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DiagRouterRunner — Stage C V-slice tests (PRI-372).
|
|
3
|
+
*
|
|
4
|
+
* Tests:
|
|
5
|
+
* 1. lease → succeed → commits candidates via DiagnosticianCommitter
|
|
6
|
+
* 2. dependency not succeeded → blocked
|
|
7
|
+
* 3. requires both rootcause and distiller predecessor dependencies
|
|
8
|
+
* 4. commit failure → task fails, no markTaskSucceeded
|
|
9
|
+
* 5. invalid output fails TypeBox schema validation
|
|
10
|
+
* 6. wrong taskKind fails closed
|
|
11
|
+
* 7. currentPhase transitions
|
|
12
|
+
*
|
|
13
|
+
* ERR entries considered:
|
|
14
|
+
* - ERR-001: Treat parsed JSON / LLM output as unknown
|
|
15
|
+
* - ERR-004: Lineage fields must be internally consistent
|
|
16
|
+
* - ERR-009: Required fields fail loud — TypeBox schema + semantic checks
|
|
17
|
+
*/
|
|
18
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
19
|
+
import { DiagRouterRunner } from '../diag-router-runner.js';
|
|
20
|
+
import { MemoryPIArtifactStore } from '../pi-artifact-store.js';
|
|
21
|
+
import { createPITaskDiagnosticJson } from '../pitask-metadata.js';
|
|
22
|
+
import { RunnerPhase } from '../../runner/runner-phase.js';
|
|
23
|
+
import { MOCK_ROOT_CAUSE_OUTPUTS, MOCK_DISTILLER_OUTPUTS, MOCK_ROUTER_OUTPUTS } from './__fixtures__/split-pipeline-mock-outputs.js';
|
|
24
|
+
// ── Test fixtures ──────────────────────────────────────────────────────────────
|
|
25
|
+
const ROUTER_TASK_ID = 'diag_router-001';
|
|
26
|
+
const ROOTCAUSE_TASK_ID = 'diag_rootcause-001';
|
|
27
|
+
const DISTILLER_TASK_ID = 'diag_distiller-001';
|
|
28
|
+
const RUN_ID = 'run-router-001';
|
|
29
|
+
const OWNER = 'test-router-owner';
|
|
30
|
+
const RUNTIME_KIND = 'test-double';
|
|
31
|
+
const ROOTCAUSE_ARTIFACT_ID = 'pi-art-rc-001';
|
|
32
|
+
const DISTILLER_ARTIFACT_ID = 'pi-art-dist-001';
|
|
33
|
+
function makeRootCauseTask(overrides = {}) {
|
|
34
|
+
return {
|
|
35
|
+
taskId: ROOTCAUSE_TASK_ID,
|
|
36
|
+
taskKind: 'diag_rootcause',
|
|
37
|
+
status: 'succeeded',
|
|
38
|
+
attemptCount: 1,
|
|
39
|
+
maxAttempts: 3,
|
|
40
|
+
resultRef: 'diag-rootcause://run-rc-001',
|
|
41
|
+
createdAt: new Date().toISOString(),
|
|
42
|
+
updatedAt: new Date().toISOString(),
|
|
43
|
+
diagnosticJson: '{}',
|
|
44
|
+
...overrides,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function makeDistillerTask(overrides = {}) {
|
|
48
|
+
return {
|
|
49
|
+
taskId: DISTILLER_TASK_ID,
|
|
50
|
+
taskKind: 'diag_distiller',
|
|
51
|
+
status: 'succeeded',
|
|
52
|
+
attemptCount: 1,
|
|
53
|
+
maxAttempts: 3,
|
|
54
|
+
resultRef: 'diag-distiller://run-dist-001',
|
|
55
|
+
createdAt: new Date().toISOString(),
|
|
56
|
+
updatedAt: new Date().toISOString(),
|
|
57
|
+
diagnosticJson: '{}',
|
|
58
|
+
...overrides,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function makeRouterTask(overrides = {}) {
|
|
62
|
+
return {
|
|
63
|
+
taskId: ROUTER_TASK_ID,
|
|
64
|
+
taskKind: 'diag_router',
|
|
65
|
+
status: 'pending',
|
|
66
|
+
attemptCount: 0,
|
|
67
|
+
maxAttempts: 3,
|
|
68
|
+
createdAt: new Date().toISOString(),
|
|
69
|
+
updatedAt: new Date().toISOString(),
|
|
70
|
+
diagnosticJson: createPITaskDiagnosticJson({
|
|
71
|
+
dependencyTaskIds: [ROOTCAUSE_TASK_ID, DISTILLER_TASK_ID],
|
|
72
|
+
channel: 'prompt',
|
|
73
|
+
timeoutMs: 300_000,
|
|
74
|
+
inputArtifactRefs: [],
|
|
75
|
+
outputArtifactRefs: [],
|
|
76
|
+
}),
|
|
77
|
+
...overrides,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** Happy-path output using cached real LLM data (R6 fixture) with test-local IDs. */
|
|
81
|
+
function makeRootCauseOutput() {
|
|
82
|
+
return {
|
|
83
|
+
...MOCK_ROOT_CAUSE_OUTPUTS.R6,
|
|
84
|
+
diagnosisId: 'diag-001',
|
|
85
|
+
taskId: ROOTCAUSE_TASK_ID,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** Happy-path output using cached real LLM data (R6 fixture) with test-local IDs. */
|
|
89
|
+
function makeDistillerOutput() {
|
|
90
|
+
return {
|
|
91
|
+
...MOCK_DISTILLER_OUTPUTS.R6,
|
|
92
|
+
taskId: DISTILLER_TASK_ID,
|
|
93
|
+
sourceRootCauseArtifactId: ROOTCAUSE_ARTIFACT_ID,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Happy-path output using cached real LLM data (R6 fixture) with test-local IDs. */
|
|
97
|
+
function makeRouterOutput() {
|
|
98
|
+
return {
|
|
99
|
+
...MOCK_ROUTER_OUTPUTS.R6,
|
|
100
|
+
diagnosisId: 'diag-001',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Pre-populate a MemoryPIArtifactStore with both predecessor artifacts. */
|
|
104
|
+
function populatePredecessorArtifacts(store) {
|
|
105
|
+
store.upsertArtifact({
|
|
106
|
+
artifactId: ROOTCAUSE_ARTIFACT_ID,
|
|
107
|
+
artifactKind: 'principle',
|
|
108
|
+
sourceTaskId: ROOTCAUSE_TASK_ID,
|
|
109
|
+
lineageArtifactIds: [],
|
|
110
|
+
validationStatus: 'pending',
|
|
111
|
+
contentJson: JSON.stringify(makeRootCauseOutput()),
|
|
112
|
+
createdAt: new Date().toISOString(),
|
|
113
|
+
updatedAt: new Date().toISOString(),
|
|
114
|
+
});
|
|
115
|
+
store.upsertArtifact({
|
|
116
|
+
artifactId: DISTILLER_ARTIFACT_ID,
|
|
117
|
+
artifactKind: 'principle',
|
|
118
|
+
sourceTaskId: DISTILLER_TASK_ID,
|
|
119
|
+
lineageArtifactIds: [ROOTCAUSE_ARTIFACT_ID],
|
|
120
|
+
validationStatus: 'pending',
|
|
121
|
+
contentJson: JSON.stringify(makeDistillerOutput()),
|
|
122
|
+
createdAt: new Date().toISOString(),
|
|
123
|
+
updatedAt: new Date().toISOString(),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// ── Mock factory ───────────────────────────────────────────────────────────────
|
|
127
|
+
function createMockDeps(overrides = {}) {
|
|
128
|
+
const taskRecord = makeRouterTask();
|
|
129
|
+
const output = makeRouterOutput();
|
|
130
|
+
const _stateManager = {
|
|
131
|
+
acquireLease: vi.fn().mockResolvedValue(taskRecord),
|
|
132
|
+
getTask: vi.fn().mockImplementation((id) => {
|
|
133
|
+
if (id === ROUTER_TASK_ID)
|
|
134
|
+
return Promise.resolve(taskRecord);
|
|
135
|
+
if (id === ROOTCAUSE_TASK_ID)
|
|
136
|
+
return Promise.resolve(makeRootCauseTask());
|
|
137
|
+
if (id === DISTILLER_TASK_ID)
|
|
138
|
+
return Promise.resolve(makeDistillerTask());
|
|
139
|
+
return Promise.resolve(undefined);
|
|
140
|
+
}),
|
|
141
|
+
getRunsByTask: vi.fn().mockResolvedValue([{ runId: RUN_ID, taskId: ROUTER_TASK_ID }]),
|
|
142
|
+
updateRunOutput: vi.fn().mockResolvedValue(undefined),
|
|
143
|
+
markTaskSucceeded: vi.fn().mockResolvedValue(undefined),
|
|
144
|
+
markTaskFailed: vi.fn().mockResolvedValue(undefined),
|
|
145
|
+
markTaskRetryWait: vi.fn().mockResolvedValue(undefined),
|
|
146
|
+
getRetryPolicy: vi.fn().mockReturnValue({ shouldRetry: () => false }),
|
|
147
|
+
};
|
|
148
|
+
const runHandle = { runId: RUN_ID, runtimeKind: RUNTIME_KIND, startedAt: new Date().toISOString() };
|
|
149
|
+
const succeededStatus = { status: 'succeeded', runId: RUN_ID };
|
|
150
|
+
const _runtimeAdapter = {
|
|
151
|
+
kind: vi.fn().mockReturnValue(RUNTIME_KIND),
|
|
152
|
+
getCapabilities: vi.fn(),
|
|
153
|
+
healthCheck: vi.fn(),
|
|
154
|
+
startRun: vi.fn().mockResolvedValue(runHandle),
|
|
155
|
+
pollRun: vi.fn().mockResolvedValue(succeededStatus),
|
|
156
|
+
fetchOutput: vi.fn().mockResolvedValue({ payload: output }),
|
|
157
|
+
cancelRun: vi.fn().mockResolvedValue(undefined),
|
|
158
|
+
fetchArtifacts: vi.fn(),
|
|
159
|
+
};
|
|
160
|
+
const commitResult = {
|
|
161
|
+
commitId: 'commit-001',
|
|
162
|
+
artifactId: 'art-001',
|
|
163
|
+
candidateCount: 1,
|
|
164
|
+
};
|
|
165
|
+
const _committer = {
|
|
166
|
+
commit: vi.fn().mockResolvedValue(commitResult),
|
|
167
|
+
};
|
|
168
|
+
const mockEventEmitter = {
|
|
169
|
+
emitTelemetry: vi.fn(),
|
|
170
|
+
on: vi.fn(),
|
|
171
|
+
emit: vi.fn(),
|
|
172
|
+
};
|
|
173
|
+
// Create store with predecessor artifacts pre-populated
|
|
174
|
+
const artifactStore = new MemoryPIArtifactStore();
|
|
175
|
+
populatePredecessorArtifacts(artifactStore);
|
|
176
|
+
return {
|
|
177
|
+
stateManager: _stateManager,
|
|
178
|
+
runtimeAdapter: _runtimeAdapter,
|
|
179
|
+
eventEmitter: mockEventEmitter,
|
|
180
|
+
artifactStore,
|
|
181
|
+
committer: _committer,
|
|
182
|
+
_stateManager,
|
|
183
|
+
_runtimeAdapter,
|
|
184
|
+
_committer,
|
|
185
|
+
...overrides,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// ── Tests ──────────────────────────────────────────────────────────────────────
|
|
189
|
+
describe('DiagRouterRunner V-slice', () => {
|
|
190
|
+
it('lease → succeed → commits candidates via DiagnosticianCommitter', async () => {
|
|
191
|
+
const deps = createMockDeps();
|
|
192
|
+
const runner = new DiagRouterRunner(deps, {
|
|
193
|
+
owner: OWNER,
|
|
194
|
+
runtimeKind: RUNTIME_KIND,
|
|
195
|
+
pollIntervalMs: 10,
|
|
196
|
+
timeoutMs: 1000,
|
|
197
|
+
});
|
|
198
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
199
|
+
expect(result.status).toBe('succeeded');
|
|
200
|
+
expect(result.taskId).toBe(ROUTER_TASK_ID);
|
|
201
|
+
// Verify committer was called
|
|
202
|
+
expect(deps._committer.commit).toHaveBeenCalledWith(expect.objectContaining({
|
|
203
|
+
runId: RUN_ID,
|
|
204
|
+
taskId: ROUTER_TASK_ID,
|
|
205
|
+
}));
|
|
206
|
+
// Verify markTaskSucceeded called with commit:// resultRef
|
|
207
|
+
expect(deps._stateManager.markTaskSucceeded).toHaveBeenCalledWith(ROUTER_TASK_ID, expect.stringContaining('commit://'));
|
|
208
|
+
});
|
|
209
|
+
it('dependency not succeeded → blocked', async () => {
|
|
210
|
+
// Empty artifact store — no distiller artifact
|
|
211
|
+
const emptyStore = new MemoryPIArtifactStore();
|
|
212
|
+
// Still need rootcause artifact
|
|
213
|
+
emptyStore.upsertArtifact({
|
|
214
|
+
artifactId: ROOTCAUSE_ARTIFACT_ID,
|
|
215
|
+
artifactKind: 'principle',
|
|
216
|
+
sourceTaskId: ROOTCAUSE_TASK_ID,
|
|
217
|
+
lineageArtifactIds: [],
|
|
218
|
+
validationStatus: 'pending',
|
|
219
|
+
contentJson: JSON.stringify(makeRootCauseOutput()),
|
|
220
|
+
createdAt: new Date().toISOString(),
|
|
221
|
+
updatedAt: new Date().toISOString(),
|
|
222
|
+
});
|
|
223
|
+
const deps = createMockDeps({ artifactStore: emptyStore });
|
|
224
|
+
// Make the distiller task still pending (not succeeded)
|
|
225
|
+
const pendingDistillerTask = makeDistillerTask({ status: 'pending', resultRef: undefined });
|
|
226
|
+
deps._stateManager.getTask.mockImplementation((id) => {
|
|
227
|
+
if (id === ROUTER_TASK_ID)
|
|
228
|
+
return Promise.resolve(makeRouterTask());
|
|
229
|
+
if (id === ROOTCAUSE_TASK_ID)
|
|
230
|
+
return Promise.resolve(makeRootCauseTask());
|
|
231
|
+
if (id === DISTILLER_TASK_ID)
|
|
232
|
+
return Promise.resolve(pendingDistillerTask);
|
|
233
|
+
return Promise.resolve(undefined);
|
|
234
|
+
});
|
|
235
|
+
const runner = new DiagRouterRunner(deps, {
|
|
236
|
+
owner: OWNER,
|
|
237
|
+
runtimeKind: RUNTIME_KIND,
|
|
238
|
+
pollIntervalMs: 10,
|
|
239
|
+
timeoutMs: 1000,
|
|
240
|
+
});
|
|
241
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
242
|
+
// Should fail because distiller artifact is missing
|
|
243
|
+
expect(result.status).toBe('failed');
|
|
244
|
+
});
|
|
245
|
+
it('requires both rootcause and distiller predecessor dependencies', async () => {
|
|
246
|
+
const deps = createMockDeps();
|
|
247
|
+
// Create a router task with only one dependency
|
|
248
|
+
const singleDepTask = makeRouterTask({
|
|
249
|
+
diagnosticJson: createPITaskDiagnosticJson({
|
|
250
|
+
dependencyTaskIds: [ROOTCAUSE_TASK_ID],
|
|
251
|
+
channel: 'prompt',
|
|
252
|
+
timeoutMs: 300_000,
|
|
253
|
+
inputArtifactRefs: [],
|
|
254
|
+
outputArtifactRefs: [],
|
|
255
|
+
}),
|
|
256
|
+
});
|
|
257
|
+
deps._stateManager.acquireLease.mockResolvedValue(singleDepTask);
|
|
258
|
+
deps._stateManager.getTask.mockImplementation((id) => {
|
|
259
|
+
if (id === ROUTER_TASK_ID)
|
|
260
|
+
return Promise.resolve(singleDepTask);
|
|
261
|
+
if (id === ROOTCAUSE_TASK_ID)
|
|
262
|
+
return Promise.resolve(makeRootCauseTask());
|
|
263
|
+
return Promise.resolve(undefined);
|
|
264
|
+
});
|
|
265
|
+
const runner = new DiagRouterRunner(deps, {
|
|
266
|
+
owner: OWNER,
|
|
267
|
+
runtimeKind: RUNTIME_KIND,
|
|
268
|
+
pollIntervalMs: 10,
|
|
269
|
+
timeoutMs: 1000,
|
|
270
|
+
});
|
|
271
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
272
|
+
// Should fail because only one predecessor dependency
|
|
273
|
+
expect(result.status).toBe('failed');
|
|
274
|
+
});
|
|
275
|
+
it('commit failure → task fails, no markTaskSucceeded', async () => {
|
|
276
|
+
const deps = createMockDeps();
|
|
277
|
+
deps._committer.commit.mockRejectedValue(new Error('Commit failed: DB error'));
|
|
278
|
+
const runner = new DiagRouterRunner(deps, {
|
|
279
|
+
owner: OWNER,
|
|
280
|
+
runtimeKind: RUNTIME_KIND,
|
|
281
|
+
pollIntervalMs: 10,
|
|
282
|
+
timeoutMs: 1000,
|
|
283
|
+
});
|
|
284
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
285
|
+
expect(result.status).toBe('failed');
|
|
286
|
+
expect(deps._stateManager.markTaskSucceeded).not.toHaveBeenCalled();
|
|
287
|
+
});
|
|
288
|
+
it('invalid output fails TypeBox schema validation', async () => {
|
|
289
|
+
const deps = createMockDeps();
|
|
290
|
+
// Return invalid output that fails TypeBox validation
|
|
291
|
+
deps._runtimeAdapter.fetchOutput.mockResolvedValue({
|
|
292
|
+
payload: { invalid: true },
|
|
293
|
+
});
|
|
294
|
+
const runner = new DiagRouterRunner(deps, {
|
|
295
|
+
owner: OWNER,
|
|
296
|
+
runtimeKind: RUNTIME_KIND,
|
|
297
|
+
pollIntervalMs: 10,
|
|
298
|
+
timeoutMs: 1000,
|
|
299
|
+
});
|
|
300
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
301
|
+
expect(result.status).toBe('failed');
|
|
302
|
+
});
|
|
303
|
+
it('currentPhase is Completed after successful run', async () => {
|
|
304
|
+
const deps = createMockDeps();
|
|
305
|
+
const runner = new DiagRouterRunner(deps, {
|
|
306
|
+
owner: OWNER,
|
|
307
|
+
runtimeKind: RUNTIME_KIND,
|
|
308
|
+
pollIntervalMs: 10,
|
|
309
|
+
timeoutMs: 1000,
|
|
310
|
+
});
|
|
311
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
312
|
+
expect(result.status).toBe('succeeded');
|
|
313
|
+
expect(runner.currentPhase).toBe(RunnerPhase.Completed);
|
|
314
|
+
});
|
|
315
|
+
it('currentPhase is Failed after validation failure', async () => {
|
|
316
|
+
const deps = createMockDeps();
|
|
317
|
+
// Return invalid output that fails TypeBox validation
|
|
318
|
+
deps._runtimeAdapter.fetchOutput.mockResolvedValue({
|
|
319
|
+
payload: { invalid: true },
|
|
320
|
+
});
|
|
321
|
+
const runner = new DiagRouterRunner(deps, {
|
|
322
|
+
owner: OWNER,
|
|
323
|
+
runtimeKind: RUNTIME_KIND,
|
|
324
|
+
pollIntervalMs: 10,
|
|
325
|
+
timeoutMs: 1000,
|
|
326
|
+
});
|
|
327
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
328
|
+
expect(result.status).toBe('failed');
|
|
329
|
+
expect(runner.currentPhase).toBe(RunnerPhase.Failed);
|
|
330
|
+
});
|
|
331
|
+
it('wrong taskKind fails closed', async () => {
|
|
332
|
+
const wrongKindTask = makeRouterTask({ taskKind: 'dreamer' });
|
|
333
|
+
const deps = createMockDeps();
|
|
334
|
+
deps._stateManager.acquireLease.mockResolvedValue(wrongKindTask);
|
|
335
|
+
const runner = new DiagRouterRunner(deps, {
|
|
336
|
+
owner: OWNER,
|
|
337
|
+
runtimeKind: RUNTIME_KIND,
|
|
338
|
+
pollIntervalMs: 10,
|
|
339
|
+
timeoutMs: 1000,
|
|
340
|
+
});
|
|
341
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
342
|
+
expect(result.status).toBe('failed');
|
|
343
|
+
expect(result.errorCategory).toBe('input_invalid');
|
|
344
|
+
});
|
|
345
|
+
it('succeedTask calls updateRunOutput before commit', async () => {
|
|
346
|
+
const deps = createMockDeps();
|
|
347
|
+
const callOrder = [];
|
|
348
|
+
deps._stateManager.updateRunOutput.mockImplementation(() => {
|
|
349
|
+
callOrder.push('updateRunOutput');
|
|
350
|
+
return Promise.resolve();
|
|
351
|
+
});
|
|
352
|
+
deps._committer.commit.mockImplementation(() => {
|
|
353
|
+
callOrder.push('commit');
|
|
354
|
+
return Promise.resolve({ commitId: 'commit-001', artifactId: 'art-001', candidateCount: 1 });
|
|
355
|
+
});
|
|
356
|
+
const runner = new DiagRouterRunner(deps, {
|
|
357
|
+
owner: OWNER,
|
|
358
|
+
runtimeKind: RUNTIME_KIND,
|
|
359
|
+
pollIntervalMs: 10,
|
|
360
|
+
timeoutMs: 1000,
|
|
361
|
+
});
|
|
362
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
363
|
+
expect(result.status).toBe('succeeded');
|
|
364
|
+
expect(callOrder.indexOf('updateRunOutput')).toBeLessThan(callOrder.indexOf('commit'));
|
|
365
|
+
});
|
|
366
|
+
it('corrupted rootcause artifact content fails schema validation (EP-01)', async () => {
|
|
367
|
+
// Write a corrupted rootcause artifact (missing required fields)
|
|
368
|
+
const corruptedStore = new MemoryPIArtifactStore();
|
|
369
|
+
corruptedStore.upsertArtifact({
|
|
370
|
+
artifactId: ROOTCAUSE_ARTIFACT_ID,
|
|
371
|
+
artifactKind: 'principle',
|
|
372
|
+
sourceTaskId: ROOTCAUSE_TASK_ID,
|
|
373
|
+
lineageArtifactIds: [],
|
|
374
|
+
validationStatus: 'pending',
|
|
375
|
+
contentJson: JSON.stringify({ invalid: true, missing: 'required fields' }),
|
|
376
|
+
createdAt: new Date().toISOString(),
|
|
377
|
+
updatedAt: new Date().toISOString(),
|
|
378
|
+
});
|
|
379
|
+
// Valid distiller artifact
|
|
380
|
+
corruptedStore.upsertArtifact({
|
|
381
|
+
artifactId: DISTILLER_ARTIFACT_ID,
|
|
382
|
+
artifactKind: 'principle',
|
|
383
|
+
sourceTaskId: DISTILLER_TASK_ID,
|
|
384
|
+
lineageArtifactIds: [ROOTCAUSE_ARTIFACT_ID],
|
|
385
|
+
validationStatus: 'pending',
|
|
386
|
+
contentJson: JSON.stringify(makeDistillerOutput()),
|
|
387
|
+
createdAt: new Date().toISOString(),
|
|
388
|
+
updatedAt: new Date().toISOString(),
|
|
389
|
+
});
|
|
390
|
+
const deps = createMockDeps({ artifactStore: corruptedStore });
|
|
391
|
+
const runner = new DiagRouterRunner(deps, {
|
|
392
|
+
owner: OWNER,
|
|
393
|
+
runtimeKind: RUNTIME_KIND,
|
|
394
|
+
pollIntervalMs: 10,
|
|
395
|
+
timeoutMs: 1000,
|
|
396
|
+
});
|
|
397
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
398
|
+
expect(result.status).toBe('failed');
|
|
399
|
+
expect(result.errorCategory).toBe('input_invalid');
|
|
400
|
+
});
|
|
401
|
+
it('corrupted distiller artifact content fails schema validation (EP-01)', async () => {
|
|
402
|
+
// Valid rootcause artifact
|
|
403
|
+
const corruptedStore = new MemoryPIArtifactStore();
|
|
404
|
+
corruptedStore.upsertArtifact({
|
|
405
|
+
artifactId: ROOTCAUSE_ARTIFACT_ID,
|
|
406
|
+
artifactKind: 'principle',
|
|
407
|
+
sourceTaskId: ROOTCAUSE_TASK_ID,
|
|
408
|
+
lineageArtifactIds: [],
|
|
409
|
+
validationStatus: 'pending',
|
|
410
|
+
contentJson: JSON.stringify(makeRootCauseOutput()),
|
|
411
|
+
createdAt: new Date().toISOString(),
|
|
412
|
+
updatedAt: new Date().toISOString(),
|
|
413
|
+
});
|
|
414
|
+
// Corrupted distiller artifact
|
|
415
|
+
corruptedStore.upsertArtifact({
|
|
416
|
+
artifactId: DISTILLER_ARTIFACT_ID,
|
|
417
|
+
artifactKind: 'principle',
|
|
418
|
+
sourceTaskId: DISTILLER_TASK_ID,
|
|
419
|
+
lineageArtifactIds: [ROOTCAUSE_ARTIFACT_ID],
|
|
420
|
+
validationStatus: 'pending',
|
|
421
|
+
contentJson: JSON.stringify({ invalid: true, missing: 'required fields' }),
|
|
422
|
+
createdAt: new Date().toISOString(),
|
|
423
|
+
updatedAt: new Date().toISOString(),
|
|
424
|
+
});
|
|
425
|
+
const deps = createMockDeps({ artifactStore: corruptedStore });
|
|
426
|
+
const runner = new DiagRouterRunner(deps, {
|
|
427
|
+
owner: OWNER,
|
|
428
|
+
runtimeKind: RUNTIME_KIND,
|
|
429
|
+
pollIntervalMs: 10,
|
|
430
|
+
timeoutMs: 1000,
|
|
431
|
+
});
|
|
432
|
+
const result = await runner.run(ROUTER_TASK_ID);
|
|
433
|
+
expect(result.status).toBe('failed');
|
|
434
|
+
expect(result.errorCategory).toBe('input_invalid');
|
|
435
|
+
});
|
|
436
|
+
});
|
|
437
|
+
//# sourceMappingURL=diag-router-runner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diag-router-runner.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/diag-router-runner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DiagDistillerRunner — Stage B runner for the split diagnostician pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Takes the root-cause artifact from Stage A and produces an abstracted,
|
|
5
|
+
* cross-scenario principle grounded on the T-01..T-10 core axiom registry.
|
|
6
|
+
*
|
|
7
|
+
* Extends BasePeerRunner following the DreamerRunner pattern (PRI-302).
|
|
8
|
+
* The shared lease → buildContext → invoke → poll → fetch → validate →
|
|
9
|
+
* succeed/fail pipeline is in the base class. This file only contains
|
|
10
|
+
* Stage B–specific logic.
|
|
11
|
+
*
|
|
12
|
+
* Key constraints:
|
|
13
|
+
* - Uses PDRuntimeAdapter for all LLM execution (no direct SDK calls)
|
|
14
|
+
* - No plugin-layer imports (core is infrastructure-agnostic)
|
|
15
|
+
* - Uses RuntimeStateManager for all state operations
|
|
16
|
+
* - NO candidate commit — only writes PIArtifact (like DreamerRunner)
|
|
17
|
+
* - Reads diagnostician_core_grounding flag from effectiveConfig (PRI-371)
|
|
18
|
+
* - Validates groundedOnCorePrincipleIds against registry (fabricated IDs fail)
|
|
19
|
+
* - Lineage integrity: output.sourceRootCauseArtifactId must match context
|
|
20
|
+
*
|
|
21
|
+
* @see PRI-372
|
|
22
|
+
* @see BasePeerRunner in runner/base-peer-runner.ts
|
|
23
|
+
*/
|
|
24
|
+
import type { RunHandle } from '../runtime-protocol.js';
|
|
25
|
+
import type { DiagDistillerOutputV1, DiagDistillerValidator } from '../diagnostician/diag-distiller-output.js';
|
|
26
|
+
import type { DiagRootCauseOutputV1 } from '../diagnostician/diag-rootcause-output.js';
|
|
27
|
+
import type { TaskRecord } from '../task-status.js';
|
|
28
|
+
import type { EffectivePdConfig } from '../config/pd-config-types.js';
|
|
29
|
+
import { type PDErrorCategory } from '../error-categories.js';
|
|
30
|
+
import { BasePeerRunner } from '../runner/base-peer-runner.js';
|
|
31
|
+
import type { PeerRunnerOptions, PeerRunnerDeps, PeerRunnerResult, PeerRunnerValidationResult } from '../runner/peer-runner-types.js';
|
|
32
|
+
/** Context built by DiagDistillerRunner.buildContext() and consumed by invokeRuntime(). */
|
|
33
|
+
interface DiagDistillerContext {
|
|
34
|
+
readonly contextHash: string;
|
|
35
|
+
readonly contextRefs: string[];
|
|
36
|
+
readonly rootCauseArtifactId: string;
|
|
37
|
+
readonly rootCauseOutput: DiagRootCauseOutputV1;
|
|
38
|
+
readonly coreGrounding: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface DiagDistillerRunnerDeps extends PeerRunnerDeps {
|
|
41
|
+
readonly validator: DiagDistillerValidator;
|
|
42
|
+
}
|
|
43
|
+
export interface DiagDistillerRunnerOptions extends PeerRunnerOptions {
|
|
44
|
+
/** Effective PD config for feature flag resolution (PRI-371). */
|
|
45
|
+
readonly effectiveConfig?: EffectivePdConfig;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Stage B runner for the split diagnostician pipeline.
|
|
49
|
+
*
|
|
50
|
+
* Produces a DiagDistillerOutputV1 containing the abstracted principle,
|
|
51
|
+
* core axiom grounding, scope, and confidence. Does NOT commit candidates —
|
|
52
|
+
* that is the responsibility of Stage C (DiagRouterRunner).
|
|
53
|
+
*
|
|
54
|
+
* @see PRI-372
|
|
55
|
+
*/
|
|
56
|
+
export declare class DiagDistillerRunner extends BasePeerRunner<DiagDistillerContext, DiagDistillerOutputV1> {
|
|
57
|
+
private readonly validator;
|
|
58
|
+
private readonly effectiveConfig?;
|
|
59
|
+
constructor(deps: DiagDistillerRunnerDeps, options: DiagDistillerRunnerOptions);
|
|
60
|
+
get permanentErrorCategories(): ReadonlySet<PDErrorCategory>;
|
|
61
|
+
buildContext(taskId: string): Promise<DiagDistillerContext>;
|
|
62
|
+
invokeRuntime(taskId: string, context: DiagDistillerContext): Promise<RunHandle>;
|
|
63
|
+
validateOutput(output: unknown, taskId: string, _context: DiagDistillerContext): Promise<PeerRunnerValidationResult>;
|
|
64
|
+
succeedTask(taskId: string, runId: string, output: DiagDistillerOutputV1, task: TaskRecord, contextHash: string, _context: DiagDistillerContext): Promise<PeerRunnerResult<DiagDistillerOutputV1>>;
|
|
65
|
+
/**
|
|
66
|
+
* Re-inject taskId and sourceRootCauseArtifactId if stripped by
|
|
67
|
+
* stripLineageFields (PRI-272 / ERR-008).
|
|
68
|
+
* Only fill when absent via Object.hasOwn — present-but-falsy values
|
|
69
|
+
* must reach validation and fail loud (Runtime Contract Rule 3).
|
|
70
|
+
*/
|
|
71
|
+
protected postFetchTransform(taskId: string, untrustedOutput: unknown): void;
|
|
72
|
+
/**
|
|
73
|
+
* Check lineage strip contract invariant (EP-07).
|
|
74
|
+
*
|
|
75
|
+
* After validation passes, verify that the output's sourceRootCauseArtifactId
|
|
76
|
+
* matches the context's rootCauseArtifactId. If they mismatch, the LLM
|
|
77
|
+
* fabricated or altered the lineage field — emit telemetry and throw.
|
|
78
|
+
*/
|
|
79
|
+
protected checkLineageIntegrity(taskId: string, output: DiagDistillerOutputV1, context: DiagDistillerContext): void;
|
|
80
|
+
protected emitSuccessTelemetry(taskId: string, output: DiagDistillerOutputV1, _context: DiagDistillerContext): void;
|
|
81
|
+
}
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=diag-distiller-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diag-distiller-runner.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/diag-distiller-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAC/G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAC3B,MAAM,gCAAgC,CAAC;AAIxC,2FAA2F;AAC3F,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAID,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;CAC5C;AAID,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACnE,iEAAiE;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAAC;CAC9C;AAID;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,cAAc,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAClG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAoB;gBAEzC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,0BAA0B;IAc9E,IAAI,wBAAwB,IAAI,WAAW,CAAC,eAAe,CAAC,CAE3D;IAEK,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkE3D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;IAwBhF,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAUpH,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IA+FnD;;;;;OAKG;cAEgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAOrF;;;;;;OAMG;cACgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI;cAWzG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,IAAI;CAO7H"}
|