elasticdash-test 0.1.16 → 0.1.17-alpha-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/cloud-client.d.ts +34 -0
  2. package/dist/cloud-client.d.ts.map +1 -0
  3. package/dist/cloud-client.js +103 -0
  4. package/dist/cloud-client.js.map +1 -0
  5. package/dist/dashboard-server.d.ts.map +1 -1
  6. package/dist/dashboard-server.js +425 -90
  7. package/dist/dashboard-server.js.map +1 -1
  8. package/dist/evaluators/determinism.d.ts +3 -0
  9. package/dist/evaluators/determinism.d.ts.map +1 -0
  10. package/dist/evaluators/determinism.js +116 -0
  11. package/dist/evaluators/determinism.js.map +1 -0
  12. package/dist/evaluators/index.d.ts +4 -0
  13. package/dist/evaluators/index.d.ts.map +1 -0
  14. package/dist/evaluators/index.js +61 -0
  15. package/dist/evaluators/index.js.map +1 -0
  16. package/dist/evaluators/latency-budget.d.ts +3 -0
  17. package/dist/evaluators/latency-budget.d.ts.map +1 -0
  18. package/dist/evaluators/latency-budget.js +45 -0
  19. package/dist/evaluators/latency-budget.js.map +1 -0
  20. package/dist/evaluators/llm-judge.d.ts +3 -0
  21. package/dist/evaluators/llm-judge.d.ts.map +1 -0
  22. package/dist/evaluators/llm-judge.js +122 -0
  23. package/dist/evaluators/llm-judge.js.map +1 -0
  24. package/dist/evaluators/output-contains.d.ts +3 -0
  25. package/dist/evaluators/output-contains.d.ts.map +1 -0
  26. package/dist/evaluators/output-contains.js +52 -0
  27. package/dist/evaluators/output-contains.js.map +1 -0
  28. package/dist/evaluators/output-schema.d.ts +3 -0
  29. package/dist/evaluators/output-schema.d.ts.map +1 -0
  30. package/dist/evaluators/output-schema.js +58 -0
  31. package/dist/evaluators/output-schema.js.map +1 -0
  32. package/dist/evaluators/token-budget.d.ts +3 -0
  33. package/dist/evaluators/token-budget.d.ts.map +1 -0
  34. package/dist/evaluators/token-budget.js +45 -0
  35. package/dist/evaluators/token-budget.js.map +1 -0
  36. package/dist/evaluators/types.d.ts +103 -0
  37. package/dist/evaluators/types.d.ts.map +1 -0
  38. package/dist/evaluators/types.js +6 -0
  39. package/dist/evaluators/types.js.map +1 -0
  40. package/dist/html/dashboard.html +359 -73
  41. package/dist/index.cjs +253 -14
  42. package/dist/index.d.ts +2 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/interceptors/telemetry-push.d.ts +40 -0
  47. package/dist/interceptors/telemetry-push.d.ts.map +1 -1
  48. package/dist/interceptors/telemetry-push.js +129 -6
  49. package/dist/interceptors/telemetry-push.js.map +1 -1
  50. package/dist/interceptors/tool.d.ts.map +1 -1
  51. package/dist/interceptors/tool.js +8 -1
  52. package/dist/interceptors/tool.js.map +1 -1
  53. package/dist/interceptors/workflow-ai.d.ts.map +1 -1
  54. package/dist/interceptors/workflow-ai.js +21 -6
  55. package/dist/interceptors/workflow-ai.js.map +1 -1
  56. package/dist/internals/mock-resolver.d.ts +70 -2
  57. package/dist/internals/mock-resolver.d.ts.map +1 -1
  58. package/dist/internals/mock-resolver.js +157 -6
  59. package/dist/internals/mock-resolver.js.map +1 -1
  60. package/dist/test-group/cli.d.ts +8 -0
  61. package/dist/test-group/cli.d.ts.map +1 -0
  62. package/dist/test-group/cli.js +162 -0
  63. package/dist/test-group/cli.js.map +1 -0
  64. package/dist/test-group/git-context.d.ts +3 -0
  65. package/dist/test-group/git-context.d.ts.map +1 -0
  66. package/dist/test-group/git-context.js +59 -0
  67. package/dist/test-group/git-context.js.map +1 -0
  68. package/dist/test-group/reporter.d.ts +4 -0
  69. package/dist/test-group/reporter.d.ts.map +1 -0
  70. package/dist/test-group/reporter.js +54 -0
  71. package/dist/test-group/reporter.js.map +1 -0
  72. package/dist/test-group/runner.d.ts +18 -0
  73. package/dist/test-group/runner.d.ts.map +1 -0
  74. package/dist/test-group/runner.js +234 -0
  75. package/dist/test-group/runner.js.map +1 -0
  76. package/dist/workflow-runner-worker.js +7 -1
  77. package/dist/workflow-runner-worker.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/dashboard-server.ts +101 -28
  80. package/src/html/dashboard.html +359 -73
  81. package/src/index.ts +2 -2
  82. package/src/interceptors/telemetry-push.ts +159 -7
  83. package/src/interceptors/tool.ts +9 -1
  84. package/src/interceptors/workflow-ai.ts +22 -6
  85. package/src/internals/mock-resolver.ts +190 -7
  86. package/src/workflow-runner-worker.ts +11 -3
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Test group runner — executes test groups locally via subprocess,
3
+ * evaluates expectations, and returns results for pushing to the cloud.
4
+ *
5
+ * This module is fully independent from the dashboard server.
6
+ * It reuses the same workflow-runner-worker subprocess pattern.
7
+ */
8
+ import { spawn } from 'node:child_process';
9
+ import path from 'node:path';
10
+ import { pathToFileURL, fileURLToPath } from 'node:url';
11
+ import { existsSync } from 'node:fs';
12
+ import { evaluateExpectations } from '../evaluators/index.js';
13
+ function findWorkflowsModule(cwd) {
14
+ for (const name of ['ed_workflows.ts', 'ed_workflows.js']) {
15
+ const p = path.join(cwd, name);
16
+ if (existsSync(p))
17
+ return p;
18
+ }
19
+ return null;
20
+ }
21
+ function findToolsModule(cwd) {
22
+ for (const name of ['ed_tools.ts', 'ed_tools.js']) {
23
+ const p = path.join(cwd, name);
24
+ if (existsSync(p))
25
+ return p;
26
+ }
27
+ return null;
28
+ }
29
+ function isDenoProject(dir) {
30
+ return existsSync(path.join(dir, 'deno.json')) || existsSync(path.join(dir, 'deno.jsonc'));
31
+ }
32
+ function runInSubprocess(workflowsModulePath, toolsModulePath, workflowName, args, input, options) {
33
+ return new Promise((resolve) => {
34
+ const workerScript = fileURLToPath(new URL('../workflow-runner-worker.js', import.meta.url));
35
+ const projectDir = path.dirname(workflowsModulePath);
36
+ const denoProject = isDenoProject(projectDir);
37
+ const nodeOptions = process.env.NODE_OPTIONS ?? '';
38
+ const tsxFlag = '--import tsx';
39
+ const childNodeOptions = nodeOptions.includes('tsx') ? nodeOptions : `${nodeOptions} ${tsxFlag}`.trim();
40
+ const childEnv = { ...process.env, NODE_OPTIONS: denoProject ? nodeOptions : childNodeOptions };
41
+ const runtime = denoProject ? 'deno' : process.execPath;
42
+ const runtimeArgs = denoProject ? ['run', '--allow-all', workerScript] : [workerScript];
43
+ const child = spawn(runtime, runtimeArgs, {
44
+ env: childEnv,
45
+ cwd: projectDir,
46
+ stdio: ['pipe', 'pipe', 'pipe', 'pipe'],
47
+ });
48
+ // Timeout handling
49
+ let timedOut = false;
50
+ let timeoutHandle;
51
+ if (options?.timeoutMs) {
52
+ timeoutHandle = setTimeout(() => {
53
+ timedOut = true;
54
+ child.kill('SIGKILL');
55
+ }, options.timeoutMs);
56
+ }
57
+ let fd3Data = '';
58
+ let stderr = '';
59
+ const WORKFLOW_RESULT_PREFIX = '__ELASTICDASH_RESULT__:';
60
+ let stdoutBuf = '';
61
+ child.stdout.on('data', (chunk) => {
62
+ stdoutBuf += chunk.toString();
63
+ const lines = stdoutBuf.split('\n');
64
+ stdoutBuf = lines.pop() ?? '';
65
+ for (const line of lines) {
66
+ if (line.startsWith(WORKFLOW_RESULT_PREFIX)) {
67
+ fd3Data += line.slice(WORKFLOW_RESULT_PREFIX.length);
68
+ }
69
+ // Suppress stdout from subprocesses in test-group mode
70
+ }
71
+ });
72
+ child.stderr.on('data', (chunk) => {
73
+ stderr += chunk.toString();
74
+ });
75
+ const fd3 = child.stdio[3];
76
+ fd3?.on('data', (chunk) => {
77
+ fd3Data += chunk.toString();
78
+ });
79
+ child.on('close', () => {
80
+ if (timeoutHandle)
81
+ clearTimeout(timeoutHandle);
82
+ if (stdoutBuf.startsWith(WORKFLOW_RESULT_PREFIX)) {
83
+ fd3Data += stdoutBuf.slice(WORKFLOW_RESULT_PREFIX.length);
84
+ }
85
+ if (timedOut) {
86
+ resolve({ ok: false, error: `Timed out after ${options?.timeoutMs}ms` });
87
+ return;
88
+ }
89
+ if (fd3Data) {
90
+ try {
91
+ const parsed = JSON.parse(fd3Data);
92
+ if (parsed && typeof parsed === 'object' && 'ok' in parsed) {
93
+ resolve(parsed);
94
+ return;
95
+ }
96
+ }
97
+ catch { /* fall through */ }
98
+ }
99
+ resolve({ ok: false, error: stderr.trim() || 'Workflow subprocess produced no output.' });
100
+ });
101
+ child.on('error', (err) => {
102
+ if (timeoutHandle)
103
+ clearTimeout(timeoutHandle);
104
+ resolve({ ok: false, error: `Failed to spawn subprocess: ${err.message}` });
105
+ });
106
+ const payload = JSON.stringify({
107
+ workflowsModulePath: pathToFileURL(workflowsModulePath).pathname,
108
+ toolsModulePath: toolsModulePath ? pathToFileURL(toolsModulePath).pathname : undefined,
109
+ workflowName,
110
+ args,
111
+ input,
112
+ ...(options?.replayMode !== undefined ? { replayMode: options.replayMode } : {}),
113
+ ...(options?.checkpoint !== undefined ? { checkpoint: options.checkpoint } : {}),
114
+ ...(options?.history !== undefined ? { history: options.history } : {}),
115
+ ...(options?.toolMockConfig !== undefined ? { toolMockConfig: options.toolMockConfig } : {}),
116
+ ...(options?.aiMockConfig !== undefined ? { aiMockConfig: options.aiMockConfig } : {}),
117
+ ...(options?.promptMockConfig !== undefined ? { promptMockConfig: options.promptMockConfig } : {}),
118
+ });
119
+ child.stdin.write(payload);
120
+ child.stdin.end();
121
+ });
122
+ }
123
+ function extractTokenUsage(events) {
124
+ let inputTokens = 0;
125
+ let outputTokens = 0;
126
+ let totalTokens = 0;
127
+ for (const event of events) {
128
+ if (event.usage) {
129
+ inputTokens += event.usage.inputTokens ?? 0;
130
+ outputTokens += event.usage.outputTokens ?? 0;
131
+ totalTokens += event.usage.totalTokens ?? 0;
132
+ }
133
+ }
134
+ // If totalTokens wasn't reported but individual counts were, compute it
135
+ if (totalTokens === 0 && (inputTokens > 0 || outputTokens > 0)) {
136
+ totalTokens = inputTokens + outputTokens;
137
+ }
138
+ return { inputTokens, outputTokens, totalTokens };
139
+ }
140
+ export async function executeSingleRun(testGroup, runIndex, cwd) {
141
+ const workflowsModule = findWorkflowsModule(cwd);
142
+ if (!workflowsModule) {
143
+ return {
144
+ runIndex,
145
+ passed: false,
146
+ durationMs: 0,
147
+ tokenUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
148
+ output: null,
149
+ error: 'No ed_workflows.ts or ed_workflows.js found in project directory',
150
+ };
151
+ }
152
+ const toolsModule = findToolsModule(cwd);
153
+ const frozenEvents = (testGroup.frozenEvents ?? []);
154
+ const checkpoint = frozenEvents.length > 0
155
+ ? Math.max(...frozenEvents.map((e) => e.id))
156
+ : 0;
157
+ const startedAt = new Date().toISOString();
158
+ const startMs = Date.now();
159
+ const result = await runInSubprocess(workflowsModule, toolsModule, testGroup.workflowName, testGroup.mockInput ? [testGroup.mockInput] : [], testGroup.mockInput, {
160
+ replayMode: frozenEvents.length > 0,
161
+ checkpoint,
162
+ history: frozenEvents,
163
+ toolMockConfig: testGroup.toolMocks,
164
+ promptMockConfig: testGroup.promptMocks,
165
+ timeoutMs: testGroup.timeoutMs,
166
+ });
167
+ const durationMs = Date.now() - startMs;
168
+ const completedAt = new Date().toISOString();
169
+ const events = result.workflowTrace?.events ?? [];
170
+ const tokenUsage = extractTokenUsage(events);
171
+ return {
172
+ runIndex,
173
+ passed: result.ok,
174
+ durationMs,
175
+ tokenUsage,
176
+ output: result.currentOutput ?? null,
177
+ trace: result.workflowTrace,
178
+ error: result.ok ? undefined : result.error,
179
+ startedAt,
180
+ completedAt,
181
+ };
182
+ }
183
+ export async function runTestGroupNTimes(testGroup, cwd, options) {
184
+ const runCount = options?.overrideRunCount ?? testGroup.runCount;
185
+ const startedAt = new Date().toISOString();
186
+ const singleRuns = [];
187
+ for (let i = 0; i < runCount; i++) {
188
+ const run = await executeSingleRun(testGroup, i, cwd);
189
+ singleRuns.push(run);
190
+ }
191
+ const evaluation = await evaluateExpectations(testGroup.expectations, singleRuns, testGroup.passThreshold);
192
+ // Mark individual runs as passed/failed based on expectation results
193
+ // A run is "passed" if it didn't error AND expectations passed for it
194
+ for (const run of singleRuns) {
195
+ if (run.error) {
196
+ run.passed = false;
197
+ }
198
+ }
199
+ const completedAt = new Date().toISOString();
200
+ return {
201
+ testGroupId: testGroup.id,
202
+ triggeredBy: options?.triggeredBy ?? (process.env.CI ? 'ci' : 'local'),
203
+ passed: evaluation.passed,
204
+ summary: `${testGroup.name}: ${evaluation.summary}`,
205
+ singleRuns,
206
+ expectationResults: evaluation.results,
207
+ startedAt,
208
+ completedAt,
209
+ };
210
+ }
211
+ export async function runAllTestGroups(testGroups, cwd, options) {
212
+ const startedAt = new Date().toISOString();
213
+ const results = [];
214
+ const testGroupRunIds = [];
215
+ for (const group of testGroups) {
216
+ const result = await runTestGroupNTimes(group, cwd, options);
217
+ results.push(result);
218
+ // RunIds will be assigned by the backend after push
219
+ testGroupRunIds.push(group.id);
220
+ }
221
+ const passedCount = results.filter((r) => r.passed).length;
222
+ const totalCount = results.length;
223
+ const allPassed = passedCount === totalCount;
224
+ const completedAt = new Date().toISOString();
225
+ return {
226
+ passed: allPassed,
227
+ summary: `${passedCount}/${totalCount} test groups passed`,
228
+ testGroupRunIds,
229
+ results,
230
+ startedAt,
231
+ completedAt,
232
+ };
233
+ }
234
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/test-group/runner.ts"],"names":[],"mappings":"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"}
@@ -184,7 +184,7 @@ async function main() {
184
184
  originalExit(1);
185
185
  return;
186
186
  }
187
- const { workflowsModulePath, toolsModulePath, workflowName, args, input, replayMode = false, checkpoint = 0, history = [], agentState, toolMockConfig, aiMockConfig, promptMockConfig } = payload;
187
+ const { workflowsModulePath, toolsModulePath, workflowName, args, input, replayMode = false, checkpoint = 0, history = [], agentState, toolMockConfig, aiMockConfig, promptMockConfig, userPromptMockConfig } = payload;
188
188
  const { context, finalise } = startTraceSession();
189
189
  setCurrentTrace(context.trace);
190
190
  const recorder = new TraceRecorder();
@@ -223,6 +223,9 @@ async function main() {
223
223
  globalThis.__ELASTICDASH_AI_MOCKS__ = aiMockConfig ?? {};
224
224
  globalThis.__ELASTICDASH_AI_CALL_COUNTERS__ = {};
225
225
  globalThis.__ELASTICDASH_PROMPT_MOCKS__ = promptMockConfig ?? {};
226
+ globalThis.__ELASTICDASH_PROMPT_CALL_COUNTERS__ = {};
227
+ globalThis.__ELASTICDASH_USER_PROMPT_MOCKS__ = userPromptMockConfig ?? {};
228
+ globalThis.__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__ = {};
226
229
  await installDBAutoInterceptor();
227
230
  installAIInterceptor();
228
231
  interceptFetch();
@@ -289,6 +292,9 @@ async function main() {
289
292
  delete globalThis.__ELASTICDASH_AI_MOCKS__;
290
293
  delete globalThis.__ELASTICDASH_AI_CALL_COUNTERS__;
291
294
  delete globalThis.__ELASTICDASH_PROMPT_MOCKS__;
295
+ delete globalThis.__ELASTICDASH_PROMPT_CALL_COUNTERS__;
296
+ delete globalThis.__ELASTICDASH_USER_PROMPT_MOCKS__;
297
+ delete globalThis.__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__;
292
298
  }
293
299
  await recorder.flush();
294
300
  const traceData = {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-runner-worker.js","sourceRoot":"","sources":["../src/workflow-runner-worker.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,CAAC;AAAC,UAAkB,CAAC,sBAAsB,GAAG,IAAI,CAAA;AAElD,iDAAiD;AACjD,OAAO,eAAe,CAAA;AACtB;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC7H,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIxC,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,uBAAuB,GAAG,qCAAqC,CAAA;AAErE,KAAK,UAAU,SAAS;IACtB,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,GAAG,IAAI,KAAK,CAAA;IACd,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AAGD,MAAM,aAAa,GAAG,yBAAyB,CAAA;AAE/C,MAAM,OAAO,GAAG,OAAQ,UAAkB,CAAC,IAAI,KAAK,WAAW,CAAA;AAE/D;;8EAE8E;AAC9E,SAAS,WAAW,CAAC,MAAe;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;YAClE,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;gBACpE,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAA;gBACX,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QACpE,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAwBD,0EAA0E;AAC1E,KAAK,UAAU,gBAAgB,CAC7B,eAAuB,EACvB,KAAkB,EAClB,cAA+B;IAE/B,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAA;QAClE,MAAM,OAAO,GAAiD,EAAE,CAAA;QAChE,sDAAsD;QACtD,MAAM,gBAAgB,GAA2B,EAAE,CAAA;QACnD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,EAAE,KAAK,UAAU;gBAAE,SAAQ;YACtC,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,CAAA;YACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,EAAkC,EAAE;gBAC5D,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;oBACzB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;oBACvD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAA;oBAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC3C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAA;oBAE1B,qDAAqD;oBACrD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;wBACvC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;wBAClD,IAAI,UAAU;4BAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;wBAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;wBACjD,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAA;wBACzF,OAAO,QAAQ,CAAA;oBACjB,CAAC;oBAED,iDAAiD;oBACjD,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC3C,iDAAiD;wBACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;4BAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;wBACvD,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAA;wBACxB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;wBAEzC,IAAI,UAAU,GAAG,KAAK,CAAA;wBACtB,IAAI,UAAmB,CAAA;wBAEvB,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BAClC,UAAU,GAAG,IAAI,CAAA;4BACjB,iEAAiE;4BACjE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAA;4BACrC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBAC1E,CAAC;6BAAM,IAAI,SAAS,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;4BAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,IAAI,EAAE,CAAA;4BAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gCACjC,UAAU,GAAG,IAAI,CAAA;gCACjB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAA;gCACrC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;4BAC/B,CAAC;wBACH,CAAC;wBAED,IAAI,UAAU,EAAE,CAAC;4BACf,IAAI,GAAG;gCAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;4BAClI,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAA;4BAC3F,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;wBACpC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,6CAA6C;wBAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;4BAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;wBACvD,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAA;oBAC1B,CAAC;oBAED,MAAM,CAAC,GAAG,UAAqC,CAAA;oBAC/C,MAAM,IAAI,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAA;oBACvC,MAAM,kBAAkB,GAAG,GAAG,EAAE;wBAC9B,IAAI,IAAI,KAAK,SAAS;4BAAE,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAA;;4BACpD,CAAC,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAA;oBACxC,CAAC,CAAA;oBAED,CAAC,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAA;oBAEjC,IAAI,MAAe,CAAA;oBACnB,IAAI,CAAC;wBACH,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;oBAC/C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,kBAAkB,EAAE,CAAA;wBACpB,MAAM,CAAC,CAAA;oBACT,CAAC;oBAED,IAAI,MAAM,IAAI,OAAQ,MAA2B,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACtE,OAAQ,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE;4BACtD,kBAAkB,EAAE,CAAA;4BACpB,MAAM,UAAU,GAAG,UAAU,EAAE,GAAG,KAAK,CAAA;4BACvC,IAAI,GAAG;gCAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;4BACtH,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;4BAC9F,OAAO,CAAC,CAAA;wBACV,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;4BACtB,kBAAkB,EAAE,CAAA;4BACpB,MAAM,UAAU,GAAG,UAAU,EAAE,GAAG,KAAK,CAAA;4BACvC,IAAI,GAAG;gCAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;4BACzI,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;4BACjH,MAAM,CAAC,CAAA;wBACT,CAAC,CAAC,CAAA;oBACJ,CAAC;oBACD,kBAAkB,EAAE,CAAA;oBACpB,MAAM,UAAU,GAAG,UAAU,EAAE,GAAG,KAAK,CAAA;oBACvC,IAAI,GAAG;wBAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;oBAC3H,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;oBAC3F,OAAO,MAAM,CAAA;gBACf,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,qFAAqF;IACrF,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAE/C,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAA;IAE7B,IAAI,OAiBH,CAAA;IACD,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAwB,CAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACtF,YAAY,CAAC,CAAC,CAAC,CAAA;QACf,OAAM;IACR,CAAC;IAED,MAAM,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAA;IAEjM,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,EAAE,CAAA;IACjD,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAE9B,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvC,uEAAuE;IACvE,mFAAmF;IACnF,6FAA6F;IAC7F,iFAAiF;IACjF,MAAM,OAAO,GAAG,MAAiC,CAAA;IACjD,MAAM,cAAc,GAA4B,EAAE,CAAA;IAClD,IAAI,YAAY,GAAiD,EAAE,CAAA;IAEnE,IAAI,eAAe,EAAE,CAAC;QACpB,YAAY,GAAG,MAAM,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QACrF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACtD,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;YACpC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED,iFAAiF;IACjF,mFAAmF;IACnF,8BAA8B;IAC9B,wJAAwJ;IACxJ,IAAI,eAAmC,CACtC;IAAC,OAA0B,CAAC,IAAI,GAAG,CAAC,IAAa,EAAE,EAAE;QACpD,eAAe,GAAG,IAAI,IAAI,CAAC,CAAA;QAC3B,OAAO,SAAkB,CAAA;IAC3B,CAAC,CAAA;IAED,IAAI,aAAsB,CAAA;IAC1B,IAAI,aAAgC,CAAA;IAEpC,IAAI,CAAC;QACH,0GAA0G;QAC1G,CAAC;QAAC,UAAkB,CAAC,0BAA0B,GAAG,cAAc,IAAI,EAAE,CACrE;QAAC,UAAkB,CAAC,kCAAkC,GAAG,EAAE,CAC3D;QAAC,UAAkB,CAAC,wBAAwB,GAAG,YAAY,IAAI,EAAE,CACjE;QAAC,UAAkB,CAAC,gCAAgC,GAAG,EAAE,CACzD;QAAC,UAAkB,CAAC,4BAA4B,GAAG,gBAAgB,IAAI,EAAE,CAAA;QAE1E,MAAM,wBAAwB,EAAE,CAAA;QAChC,oBAAoB,EAAE,CAAA;QACtB,cAAc,EAAE,CAAA;QAChB,eAAe,EAAE,CAAA;QACjB,gBAAgB,EAAE,CAAA;QAElB,IAAI,CAAC;YACH,IAAI,UAAU,EAAE,CAAC;gBACf,8EAA8E;gBAC9E,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAA;gBAC9F,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAA;gBACpE,IAAI,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU,EAAE,CAAC;oBACzD,MAAM,IAAI,KAAK,CAAC,yDAAyD,gBAAgB,EAAE,CAAC,CAAA;gBAC9F,CAAC;gBACD,aAAa,GAAG,MAAO,SAAS,CAAC,oBAA4D,CAAC,UAAU,CAAC,CAAA;gBACzG,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,aAAa,CAAC,CAAA;YACxF,CAAC;iBAAM,CAAC;gBACN,yBAAyB;gBACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAA;gBAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;gBAC7C,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;oBACrC,CAAC;oBAAC,OAA0B,CAAC,IAAI,GAAG,YAAY,CAAA;oBAChD,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,uDAAuD,EAAE,CAAC,CAAA;oBAChH,YAAY,CAAC,CAAC,CAAC,CAAA;oBACf,OAAM;gBACR,CAAC;gBACD,iFAAiF;gBACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBAC7C,aAAa,GAAG,MAAO,UAA2C,CAAC,GAAG,QAAQ,CAAC,CAAA;gBAC/E,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,aAAa,CAAC,CAAA,CAAE,yBAAyB;YACzG,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,sBAAsB,EAAE,CAAA;YACxB,YAAY,EAAE,CAAA;YACd,aAAa,EAAE,CAAA;YACf,cAAc,EAAE,CAAA;YAChB,0BAA0B,EAAE,CAAA;QAC9B,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;YAAS,CAAC;QACT,0DAA0D;QAC1D,CAAC;QAAC,OAA0B,CAAC,IAAI,GAAG,YAAY,CAAA;QAEhD,2BAA2B;QAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA;YAC1B,CAAC;QACH,CAAC;QACD,eAAe,CAAC,SAAS,CAAC,CAAA;QAC1B,iBAAiB,CAAC,SAAS,CAAC,CAAA;QAC5B,QAAQ,EAAE,CAAA;QAEV,qBAAqB;QACrB,OAAQ,UAAkB,CAAC,0BAA0B,CAAA;QACrD,OAAQ,UAAkB,CAAC,kCAAkC,CAAA;QAC7D,OAAQ,UAAkB,CAAC,wBAAwB,CAAA;QACnD,OAAQ,UAAkB,CAAC,gCAAgC,CAAA;QAC3D,OAAQ,UAAkB,CAAC,4BAA4B,CAAA;IACzD,CAAC;IAED,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IAEtB,MAAM,SAAS,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;QACrC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE;QACvC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE;QAC3C,aAAa,EAAE,QAAQ,CAAC,OAAO,EAAE;KAClC,CAAA;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;QACrG,YAAY,CAAC,eAAe,IAAI,CAAC,CAAC,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC,CAAA;QAC5D,YAAY,CAAC,eAAe,IAAI,CAAC,CAAC,CAAA;IACpC,CAAC;AACH,CAAC;AAGD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IACnF,CAAC;AACH,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"workflow-runner-worker.js","sourceRoot":"","sources":["../src/workflow-runner-worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elasticdash-test",
3
- "version": "0.1.16",
3
+ "version": "0.1.17-alpha-2",
4
4
  "description": "AI-native test runner for ElasticDash workflow testing",
5
5
  "type": "module",
6
6
  "bin": {
@@ -122,6 +122,7 @@ interface WorkflowValidationBody {
122
122
  toolMockConfig?: unknown
123
123
  aiMockConfig?: unknown
124
124
  promptMockConfig?: unknown
125
+ userPromptMockConfig?: unknown
125
126
  }
126
127
 
127
128
  interface ValidationRunTrace {
@@ -284,6 +285,27 @@ function buildToolArgs(input: unknown, tool?: ToolInfo): unknown[] {
284
285
  return [input]
285
286
  }
286
287
 
288
+ /**
289
+ * Flatten structured prompt mock config to simple Record<string, string> for HTTP mode.
290
+ * Accepts both the new structured format { mode, replacement } and legacy string values.
291
+ * Only entries with mode !== 'live' (or plain string entries) are included.
292
+ */
293
+ function flattenPromptMockConfig(raw: unknown): Record<string, string> {
294
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return {}
295
+ const result: Record<string, string> = {}
296
+ for (const [key, val] of Object.entries(raw as Record<string, unknown>)) {
297
+ if (typeof val === 'string') {
298
+ result[key] = val
299
+ } else if (val && typeof val === 'object' && 'replacement' in val) {
300
+ const entry = val as { mode?: string; replacement?: string }
301
+ if (entry.mode !== 'live' && typeof entry.replacement === 'string') {
302
+ result[key] = entry.replacement
303
+ }
304
+ }
305
+ }
306
+ return result
307
+ }
308
+
287
309
  function formatError(error: unknown): string {
288
310
  if (error instanceof Error) return error.message
289
311
  try {
@@ -385,7 +407,16 @@ function runWorkflowInSubprocess(
385
407
  workflowName: string,
386
408
  args: unknown[],
387
409
  input: unknown,
388
- options?: { replayMode?: boolean; checkpoint?: number; history?: WorkflowEvent[]; agentState?: AgentState; toolMockConfig?: ToolMockConfig; aiMockConfig?: AIMockConfig; promptMockConfig?: Record<string, string> },
410
+ options?: {
411
+ replayMode?: boolean;
412
+ checkpoint?: number;
413
+ history?: WorkflowEvent[];
414
+ agentState?: AgentState;
415
+ toolMockConfig?: ToolMockConfig;
416
+ aiMockConfig?: AIMockConfig;
417
+ promptMockConfig?: Record<string, unknown>;
418
+ userPromptMockConfig?: Record<string, unknown>
419
+ },
389
420
  ): Promise<WorkflowSubprocessResult> {
390
421
  return new Promise((resolve) => {
391
422
  const workerScript = new URL('./workflow-runner-worker.js', import.meta.url).pathname
@@ -475,6 +506,7 @@ function runWorkflowInSubprocess(
475
506
  ...(options?.toolMockConfig !== undefined ? { toolMockConfig: options.toolMockConfig } : {}),
476
507
  ...(options?.aiMockConfig !== undefined ? { aiMockConfig: options.aiMockConfig } : {}),
477
508
  ...(options?.promptMockConfig !== undefined ? { promptMockConfig: options.promptMockConfig } : {}),
509
+ ...(options?.userPromptMockConfig !== undefined ? { userPromptMockConfig: options.userPromptMockConfig } : {}),
478
510
  })
479
511
  child.stdin.write(payload)
480
512
  child.stdin.end() // Always close stdin to avoid subprocess hang
@@ -539,8 +571,9 @@ async function runGenerationObservation(observation: DashboardObservation): Prom
539
571
  async function rerunObservation(cwd: string, observation: DashboardObservation, tools: ToolInfo[]): Promise<RerunResult> {
540
572
  const type = observation.type?.toUpperCase()
541
573
  const name = observation.name ?? '(unknown)'
542
- if (type === 'TOOL' || name.startsWith('tool-')) {
543
- observation.name = name.startsWith('tool-') ? name.slice(5) : name // Support both explicit type and name prefix for tool observations
574
+ const isToolByName = name.startsWith('tool-') || name.startsWith('tool:')
575
+ if (type === 'TOOL' || isToolByName) {
576
+ observation.name = isToolByName ? name.slice(5) : name // Support both explicit type and name prefix for tool observations
544
577
  return runToolObservation(cwd, observation, tools)
545
578
  }
546
579
  if (type === 'GENERATION') {
@@ -848,9 +881,15 @@ async function validateWorkflowRuns(cwd: string, body: WorkflowValidationBody):
848
881
  : undefined
849
882
 
850
883
  // Parse prompt mock config if provided
851
- const promptMockConfig: Record<string, string> | undefined =
884
+ const promptMockConfig: Record<string, unknown> | undefined =
852
885
  body.promptMockConfig && typeof body.promptMockConfig === 'object' && !Array.isArray(body.promptMockConfig)
853
- ? body.promptMockConfig as Record<string, string>
886
+ ? body.promptMockConfig as Record<string, unknown>
887
+ : undefined
888
+
889
+ // Parse user prompt mock config if provided
890
+ const userPromptMockConfig: Record<string, unknown> | undefined =
891
+ body.userPromptMockConfig && typeof body.userPromptMockConfig === 'object' && !Array.isArray(body.userPromptMockConfig)
892
+ ? body.userPromptMockConfig as Record<string, unknown>
854
893
  : undefined
855
894
 
856
895
  const workflowsModulePath = resolveWorkflowModule(cwd)
@@ -877,7 +916,7 @@ async function validateWorkflowRuns(cwd: string, body: WorkflowValidationBody):
877
916
  workflowName,
878
917
  workflowArgs,
879
918
  workflowInput,
880
- (toolMockConfig || aiMockConfig || promptMockConfig) ? { ...(toolMockConfig ? { toolMockConfig } : {}), ...(aiMockConfig ? { aiMockConfig } : {}), ...(promptMockConfig ? { promptMockConfig } : {}) } : undefined,
919
+ (toolMockConfig || aiMockConfig || promptMockConfig || userPromptMockConfig) ? { ...(toolMockConfig ? { toolMockConfig } : {}), ...(aiMockConfig ? { aiMockConfig } : {}), ...(promptMockConfig ? { promptMockConfig } : {}), ...(userPromptMockConfig ? { userPromptMockConfig } : {}) } : undefined,
881
920
  )
882
921
  .catch(err => {
883
922
  throw { ok: false, error: `Workflow subprocess failed: ${formatError(err)}` }
@@ -1328,19 +1367,22 @@ interface HttpWorkflowRunOptions {
1328
1367
  workflowInput: unknown
1329
1368
  frozenEvents?: WorkflowEvent[]
1330
1369
  promptMocks?: Record<string, string>
1370
+ userPromptMocks?: Record<string, unknown>
1371
+ toolMockConfig?: ToolMockConfig
1372
+ aiMockConfig?: AIMockConfig
1331
1373
  pushedEvents: Map<string, WorkflowEvent[]>
1332
- runConfigs: Map<string, { frozenEvents: WorkflowEvent[]; promptMocks: Record<string, string> }>
1374
+ runConfigs: Map<string, { frozenEvents: WorkflowEvent[]; promptMocks: Record<string, string>; userPromptMocks?: Record<string, unknown>; toolMockConfig?: ToolMockConfig; aiMockConfig?: AIMockConfig }>
1333
1375
  config: HttpWorkflowConfig
1334
1376
  dashboardPort: number
1335
1377
  }
1336
1378
 
1337
1379
  async function runHttpWorkflow(opts: HttpWorkflowRunOptions): Promise<WorkflowSubprocessResult> {
1338
- const { workflowName, workflowInput, frozenEvents = [], promptMocks = {}, pushedEvents, runConfigs, config, dashboardPort } = opts
1380
+ const { workflowName, workflowInput, frozenEvents = [], promptMocks = {}, userPromptMocks, toolMockConfig, aiMockConfig, pushedEvents, runConfigs, config, dashboardPort } = opts
1339
1381
  const runId = randomUUID()
1340
1382
 
1341
- // Register run config so the user's server can fetch frozen events and prompt mocks
1383
+ // Register run config so the user's server can fetch frozen events, prompt mocks, and output mocks
1342
1384
  pushedEvents.set(runId, [])
1343
- runConfigs.set(runId, { frozenEvents, promptMocks })
1385
+ runConfigs.set(runId, { frozenEvents, promptMocks, userPromptMocks, toolMockConfig, aiMockConfig })
1344
1386
 
1345
1387
  try {
1346
1388
  const parsedInput = parseObservationInput(workflowInput)
@@ -1422,7 +1464,7 @@ export async function startDashboardServer(
1422
1464
 
1423
1465
  // Per-run config for HTTP workflow mode (frozen events + prompt mocks for replay).
1424
1466
  // Maps runId -> { frozenEvents, promptMocks }
1425
- const runConfigs = new Map<string, { frozenEvents: WorkflowEvent[]; promptMocks: Record<string, string> }>()
1467
+ const runConfigs = new Map<string, { frozenEvents: WorkflowEvent[]; promptMocks: Record<string, string>; userPromptMocks?: Record<string, unknown>; toolMockConfig?: ToolMockConfig; aiMockConfig?: AIMockConfig }>()
1426
1468
 
1427
1469
  // Scan workflows, tools, and config once at startup
1428
1470
  const workflows = scanWorkflows(cwd)
@@ -1484,15 +1526,24 @@ export async function startDashboardServer(
1484
1526
  const resolvedInput = resolveWorkflowArgsFromObservations(body, workflowName)
1485
1527
  const workflowInput = resolvedInput.input ?? null
1486
1528
  const traces: ValidationRunTrace[] = []
1487
- const promptMocks: Record<string, string> =
1488
- body.promptMockConfig && typeof body.promptMockConfig === 'object' && !Array.isArray(body.promptMockConfig)
1489
- ? body.promptMockConfig as Record<string, string>
1490
- : {}
1529
+ const promptMocks: Record<string, string> = flattenPromptMockConfig(body.promptMockConfig)
1530
+ const valUserPromptMocks: Record<string, unknown> | undefined =
1531
+ body.userPromptMockConfig && typeof body.userPromptMockConfig === 'object' && !Array.isArray(body.userPromptMockConfig)
1532
+ ? body.userPromptMockConfig as Record<string, unknown>
1533
+ : undefined
1534
+ const valToolMockConfig: ToolMockConfig | undefined =
1535
+ body.toolMockConfig && typeof body.toolMockConfig === 'object' && !Array.isArray(body.toolMockConfig)
1536
+ ? body.toolMockConfig as ToolMockConfig
1537
+ : undefined
1538
+ const valAiMockConfig: AIMockConfig | undefined =
1539
+ body.aiMockConfig && typeof body.aiMockConfig === 'object' && !Array.isArray(body.aiMockConfig)
1540
+ ? body.aiMockConfig as AIMockConfig
1541
+ : undefined
1491
1542
  const runOne = async (runNumber: number): Promise<ValidationRunTrace> => {
1492
1543
  const result = await runHttpWorkflow({
1493
1544
  workflowName, workflowInput, pushedEvents, runConfigs,
1494
1545
  config: httpConfig as HttpWorkflowConfig, dashboardPort: port,
1495
- promptMocks,
1546
+ promptMocks, userPromptMocks: valUserPromptMocks, toolMockConfig: valToolMockConfig, aiMockConfig: valAiMockConfig,
1496
1547
  })
1497
1548
  const traceStub = { getSteps: () => [], getLLMSteps: () => [], getToolCalls: () => [], getCustomSteps: () => [], recordLLMStep: () => {}, recordToolCall: () => {}, recordCustomStep: () => {} }
1498
1549
  return {
@@ -1534,6 +1585,7 @@ export async function startDashboardServer(
1534
1585
  toolMockConfig?: unknown
1535
1586
  aiMockConfig?: unknown
1536
1587
  promptMockConfig?: unknown
1588
+ userPromptMockConfig?: unknown
1537
1589
  }
1538
1590
  const workflowName = typeof body.workflowName === 'string' ? body.workflowName.trim() : ''
1539
1591
  if (!workflowName) {
@@ -1568,15 +1620,25 @@ export async function startDashboardServer(
1568
1620
  const httpConfig = elasticdashConfig.workflows?.[workflowName]
1569
1621
  if (httpConfig?.mode === 'http') {
1570
1622
  // HTTP workflow mode — call user's dev server with frozen events + prompt mocks for step replay
1571
- const bpPromptMocks: Record<string, string> =
1572
- body.promptMockConfig && typeof body.promptMockConfig === 'object' && !Array.isArray(body.promptMockConfig)
1573
- ? body.promptMockConfig as Record<string, string>
1574
- : {}
1623
+ const bpPromptMocks: Record<string, string> = flattenPromptMockConfig(body.promptMockConfig)
1624
+ const bpUserPromptMocks: Record<string, unknown> | undefined =
1625
+ body.userPromptMockConfig && typeof body.userPromptMockConfig === 'object' && !Array.isArray(body.userPromptMockConfig)
1626
+ ? body.userPromptMockConfig as Record<string, unknown>
1627
+ : undefined
1628
+ const bpToolMockConfig: ToolMockConfig | undefined =
1629
+ body.toolMockConfig && typeof body.toolMockConfig === 'object' && !Array.isArray(body.toolMockConfig)
1630
+ ? body.toolMockConfig as ToolMockConfig
1631
+ : undefined
1632
+ const bpAiMockConfig: AIMockConfig | undefined =
1633
+ body.aiMockConfig && typeof body.aiMockConfig === 'object' && !Array.isArray(body.aiMockConfig)
1634
+ ? body.aiMockConfig as AIMockConfig
1635
+ : undefined
1575
1636
  console.log(`[elasticdash] Run from breakpoint (HTTP mode): workflow="${workflowName}" checkpoint=${checkpoint} frozen=${frozenEvents.length}`)
1576
1637
  const result = await runHttpWorkflow({
1577
1638
  workflowName, workflowInput, pushedEvents, runConfigs,
1578
1639
  config: httpConfig as HttpWorkflowConfig, dashboardPort: port,
1579
- frozenEvents, promptMocks: bpPromptMocks,
1640
+ frozenEvents, promptMocks: bpPromptMocks, userPromptMocks: bpUserPromptMocks,
1641
+ toolMockConfig: bpToolMockConfig, aiMockConfig: bpAiMockConfig,
1580
1642
  })
1581
1643
  const traceStub = { getSteps: () => [], getLLMSteps: () => [], getToolCalls: () => [], getCustomSteps: () => [], recordLLMStep: () => {}, recordToolCall: () => {}, recordCustomStep: () => {} }
1582
1644
  const snapshotId = result.workflowTrace ? saveSnapshot(cwd, result.workflowTrace) : undefined
@@ -1614,9 +1676,14 @@ export async function startDashboardServer(
1614
1676
  ? body.aiMockConfig as AIMockConfig
1615
1677
  : undefined
1616
1678
 
1617
- const promptMockConfig: Record<string, string> | undefined =
1679
+ const promptMockConfig: Record<string, unknown> | undefined =
1618
1680
  body.promptMockConfig && typeof body.promptMockConfig === 'object' && !Array.isArray(body.promptMockConfig)
1619
- ? body.promptMockConfig as Record<string, string>
1681
+ ? body.promptMockConfig as Record<string, unknown>
1682
+ : undefined
1683
+
1684
+ const userPromptMockConfig: Record<string, unknown> | undefined =
1685
+ body.userPromptMockConfig && typeof body.userPromptMockConfig === 'object' && !Array.isArray(body.userPromptMockConfig)
1686
+ ? body.userPromptMockConfig as Record<string, unknown>
1620
1687
  : undefined
1621
1688
 
1622
1689
  console.log(`[elasticdash] Run from breakpoint: workflow="${workflowName}" checkpoint=${checkpoint} historyLen=${history.length}`)
@@ -1626,7 +1693,7 @@ export async function startDashboardServer(
1626
1693
  workflowName,
1627
1694
  workflowArgs,
1628
1695
  workflowInput,
1629
- { replayMode: true, checkpoint, history, ...(toolMockConfig ? { toolMockConfig } : {}), ...(aiMockConfig ? { aiMockConfig } : {}), ...(promptMockConfig ? { promptMockConfig } : {}) },
1696
+ { replayMode: true, checkpoint, history, ...(toolMockConfig ? { toolMockConfig } : {}), ...(aiMockConfig ? { aiMockConfig } : {}), ...(promptMockConfig ? { promptMockConfig } : {}), ...(userPromptMockConfig ? { userPromptMockConfig } : {}) },
1630
1697
  )
1631
1698
 
1632
1699
  const traceStub = {
@@ -1669,6 +1736,7 @@ export async function startDashboardServer(
1669
1736
  toolMockConfig?: unknown
1670
1737
  aiMockConfig?: unknown
1671
1738
  promptMockConfig?: unknown
1739
+ userPromptMockConfig?: unknown
1672
1740
  }
1673
1741
 
1674
1742
  const workflowName = typeof body.workflowName === 'string' ? body.workflowName.trim() : ''
@@ -1720,9 +1788,14 @@ export async function startDashboardServer(
1720
1788
  ? body.aiMockConfig as AIMockConfig
1721
1789
  : undefined
1722
1790
 
1723
- const promptMockConfig: Record<string, string> | undefined =
1791
+ const promptMockConfig: Record<string, unknown> | undefined =
1724
1792
  body.promptMockConfig && typeof body.promptMockConfig === 'object' && !Array.isArray(body.promptMockConfig)
1725
- ? body.promptMockConfig as Record<string, string>
1793
+ ? body.promptMockConfig as Record<string, unknown>
1794
+ : undefined
1795
+
1796
+ const userPromptMockConfig: Record<string, unknown> | undefined =
1797
+ body.userPromptMockConfig && typeof body.userPromptMockConfig === 'object' && !Array.isArray(body.userPromptMockConfig)
1798
+ ? body.userPromptMockConfig as Record<string, unknown>
1726
1799
  : undefined
1727
1800
 
1728
1801
  console.log(`[elasticdash] Resume agent from task: workflow="${workflowName}" taskIndex=${taskIndex}`)
@@ -1733,7 +1806,7 @@ export async function startDashboardServer(
1733
1806
  workflowName,
1734
1807
  [],
1735
1808
  null,
1736
- { replayMode: history.length > 0, checkpoint: 0, history, agentState, ...(toolMockConfig ? { toolMockConfig } : {}), ...(aiMockConfig ? { aiMockConfig } : {}), ...(promptMockConfig ? { promptMockConfig } : {}) },
1809
+ { replayMode: history.length > 0, checkpoint: 0, history, agentState, ...(toolMockConfig ? { toolMockConfig } : {}), ...(aiMockConfig ? { aiMockConfig } : {}), ...(promptMockConfig ? { promptMockConfig } : {}), ...(userPromptMockConfig ? { userPromptMockConfig } : {}) },
1737
1810
  )
1738
1811
 
1739
1812
  const traceStub = {
@@ -1783,7 +1856,7 @@ export async function startDashboardServer(
1783
1856
  const runId = url.pathname.slice('/api/run-configs/'.length)
1784
1857
  const cfg = runConfigs.get(runId)
1785
1858
  res.writeHead(cfg ? 200 : 404, { 'Content-Type': 'application/json' })
1786
- res.end(JSON.stringify({ frozenEvents: cfg?.frozenEvents ?? [], promptMocks: cfg?.promptMocks ?? {} }))
1859
+ res.end(JSON.stringify({ frozenEvents: cfg?.frozenEvents ?? [], promptMocks: cfg?.promptMocks ?? {}, ...(cfg?.userPromptMocks ? { userPromptMocks: cfg.userPromptMocks } : {}), ...(cfg?.toolMockConfig ? { toolMockConfig: cfg.toolMockConfig } : {}), ...(cfg?.aiMockConfig ? { aiMockConfig: cfg.aiMockConfig } : {}) }))
1787
1860
  } else if (url.pathname === '/api/trace-events' && req.method === 'POST') {
1788
1861
  // Receive telemetry events pushed from wrapAI / wrapTool in HTTP workflow mode
1789
1862
  ;(async () => {