elasticdash-sdk 0.2.0 → 0.2.5

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 (49) hide show
  1. package/dist/cli.js +86 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/execution/tool-runner.d.ts.map +1 -1
  4. package/dist/execution/tool-runner.js +16 -7
  5. package/dist/execution/tool-runner.js.map +1 -1
  6. package/dist/index.cjs +161 -11
  7. package/dist/index.d.ts +2 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/interceptors/http.d.ts.map +1 -1
  12. package/dist/interceptors/http.js +75 -2
  13. package/dist/interceptors/http.js.map +1 -1
  14. package/dist/interceptors/telemetry-push.d.ts +22 -0
  15. package/dist/interceptors/telemetry-push.d.ts.map +1 -1
  16. package/dist/interceptors/telemetry-push.js +81 -0
  17. package/dist/interceptors/telemetry-push.js.map +1 -1
  18. package/dist/interceptors/tool.d.ts.map +1 -1
  19. package/dist/interceptors/tool.js +35 -1
  20. package/dist/interceptors/tool.js.map +1 -1
  21. package/dist/internals/errors.d.ts +10 -0
  22. package/dist/internals/errors.d.ts.map +1 -0
  23. package/dist/internals/errors.js +14 -0
  24. package/dist/internals/errors.js.map +1 -0
  25. package/dist/internals/mock-resolver.d.ts +5 -0
  26. package/dist/internals/mock-resolver.d.ts.map +1 -1
  27. package/dist/internals/mock-resolver.js +26 -3
  28. package/dist/internals/mock-resolver.js.map +1 -1
  29. package/dist/observability.d.ts.map +1 -1
  30. package/dist/observability.js +9 -0
  31. package/dist/observability.js.map +1 -1
  32. package/dist/workflow-runner-worker.js +16 -3
  33. package/dist/workflow-runner-worker.js.map +1 -1
  34. package/dist/workflow-runner.d.ts.map +1 -1
  35. package/dist/workflow-runner.js +11 -0
  36. package/dist/workflow-runner.js.map +1 -1
  37. package/docs/partial-mocking.md +191 -0
  38. package/package.json +1 -1
  39. package/src/cli.ts +87 -2
  40. package/src/execution/tool-runner.ts +16 -7
  41. package/src/index.ts +4 -0
  42. package/src/interceptors/http.ts +66 -1
  43. package/src/interceptors/telemetry-push.ts +80 -0
  44. package/src/interceptors/tool.ts +33 -1
  45. package/src/internals/errors.ts +14 -0
  46. package/src/internals/mock-resolver.ts +25 -3
  47. package/src/observability.ts +10 -0
  48. package/src/workflow-runner-worker.ts +18 -2
  49. package/src/workflow-runner.ts +9 -0
@@ -23,6 +23,7 @@ import { interceptFetch, restoreFetch } from './interceptors/http.js';
23
23
  import { interceptRandom, restoreRandom, interceptDateNow, restoreDateNow, rawDateNow } from './interceptors/side-effects.js';
24
24
  import { installDBAutoInterceptor, uninstallDBAutoInterceptor } from './interceptors/db-auto.js';
25
25
  import { pathToFileURL } from 'node:url';
26
+ import { ElasticdashStrictModeError } from './internals/errors.js';
26
27
  import fs from 'node:fs';
27
28
  const TOOL_WRAPPER_ACTIVE_KEY = '__elasticdash_tool_wrapper_active__';
28
29
  async function readStdin() {
@@ -60,7 +61,7 @@ function writeResult(result) {
60
61
  });
61
62
  }
62
63
  /** Minimal inline tool-wrapping — records each tool call to the trace. */
63
- async function loadAndWrapTools(toolsModulePath, trace, toolMockConfig) {
64
+ async function loadAndWrapTools(toolsModulePath, trace, toolMockConfig, strict) {
64
65
  try {
65
66
  // Use absolute file URL for ESM import
66
67
  const toolsMod = await import(pathToFileURL(toolsModulePath).href);
@@ -122,6 +123,16 @@ async function loadAndWrapTools(toolsModulePath, trace, toolMockConfig) {
122
123
  toolCallCounters[name] = 0;
123
124
  toolCallCounters[name]++;
124
125
  }
126
+ // Strict mode: no replay match, no mock hit → fail closed and
127
+ // record the failed call so envelopes/trace surfaces show why.
128
+ if (strict) {
129
+ const err = new ElasticdashStrictModeError(name);
130
+ const durationMs = rawDateNow() - start;
131
+ if (ctx)
132
+ ctx.recorder.record({ id, type: 'tool', name, input: recordedArgs, output: { error: err.message }, timestamp: start, durationMs });
133
+ trace.recordToolCall({ name, args: recordedArgs, result: { error: err.message }, workflowEventId: id, durationMs });
134
+ throw err;
135
+ }
125
136
  const g = globalThis;
126
137
  const prev = g[TOOL_WRAPPER_ACTIVE_KEY];
127
138
  const restoreWrapperFlag = () => {
@@ -184,7 +195,7 @@ async function main() {
184
195
  originalExit(1);
185
196
  return;
186
197
  }
187
- const { workflowsModulePath, toolsModulePath, workflowName, args, input, replayMode = false, checkpoint = 0, history = [], agentState, toolMockConfig, aiMockConfig, promptMockConfig, userPromptMockConfig } = payload;
198
+ const { workflowsModulePath, toolsModulePath, workflowName, args, input, replayMode = false, checkpoint = 0, history = [], agentState, toolMockConfig, aiMockConfig, promptMockConfig, userPromptMockConfig, strict } = payload;
188
199
  const { context, finalise } = startTraceSession();
189
200
  setCurrentTrace(context.trace);
190
201
  const recorder = new TraceRecorder();
@@ -198,7 +209,7 @@ async function main() {
198
209
  const originalValues = {};
199
210
  let wrappedTools = {};
200
211
  if (toolsModulePath) {
201
- wrappedTools = await loadAndWrapTools(toolsModulePath, context.trace, toolMockConfig);
212
+ wrappedTools = await loadAndWrapTools(toolsModulePath, context.trace, toolMockConfig, strict);
202
213
  for (const [name, fn] of Object.entries(wrappedTools)) {
203
214
  originalValues[name] = globals[name];
204
215
  globals[name] = fn;
@@ -226,6 +237,7 @@ async function main() {
226
237
  globalThis.__ELASTICDASH_PROMPT_CALL_COUNTERS__ = {};
227
238
  globalThis.__ELASTICDASH_USER_PROMPT_MOCKS__ = userPromptMockConfig ?? {};
228
239
  globalThis.__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__ = {};
240
+ globalThis.__ELASTICDASH_STRICT__ = strict === true;
229
241
  await installDBAutoInterceptor();
230
242
  installAIInterceptor();
231
243
  interceptFetch();
@@ -295,6 +307,7 @@ async function main() {
295
307
  delete globalThis.__ELASTICDASH_PROMPT_CALL_COUNTERS__;
296
308
  delete globalThis.__ELASTICDASH_USER_PROMPT_MOCKS__;
297
309
  delete globalThis.__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__;
310
+ delete globalThis.__ELASTICDASH_STRICT__;
298
311
  }
299
312
  await recorder.flush();
300
313
  const traceData = {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-runner-worker.js","sourceRoot":"","sources":["../src/workflow-runner-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-runner-worker.js","sourceRoot":"","sources":["../src/workflow-runner-worker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAkC/B"}
1
+ {"version":3,"file":"workflow-runner.d.ts","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEtE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA2C/B"}
@@ -21,6 +21,17 @@ export async function runWorkflow(workflowFn, options = {}) {
21
21
  await maybeCaptureTrace(trace.events, trace.traceId);
22
22
  return { result, trace };
23
23
  }
24
+ catch (e) {
25
+ // Attach the partial trace so the caller can include any events recorded
26
+ // before the throw (e.g. strict-mode tool calls that fail-closed).
27
+ try {
28
+ await recorder.flush();
29
+ const trace = recorder.toTrace();
30
+ e.trace = trace;
31
+ }
32
+ catch { /* best-effort */ }
33
+ throw e;
34
+ }
24
35
  finally {
25
36
  if (interceptHttp)
26
37
  restoreFetch();
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-runner.js","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxE,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,MAAM,gCAAgC,CAAA;AACjH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAgBxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA4B,EAC5B,UAA8B,EAAE;IAEhC,MAAM,EACJ,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,EACpB,oBAAoB,GAAG,IAAI,GAC5B,GAAG,OAAO,CAAA;IAEX,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAEpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvC,IAAI,aAAa;QAAE,cAAc,EAAE,CAAA;IACnC,IAAI,oBAAoB,EAAE,CAAC;QACzB,eAAe,EAAE,CAAA;QACjB,gBAAgB,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;QACjC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC1B,CAAC;YAAS,CAAC;QACT,IAAI,aAAa;YAAE,YAAY,EAAE,CAAA;QACjC,IAAI,oBAAoB,EAAE,CAAC;YACzB,aAAa,EAAE,CAAA;YACf,cAAc,EAAE,CAAA;QAClB,CAAC;QACD,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"workflow-runner.js","sourceRoot":"","sources":["../src/workflow-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACxE,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,MAAM,gCAAgC,CAAA;AACjH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAgBxD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA4B,EAC5B,UAA8B,EAAE;IAEhC,MAAM,EACJ,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,CAAC,EACd,OAAO,GAAG,EAAE,EACZ,aAAa,GAAG,IAAI,EACpB,oBAAoB,GAAG,IAAI,GAC5B,GAAG,OAAO,CAAA;IAEX,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAEpE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEvC,IAAI,aAAa;QAAE,cAAc,EAAE,CAAA;IACnC,IAAI,oBAAoB,EAAE,CAAC;QACzB,eAAe,EAAE,CAAA;QACjB,gBAAgB,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;QACjC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;QAChC,MAAM,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACpD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,CAC/B;YAAC,CAA+B,CAAC,KAAK,GAAG,KAAK,CAAA;QACjD,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAA;IACT,CAAC;YAAS,CAAC;QACT,IAAI,aAAa;YAAE,YAAY,EAAE,CAAA;QACjC,IAAI,oBAAoB,EAAE,CAAC;YACzB,aAAa,EAAE,CAAA;YACf,cAAc,EAAE,CAAA;QAClB,CAAC;QACD,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,191 @@
1
+ # Partial Mocking (SDK)
2
+
3
+ This is the SDK-side reference. For the user-facing surface (how to actually request a partial-mock rerun via the MCP), see the [MCP partial-mocking guide](https://github.com/jiangjiahao/ElasticDash-MCP/blob/main/docs/partial-mocking.md).
4
+
5
+ The SDK provides three pieces:
6
+
7
+ 1. **`--mock-config-file <path>`** on `elasticdash run-workflow` — feeds the CLI subprocess with a mock config.
8
+ 2. **`ElasticdashStrictModeError`** — thrown by `wrapTool` when strict mode is on and a tool call isn't covered by a mock.
9
+ 3. **`applyInboundMockConfig(req)`** — exported helper for **HTTP-mode workflows**: reads the `x-elasticdash-mock-config` header set by the CLI's `fetch` interceptor and seeds per-request mocks inside the receiving server process.
10
+
11
+ ---
12
+
13
+ ## Mock config file shape
14
+
15
+ The MCP writes this for you. You only hand-write it for ad-hoc CLI testing.
16
+
17
+ ```json
18
+ {
19
+ "default_mode": "mockAll",
20
+ "strict": true,
21
+ "toolMockConfig": {
22
+ "searchPokemon": {
23
+ "mode": "mock-all",
24
+ "mockData": {
25
+ "1": { "results": [...] },
26
+ "2": { "results": [...] }
27
+ }
28
+ },
29
+ "sendEmail": { "mode": "live" }
30
+ },
31
+ "aiMockConfig": {
32
+ "claude-sonnet-4-5": {
33
+ "mode": "mock-all",
34
+ "mockData": { "1": "<recorded response text>" }
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ | Field | Meaning |
41
+ |---|---|
42
+ | `default_mode: "mockAll"` | Implies `strict: true`. Anything not covered by `toolMockConfig` throws. |
43
+ | `default_mode: "liveAll"` | Inverse: live by default, mock only what's listed. `strict` defaults to `false`. |
44
+ | `mode: "mock-all"` + `mockData["N"]` | The Nth call to this tool returns `mockData["N"]`. 1-based call index. |
45
+ | `mode: "live"` | Explicit allowlist marker. Tool runs live AND bypasses strict mode. |
46
+ | `mode: "mock-specific"` + `callIndices: [...]` | Only mock specific indices; others run live. |
47
+
48
+ **Important**: `mockData["N"]` is returned verbatim. The caller usually destructures fields. If your mock is missing fields the downstream code reads, you'll see confusing behavior — not a mock failure, just incomplete mock data. Mirror your tool's real return type. Or use the MCP, which auto-fills every field from a trace.
49
+
50
+ ---
51
+
52
+ ## Pattern A — In-process workflows
53
+
54
+ If your workflow body imports and calls wrapped tools directly:
55
+
56
+ ```ts
57
+ import { searchPokemon } from './ed_tools';
58
+
59
+ export async function lookupFlow(input: { name: string }) {
60
+ return await searchPokemon({ searchterm: input.name });
61
+ }
62
+ ```
63
+
64
+ …then `--mock-config-file` Just Works. The CLI seeds `globalThis.__ELASTICDASH_TOOL_MOCKS__`; `wrapTool`'s capture-context branch consults them via the internal `resolveMock` helper. Strict mode: any tool that isn't in `toolMockConfig` and isn't marked `mode: "live"` throws `ElasticdashStrictModeError`, captured as a tool event with `has_error: true` so the envelope still surfaces the halt.
65
+
66
+ ---
67
+
68
+ ## Pattern B — HTTP-mode workflows (the bridge)
69
+
70
+ If your workflow body makes an HTTP request into a separate server process:
71
+
72
+ ```ts
73
+ export const chatHandler = async (input) => {
74
+ const res = await fetch(`${APP_URL}/api/chat`, { ... });
75
+ return res.json();
76
+ };
77
+ ```
78
+
79
+ …the tools execute inside the dev server, not the CLI subprocess. Mock globals don't cross process boundaries. You need one line at the receiving handler's entry.
80
+
81
+ ### Outbound (automatic)
82
+
83
+ When `--mock-config-file` is in effect, the CLI's `fetch` interceptor (`src/interceptors/http.ts`) reads `__ELASTICDASH_TOOL_MOCKS__` / `__ELASTICDASH_AI_MOCKS__` / `__ELASTICDASH_STRICT__`, encodes them as base64 JSON, and attaches an `x-elasticdash-mock-config` header on every outbound fetch. Zero user code.
84
+
85
+ ### Inbound (one line)
86
+
87
+ In your route / request handler:
88
+
89
+ ```ts
90
+ import { applyInboundMockConfig } from 'elasticdash-sdk';
91
+
92
+ export async function POST(request) {
93
+ applyInboundMockConfig(request);
94
+ // ... rest of your handler unchanged ...
95
+ }
96
+ ```
97
+
98
+ That's it. The helper:
99
+
100
+ 1. Reads the `x-elasticdash-mock-config` header from `request.headers`.
101
+ 2. Base64-decodes the JSON payload.
102
+ 3. Builds an `HttpRunContext` with the decoded mocks (merging into any context already present from `initHttpRunContext` / dashboard mode).
103
+ 4. Calls `httpRunAls.enterWith(ctx)` — scopes the context to the current request's async chain via AsyncLocalStorage.
104
+ 5. Returns. Every `wrapTool` / `wrapAI` call inside the handler sees the mocks via `getHttpToolMock` / `getHttpAIMock`.
105
+
106
+ Concurrent requests with different mock configs (or no mocks at all) run in parallel without interfering. No file is read, no env var consulted, no global state polluted.
107
+
108
+ #### Next.js + Turbopack note
109
+
110
+ If Turbopack flags `elasticdash-sdk` as "Module not found" at build time (some configs do this for `serverExternalPackages`), use `eval('require')`:
111
+
112
+ ```ts
113
+ try {
114
+ const { applyInboundMockConfig } = (eval('require') as any)('elasticdash-sdk');
115
+ applyInboundMockConfig(request);
116
+ } catch { /* SDK not installed — proceed live */ }
117
+ ```
118
+
119
+ This is the same pattern users already use for `initHttpRunContext` for dashboard mode. The `try/catch` makes the SDK a soft dependency: if it's not present in prod, the route still works.
120
+
121
+ #### Polymorphic input
122
+
123
+ `applyInboundMockConfig` accepts anything with `headers.get(name)` or `headers[name]`:
124
+
125
+ | Framework | Pass |
126
+ |---|---|
127
+ | Next.js | `NextRequest` |
128
+ | Express / Hono / Fastify / Polka | the request object |
129
+ | Plain Node `http` | the `IncomingMessage` |
130
+ | Whatwg `Request` (Cloudflare Workers, Deno) | the `Request` |
131
+
132
+ No adapter needed.
133
+
134
+ ---
135
+
136
+ ## What `ElasticdashStrictModeError` looks like
137
+
138
+ ```ts
139
+ class ElasticdashStrictModeError extends Error {
140
+ name = 'ElasticdashStrictModeError'
141
+ tool_name: string
142
+ // message: `tool "<name>" called but no mock entry. Add it to live_tools or to mocked_tools.`
143
+ }
144
+ ```
145
+
146
+ Captured into the trace as a tool event with `has_error: true` and the message in `output.error`. The MCP `rerun_workflow_mocked` finds these by regex on the output preview and surfaces them as `in_neither_halt` findings in its report.
147
+
148
+ If you want to handle strict-mode failures yourself (e.g. log + continue), catch on `instanceof ElasticdashStrictModeError`:
149
+
150
+ ```ts
151
+ import { ElasticdashStrictModeError } from 'elasticdash-sdk';
152
+
153
+ try {
154
+ await someWrappedTool(...);
155
+ } catch (err) {
156
+ if (err instanceof ElasticdashStrictModeError) { /* ... */ }
157
+ else throw err;
158
+ }
159
+ ```
160
+
161
+ ---
162
+
163
+ ## Limitations
164
+
165
+ | | |
166
+ |---|---|
167
+ | **Strict mode is global on the receiver side.** | Concurrent inbound requests with mixed `strict` values currently share a single flag. v1 sets it on; v2 will move it to `HttpRunContext` for per-request scoping. |
168
+ | **Header size.** | Base64 JSON of typical configs is well under 4KB. If you mock 100+ tools each with multi-KB outputs, you may approach HTTP header limits (~8-16KB). Switch to a smaller subset, or wait for v1.1 which will offer compressed encoding. |
169
+ | **Cross-origin leaks.** | The CLI attaches the header to every outbound `fetch`. External APIs (PokéAPI, OpenAI) see it. They'll ignore unknown headers, but if your tools call sensitive third parties, audit your mock contents. |
170
+ | **In-process strict checks read globals; HTTP-mode strict reads context.** | Both work, just via different mechanisms. The MCP-generated config produces identical envelopes for both paths. |
171
+
172
+ ---
173
+
174
+ ## Quick reference
175
+
176
+ | API | Module | Used by |
177
+ |---|---|---|
178
+ | `applyInboundMockConfig(req)` | `'elasticdash-sdk'` | Route handlers receiving mocked workflow runs |
179
+ | `ElasticdashStrictModeError` | `'elasticdash-sdk'` | Catch-and-handle strict halts |
180
+ | `wrapTool` | `'elasticdash-sdk'` | Tool registration (existing — no change) |
181
+ | `wrapAI` | `'elasticdash-sdk'` | AI call wrapping (existing — no change) |
182
+ | `setHttpRunContext` / `initHttpRunContext` | `'elasticdash-sdk'` | Dashboard mode (existing — no change) |
183
+ | `--mock-config-file <path>` | CLI flag on `elasticdash run-workflow` | Direct CLI testing; the MCP uses it under the hood |
184
+
185
+ ---
186
+
187
+ ## Related
188
+
189
+ - [MCP partial-mocking guide](https://github.com/jiangjiahao/ElasticDash-MCP/blob/main/docs/partial-mocking.md) — user-facing flows, profiles, the rerun report
190
+ - [`docs/workflow-modes.md`](./workflow-modes.md) — HTTP-mode vs in-process workflow definitions
191
+ - [`docs/observability_mode.md`](./observability_mode.md) — dashboard-driven telemetry
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "elasticdash-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.5",
4
4
  "description": "AI-native SDK for ElasticDash workflow testing, tracing, and observability",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.ts CHANGED
@@ -641,7 +641,15 @@ async function bootstrap(): Promise<void> {
641
641
  .option('--input <json>', 'JSON input to pass to the workflow')
642
642
  .option('--input-file <path>', 'Path to JSON file with input')
643
643
  .option('--timeout-seconds <n>', 'Hard cap on a single run in seconds', (v) => Number(v), 300)
644
- .action(async (name: string, options: { input?: string; inputFile?: string; timeoutSeconds: number }) => {
644
+ .option('--mock-config-file <path>', 'Path to a JSON file with toolMockConfig / aiMockConfig / strict. Used by the ElasticDash MCP to drive replay-mock-strict runs.')
645
+ .action(async (name: string, options: { input?: string; inputFile?: string; timeoutSeconds: number; mockConfigFile?: string }) => {
646
+ // Propagate the requested workflow name to observability so the trace
647
+ // is tagged correctly. Without this, observability's scanner-based
648
+ // auto-detect could pick a different export when the scanner misses
649
+ // arrow-fn exports with return-type annotations, or when multiple
650
+ // candidates exist. The CLI is the source of truth here.
651
+ process.env.ELASTICDASH_WORKFLOW_NAME = name
652
+
645
653
  const workflowsModulePath = resolveRuntimeModule(cwd, 'ed_workflows')
646
654
  if (!workflowsModulePath) {
647
655
  console.error(`[elasticdash] Error: Could not find ed_workflows.ts or ed_workflows.js in ${cwd}`)
@@ -681,6 +689,42 @@ async function bootstrap(): Promise<void> {
681
689
  process.exit(1)
682
690
  }
683
691
 
692
+ // Optional mock config — drives in-process resolveMock/resolveAIMock and
693
+ // wrapTool strict-mode checks via the same __ELASTICDASH_*__ globals the
694
+ // worker subprocess sets.
695
+ let toolMockConfig: Record<string, unknown> | undefined
696
+ let aiMockConfig: Record<string, unknown> | undefined
697
+ let strictMode = false
698
+ if (options.mockConfigFile) {
699
+ let cfg: unknown
700
+ try {
701
+ cfg = JSON.parse(readFileSync(path.resolve(cwd, options.mockConfigFile), 'utf-8'))
702
+ } catch (err) {
703
+ console.error(`[elasticdash] Error: Failed to read --mock-config-file: ${err instanceof Error ? err.message : String(err)}`)
704
+ process.exit(1)
705
+ }
706
+ if (!cfg || typeof cfg !== 'object' || Array.isArray(cfg)) {
707
+ console.error('[elasticdash] Error: --mock-config-file must contain a JSON object with optional toolMockConfig, aiMockConfig, strict.')
708
+ process.exit(1)
709
+ }
710
+ const c = cfg as Record<string, unknown>
711
+ if (c.toolMockConfig !== undefined && (typeof c.toolMockConfig !== 'object' || c.toolMockConfig === null || Array.isArray(c.toolMockConfig))) {
712
+ console.error('[elasticdash] Error: toolMockConfig must be an object keyed by tool name.')
713
+ process.exit(1)
714
+ }
715
+ if (c.aiMockConfig !== undefined && (typeof c.aiMockConfig !== 'object' || c.aiMockConfig === null || Array.isArray(c.aiMockConfig))) {
716
+ console.error('[elasticdash] Error: aiMockConfig must be an object keyed by model name.')
717
+ process.exit(1)
718
+ }
719
+ if (c.strict !== undefined && typeof c.strict !== 'boolean') {
720
+ console.error('[elasticdash] Error: strict must be a boolean.')
721
+ process.exit(1)
722
+ }
723
+ toolMockConfig = (c.toolMockConfig as Record<string, unknown> | undefined) ?? undefined
724
+ aiMockConfig = (c.aiMockConfig as Record<string, unknown> | undefined) ?? undefined
725
+ strictMode = c.strict === true
726
+ }
727
+
684
728
  let mod: Record<string, unknown>
685
729
  try {
686
730
  mod = await import(pathToFileURL(workflowsModulePath).href) as Record<string, unknown>
@@ -704,6 +748,16 @@ async function bootstrap(): Promise<void> {
704
748
  let output: unknown = null
705
749
  let events: Array<Record<string, unknown>> = []
706
750
 
751
+ // Mirror the worker's mock-globals contract so module-imported tools and
752
+ // wrapped AI calls reach resolveMock/resolveAIMock with the right state.
753
+ if (toolMockConfig || aiMockConfig || strictMode) {
754
+ ;(globalThis as any).__ELASTICDASH_TOOL_MOCKS__ = toolMockConfig ?? {}
755
+ ;(globalThis as any).__ELASTICDASH_TOOL_CALL_COUNTERS__ = {}
756
+ ;(globalThis as any).__ELASTICDASH_AI_MOCKS__ = aiMockConfig ?? {}
757
+ ;(globalThis as any).__ELASTICDASH_AI_CALL_COUNTERS__ = {}
758
+ ;(globalThis as any).__ELASTICDASH_STRICT__ = strictMode
759
+ }
760
+
707
761
  try {
708
762
  const runPromise = runWorkflow(async () => workflowFn(workflowInput))
709
763
  const timeoutPromise = new Promise((_, reject) => {
@@ -730,6 +784,33 @@ async function bootstrap(): Promise<void> {
730
784
  })
731
785
  } catch (err) {
732
786
  runError = err instanceof Error ? err.message : String(err)
787
+ // runWorkflow attaches the partial trace to the thrown error so
788
+ // strict-mode failures still surface their tool events in the envelope.
789
+ const partialTrace = (err as { trace?: { traceId: string; events: Array<{ id: number; type: string; name: string; input: unknown; output: unknown; durationMs: number }> } }).trace
790
+ if (partialTrace) {
791
+ traceId = partialTrace.traceId ?? null
792
+ events = (partialTrace.events ?? []).map((e) => {
793
+ const out = e.output as Record<string, unknown> | null | undefined
794
+ const hasError = out !== null && typeof out === 'object' && out !== null && 'error' in out
795
+ return {
796
+ id: e.id,
797
+ type: e.type,
798
+ name: e.name,
799
+ duration_ms: e.durationMs,
800
+ has_error: hasError,
801
+ input_preview: previewify(e.input),
802
+ output_preview: previewify(e.output),
803
+ }
804
+ })
805
+ }
806
+ } finally {
807
+ if (toolMockConfig || aiMockConfig || strictMode) {
808
+ delete (globalThis as any).__ELASTICDASH_TOOL_MOCKS__
809
+ delete (globalThis as any).__ELASTICDASH_TOOL_CALL_COUNTERS__
810
+ delete (globalThis as any).__ELASTICDASH_AI_MOCKS__
811
+ delete (globalThis as any).__ELASTICDASH_AI_CALL_COUNTERS__
812
+ delete (globalThis as any).__ELASTICDASH_STRICT__
813
+ }
733
814
  }
734
815
  const endedAt = Date.now()
735
816
 
@@ -745,8 +826,12 @@ async function bootstrap(): Promise<void> {
745
826
  ...(runError ? { error: runError } : {}),
746
827
  }
747
828
 
748
- process.stdout.write(JSON.stringify(envelope, null, 2) + '\n')
829
+ // Sentinel FIRST, then pretty JSON. If a downstream consumer hits a
830
+ // buffer limit on the pretty-printed output, the sentinel line is
831
+ // already safe in stdout and parseable. The MCP scans from the end
832
+ // backward — it'll find the sentinel either way.
749
833
  process.stdout.write('__ED_RUN_WORKFLOW_RESULT__:' + JSON.stringify(envelope) + '\n')
834
+ process.stdout.write(JSON.stringify(envelope, null, 2) + '\n')
750
835
  process.exit(runError ? 1 : 0)
751
836
  })
752
837
 
@@ -233,12 +233,18 @@ function findFunctionInSource(src: string, name: string): { isAsync: boolean; si
233
233
  lineNumber: lineAt(src, m.index!),
234
234
  sourceCode: extractSource(src, m.index!),
235
235
  }
236
- m = src.match(new RegExp(`export\\s+const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*=>`))
236
+ // Arrow function exports. `(?::[^=]+?)?` matches an optional TypeScript
237
+ // return-type annotation between `)` and `=>` — e.g.
238
+ // export const f = async (input): Promise<X> => { ... }
239
+ // Without it, anything with a return type was silently invisible to
240
+ // scanWorkflows/scanTools, which led to the CLI tagging traces with the
241
+ // wrong workflow name.
242
+ m = src.match(new RegExp(`export\\s+const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*(?::[^=]+?)?\\s*=>`))
237
243
  if (m) return { isAsync: !!m[1], signature: m[2], lineNumber: lineAt(src, m.index!) }
238
- m = src.match(new RegExp(`(?:^|\\n)\\s*const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*=>`, 'm'))
244
+ m = src.match(new RegExp(`(?:^|\\n)\\s*const\\s+${escaped}\\s*=\\s*(async\\s*)?(\\([^)]*\\))\\s*(?::[^=]+?)?\\s*=>`, 'm'))
239
245
  if (m) return { isAsync: !!m[1], signature: m[2], lineNumber: lineAt(src, m.index!) }
240
246
  // Wrapped: const name = wrapTool('name', [async] (params) => …)
241
- m = src.match(new RegExp(`(?:export\\s+)?const\\s+${escaped}\\s*=\\s*\\w+\\(\\s*['"][^'"]*['"]\\s*,\\s*(async\\s*)?(\\([^)]*\\))\\s*=>`))
247
+ m = src.match(new RegExp(`(?:export\\s+)?const\\s+${escaped}\\s*=\\s*\\w+\\(\\s*['"][^'"]*['"]\\s*,\\s*(async\\s*)?(\\([^)]*\\))\\s*(?::[^=]+?)?\\s*=>`))
242
248
  if (m) return { isAsync: !!m[1], signature: m[2], lineNumber: lineAt(src, m.index!) }
243
249
  return { isAsync: false, signature: '()' }
244
250
  }
@@ -261,16 +267,19 @@ function extractExportsFromSource(filePath: string): ParsedExport[] {
261
267
  })
262
268
  }
263
269
 
264
- // 2. Direct: export const name = [async] (params) => …
265
- for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*(async\s*)?\(([^)]*)\)\s*=>/g)) {
270
+ // 2. Direct: export const name = [async] (params)[: ReturnType] => …
271
+ // `(?::[^=]+?)?` accepts an optional TypeScript return-type annotation
272
+ // between `)` and `=>`. Without it, arrow exports with return types
273
+ // (very common in real codebases) were invisible to the scanner.
274
+ for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*(async\s*)?\(([^)]*)\)\s*(?::[^=]+?)?\s*=>/g)) {
266
275
  results.push({
267
276
  name: m[1], isAsync: !!m[2], signature: `(${m[3]})`, filePath,
268
277
  lineNumber: lineAt(src, m.index!), sourceCode: extractSource(src, m.index!),
269
278
  })
270
279
  }
271
280
 
272
- // 3. Wrapped: export const name = wrapTool('name', [async] (params) => …)
273
- for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*\w+\(\s*['"][^'"]*['"]\s*,\s*(async\s*)?\(([^)]*)\)\s*=>/g)) {
281
+ // 3. Wrapped: export const name = wrapTool('name', [async] (params)[: ReturnType] => …)
282
+ for (const m of src.matchAll(/export\s+const\s+(\w+)\s*=\s*\w+\(\s*['"][^'"]*['"]\s*,\s*(async\s*)?\(([^)]*)\)\s*(?::[^=]+?)?\s*=>/g)) {
274
283
  results.push({
275
284
  name: m[1], isAsync: !!m[2], signature: `(${m[3]})`, filePath,
276
285
  lineNumber: lineAt(src, m.index!), sourceCode: extractSource(src, m.index!),
package/src/index.ts CHANGED
@@ -26,10 +26,14 @@ export { wrapAI } from './interceptors/workflow-ai.js'
26
26
  export { edTool, defineTool, getRegisteredTool, getRegisteredTools, clearToolRegistry } from './tool-registry.js'
27
27
  export type { RegisteredTool } from './tool-registry.js'
28
28
 
29
+ // Strict-mode error (thrown by resolveMock + worker Proxy when fail-closed)
30
+ export { ElasticdashStrictModeError } from './internals/errors.js'
31
+
29
32
  // HTTP run context (ALS + global fallback for streaming frameworks)
30
33
  export {
31
34
  setHttpRunContext,
32
35
  initHttpRunContext,
36
+ applyInboundMockConfig,
33
37
  getHttpRunContext,
34
38
  getHttpFrozenEvent,
35
39
  getHttpPromptMock,
@@ -1,3 +1,4 @@
1
+ import { gzipSync } from 'node:zlib'
1
2
  import { getCaptureContext } from '../capture/recorder.js'
2
3
  import { getCurrentTrace } from '../trace-adapter/context.js'
3
4
  import { getHttpRunContext, getHttpFrozenEvent, pushTelemetryEvent, tryAutoInitHttpContext, getObservabilityContext } from './telemetry-push.js'
@@ -271,6 +272,60 @@ async function executeLiveAndRecord(
271
272
  return { response: res, event }
272
273
  }
273
274
 
275
+ /**
276
+ * When the CLI subprocess seeds mock globals (via `--mock-config-file`),
277
+ * encode them as a base64 JSON string and return the header value. Any
278
+ * outbound fetch that travels into another Node process (e.g. an HTTP-mode
279
+ * workflow calling its own dev server) can carry the mock config along
280
+ * via the `x-elasticdash-mock-config` header. The receiver applies it
281
+ * with `applyInboundMockConfig(req)` and the mocks fire in its process.
282
+ *
283
+ * Returns undefined when no mock state is present.
284
+ */
285
+ function encodeMockConfigHeader(): string | undefined {
286
+ const g = globalThis as Record<string, unknown>
287
+ const toolMocks = g['__ELASTICDASH_TOOL_MOCKS__'] as Record<string, unknown> | undefined
288
+ const aiMocks = g['__ELASTICDASH_AI_MOCKS__'] as Record<string, unknown> | undefined
289
+ const strict = g['__ELASTICDASH_STRICT__'] === true
290
+ if (!toolMocks && !aiMocks && !strict) return undefined
291
+ const payload: Record<string, unknown> = {}
292
+ if (toolMocks) payload.toolMockConfig = toolMocks
293
+ if (aiMocks) payload.aiMockConfig = aiMocks
294
+ if (strict) payload.strict = true
295
+ try {
296
+ const json = JSON.stringify(payload)
297
+ // Gzip + base64. Real mock configs with trace-derived outputs (full
298
+ // Pokémon details, AI response transcripts, etc.) easily exceed
299
+ // Node's default 8KB HTTP header limit when sent as plain base64.
300
+ // Gzipping shrinks typical configs by ~5-10x and keeps them well
301
+ // under any sane header cap.
302
+ //
303
+ // Magic prefix `gz1:` lets the inbound decoder pick the right path
304
+ // and stay backward-compatible with older SDKs that emit plain base64.
305
+ const gzipped = gzipSync(Buffer.from(json, 'utf-8'))
306
+ return 'gz1:' + gzipped.toString('base64')
307
+ } catch { return undefined }
308
+ }
309
+
310
+ /** Attach the mock-config header to an outbound RequestInit without mutating the caller's object. */
311
+ function attachMockConfigHeader(init: RequestInit | undefined, value: string): RequestInit {
312
+ const HEADER = 'x-elasticdash-mock-config'
313
+ const base: RequestInit = init ? { ...init } : {}
314
+ const existing = base.headers
315
+ if (existing instanceof Headers) {
316
+ const h = new Headers(existing)
317
+ h.set(HEADER, value)
318
+ base.headers = h
319
+ } else if (Array.isArray(existing)) {
320
+ base.headers = [...existing.filter(([k]) => k.toLowerCase() !== HEADER), [HEADER, value]]
321
+ } else if (existing && typeof existing === 'object') {
322
+ base.headers = { ...(existing as Record<string, string>), [HEADER]: value }
323
+ } else {
324
+ base.headers = { [HEADER]: value }
325
+ }
326
+ return base
327
+ }
328
+
274
329
  export function interceptFetch(): void {
275
330
  if (originalFetch) return // already installed
276
331
  originalFetch = globalThis.fetch
@@ -281,7 +336,17 @@ export function interceptFetch(): void {
281
336
  const httpCtx = getHttpRunContext()
282
337
  const obsCtx = getObservabilityContext()
283
338
 
284
- if (!ctx && !httpCtx && !obsCtx) return originalFetch!(input, init)
339
+ // Option-A passthrough: even when there is no SDK context active, if the
340
+ // CLI seeded mock globals we still attach the header so downstream Node
341
+ // processes (e.g. a Next.js dev server hit by an HTTP-mode workflow) can
342
+ // honor the mocks. This is the bridge that makes partial mocking work
343
+ // without users having to refactor HTTP-mode workflows into in-process
344
+ // ones.
345
+ const mockHeader = encodeMockConfigHeader()
346
+ if (!ctx && !httpCtx && !obsCtx) {
347
+ return originalFetch!(input, mockHeader ? attachMockConfigHeader(init, mockHeader) : init)
348
+ }
349
+ if (mockHeader) init = attachMockConfigHeader(init, mockHeader)
285
350
 
286
351
  const url =
287
352
  typeof input === 'string'