elasticdash-sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +775 -0
  3. package/dist/browser-ui.d.ts +43 -0
  4. package/dist/browser-ui.d.ts.map +1 -0
  5. package/dist/browser-ui.js +246 -0
  6. package/dist/browser-ui.js.map +1 -0
  7. package/dist/capture/event.d.ts +33 -0
  8. package/dist/capture/event.d.ts.map +1 -0
  9. package/dist/capture/event.js +2 -0
  10. package/dist/capture/event.js.map +1 -0
  11. package/dist/capture/index.d.ts +4 -0
  12. package/dist/capture/index.d.ts.map +1 -0
  13. package/dist/capture/index.js +4 -0
  14. package/dist/capture/index.js.map +1 -0
  15. package/dist/capture/recorder.d.ts +24 -0
  16. package/dist/capture/recorder.d.ts.map +1 -0
  17. package/dist/capture/recorder.js +46 -0
  18. package/dist/capture/recorder.js.map +1 -0
  19. package/dist/capture/replay.d.ts +20 -0
  20. package/dist/capture/replay.d.ts.map +1 -0
  21. package/dist/capture/replay.js +47 -0
  22. package/dist/capture/replay.js.map +1 -0
  23. package/dist/ci/api-client.d.ts +38 -0
  24. package/dist/ci/api-client.d.ts.map +1 -0
  25. package/dist/ci/api-client.js +96 -0
  26. package/dist/ci/api-client.js.map +1 -0
  27. package/dist/ci/benchmark.d.ts +33 -0
  28. package/dist/ci/benchmark.d.ts.map +1 -0
  29. package/dist/ci/benchmark.js +213 -0
  30. package/dist/ci/benchmark.js.map +1 -0
  31. package/dist/ci/ed-runner.d.ts +48 -0
  32. package/dist/ci/ed-runner.d.ts.map +1 -0
  33. package/dist/ci/ed-runner.js +260 -0
  34. package/dist/ci/ed-runner.js.map +1 -0
  35. package/dist/ci/executor.d.ts +13 -0
  36. package/dist/ci/executor.d.ts.map +1 -0
  37. package/dist/ci/executor.js +542 -0
  38. package/dist/ci/executor.js.map +1 -0
  39. package/dist/ci/git-info.d.ts +17 -0
  40. package/dist/ci/git-info.d.ts.map +1 -0
  41. package/dist/ci/git-info.js +102 -0
  42. package/dist/ci/git-info.js.map +1 -0
  43. package/dist/ci/index.d.ts +6 -0
  44. package/dist/ci/index.d.ts.map +1 -0
  45. package/dist/ci/index.js +4 -0
  46. package/dist/ci/index.js.map +1 -0
  47. package/dist/ci/measurement.d.ts +9 -0
  48. package/dist/ci/measurement.d.ts.map +1 -0
  49. package/dist/ci/measurement.js +15 -0
  50. package/dist/ci/measurement.js.map +1 -0
  51. package/dist/ci/replay.d.ts +31 -0
  52. package/dist/ci/replay.d.ts.map +1 -0
  53. package/dist/ci/replay.js +96 -0
  54. package/dist/ci/replay.js.map +1 -0
  55. package/dist/ci/reporters/default.d.ts +8 -0
  56. package/dist/ci/reporters/default.d.ts.map +1 -0
  57. package/dist/ci/reporters/default.js +46 -0
  58. package/dist/ci/reporters/default.js.map +1 -0
  59. package/dist/ci/reporters/index.d.ts +8 -0
  60. package/dist/ci/reporters/index.d.ts.map +1 -0
  61. package/dist/ci/reporters/index.js +14 -0
  62. package/dist/ci/reporters/index.js.map +1 -0
  63. package/dist/ci/reporters/json.d.ts +8 -0
  64. package/dist/ci/reporters/json.d.ts.map +1 -0
  65. package/dist/ci/reporters/json.js +14 -0
  66. package/dist/ci/reporters/json.js.map +1 -0
  67. package/dist/ci/reporters/junit.d.ts +8 -0
  68. package/dist/ci/reporters/junit.d.ts.map +1 -0
  69. package/dist/ci/reporters/junit.js +48 -0
  70. package/dist/ci/reporters/junit.js.map +1 -0
  71. package/dist/ci/runner.d.ts +3 -0
  72. package/dist/ci/runner.d.ts.map +1 -0
  73. package/dist/ci/runner.js +187 -0
  74. package/dist/ci/runner.js.map +1 -0
  75. package/dist/ci/test-discovery.d.ts +5 -0
  76. package/dist/ci/test-discovery.d.ts.map +1 -0
  77. package/dist/ci/test-discovery.js +11 -0
  78. package/dist/ci/test-discovery.js.map +1 -0
  79. package/dist/ci/test-loader.d.ts +19 -0
  80. package/dist/ci/test-loader.d.ts.map +1 -0
  81. package/dist/ci/test-loader.js +149 -0
  82. package/dist/ci/test-loader.js.map +1 -0
  83. package/dist/ci/test-registry.d.ts +42 -0
  84. package/dist/ci/test-registry.d.ts.map +1 -0
  85. package/dist/ci/test-registry.js +18 -0
  86. package/dist/ci/test-registry.js.map +1 -0
  87. package/dist/ci/trace-schema.d.ts +30 -0
  88. package/dist/ci/trace-schema.d.ts.map +1 -0
  89. package/dist/ci/trace-schema.js +66 -0
  90. package/dist/ci/trace-schema.js.map +1 -0
  91. package/dist/ci/trace-writer.d.ts +16 -0
  92. package/dist/ci/trace-writer.d.ts.map +1 -0
  93. package/dist/ci/trace-writer.js +108 -0
  94. package/dist/ci/trace-writer.js.map +1 -0
  95. package/dist/ci/types.d.ts +108 -0
  96. package/dist/ci/types.d.ts.map +1 -0
  97. package/dist/ci/types.js +3 -0
  98. package/dist/ci/types.js.map +1 -0
  99. package/dist/ci/upload-client.d.ts +74 -0
  100. package/dist/ci/upload-client.d.ts.map +1 -0
  101. package/dist/ci/upload-client.js +195 -0
  102. package/dist/ci/upload-client.js.map +1 -0
  103. package/dist/cli.d.ts +3 -0
  104. package/dist/cli.d.ts.map +1 -0
  105. package/dist/cli.js +716 -0
  106. package/dist/cli.js.map +1 -0
  107. package/dist/core/agent-state.d.ts +47 -0
  108. package/dist/core/agent-state.d.ts.map +1 -0
  109. package/dist/core/agent-state.js +137 -0
  110. package/dist/core/agent-state.js.map +1 -0
  111. package/dist/core/judge-utils.d.ts +22 -0
  112. package/dist/core/judge-utils.d.ts.map +1 -0
  113. package/dist/core/judge-utils.js +211 -0
  114. package/dist/core/judge-utils.js.map +1 -0
  115. package/dist/core/registry.d.ts +28 -0
  116. package/dist/core/registry.d.ts.map +1 -0
  117. package/dist/core/registry.js +52 -0
  118. package/dist/core/registry.js.map +1 -0
  119. package/dist/dashboard-server.d.ts +65 -0
  120. package/dist/dashboard-server.d.ts.map +1 -0
  121. package/dist/dashboard-server.js +3940 -0
  122. package/dist/dashboard-server.js.map +1 -0
  123. package/dist/execution/tool-runner.d.ts +26 -0
  124. package/dist/execution/tool-runner.d.ts.map +1 -0
  125. package/dist/execution/tool-runner.js +316 -0
  126. package/dist/execution/tool-runner.js.map +1 -0
  127. package/dist/html/dashboard.html +2218 -0
  128. package/dist/http.d.ts +14 -0
  129. package/dist/http.d.ts.map +1 -0
  130. package/dist/http.js +13 -0
  131. package/dist/http.js.map +1 -0
  132. package/dist/index.cjs +8102 -0
  133. package/dist/index.d.ts +61 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +67 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/interceptors/ai-interceptor.d.ts +26 -0
  138. package/dist/interceptors/ai-interceptor.d.ts.map +1 -0
  139. package/dist/interceptors/ai-interceptor.js +756 -0
  140. package/dist/interceptors/ai-interceptor.js.map +1 -0
  141. package/dist/interceptors/db-auto.d.ts +8 -0
  142. package/dist/interceptors/db-auto.d.ts.map +1 -0
  143. package/dist/interceptors/db-auto.js +217 -0
  144. package/dist/interceptors/db-auto.js.map +1 -0
  145. package/dist/interceptors/db.d.ts +23 -0
  146. package/dist/interceptors/db.d.ts.map +1 -0
  147. package/dist/interceptors/db.js +137 -0
  148. package/dist/interceptors/db.js.map +1 -0
  149. package/dist/interceptors/http.d.ts +28 -0
  150. package/dist/interceptors/http.d.ts.map +1 -0
  151. package/dist/interceptors/http.js +356 -0
  152. package/dist/interceptors/http.js.map +1 -0
  153. package/dist/interceptors/side-effects.d.ts +7 -0
  154. package/dist/interceptors/side-effects.d.ts.map +1 -0
  155. package/dist/interceptors/side-effects.js +72 -0
  156. package/dist/interceptors/side-effects.js.map +1 -0
  157. package/dist/interceptors/telemetry-push.d.ts +142 -0
  158. package/dist/interceptors/telemetry-push.d.ts.map +1 -0
  159. package/dist/interceptors/telemetry-push.js +463 -0
  160. package/dist/interceptors/telemetry-push.js.map +1 -0
  161. package/dist/interceptors/tool.d.ts +2 -0
  162. package/dist/interceptors/tool.d.ts.map +1 -0
  163. package/dist/interceptors/tool.js +274 -0
  164. package/dist/interceptors/tool.js.map +1 -0
  165. package/dist/interceptors/workflow-ai.d.ts +5 -0
  166. package/dist/interceptors/workflow-ai.d.ts.map +1 -0
  167. package/dist/interceptors/workflow-ai.js +382 -0
  168. package/dist/interceptors/workflow-ai.js.map +1 -0
  169. package/dist/internals/conditional-recorder.d.ts +21 -0
  170. package/dist/internals/conditional-recorder.d.ts.map +1 -0
  171. package/dist/internals/conditional-recorder.js +54 -0
  172. package/dist/internals/conditional-recorder.js.map +1 -0
  173. package/dist/internals/mock-resolver.d.ts +146 -0
  174. package/dist/internals/mock-resolver.d.ts.map +1 -0
  175. package/dist/internals/mock-resolver.js +427 -0
  176. package/dist/internals/mock-resolver.js.map +1 -0
  177. package/dist/matchers/index.d.ts +96 -0
  178. package/dist/matchers/index.d.ts.map +1 -0
  179. package/dist/matchers/index.js +668 -0
  180. package/dist/matchers/index.js.map +1 -0
  181. package/dist/observability.d.ts +82 -0
  182. package/dist/observability.d.ts.map +1 -0
  183. package/dist/observability.js +471 -0
  184. package/dist/observability.js.map +1 -0
  185. package/dist/portal-executor.d.ts +30 -0
  186. package/dist/portal-executor.d.ts.map +1 -0
  187. package/dist/portal-executor.js +324 -0
  188. package/dist/portal-executor.js.map +1 -0
  189. package/dist/portal-server.d.ts +3 -0
  190. package/dist/portal-server.d.ts.map +1 -0
  191. package/dist/portal-server.js +279 -0
  192. package/dist/portal-server.js.map +1 -0
  193. package/dist/proxy/llm-capture.d.ts +14 -0
  194. package/dist/proxy/llm-capture.d.ts.map +1 -0
  195. package/dist/proxy/llm-capture.js +264 -0
  196. package/dist/proxy/llm-capture.js.map +1 -0
  197. package/dist/reporter.d.ts +3 -0
  198. package/dist/reporter.d.ts.map +1 -0
  199. package/dist/reporter.js +72 -0
  200. package/dist/reporter.js.map +1 -0
  201. package/dist/runWorkflowSubprocess.d.ts +14 -0
  202. package/dist/runWorkflowSubprocess.d.ts.map +1 -0
  203. package/dist/runWorkflowSubprocess.js +66 -0
  204. package/dist/runWorkflowSubprocess.js.map +1 -0
  205. package/dist/runner.d.ts +16 -0
  206. package/dist/runner.d.ts.map +1 -0
  207. package/dist/runner.js +138 -0
  208. package/dist/runner.js.map +1 -0
  209. package/dist/socket-connector.d.ts +22 -0
  210. package/dist/socket-connector.d.ts.map +1 -0
  211. package/dist/socket-connector.js +104 -0
  212. package/dist/socket-connector.js.map +1 -0
  213. package/dist/telemetry-batcher.d.ts +56 -0
  214. package/dist/telemetry-batcher.d.ts.map +1 -0
  215. package/dist/telemetry-batcher.js +143 -0
  216. package/dist/telemetry-batcher.js.map +1 -0
  217. package/dist/test-setup.d.ts +12 -0
  218. package/dist/test-setup.d.ts.map +1 -0
  219. package/dist/test-setup.js +13 -0
  220. package/dist/test-setup.js.map +1 -0
  221. package/dist/tool-registry.d.ts +31 -0
  222. package/dist/tool-registry.d.ts.map +1 -0
  223. package/dist/tool-registry.js +73 -0
  224. package/dist/tool-registry.js.map +1 -0
  225. package/dist/tool-runner-worker.d.ts +2 -0
  226. package/dist/tool-runner-worker.d.ts.map +1 -0
  227. package/dist/tool-runner-worker.js +215 -0
  228. package/dist/tool-runner-worker.js.map +1 -0
  229. package/dist/trace-adapter/context.d.ts +72 -0
  230. package/dist/trace-adapter/context.d.ts.map +1 -0
  231. package/dist/trace-adapter/context.js +80 -0
  232. package/dist/trace-adapter/context.js.map +1 -0
  233. package/dist/tracing.d.ts +2 -0
  234. package/dist/tracing.d.ts.map +1 -0
  235. package/dist/tracing.js +59 -0
  236. package/dist/tracing.js.map +1 -0
  237. package/dist/trigger-executor.d.ts +12 -0
  238. package/dist/trigger-executor.d.ts.map +1 -0
  239. package/dist/trigger-executor.js +130 -0
  240. package/dist/trigger-executor.js.map +1 -0
  241. package/dist/types/portal.d.ts +76 -0
  242. package/dist/types/portal.d.ts.map +1 -0
  243. package/dist/types/portal.js +2 -0
  244. package/dist/types/portal.js.map +1 -0
  245. package/dist/utils/debug.d.ts +3 -0
  246. package/dist/utils/debug.d.ts.map +1 -0
  247. package/dist/utils/debug.js +8 -0
  248. package/dist/utils/debug.js.map +1 -0
  249. package/dist/utils/license-error.d.ts +23 -0
  250. package/dist/utils/license-error.d.ts.map +1 -0
  251. package/dist/utils/license-error.js +42 -0
  252. package/dist/utils/license-error.js.map +1 -0
  253. package/dist/utils/redact.d.ts +7 -0
  254. package/dist/utils/redact.d.ts.map +1 -0
  255. package/dist/utils/redact.js +26 -0
  256. package/dist/utils/redact.js.map +1 -0
  257. package/dist/workflow-runner-worker.d.ts +2 -0
  258. package/dist/workflow-runner-worker.d.ts.map +1 -0
  259. package/dist/workflow-runner-worker.js +329 -0
  260. package/dist/workflow-runner-worker.js.map +1 -0
  261. package/dist/workflow-runner.d.ts +14 -0
  262. package/dist/workflow-runner.d.ts.map +1 -0
  263. package/dist/workflow-runner.js +34 -0
  264. package/dist/workflow-runner.js.map +1 -0
  265. package/docs/agent-coding-instructions.md +138 -0
  266. package/docs/agent-integration-guide.md +564 -0
  267. package/docs/agents.md +140 -0
  268. package/docs/dashboard.md +394 -0
  269. package/docs/deno.md +69 -0
  270. package/docs/instrumentation.md +424 -0
  271. package/docs/langfuse-trace-structure.md +145 -0
  272. package/docs/matchers.md +173 -0
  273. package/docs/observability_contract.md +192 -0
  274. package/docs/observability_mode.md +195 -0
  275. package/docs/quickstart.md +621 -0
  276. package/docs/security-compliance.md +566 -0
  277. package/docs/test-writing-guidelines.md +444 -0
  278. package/docs/tools.md +165 -0
  279. package/docs/workflow-modes.md +253 -0
  280. package/package.json +76 -0
  281. package/src/browser-ui.ts +281 -0
  282. package/src/capture/event.ts +30 -0
  283. package/src/capture/index.ts +3 -0
  284. package/src/capture/recorder.ts +62 -0
  285. package/src/capture/replay.ts +55 -0
  286. package/src/ci/api-client.ts +136 -0
  287. package/src/ci/benchmark.ts +257 -0
  288. package/src/ci/ed-runner.ts +351 -0
  289. package/src/ci/executor.ts +671 -0
  290. package/src/ci/git-info.ts +127 -0
  291. package/src/ci/index.ts +5 -0
  292. package/src/ci/measurement.ts +25 -0
  293. package/src/ci/replay.ts +127 -0
  294. package/src/ci/reporters/default.ts +50 -0
  295. package/src/ci/reporters/index.ts +21 -0
  296. package/src/ci/reporters/json.ts +18 -0
  297. package/src/ci/reporters/junit.ts +61 -0
  298. package/src/ci/runner.ts +208 -0
  299. package/src/ci/test-discovery.ts +16 -0
  300. package/src/ci/test-loader.ts +187 -0
  301. package/src/ci/test-registry.ts +62 -0
  302. package/src/ci/trace-schema.ts +96 -0
  303. package/src/ci/trace-writer.ts +107 -0
  304. package/src/ci/types.ts +115 -0
  305. package/src/ci/upload-client.ts +300 -0
  306. package/src/cli.ts +811 -0
  307. package/src/core/agent-state.ts +162 -0
  308. package/src/core/judge-utils.ts +232 -0
  309. package/src/core/registry.ts +92 -0
  310. package/src/dashboard-server.ts +2047 -0
  311. package/src/execution/tool-runner.ts +352 -0
  312. package/src/html/dashboard.html +2218 -0
  313. package/src/http.ts +13 -0
  314. package/src/index.ts +138 -0
  315. package/src/interceptors/ai-interceptor.ts +798 -0
  316. package/src/interceptors/db-auto.ts +243 -0
  317. package/src/interceptors/db.ts +156 -0
  318. package/src/interceptors/http.ts +393 -0
  319. package/src/interceptors/side-effects.ts +83 -0
  320. package/src/interceptors/telemetry-push.ts +537 -0
  321. package/src/interceptors/tool.ts +287 -0
  322. package/src/interceptors/workflow-ai.ts +419 -0
  323. package/src/internals/conditional-recorder.ts +63 -0
  324. package/src/internals/mock-resolver.ts +492 -0
  325. package/src/matchers/index.ts +824 -0
  326. package/src/observability.ts +501 -0
  327. package/src/portal-executor.ts +355 -0
  328. package/src/portal-server.ts +304 -0
  329. package/src/proxy/llm-capture.ts +301 -0
  330. package/src/reporter.ts +81 -0
  331. package/src/runWorkflowSubprocess.ts +74 -0
  332. package/src/runner.ts +178 -0
  333. package/src/socket-connector.ts +117 -0
  334. package/src/telemetry-batcher.ts +191 -0
  335. package/src/test-setup.ts +16 -0
  336. package/src/tool-registry.ts +94 -0
  337. package/src/tool-runner-worker.ts +244 -0
  338. package/src/trace-adapter/context.ts +156 -0
  339. package/src/tracing.ts +62 -0
  340. package/src/trigger-executor.ts +171 -0
  341. package/src/types/agent.d.ts +63 -0
  342. package/src/types/expect.d.ts +81 -0
  343. package/src/types/modules.d.ts +2 -0
  344. package/src/types/portal.ts +69 -0
  345. package/src/utils/debug.ts +8 -0
  346. package/src/utils/license-error.ts +43 -0
  347. package/src/utils/redact.ts +25 -0
  348. package/src/workflow-runner-worker.ts +386 -0
  349. package/src/workflow-runner.ts +58 -0
@@ -0,0 +1,427 @@
1
+ /**
2
+ * Runtime mock resolution for module-imported tools and AI calls.
3
+ *
4
+ * Tools/AI calls that are statically imported (not accessed via globalThis)
5
+ * cannot be intercepted by the worker's proxy-based mocking. Instead, each
6
+ * wrapped function calls `resolveMock` / `resolveAIMock` at its entry point.
7
+ * The worker writes the mock config to `__ELASTICDASH_TOOL_MOCKS__` /
8
+ * `__ELASTICDASH_AI_MOCKS__` before the workflow runs and clears it after.
9
+ */
10
+ /**
11
+ * Recursively normalises a mock result fetched from the trace.
12
+ *
13
+ * The trace recorder stores tool outputs as-is. When a tool returns a JSON
14
+ * string (rather than a parsed object), the stored value is that string, and
15
+ * inner string values may themselves be JSON-quoted. This function unwraps
16
+ * every layer so the calling code receives the same shape as the real output.
17
+ *
18
+ * - string → try JSON.parse, then recurse on the result
19
+ * - array → recurse on every element
20
+ * - object → recurse on every value
21
+ * - other → return unchanged
22
+ */
23
+ export function normaliseMockResult(value) {
24
+ if (typeof value === 'string') {
25
+ try {
26
+ return normaliseMockResult(JSON.parse(value));
27
+ }
28
+ catch {
29
+ return value;
30
+ }
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return value.map(normaliseMockResult);
34
+ }
35
+ if (value !== null && typeof value === 'object') {
36
+ const out = {};
37
+ for (const [k, v] of Object.entries(value)) {
38
+ out[k] = normaliseMockResult(v);
39
+ }
40
+ return out;
41
+ }
42
+ return value;
43
+ }
44
+ /**
45
+ * Resolves whether the current call to `toolName` should be mocked.
46
+ *
47
+ * - Returns `{ mocked: false }` when no mock config is active or mode is `'live'`.
48
+ * - Increments the per-tool call counter on every non-live invocation so that
49
+ * `mock-specific` indices remain accurate even when some calls run live.
50
+ * - Safe to call in production: no-op when the mock globals are absent.
51
+ */
52
+ export function resolveMock(toolName) {
53
+ const g = globalThis;
54
+ const mocks = g['__ELASTICDASH_TOOL_MOCKS__'];
55
+ if (!mocks)
56
+ return { mocked: false };
57
+ const entry = mocks[toolName];
58
+ if (!entry || entry.mode === 'live')
59
+ return { mocked: false };
60
+ // Initialise counters map if not yet present
61
+ if (!g['__ELASTICDASH_TOOL_CALL_COUNTERS__']) {
62
+ g['__ELASTICDASH_TOOL_CALL_COUNTERS__'] = {};
63
+ }
64
+ const counters = g['__ELASTICDASH_TOOL_CALL_COUNTERS__'];
65
+ counters[toolName] = (counters[toolName] ?? 0) + 1;
66
+ const callNumber = counters[toolName];
67
+ if (entry.mode === 'mock-all') {
68
+ const data = entry.mockData ?? {};
69
+ const raw = data[callNumber] !== undefined ? data[callNumber] : data[0];
70
+ return { mocked: true, result: normaliseMockResult(raw) };
71
+ }
72
+ if (entry.mode === 'mock-specific') {
73
+ const indices = entry.callIndices ?? [];
74
+ if (indices.includes(callNumber)) {
75
+ const data = entry.mockData ?? {};
76
+ return { mocked: true, result: normaliseMockResult(data[callNumber]) };
77
+ }
78
+ // Counter already incremented; this specific call runs live
79
+ return { mocked: false };
80
+ }
81
+ return { mocked: false };
82
+ }
83
+ /**
84
+ * Extracts the system prompt string from an LLM call input.
85
+ * Handles:
86
+ * - Anthropic style: `{ system: "...", messages: [...] }`
87
+ * - OpenAI style: `{ messages: [{ role: "system", content: "..." }, ...] }`
88
+ * - Plain message array: `[{ role: "system", content: "..." }, ...]`
89
+ * - Separate field: `{ systemPrompt: "...", messages: [...] }` (custom wrapAI callers)
90
+ */
91
+ export function extractSystemPrompt(input) {
92
+ if (!input || typeof input !== 'object')
93
+ return undefined;
94
+ const o = input;
95
+ if (typeof o.system === 'string')
96
+ return o.system;
97
+ if (typeof o.systemPrompt === 'string' && o.systemPrompt.length > 0)
98
+ return o.systemPrompt;
99
+ const msgs = Array.isArray(o.messages) ? o.messages : (Array.isArray(input) ? input : null);
100
+ if (msgs) {
101
+ for (const m of msgs) {
102
+ if (m && typeof m === 'object') {
103
+ const msg = m;
104
+ if (msg.role === 'system' && typeof msg.content === 'string')
105
+ return msg.content;
106
+ }
107
+ }
108
+ }
109
+ return undefined;
110
+ }
111
+ /**
112
+ * Returns a shallow copy of `input` with the system prompt replaced by `newSystemPrompt`.
113
+ */
114
+ export function replaceSystemPrompt(input, newSystemPrompt) {
115
+ if (!input || typeof input !== 'object')
116
+ return input;
117
+ const o = input;
118
+ if (typeof o.system === 'string')
119
+ return { ...o, system: newSystemPrompt };
120
+ if (typeof o.systemPrompt === 'string')
121
+ return { ...o, systemPrompt: newSystemPrompt };
122
+ if (Array.isArray(input)) {
123
+ return input.map(m => {
124
+ if (m && typeof m === 'object') {
125
+ const msg = m;
126
+ if (msg.role === 'system' && typeof msg.content === 'string')
127
+ return { ...msg, content: newSystemPrompt };
128
+ }
129
+ return m;
130
+ });
131
+ }
132
+ if (Array.isArray(o.messages)) {
133
+ return {
134
+ ...o,
135
+ messages: o.messages.map(m => {
136
+ if (m && typeof m === 'object') {
137
+ const msg = m;
138
+ if (msg.role === 'system' && typeof msg.content === 'string')
139
+ return { ...msg, content: newSystemPrompt };
140
+ }
141
+ return m;
142
+ }),
143
+ };
144
+ }
145
+ return input;
146
+ }
147
+ /**
148
+ * If a prompt mock is configured for the system prompt found in `input`, returns
149
+ * a copy of `input` with the system prompt replaced. Otherwise returns `undefined`.
150
+ *
151
+ * `__ELASTICDASH_PROMPT_MOCKS__` is `Record<string, SystemPromptMockEntry>` keyed by
152
+ * the original system prompt text. Supports replace-all and replace-specific modes
153
+ * with per-text call counting.
154
+ *
155
+ * For backward compatibility, also accepts the legacy `Record<string, string>` format
156
+ * (treated as replace-all).
157
+ */
158
+ export function resolvePromptMock(input) {
159
+ const g = globalThis;
160
+ const mocks = g['__ELASTICDASH_PROMPT_MOCKS__'];
161
+ if (!mocks || Object.keys(mocks).length === 0)
162
+ return undefined;
163
+ const systemPrompt = extractSystemPrompt(input);
164
+ if (systemPrompt === undefined)
165
+ return undefined;
166
+ const match = lookupMockEntry(mocks, systemPrompt);
167
+ if (!match)
168
+ return undefined;
169
+ const entry = match.entry;
170
+ // Legacy format: plain string replacement (treat as replace-all)
171
+ if (typeof entry === 'string') {
172
+ return replaceSystemPrompt(input, entry);
173
+ }
174
+ if (entry.mode === 'live')
175
+ return undefined;
176
+ // Initialise per-text call counters
177
+ if (!g['__ELASTICDASH_PROMPT_CALL_COUNTERS__']) {
178
+ g['__ELASTICDASH_PROMPT_CALL_COUNTERS__'] = {};
179
+ }
180
+ const counters = g['__ELASTICDASH_PROMPT_CALL_COUNTERS__'];
181
+ counters[match.key] = (counters[match.key] ?? 0) + 1;
182
+ const callNumber = counters[match.key];
183
+ if (entry.mode === 'replace-all') {
184
+ return replaceSystemPrompt(input, entry.replacement);
185
+ }
186
+ if (entry.mode === 'replace-specific') {
187
+ const indices = entry.callIndices ?? [];
188
+ if (indices.includes(callNumber)) {
189
+ return replaceSystemPrompt(input, entry.replacement);
190
+ }
191
+ }
192
+ return undefined;
193
+ }
194
+ /**
195
+ * Strips one layer of JSON string quoting if present.
196
+ * `'"hello"'` → `'hello'`, `'hello'` → `'hello'`
197
+ */
198
+ function stripJsonQuotes(s) {
199
+ if (s.length >= 2 && s.startsWith('"') && s.endsWith('"')) {
200
+ try {
201
+ const parsed = JSON.parse(s);
202
+ if (typeof parsed === 'string')
203
+ return parsed;
204
+ }
205
+ catch { /* not valid JSON, return as-is */ }
206
+ }
207
+ return s;
208
+ }
209
+ /**
210
+ * Look up a mock entry by key, falling back to stripped-quotes variants
211
+ * to handle mismatches between trace-recorded text and runtime text.
212
+ */
213
+ export function lookupMockEntry(mocks, text) {
214
+ if (mocks[text])
215
+ return { key: text, entry: mocks[text] };
216
+ // Try stripping quotes from the runtime text
217
+ const stripped = stripJsonQuotes(text);
218
+ if (stripped !== text && mocks[stripped])
219
+ return { key: stripped, entry: mocks[stripped] };
220
+ // Try adding quotes to the runtime text (mock key might have quotes)
221
+ const quoted = JSON.stringify(text);
222
+ if (quoted !== text && mocks[quoted])
223
+ return { key: quoted, entry: mocks[quoted] };
224
+ return undefined;
225
+ }
226
+ /**
227
+ * Extracts all user-role message content strings from an LLM call input.
228
+ * Handles OpenAI-style `{ messages: [...] }` and plain message arrays.
229
+ */
230
+ export function extractUserPrompts(input) {
231
+ if (!input || typeof input !== 'object')
232
+ return [];
233
+ const o = input;
234
+ const msgs = Array.isArray(o.messages) ? o.messages : (Array.isArray(input) ? input : null);
235
+ if (!msgs)
236
+ return [];
237
+ const results = [];
238
+ for (const m of msgs) {
239
+ if (m && typeof m === 'object') {
240
+ const msg = m;
241
+ if (msg.role === 'user' && typeof msg.content === 'string')
242
+ results.push(msg.content);
243
+ }
244
+ }
245
+ return results;
246
+ }
247
+ /**
248
+ * Returns a shallow copy of `input` with all user-role messages whose content
249
+ * matches `originalText` replaced with `newText`.
250
+ */
251
+ export function replaceUserPrompt(input, originalText, newText) {
252
+ if (!input || typeof input !== 'object')
253
+ return input;
254
+ const o = input;
255
+ const replaceInMsgs = (msgs) => msgs.map(m => {
256
+ if (m && typeof m === 'object') {
257
+ const msg = m;
258
+ if (msg.role === 'user' && typeof msg.content === 'string' && msg.content === originalText) {
259
+ return { ...msg, content: newText };
260
+ }
261
+ }
262
+ return m;
263
+ });
264
+ if (Array.isArray(input))
265
+ return replaceInMsgs(input);
266
+ if (Array.isArray(o.messages))
267
+ return { ...o, messages: replaceInMsgs(o.messages) };
268
+ return input;
269
+ }
270
+ /**
271
+ * If user prompt mocks are configured, applies all matching replacements to `input`.
272
+ * Returns modified input or `undefined` if no replacements applied.
273
+ *
274
+ * `__ELASTICDASH_USER_PROMPT_MOCKS__` is `Record<string, UserPromptMockEntry>` keyed
275
+ * by original user message text.
276
+ *
277
+ * Call counting is per unique text — "the x-th LLM call where this text appears".
278
+ */
279
+ export function resolveUserPromptMock(input) {
280
+ const g = globalThis;
281
+ const mocks = g['__ELASTICDASH_USER_PROMPT_MOCKS__'];
282
+ if (!mocks || Object.keys(mocks).length === 0)
283
+ return undefined;
284
+ const userPrompts = extractUserPrompts(input);
285
+ if (userPrompts.length === 0)
286
+ return undefined;
287
+ // Initialise per-text call counters
288
+ if (!g['__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__']) {
289
+ g['__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__'] = {};
290
+ }
291
+ const counters = g['__ELASTICDASH_USER_PROMPT_CALL_COUNTERS__'];
292
+ // Determine which texts in this call have active mock entries
293
+ const uniqueTexts = Array.from(new Set(userPrompts));
294
+ let modified = false;
295
+ let result = input;
296
+ for (const text of uniqueTexts) {
297
+ const match = lookupMockEntry(mocks, text);
298
+ if (!match || match.entry.mode === 'live')
299
+ continue;
300
+ const entry = match.entry;
301
+ // Increment counter for this text (this is the x-th call where this text appears)
302
+ counters[match.key] = (counters[match.key] ?? 0) + 1;
303
+ const callNumber = counters[match.key];
304
+ if (entry.mode === 'replace-all') {
305
+ result = replaceUserPrompt(result, text, entry.replacement);
306
+ modified = true;
307
+ }
308
+ else if (entry.mode === 'replace-specific') {
309
+ const indices = entry.callIndices ?? [];
310
+ if (indices.includes(callNumber)) {
311
+ result = replaceUserPrompt(result, text, entry.replacement);
312
+ modified = true;
313
+ }
314
+ }
315
+ }
316
+ return modified ? result : undefined;
317
+ }
318
+ /**
319
+ * Resolves whether the current call to `modelName` should be mocked.
320
+ * Mirrors `resolveMock` but reads `__ELASTICDASH_AI_MOCKS__` and
321
+ * `__ELASTICDASH_AI_CALL_COUNTERS__`.
322
+ */
323
+ /**
324
+ * Standalone utility: applies all matching user prompt mock replacements to
325
+ * a messages array (or LLM input object). Works without ALS — takes the mock
326
+ * config and call counters as explicit parameters.
327
+ *
328
+ * Returns the modified input, or the original input unchanged if no mocks matched.
329
+ */
330
+ export function applyUserPromptMocks(input, userPromptMocks, callCounters) {
331
+ if (!userPromptMocks || Object.keys(userPromptMocks).length === 0)
332
+ return input;
333
+ const userPrompts = extractUserPrompts(input);
334
+ if (userPrompts.length === 0)
335
+ return input;
336
+ const counters = callCounters ?? {};
337
+ const uniqueTexts = Array.from(new Set(userPrompts));
338
+ let modified = false;
339
+ let result = input;
340
+ for (const text of uniqueTexts) {
341
+ const match = lookupMockEntry(userPromptMocks, text);
342
+ if (!match || match.entry.mode === 'live')
343
+ continue;
344
+ const entry = match.entry;
345
+ counters[match.key] = (counters[match.key] ?? 0) + 1;
346
+ const callNumber = counters[match.key];
347
+ if (entry.mode === 'replace-all') {
348
+ result = replaceUserPrompt(result, text, entry.replacement);
349
+ modified = true;
350
+ }
351
+ else if (entry.mode === 'replace-specific') {
352
+ const indices = entry.callIndices ?? [];
353
+ if (indices.includes(callNumber)) {
354
+ result = replaceUserPrompt(result, text, entry.replacement);
355
+ modified = true;
356
+ }
357
+ }
358
+ }
359
+ return modified ? result : input;
360
+ }
361
+ /**
362
+ * Standalone utility: applies system prompt mock replacement to an LLM input
363
+ * object. Works without ALS — takes the mock config and call counters as
364
+ * explicit parameters.
365
+ *
366
+ * Returns the modified input, or the original input unchanged if no mock matched.
367
+ */
368
+ export function applySystemPromptMocks(input, promptMocks, callCounters) {
369
+ if (!promptMocks || Object.keys(promptMocks).length === 0)
370
+ return input;
371
+ const systemPrompt = extractSystemPrompt(input);
372
+ if (systemPrompt === undefined)
373
+ return input;
374
+ const match = lookupMockEntry(promptMocks, systemPrompt);
375
+ if (!match)
376
+ return input;
377
+ const entry = match.entry;
378
+ // Legacy format: plain string replacement (treat as replace-all)
379
+ if (typeof entry === 'string') {
380
+ return replaceSystemPrompt(input, entry);
381
+ }
382
+ if (entry.mode === 'live')
383
+ return input;
384
+ const counters = callCounters ?? {};
385
+ counters[match.key] = (counters[match.key] ?? 0) + 1;
386
+ const callNumber = counters[match.key];
387
+ if (entry.mode === 'replace-all') {
388
+ return replaceSystemPrompt(input, entry.replacement);
389
+ }
390
+ if (entry.mode === 'replace-specific') {
391
+ const indices = entry.callIndices ?? [];
392
+ if (indices.includes(callNumber)) {
393
+ return replaceSystemPrompt(input, entry.replacement);
394
+ }
395
+ }
396
+ return input;
397
+ }
398
+ export function resolveAIMock(modelName) {
399
+ const g = globalThis;
400
+ const mocks = g['__ELASTICDASH_AI_MOCKS__'];
401
+ if (!mocks)
402
+ return { mocked: false };
403
+ const entry = mocks[modelName];
404
+ if (!entry || entry.mode === 'live')
405
+ return { mocked: false };
406
+ if (!g['__ELASTICDASH_AI_CALL_COUNTERS__']) {
407
+ g['__ELASTICDASH_AI_CALL_COUNTERS__'] = {};
408
+ }
409
+ const counters = g['__ELASTICDASH_AI_CALL_COUNTERS__'];
410
+ counters[modelName] = (counters[modelName] ?? 0) + 1;
411
+ const callNumber = counters[modelName];
412
+ if (entry.mode === 'mock-all') {
413
+ const data = entry.mockData ?? {};
414
+ const raw = data[callNumber] !== undefined ? data[callNumber] : data[0];
415
+ return { mocked: true, result: normaliseMockResult(raw) };
416
+ }
417
+ if (entry.mode === 'mock-specific') {
418
+ const indices = entry.callIndices ?? [];
419
+ if (indices.includes(callNumber)) {
420
+ const data = entry.mockData ?? {};
421
+ return { mocked: true, result: normaliseMockResult(data[callNumber]) };
422
+ }
423
+ return { mocked: false };
424
+ }
425
+ return { mocked: false };
426
+ }
427
+ //# sourceMappingURL=mock-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-resolver.js","sourceRoot":"","sources":["../../src/internals/mock-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { expect } from 'expect';
2
+ import type { CustomStepKind } from '../trace-adapter/context.js';
3
+ interface LLMStepConfig {
4
+ model?: string;
5
+ contains?: string;
6
+ promptContains?: string;
7
+ outputContains?: string;
8
+ provider?: string;
9
+ times?: number;
10
+ minTimes?: number;
11
+ maxTimes?: number;
12
+ }
13
+ interface CustomStepConfig {
14
+ kind?: CustomStepKind;
15
+ name?: string;
16
+ tag?: string;
17
+ contains?: string;
18
+ resultContains?: string;
19
+ payloadContains?: string;
20
+ metadataContains?: string;
21
+ times?: number;
22
+ minTimes?: number;
23
+ maxTimes?: number;
24
+ }
25
+ interface PromptWhereConfig {
26
+ filterContains: string;
27
+ requireContains?: string;
28
+ requireNotContains?: string;
29
+ times?: number;
30
+ minTimes?: number;
31
+ maxTimes?: number;
32
+ index?: number;
33
+ nth?: number;
34
+ }
35
+ type SupportedProvider = 'openai' | 'claude' | 'gemini' | 'grok' | 'kimi';
36
+ interface SemanticMatchOptions {
37
+ provider?: SupportedProvider;
38
+ model?: string;
39
+ sdk?: unknown;
40
+ apiKey?: string;
41
+ baseURL?: string;
42
+ }
43
+ type EvaluationTarget = 'prompt' | 'result';
44
+ interface EvaluationCondition {
45
+ greaterThan?: number;
46
+ lessThan?: number;
47
+ atLeast?: number;
48
+ atMost?: number;
49
+ equals?: number;
50
+ }
51
+ interface EvaluateOutputMetricConfig {
52
+ evaluationPrompt: string;
53
+ target?: EvaluationTarget;
54
+ index?: number;
55
+ nth?: number;
56
+ condition?: EvaluationCondition;
57
+ provider?: SupportedProvider;
58
+ model?: string;
59
+ sdk?: unknown;
60
+ apiKey?: string;
61
+ baseURL?: string;
62
+ }
63
+ export interface LLMCallResult {
64
+ content: string;
65
+ durationMs: number;
66
+ usage?: {
67
+ inputTokens: number;
68
+ outputTokens: number;
69
+ totalTokens: number;
70
+ };
71
+ }
72
+ export declare function callProviderLLM(prompt: string, options?: SemanticMatchOptions, systemPrompt?: string, maxTokens?: number, temperature?: number): Promise<LLMCallResult>;
73
+ declare module 'expect' {
74
+ interface Matchers<R> {
75
+ toHaveLLMStep(config?: LLMStepConfig): R;
76
+ toCallTool(toolName: string): R;
77
+ toMatchSemanticOutput(expected: string, options?: SemanticMatchOptions): R;
78
+ toHaveCustomStep(config?: CustomStepConfig): R;
79
+ /**
80
+ * Filter prompts that contain `filterContains`, then assert additional requirements.
81
+ * Example: prompts containing "A" must also contain "B".
82
+ */
83
+ toHavePromptWhere(config: PromptWhereConfig): R;
84
+ /**
85
+ * Evaluate a specific LLM step's prompt or result via an LLM and assert a numeric metric condition (0.0–1.0).
86
+ */
87
+ toEvaluateOutputMetric(config: EvaluateOutputMetricConfig): Promise<R>;
88
+ }
89
+ }
90
+ /**
91
+ * Register all AI-specific custom matchers onto the `expect` instance.
92
+ * Call this once on runner startup.
93
+ */
94
+ export declare function registerMatchers(): void;
95
+ export { expect };
96
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matchers/index.ts"],"names":[],"mappings":"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"}