@principles/core 1.124.0 → 1.125.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 +5 -1
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js +115 -21
- package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/golden-path-diagnostician-e2e.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-signal-bridge-retried.test.js +7 -6
- package/dist/runtime-v2/__tests__/pain-signal-bridge-retried.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-signal-bridge-short-circuit.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pain-signal-bridge-workspace-dir.test.js.map +1 -1
- package/dist/runtime-v2/cli/diagnose.d.ts +2 -2
- package/dist/runtime-v2/cli/diagnose.d.ts.map +1 -1
- package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +3 -3
- package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
- package/dist/runtime-v2/config/pd-config-defaults.js +3 -3
- package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/dist/runtime-v2/diagnostician-prompt-builder.d.ts +1 -64
- package/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/diagnostician-prompt-builder.js +0 -186
- package/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +13 -7
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js +3 -3
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +8 -7
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +8 -5
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +108 -105
- package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/runnerkind-seam.test.js +3 -3
- package/dist/runtime-v2/internalization/__tests__/runnerkind-seam.test.js.map +1 -1
- package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/split-diagnostician-runner.js +121 -52
- package/dist/runtime-v2/internalization/split-diagnostician-runner.js.map +1 -1
- package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.js +28 -21
- package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.js.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +10 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/dist/runtime-v2/pain-signal-runtime-factory.js +42 -40
- package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/diagnose.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.d.ts +0 -2
- package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.d.ts.map +0 -1
- package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.js +0 -122
- package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.js.map +0 -1
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.d.ts +0 -2
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.d.ts.map +0 -1
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.js +0 -169
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.js.map +0 -1
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.d.ts +0 -2
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.d.ts.map +0 -1
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.js +0 -462
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.js.map +0 -1
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts +0 -13
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts.map +0 -1
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js +0 -97
- package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.js +0 -378
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js +0 -682
- package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.js +0 -286
- package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.js +0 -320
- package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.js +0 -261
- package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.js +0 -405
- package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.js +0 -347
- package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.js +0 -186
- package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.js +0 -355
- package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js +0 -486
- package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.js +0 -171
- package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m9-e2e.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/m9-e2e.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js +0 -175
- package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.js +0 -276
- package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.js +0 -272
- package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.js.map +0 -1
- package/dist/runtime-v2/runner/__tests__/start-run-input.test.d.ts +0 -2
- package/dist/runtime-v2/runner/__tests__/start-run-input.test.d.ts.map +0 -1
- package/dist/runtime-v2/runner/__tests__/start-run-input.test.js +0 -67
- package/dist/runtime-v2/runner/__tests__/start-run-input.test.js.map +0 -1
- package/dist/runtime-v2/runner/diagnostician-runner-options.d.ts +0 -57
- package/dist/runtime-v2/runner/diagnostician-runner-options.d.ts.map +0 -1
- package/dist/runtime-v2/runner/diagnostician-runner-options.js +0 -21
- package/dist/runtime-v2/runner/diagnostician-runner-options.js.map +0 -1
- package/dist/runtime-v2/runner/diagnostician-runner.d.ts +0 -89
- package/dist/runtime-v2/runner/diagnostician-runner.d.ts.map +0 -1
- package/dist/runtime-v2/runner/diagnostician-runner.js +0 -470
- package/dist/runtime-v2/runner/diagnostician-runner.js.map +0 -1
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* E2E m6-06 — OpenClawCliRuntimeAdapter + FakeCliProcessRunner
|
|
3
|
-
*
|
|
4
|
-
* Unit-level E2E with FakeCliProcessRunner — prove the openclaw-cli adapter path
|
|
5
|
-
* works end-to-end without spawning a real openclaw binary.
|
|
6
|
-
*
|
|
7
|
-
* Covers:
|
|
8
|
-
* E2EV-01: FakeCliProcessRunner proves adapter path (fake runner intercepts runCliProcess)
|
|
9
|
-
* E2EV-02: Full chain task -> run -> DiagnosticianOutputV1 -> artifact -> candidates
|
|
10
|
-
* E2EV-03: TestDoubleRuntimeAdapter regression (dual-track-e2e reference still passes)
|
|
11
|
-
* HG-3: Both 'local' and 'gateway' runtimeModes produce correct CLI args
|
|
12
|
-
*
|
|
13
|
-
* Test file per m6-06-01-PLAN.md.
|
|
14
|
-
* vi.mock pattern mirrors m5-05-e2e.test.ts setup.
|
|
15
|
-
*/
|
|
16
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
17
|
-
import * as fs from 'fs';
|
|
18
|
-
import * as path from 'path';
|
|
19
|
-
import * as os from 'os';
|
|
20
|
-
import { randomUUID } from 'node:crypto';
|
|
21
|
-
import { RuntimeStateManager } from '../../store/runtime-state-manager.js';
|
|
22
|
-
import { SqliteContextAssembler } from '../../store/context/sqlite-context-assembler.js';
|
|
23
|
-
import { SqliteHistoryQuery } from '../../store/history/sqlite-history-query.js';
|
|
24
|
-
import { StoreEventEmitter } from '../../store/event-emitter.js';
|
|
25
|
-
import { DiagnosticianRunner } from '../diagnostician-runner.js';
|
|
26
|
-
import { PassThroughValidator } from '../diagnostician-validator.js';
|
|
27
|
-
import { SqliteDiagnosticianCommitter } from '../../store/commit/diagnostician-committer.js';
|
|
28
|
-
import { OpenClawCliRuntimeAdapter } from '../../adapter/openclaw-cli-runtime-adapter.js';
|
|
29
|
-
import { TestDoubleRuntimeAdapter } from '../../adapter/test-double-runtime-adapter.js';
|
|
30
|
-
// Typed status constant for SQL query parameters (avoids magic strings)
|
|
31
|
-
const PENDING_STATUS = 'pending';
|
|
32
|
-
// ── Module mock setup ──────────────────────────────────────────────────────────
|
|
33
|
-
// vi.mock MUST be called before importing the module under test.
|
|
34
|
-
// This intercepts runCliProcess so no real CLI binary is spawned.
|
|
35
|
-
vi.mock('../../utils/cli-process-runner.js', () => {
|
|
36
|
-
return {
|
|
37
|
-
runCliProcess: vi.fn(),
|
|
38
|
-
};
|
|
39
|
-
});
|
|
40
|
-
// Import after vi.mock so the mock is active
|
|
41
|
-
import { runCliProcess } from '../../utils/cli-process-runner.js';
|
|
42
|
-
// ── Test fixtures ──────────────────────────────────────────────────────────────
|
|
43
|
-
function makeFakeCliOutput(overrides = {}) {
|
|
44
|
-
return {
|
|
45
|
-
stdout: '',
|
|
46
|
-
stderr: '',
|
|
47
|
-
exitCode: 0,
|
|
48
|
-
timedOut: false,
|
|
49
|
-
durationMs: 100,
|
|
50
|
-
...overrides,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Create DiagnosticianOutputV1 with >= 2 kind='principle' recommendations.
|
|
55
|
-
* Schema-valid (passes Value.Check(DiagnosticianOutputV1Schema, output)).
|
|
56
|
-
*/
|
|
57
|
-
function makeDiagnosticianOutputWithCandidates(_taskId) {
|
|
58
|
-
return {
|
|
59
|
-
valid: true,
|
|
60
|
-
diagnosisId: `diag-m6e2e-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
61
|
-
summary: 'E2E m6-06 test diagnosis summary',
|
|
62
|
-
rootCause: 'E2E m6-06 root cause — missing validation before tool call',
|
|
63
|
-
violatedPrinciples: [],
|
|
64
|
-
evidence: [],
|
|
65
|
-
recommendations: [
|
|
66
|
-
{ kind: 'principle', description: 'Always validate tool arguments before execution to prevent silent failures' },
|
|
67
|
-
{ kind: 'principle', description: 'Log all tool invocations with argument summaries for traceability' },
|
|
68
|
-
{ kind: 'rule', description: 'Use schema validation for external inputs' },
|
|
69
|
-
],
|
|
70
|
-
confidence: 0.92,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function makeDiagnosticianTaskInput(options) {
|
|
74
|
-
const { taskId, workspaceDir, diagnostic } = options;
|
|
75
|
-
const diagnosticJson = JSON.stringify({
|
|
76
|
-
workspaceDir,
|
|
77
|
-
reasonSummary: diagnostic?.reasonSummary ?? 'E2E m6-06 test task',
|
|
78
|
-
sourcePainId: diagnostic?.sourcePainId,
|
|
79
|
-
severity: diagnostic?.severity,
|
|
80
|
-
source: diagnostic?.source,
|
|
81
|
-
});
|
|
82
|
-
return {
|
|
83
|
-
taskId,
|
|
84
|
-
taskKind: 'diagnostician',
|
|
85
|
-
status: 'pending',
|
|
86
|
-
attemptCount: 0,
|
|
87
|
-
maxAttempts: 3,
|
|
88
|
-
diagnosticJson,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
// ── Test setup ─────────────────────────────────────────────────────────────────
|
|
92
|
-
const TMP_ROOT = path.join(os.tmpdir(), `pd-e2e-m6-06-${process.pid}`);
|
|
93
|
-
describe('E2E m6-06 — OpenClawCliRuntimeAdapter + FakeCliProcessRunner', () => {
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
95
|
-
let testDir;
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
97
|
-
let stateManager;
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
99
|
-
let contextAssembler;
|
|
100
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
101
|
-
let historyQuery;
|
|
102
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
103
|
-
let eventEmitter;
|
|
104
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
105
|
-
let sqliteConn;
|
|
106
|
-
beforeEach(async () => {
|
|
107
|
-
testDir = path.join(TMP_ROOT, `e2e-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
108
|
-
fs.mkdirSync(testDir, { recursive: true });
|
|
109
|
-
stateManager = new RuntimeStateManager({ workspaceDir: testDir });
|
|
110
|
-
await stateManager.initialize();
|
|
111
|
-
sqliteConn = stateManager.connection;
|
|
112
|
-
historyQuery = new SqliteHistoryQuery(sqliteConn);
|
|
113
|
-
const taskStore = stateManager.taskStore;
|
|
114
|
-
const runStore = stateManager.runStore;
|
|
115
|
-
contextAssembler = new SqliteContextAssembler(taskStore, historyQuery, runStore);
|
|
116
|
-
eventEmitter = new StoreEventEmitter();
|
|
117
|
-
// Reset mock before each test
|
|
118
|
-
vi.mocked(runCliProcess).mockReset();
|
|
119
|
-
});
|
|
120
|
-
afterEach(() => {
|
|
121
|
-
stateManager.close();
|
|
122
|
-
try {
|
|
123
|
-
fs.rmSync(TMP_ROOT, { recursive: true, force: true });
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
// ignore cleanup errors on Windows
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
/**
|
|
130
|
-
* Build a DiagnosticianRunner wired with REAL SqliteDiagnosticianCommitter.
|
|
131
|
-
* pollIntervalMs: 50, timeoutMs: 3000 per m5-05-e2e.test.ts pattern.
|
|
132
|
-
*/
|
|
133
|
-
function createRunner(runtimeAdapter, validator = new PassThroughValidator()) {
|
|
134
|
-
const committer = new SqliteDiagnosticianCommitter(sqliteConn);
|
|
135
|
-
return new DiagnosticianRunner({
|
|
136
|
-
stateManager,
|
|
137
|
-
contextAssembler,
|
|
138
|
-
runtimeAdapter,
|
|
139
|
-
eventEmitter,
|
|
140
|
-
validator,
|
|
141
|
-
committer,
|
|
142
|
-
}, {
|
|
143
|
-
owner: 'e2e-m6-06-runner',
|
|
144
|
-
runtimeKind: 'openclaw-cli',
|
|
145
|
-
pollIntervalMs: 50,
|
|
146
|
-
timeoutMs: 3000,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
150
|
-
// SCENARIO 1: FakeCliProcessRunner Proves Adapter Path (E2EV-01, E2EV-02)
|
|
151
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
152
|
-
// Verifies E2EV-01: FakeCliProcessRunner intercepts runCliProcess without real binary
|
|
153
|
-
// Verifies E2EV-02: Full chain task -> run -> DiagnosticianOutputV1 -> artifact -> candidates
|
|
154
|
-
describe('Scenario 1: FakeCliProcessRunner Proves Adapter Path (E2EV-01, E2EV-02)', () => {
|
|
155
|
-
it('full chain with FakeCliProcessRunner — openclaw-cli adapter path', async () => {
|
|
156
|
-
const taskId = randomUUID();
|
|
157
|
-
// Create task
|
|
158
|
-
await stateManager.createTask(makeDiagnosticianTaskInput({
|
|
159
|
-
taskId,
|
|
160
|
-
workspaceDir: testDir,
|
|
161
|
-
diagnostic: {
|
|
162
|
-
reasonSummary: 'E2EV-01 happy path test',
|
|
163
|
-
sourcePainId: 'pain-e2ev01-001',
|
|
164
|
-
severity: 'high',
|
|
165
|
-
source: 'e2e-test',
|
|
166
|
-
},
|
|
167
|
-
}));
|
|
168
|
-
// Configure fake output with >= 2 kind='principle' recommendations
|
|
169
|
-
const output = makeDiagnosticianOutputWithCandidates(taskId);
|
|
170
|
-
// Configure FakeCliProcessRunner mock — returns success with DiagnosticianOutputV1 JSON
|
|
171
|
-
vi.mocked(runCliProcess).mockResolvedValue(makeFakeCliOutput({
|
|
172
|
-
stdout: JSON.stringify(output),
|
|
173
|
-
exitCode: 0,
|
|
174
|
-
timedOut: false,
|
|
175
|
-
}));
|
|
176
|
-
// Create OpenClawCliRuntimeAdapter with local mode
|
|
177
|
-
const runtimeAdapter = new OpenClawCliRuntimeAdapter({
|
|
178
|
-
runtimeMode: 'local',
|
|
179
|
-
workspaceDir: testDir,
|
|
180
|
-
});
|
|
181
|
-
const runner = createRunner(runtimeAdapter);
|
|
182
|
-
const result = await runner.run(taskId);
|
|
183
|
-
// E2EV-01/E2EV-02 assertion 1: result.status === 'succeeded'
|
|
184
|
-
expect(result.status).toBe('succeeded');
|
|
185
|
-
// E2EV-01/E2EV-02 assertion 2: task.resultRef starts with 'commit://'
|
|
186
|
-
const task = await stateManager.getTask(taskId);
|
|
187
|
-
expect(task).not.toBeNull();
|
|
188
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
189
|
-
expect(task.resultRef).toMatch(/^commit:\/\/.+/);
|
|
190
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
191
|
-
const commitId = task.resultRef.replace('commit://', '');
|
|
192
|
-
// E2EV-01/E2EV-02 assertion 3: task status is 'succeeded'
|
|
193
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
194
|
-
expect(task.status).toBe('succeeded');
|
|
195
|
-
// E2EV-02 assertion 4: artifact row exists with correct artifact_kind
|
|
196
|
-
const db = sqliteConn.getDb();
|
|
197
|
-
const artifactRow = db.prepare('SELECT * FROM artifacts WHERE task_id = ?').get(taskId);
|
|
198
|
-
expect(artifactRow).toBeDefined();
|
|
199
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
200
|
-
expect(artifactRow.artifact_kind).toBe('diagnostician_output');
|
|
201
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
202
|
-
const artifactId = artifactRow.artifact_id;
|
|
203
|
-
// E2EV-02 assertion 5: >= 3 candidate rows exist (all recommendation kinds)
|
|
204
|
-
const candidateRows = db.prepare('SELECT * FROM principle_candidates WHERE artifact_id = ? AND status = ?').all(artifactId, PENDING_STATUS);
|
|
205
|
-
expect(candidateRows).toHaveLength(3);
|
|
206
|
-
expect(candidateRows.every((c) => c.description.length > 0)).toBe(true);
|
|
207
|
-
// E2EV-02 assertion 6: commit row links task to artifact with status === 'committed'
|
|
208
|
-
const commitRow = db.prepare('SELECT * FROM commits WHERE commit_id = ?').get(commitId);
|
|
209
|
-
expect(commitRow).toBeDefined();
|
|
210
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
211
|
-
expect(commitRow.artifact_id).toBe(artifactId);
|
|
212
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
213
|
-
expect(commitRow.task_id).toBe(taskId);
|
|
214
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
215
|
-
expect(commitRow.status).toBe('committed');
|
|
216
|
-
// E2EV-01 CRITICAL: runCliProcess was called (fake was invoked, no real binary)
|
|
217
|
-
expect(vi.mocked(runCliProcess)).toHaveBeenCalled();
|
|
218
|
-
// E2EV-01 CRITICAL: command was 'openclaw'
|
|
219
|
-
const rawCalls = vi.mocked(runCliProcess).mock.calls;
|
|
220
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
221
|
-
const firstArg = rawCalls[0][0];
|
|
222
|
-
expect(firstArg.command).toBe('openclaw');
|
|
223
|
-
// E2EV-01 CRITICAL: args include '--local' when runtimeMode is 'local'
|
|
224
|
-
expect(firstArg.args).toContain('--local');
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
228
|
-
// SCENARIO 2: HG-3 — Both RuntimeModes Produce Correct CLI Args
|
|
229
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
230
|
-
// Verifies HG-3: No silent fallback. '--local' only passed when mode === 'local'.
|
|
231
|
-
describe('Scenario 2: HG-3 — Both RuntimeModes Produce Correct CLI Args', () => {
|
|
232
|
-
it('local mode passes --local, gateway mode omits --local', async () => {
|
|
233
|
-
// ── Sub-case: local mode ────────────────────────────────────────────────
|
|
234
|
-
const taskIdLocal = randomUUID();
|
|
235
|
-
await stateManager.createTask(makeDiagnosticianTaskInput({
|
|
236
|
-
taskId: taskIdLocal,
|
|
237
|
-
workspaceDir: testDir,
|
|
238
|
-
diagnostic: { reasonSummary: 'HG-3 local mode test' },
|
|
239
|
-
}));
|
|
240
|
-
const outputLocal = makeDiagnosticianOutputWithCandidates(taskIdLocal);
|
|
241
|
-
vi.mocked(runCliProcess).mockResolvedValue(makeFakeCliOutput({
|
|
242
|
-
stdout: JSON.stringify(outputLocal),
|
|
243
|
-
exitCode: 0,
|
|
244
|
-
timedOut: false,
|
|
245
|
-
}));
|
|
246
|
-
const localAdapter = new OpenClawCliRuntimeAdapter({
|
|
247
|
-
runtimeMode: 'local',
|
|
248
|
-
workspaceDir: testDir,
|
|
249
|
-
});
|
|
250
|
-
const localRunner = createRunner(localAdapter);
|
|
251
|
-
const localResult = await localRunner.run(taskIdLocal);
|
|
252
|
-
expect(localResult.status).toBe('succeeded');
|
|
253
|
-
// HG-3 CRITICAL: args include '--local'
|
|
254
|
-
const rawLocal = vi.mocked(runCliProcess).mock.calls[0]?.[0];
|
|
255
|
-
expect(rawLocal.args).toContain('--local');
|
|
256
|
-
// ── Sub-case: gateway mode ──────────────────────────────────────────────
|
|
257
|
-
const taskIdGateway = randomUUID();
|
|
258
|
-
await stateManager.createTask(makeDiagnosticianTaskInput({
|
|
259
|
-
taskId: taskIdGateway,
|
|
260
|
-
workspaceDir: testDir,
|
|
261
|
-
diagnostic: { reasonSummary: 'HG-3 gateway mode test' },
|
|
262
|
-
}));
|
|
263
|
-
const outputGateway = makeDiagnosticianOutputWithCandidates(taskIdGateway);
|
|
264
|
-
vi.mocked(runCliProcess).mockClear();
|
|
265
|
-
vi.mocked(runCliProcess).mockResolvedValue(makeFakeCliOutput({
|
|
266
|
-
stdout: JSON.stringify(outputGateway),
|
|
267
|
-
exitCode: 0,
|
|
268
|
-
timedOut: false,
|
|
269
|
-
}));
|
|
270
|
-
const gatewayAdapter = new OpenClawCliRuntimeAdapter({
|
|
271
|
-
runtimeMode: 'gateway',
|
|
272
|
-
workspaceDir: testDir,
|
|
273
|
-
});
|
|
274
|
-
const gatewayRunner = createRunner(gatewayAdapter);
|
|
275
|
-
const gatewayResult = await gatewayRunner.run(taskIdGateway);
|
|
276
|
-
expect(gatewayResult.status).toBe('succeeded');
|
|
277
|
-
// HG-3 CRITICAL: args do NOT include '--local'
|
|
278
|
-
const rawGateway = vi.mocked(runCliProcess).mock.calls[0]?.[0];
|
|
279
|
-
expect(rawGateway.args).not.toContain('--local');
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
283
|
-
// SCENARIO 3: TestDoubleRuntimeAdapter Regression (E2EV-03)
|
|
284
|
-
// ═══════════════════════════════════════════════════════════════════════════
|
|
285
|
-
// Verifies E2EV-03: TestDoubleRuntimeAdapter path still works after
|
|
286
|
-
// OpenClawCliRuntimeAdapter changes (dual-track-e2e.test.ts Scenario 1 regression)
|
|
287
|
-
describe('Scenario 3: TestDoubleRuntimeAdapter Regression (E2EV-03)', () => {
|
|
288
|
-
it('E2EV-03: TestDoubleRuntimeAdapter path unaffected — dual-track-e2e regression', async () => {
|
|
289
|
-
const taskId = randomUUID();
|
|
290
|
-
// Create task
|
|
291
|
-
await stateManager.createTask(makeDiagnosticianTaskInput({
|
|
292
|
-
taskId,
|
|
293
|
-
workspaceDir: testDir,
|
|
294
|
-
diagnostic: {
|
|
295
|
-
reasonSummary: 'E2EV-03 TestDoubleRuntimeAdapter regression test',
|
|
296
|
-
sourcePainId: 'pain-e2ev03-001',
|
|
297
|
-
severity: 'medium',
|
|
298
|
-
source: 'e2e-test',
|
|
299
|
-
},
|
|
300
|
-
}));
|
|
301
|
-
// Configure output with >= 2 kind='principle' recommendations
|
|
302
|
-
const output = makeDiagnosticianOutputWithCandidates(taskId);
|
|
303
|
-
// Configure TestDoubleRuntimeAdapter — same pattern as dual-track-e2e.test.ts Scenario 1
|
|
304
|
-
const runtimeAdapter = new TestDoubleRuntimeAdapter({
|
|
305
|
-
onPollRun: () => ({
|
|
306
|
-
runId: 'td-poll-m6e2e-1',
|
|
307
|
-
status: 'succeeded',
|
|
308
|
-
startedAt: new Date().toISOString(),
|
|
309
|
-
endedAt: new Date().toISOString(),
|
|
310
|
-
}),
|
|
311
|
-
onFetchOutput: () => ({
|
|
312
|
-
runId: 'td-fetch-m6e2e-1',
|
|
313
|
-
payload: output,
|
|
314
|
-
}),
|
|
315
|
-
});
|
|
316
|
-
const runner = createRunner(runtimeAdapter);
|
|
317
|
-
const result = await runner.run(taskId);
|
|
318
|
-
// E2EV-03 assertion 1: result.status === 'succeeded'
|
|
319
|
-
expect(result.status).toBe('succeeded');
|
|
320
|
-
// E2EV-03 assertion 2: task.status === 'succeeded'
|
|
321
|
-
const task = await stateManager.getTask(taskId);
|
|
322
|
-
expect(task).not.toBeNull();
|
|
323
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
324
|
-
expect(task.status).toBe('succeeded');
|
|
325
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
326
|
-
expect(task.resultRef).toMatch(/^commit:\/\/.+/);
|
|
327
|
-
// E2EV-03 assertion 3: artifact exists in DB
|
|
328
|
-
const db = sqliteConn.getDb();
|
|
329
|
-
const artifactRow = db.prepare('SELECT * FROM artifacts WHERE task_id = ?').get(taskId);
|
|
330
|
-
expect(artifactRow).toBeDefined();
|
|
331
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
332
|
-
expect(artifactRow.artifact_kind).toBe('diagnostician_output');
|
|
333
|
-
// E2EV-03 assertion 4: >= 2 candidate rows exist
|
|
334
|
-
const candidateRows = db.prepare('SELECT * FROM principle_candidates WHERE artifact_id = ? AND status = ?').all(artifactRow.artifact_id, PENDING_STATUS);
|
|
335
|
-
expect(candidateRows).toHaveLength(3); // 2 principles + 1 rule
|
|
336
|
-
// E2EV-03 assertion 5: output.payload.diagnosisId matches committed output
|
|
337
|
-
expect(result.output).toBeDefined();
|
|
338
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
339
|
-
expect(result.output.diagnosisId).toBe(output.diagnosisId);
|
|
340
|
-
// E2EV-03 assertion 6: contextHash is present (proves context assembly ran)
|
|
341
|
-
expect(result.contextHash).toBeDefined();
|
|
342
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
343
|
-
expect(result.contextHash.length).toBeGreaterThan(0);
|
|
344
|
-
});
|
|
345
|
-
});
|
|
346
|
-
});
|
|
347
|
-
//# sourceMappingURL=m6-06-e2e.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"m6-06-e2e.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/m6-06-e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"m6-06-legacy.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/m6-06-legacy.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Legacy openclaw-history Import Regression Test — M6 E2E E2EV-08
|
|
3
|
-
*
|
|
4
|
-
* Verifies that DiagnosticianRunner can handle tasks with openclaw-history
|
|
5
|
-
* runtime kind (imported from existing openclaw conversations) without errors.
|
|
6
|
-
*
|
|
7
|
-
* This is a regression test for the legacy openclaw-history import path.
|
|
8
|
-
* Based on dual-track-e2e.test.ts Scenario 4 pattern.
|
|
9
|
-
*
|
|
10
|
-
* Requirement: E2EV-08
|
|
11
|
-
*/
|
|
12
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
13
|
-
import * as fs from 'fs';
|
|
14
|
-
import * as path from 'path';
|
|
15
|
-
import * as os from 'os';
|
|
16
|
-
import { RuntimeStateManager } from '../../store/runtime-state-manager.js';
|
|
17
|
-
import { SqliteContextAssembler } from '../../store/context/sqlite-context-assembler.js';
|
|
18
|
-
import { SqliteHistoryQuery } from '../../store/history/sqlite-history-query.js';
|
|
19
|
-
import { StoreEventEmitter } from '../../store/event-emitter.js';
|
|
20
|
-
import { DiagnosticianRunner } from '../diagnostician-runner.js';
|
|
21
|
-
import { PassThroughValidator } from '../diagnostician-validator.js';
|
|
22
|
-
import { TestDoubleRuntimeAdapter } from '../../adapter/test-double-runtime-adapter.js';
|
|
23
|
-
// -- Test fixtures --
|
|
24
|
-
function makeDiagnosticianOutput(taskId) {
|
|
25
|
-
return {
|
|
26
|
-
valid: true,
|
|
27
|
-
diagnosisId: `diag-legacy-${Date.now()}`,
|
|
28
|
-
taskId,
|
|
29
|
-
summary: 'Legacy openclaw-history regression test diagnosis summary',
|
|
30
|
-
rootCause: 'Legacy openclaw-history regression test root cause analysis',
|
|
31
|
-
violatedPrinciples: [],
|
|
32
|
-
evidence: [],
|
|
33
|
-
recommendations: [],
|
|
34
|
-
confidence: 0.85,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function makeDiagnosticianTaskInput(options) {
|
|
38
|
-
const { taskId, workspaceDir, diagnostic, overrides } = options;
|
|
39
|
-
const diagnosticJson = JSON.stringify({
|
|
40
|
-
workspaceDir,
|
|
41
|
-
reasonSummary: diagnostic?.reasonSummary ?? 'Legacy openclaw-history regression test',
|
|
42
|
-
sourcePainId: diagnostic?.sourcePainId,
|
|
43
|
-
severity: diagnostic?.severity,
|
|
44
|
-
source: diagnostic?.source,
|
|
45
|
-
});
|
|
46
|
-
return {
|
|
47
|
-
taskId,
|
|
48
|
-
taskKind: 'diagnostician',
|
|
49
|
-
status: 'pending',
|
|
50
|
-
attemptCount: 0,
|
|
51
|
-
maxAttempts: 3,
|
|
52
|
-
...overrides,
|
|
53
|
-
diagnosticJson,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// -- Mock committer --
|
|
57
|
-
const mockCommitter = {
|
|
58
|
-
commit: async () => ({
|
|
59
|
-
commitId: 'legacy-test-commit-id',
|
|
60
|
-
artifactId: 'legacy-test-artifact-id',
|
|
61
|
-
candidateCount: 0,
|
|
62
|
-
}),
|
|
63
|
-
};
|
|
64
|
-
// -- Test setup --
|
|
65
|
-
const TMP_ROOT = path.join(os.tmpdir(), `pd-legacy-e2e-${process.pid}`);
|
|
66
|
-
describe('E2E m6-06 — Legacy openclaw-history Import Regression (E2EV-08)', () => {
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
68
|
-
let testDir;
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
70
|
-
let stateManager;
|
|
71
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
72
|
-
let contextAssembler;
|
|
73
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
74
|
-
let historyQuery;
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/init-declarations
|
|
76
|
-
let eventEmitter;
|
|
77
|
-
beforeEach(async () => {
|
|
78
|
-
testDir = path.join(TMP_ROOT, `legacy-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
79
|
-
fs.mkdirSync(testDir, { recursive: true });
|
|
80
|
-
stateManager = new RuntimeStateManager({ workspaceDir: testDir });
|
|
81
|
-
await stateManager.initialize();
|
|
82
|
-
const sqliteConn = stateManager.connection;
|
|
83
|
-
historyQuery = new SqliteHistoryQuery(sqliteConn);
|
|
84
|
-
const taskStore = stateManager.taskStore;
|
|
85
|
-
const runStore = stateManager.runStore;
|
|
86
|
-
contextAssembler = new SqliteContextAssembler(taskStore, historyQuery, runStore);
|
|
87
|
-
eventEmitter = new StoreEventEmitter();
|
|
88
|
-
});
|
|
89
|
-
afterEach(() => {
|
|
90
|
-
stateManager.close();
|
|
91
|
-
try {
|
|
92
|
-
fs.rmSync(TMP_ROOT, { recursive: true, force: true });
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
// ignore cleanup errors on Windows
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
function createRunner(runtimeAdapter, validator = new PassThroughValidator()) {
|
|
99
|
-
return new DiagnosticianRunner({
|
|
100
|
-
stateManager,
|
|
101
|
-
contextAssembler,
|
|
102
|
-
runtimeAdapter,
|
|
103
|
-
eventEmitter,
|
|
104
|
-
validator,
|
|
105
|
-
committer: mockCommitter,
|
|
106
|
-
}, {
|
|
107
|
-
owner: 'legacy-e2e-runner',
|
|
108
|
-
runtimeKind: 'test-double',
|
|
109
|
-
pollIntervalMs: 50,
|
|
110
|
-
timeoutMs: 3000,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
// ═══════════════════════════════════════════════════════════════
|
|
114
|
-
// E2EV-08: openclaw-history runtime imported context does not break DiagnosticianRunner
|
|
115
|
-
// ═══════════════════════════════════════════════════════════════
|
|
116
|
-
it('E2EV-08: openclaw-history runtime imported context does not break DiagnosticianRunner', async () => {
|
|
117
|
-
const taskId = 'e2e-legacy-001';
|
|
118
|
-
// Step 1: Create a task
|
|
119
|
-
await stateManager.createTask(makeDiagnosticianTaskInput({
|
|
120
|
-
taskId,
|
|
121
|
-
workspaceDir: testDir,
|
|
122
|
-
diagnostic: { reasonSummary: 'E2EV-08 legacy import regression test' },
|
|
123
|
-
}));
|
|
124
|
-
// Step 2: Acquire a lease with runtimeKind 'openclaw-history'
|
|
125
|
-
// This simulates importing an existing openclaw conversation
|
|
126
|
-
await stateManager.acquireLease({
|
|
127
|
-
taskId,
|
|
128
|
-
owner: 'setup-agent',
|
|
129
|
-
runtimeKind: 'openclaw-history',
|
|
130
|
-
});
|
|
131
|
-
// Step 3: Mark task succeeded to create a completed run with output
|
|
132
|
-
// (mimics imported openclaw-history context)
|
|
133
|
-
await stateManager.markTaskSucceeded(taskId, 'run://setup-run');
|
|
134
|
-
// Step 4: Reset task to pending state for the runner to process
|
|
135
|
-
await stateManager.updateTask(taskId, {
|
|
136
|
-
status: 'pending',
|
|
137
|
-
attemptCount: 0,
|
|
138
|
-
lastError: null,
|
|
139
|
-
resultRef: null,
|
|
140
|
-
});
|
|
141
|
-
// Step 5: Verify openclaw-history run exists (pre-condition check)
|
|
142
|
-
const runsBefore = await stateManager.getRunsByTask(taskId);
|
|
143
|
-
expect(runsBefore.length).toBeGreaterThan(0);
|
|
144
|
-
// Step 6: Configure TestDoubleRuntimeAdapter for success
|
|
145
|
-
const successOutput = makeDiagnosticianOutput(taskId);
|
|
146
|
-
const runtimeAdapter = new TestDoubleRuntimeAdapter({
|
|
147
|
-
onPollRun: (_runId) => ({
|
|
148
|
-
runId: 'td-legacy-1',
|
|
149
|
-
status: 'succeeded',
|
|
150
|
-
startedAt: new Date().toISOString(),
|
|
151
|
-
endedAt: new Date().toISOString(),
|
|
152
|
-
}),
|
|
153
|
-
onFetchOutput: (_runId) => ({
|
|
154
|
-
runId: 'td-legacy-fetch-1',
|
|
155
|
-
payload: successOutput,
|
|
156
|
-
}),
|
|
157
|
-
});
|
|
158
|
-
// Step 7: Create DiagnosticianRunner
|
|
159
|
-
const runner = createRunner(runtimeAdapter, new PassThroughValidator());
|
|
160
|
-
// Step 8: Call runner.run(taskId)
|
|
161
|
-
const result = await runner.run(taskId);
|
|
162
|
-
// Assertion 1: result.status === 'succeeded'
|
|
163
|
-
expect(result.status).toBe('succeeded');
|
|
164
|
-
// Assertion 2: result.contextHash is defined and non-empty
|
|
165
|
-
// (context assembly ran without errors from openclaw-history run)
|
|
166
|
-
expect(result.contextHash).toBeDefined();
|
|
167
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
168
|
-
expect(result.contextHash.length).toBeGreaterThan(0);
|
|
169
|
-
// Assertion 3: result.output.valid === true
|
|
170
|
-
expect(result.output).toBeDefined();
|
|
171
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
172
|
-
expect(result.output.valid).toBe(true);
|
|
173
|
-
// Assertion 4: Verify task in store has status === 'succeeded'
|
|
174
|
-
const task = await stateManager.getTask(taskId);
|
|
175
|
-
expect(task).not.toBeNull();
|
|
176
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
177
|
-
expect(task.status).toBe('succeeded');
|
|
178
|
-
// Assertion 5: Verify at least one run with runtimeKind === 'openclaw-history' exists
|
|
179
|
-
const allRuns = await stateManager.getRunsByTask(taskId);
|
|
180
|
-
const openclawHistoryRuns = allRuns.filter((r) => r.runtimeKind === 'openclaw-history');
|
|
181
|
-
expect(openclawHistoryRuns.length).toBeGreaterThan(0);
|
|
182
|
-
// Assertion 6: Verify result.taskId matches
|
|
183
|
-
expect(result.taskId).toBe(taskId);
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
//# sourceMappingURL=m6-06-legacy.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"m6-06-legacy.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/m6-06-legacy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"m6-06-real-path.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/m6-06-real-path.test.ts"],"names":[],"mappings":""}
|