@evalops/maestro 0.10.50 → 0.10.51

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 (406) hide show
  1. package/dist/agent/agent-outcome.d.ts +54 -0
  2. package/dist/agent/agent-outcome.d.ts.map +1 -0
  3. package/dist/agent/agent-outcome.js +142 -0
  4. package/dist/agent/agent-outcome.js.map +1 -0
  5. package/dist/agent/agent-resume.d.ts.map +1 -1
  6. package/dist/agent/agent-resume.js +3 -3
  7. package/dist/agent/agent-resume.js.map +1 -1
  8. package/dist/agent/agent-run-summary.d.ts +37 -0
  9. package/dist/agent/agent-run-summary.d.ts.map +1 -0
  10. package/dist/agent/agent-run-summary.js +15 -0
  11. package/dist/agent/agent-run-summary.js.map +1 -0
  12. package/dist/agent/agent-work-board.d.ts +82 -0
  13. package/dist/agent/agent-work-board.d.ts.map +1 -0
  14. package/dist/agent/agent-work-board.js +312 -0
  15. package/dist/agent/agent-work-board.js.map +1 -0
  16. package/dist/agent/auto-compaction.d.ts +7 -2
  17. package/dist/agent/auto-compaction.d.ts.map +1 -1
  18. package/dist/agent/auto-compaction.js +23 -10
  19. package/dist/agent/auto-compaction.js.map +1 -1
  20. package/dist/agent/mission-artifacts.d.ts +62 -0
  21. package/dist/agent/mission-artifacts.d.ts.map +1 -0
  22. package/dist/agent/mission-artifacts.js +438 -0
  23. package/dist/agent/mission-artifacts.js.map +1 -0
  24. package/dist/agent/mission-manifest.d.ts +139 -3
  25. package/dist/agent/mission-manifest.d.ts.map +1 -1
  26. package/dist/agent/mission-manifest.js +549 -3
  27. package/dist/agent/mission-manifest.js.map +1 -1
  28. package/dist/agent/mission-store.d.ts +80 -0
  29. package/dist/agent/mission-store.d.ts.map +1 -0
  30. package/dist/agent/mission-store.js +603 -0
  31. package/dist/agent/mission-store.js.map +1 -0
  32. package/dist/agent/modes.d.ts +2 -2
  33. package/dist/agent/modes.d.ts.map +1 -1
  34. package/dist/agent/modes.js +10 -3
  35. package/dist/agent/modes.js.map +1 -1
  36. package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
  37. package/dist/agent/providers/codex-app-server.js +1 -3
  38. package/dist/agent/providers/codex-app-server.js.map +1 -1
  39. package/dist/agent/providers/google-gemini-cli.js +203 -107
  40. package/dist/agent/providers/google.js +100 -41
  41. package/dist/agent/providers/scripted.d.ts.map +1 -1
  42. package/dist/agent/providers/scripted.js +1 -3
  43. package/dist/agent/providers/scripted.js.map +1 -1
  44. package/dist/agent/providers/validation.d.ts.map +1 -1
  45. package/dist/agent/providers/validation.js +1 -3
  46. package/dist/agent/providers/validation.js.map +1 -1
  47. package/dist/agent/providers/vertex.js +203 -107
  48. package/dist/agent/snapshot-store.d.ts +32 -0
  49. package/dist/agent/snapshot-store.d.ts.map +1 -0
  50. package/dist/agent/snapshot-store.js +195 -0
  51. package/dist/agent/snapshot-store.js.map +1 -0
  52. package/dist/agent/specialist-profiles.d.ts +36 -0
  53. package/dist/agent/specialist-profiles.d.ts.map +1 -0
  54. package/dist/agent/specialist-profiles.js +159 -0
  55. package/dist/agent/specialist-profiles.js.map +1 -0
  56. package/dist/agent/subagent-specs.d.ts +4 -1
  57. package/dist/agent/subagent-specs.d.ts.map +1 -1
  58. package/dist/agent/subagent-specs.js +81 -8
  59. package/dist/agent/subagent-specs.js.map +1 -1
  60. package/dist/agent/swarm/coverage-gate.d.ts +37 -0
  61. package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
  62. package/dist/agent/swarm/coverage-gate.js +48 -0
  63. package/dist/agent/swarm/coverage-gate.js.map +1 -0
  64. package/dist/agent/swarm/executor.d.ts +1 -0
  65. package/dist/agent/swarm/executor.d.ts.map +1 -1
  66. package/dist/agent/swarm/executor.js +151 -15
  67. package/dist/agent/swarm/executor.js.map +1 -1
  68. package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
  69. package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
  70. package/dist/agent/swarm/orchestrator-prompt.js +48 -0
  71. package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
  72. package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
  73. package/dist/agent/swarm/plan-parser.js +27 -2
  74. package/dist/agent/swarm/plan-parser.js.map +1 -1
  75. package/dist/agent/swarm/types.d.ts +17 -0
  76. package/dist/agent/swarm/types.d.ts.map +1 -1
  77. package/dist/agent/swarm/types.js.map +1 -1
  78. package/dist/agent/swarm/validation-directive.d.ts +21 -0
  79. package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
  80. package/dist/agent/swarm/validation-directive.js +25 -0
  81. package/dist/agent/swarm/validation-directive.js.map +1 -0
  82. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  83. package/dist/agent/transport/tool-execution-bridge.js +4 -1
  84. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  85. package/dist/api/enterprise-routes.d.ts.map +1 -1
  86. package/dist/api/enterprise-routes.js +87 -10
  87. package/dist/api/enterprise-routes.js.map +1 -1
  88. package/dist/api/org-settings-merge.d.ts +12 -0
  89. package/dist/api/org-settings-merge.d.ts.map +1 -0
  90. package/dist/api/org-settings-merge.js +38 -0
  91. package/dist/api/org-settings-merge.js.map +1 -0
  92. package/dist/api/user-settings-merge.d.ts +16 -0
  93. package/dist/api/user-settings-merge.d.ts.map +1 -0
  94. package/dist/api/user-settings-merge.js +37 -0
  95. package/dist/api/user-settings-merge.js.map +1 -0
  96. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
  97. package/dist/app-server/daemon-lifecycle-api.js +1 -3
  98. package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
  99. package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
  100. package/dist/app-server/external-agent-import-api.js +1 -3
  101. package/dist/app-server/external-agent-import-api.js.map +1 -1
  102. package/dist/app-server/network-governance-api.d.ts.map +1 -1
  103. package/dist/app-server/network-governance-api.js +1 -3
  104. package/dist/app-server/network-governance-api.js.map +1 -1
  105. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
  106. package/dist/app-server/plugin-bundle-api.js +1 -3
  107. package/dist/app-server/plugin-bundle-api.js.map +1 -1
  108. package/dist/app-server/policy-control-api.d.ts.map +1 -1
  109. package/dist/app-server/policy-control-api.js +1 -3
  110. package/dist/app-server/policy-control-api.js.map +1 -1
  111. package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
  112. package/dist/app-server/protocol-modes-api.js +1 -3
  113. package/dist/app-server/protocol-modes-api.js.map +1 -1
  114. package/dist/cli/args.d.ts +2 -0
  115. package/dist/cli/args.d.ts.map +1 -1
  116. package/dist/cli/args.js +15 -0
  117. package/dist/cli/args.js.map +1 -1
  118. package/dist/cli/commands/a2a.d.ts.map +1 -1
  119. package/dist/cli/commands/a2a.js +1 -3
  120. package/dist/cli/commands/a2a.js.map +1 -1
  121. package/dist/cli/commands/agents.d.ts +4 -0
  122. package/dist/cli/commands/agents.d.ts.map +1 -1
  123. package/dist/cli/commands/agents.js +149 -0
  124. package/dist/cli/commands/agents.js.map +1 -1
  125. package/dist/cli/commands/mission.d.ts +4 -0
  126. package/dist/cli/commands/mission.d.ts.map +1 -0
  127. package/dist/cli/commands/mission.js +196 -0
  128. package/dist/cli/commands/mission.js.map +1 -0
  129. package/dist/cli/commands/value.d.ts +10 -0
  130. package/dist/cli/commands/value.d.ts.map +1 -0
  131. package/dist/cli/commands/value.js +33 -0
  132. package/dist/cli/commands/value.js.map +1 -0
  133. package/dist/cli/headless-protocol.d.ts.map +1 -1
  134. package/dist/cli/headless-protocol.js +1 -3
  135. package/dist/cli/headless-protocol.js.map +1 -1
  136. package/dist/cli/help.d.ts.map +1 -1
  137. package/dist/cli/help.js +10 -0
  138. package/dist/cli/help.js.map +1 -1
  139. package/dist/cli/system-prompt.d.ts.map +1 -1
  140. package/dist/cli/system-prompt.js +38 -7
  141. package/dist/cli/system-prompt.js.map +1 -1
  142. package/dist/cli-runtime.js +7756 -2800
  143. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  144. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  145. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  146. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  147. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  148. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  149. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  150. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  152. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  153. package/dist/codex/app-server-client.d.ts.map +1 -1
  154. package/dist/codex/app-server-client.js +1 -3
  155. package/dist/codex/app-server-client.js.map +1 -1
  156. package/dist/codex/compatibility.d.ts.map +1 -1
  157. package/dist/codex/compatibility.js +1 -3
  158. package/dist/codex/compatibility.js.map +1 -1
  159. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  160. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  161. package/dist/codex/subagent-dispatch-table.js +23 -0
  162. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  163. package/dist/context/manifest.d.ts.map +1 -1
  164. package/dist/context/manifest.js +1 -3
  165. package/dist/context/manifest.js.map +1 -1
  166. package/dist/conversation/render-model.d.ts +0 -36
  167. package/dist/conversation/render-model.d.ts.map +1 -1
  168. package/dist/conversation/render-model.js +1 -3
  169. package/dist/conversation/render-model.js.map +1 -1
  170. package/dist/customer-value/ambient-learning.d.ts +75 -0
  171. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  172. package/dist/customer-value/ambient-learning.js +472 -0
  173. package/dist/customer-value/ambient-learning.js.map +1 -0
  174. package/dist/customer-value/internal-helpers.d.ts +13 -0
  175. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  176. package/dist/customer-value/internal-helpers.js +70 -0
  177. package/dist/customer-value/internal-helpers.js.map +1 -0
  178. package/dist/customer-value/report.d.ts +282 -0
  179. package/dist/customer-value/report.d.ts.map +1 -0
  180. package/dist/customer-value/report.js +2085 -0
  181. package/dist/customer-value/report.js.map +1 -0
  182. package/dist/db/schema.d.ts +5 -1
  183. package/dist/db/schema.d.ts.map +1 -1
  184. package/dist/db/schema.js.map +1 -1
  185. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  186. package/dist/evalops/agent-bootstrap.js +1 -3
  187. package/dist/evalops/agent-bootstrap.js.map +1 -1
  188. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  189. package/dist/evalops/agent-mcp-metadata.js +1 -3
  190. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  191. package/dist/index.d.ts +1 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js +1 -0
  194. package/dist/index.js.map +1 -1
  195. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  196. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  197. package/dist/installers/maestro-review-workflow.js +163 -0
  198. package/dist/installers/maestro-review-workflow.js.map +1 -0
  199. package/dist/load-env.d.ts.map +1 -1
  200. package/dist/load-env.js +2 -1
  201. package/dist/load-env.js.map +1 -1
  202. package/dist/main.d.ts.map +1 -1
  203. package/dist/main.js +92 -3
  204. package/dist/main.js.map +1 -1
  205. package/dist/mcp/config.d.ts.map +1 -1
  206. package/dist/mcp/config.js +1 -3
  207. package/dist/mcp/config.js.map +1 -1
  208. package/dist/mcp/elicitation.d.ts.map +1 -1
  209. package/dist/mcp/elicitation.js +1 -3
  210. package/dist/mcp/elicitation.js.map +1 -1
  211. package/dist/mcp/official-registry.d.ts.map +1 -1
  212. package/dist/mcp/official-registry.js +1 -3
  213. package/dist/mcp/official-registry.js.map +1 -1
  214. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  215. package/dist/mcp/workspace-trust.js +1 -3
  216. package/dist/mcp/workspace-trust.js.map +1 -1
  217. package/dist/memory/service-client.d.ts.map +1 -1
  218. package/dist/memory/service-client.js +1 -3
  219. package/dist/memory/service-client.js.map +1 -1
  220. package/dist/models/config-loader.d.ts.map +1 -1
  221. package/dist/models/config-loader.js +1 -3
  222. package/dist/models/config-loader.js.map +1 -1
  223. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  224. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  225. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  226. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  227. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  228. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  229. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  230. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  231. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  232. package/dist/node_modules/@evalops/tui/package.json +1 -1
  233. package/dist/oauth/connectors.d.ts.map +1 -1
  234. package/dist/oauth/connectors.js +1 -3
  235. package/dist/oauth/connectors.js.map +1 -1
  236. package/dist/oauth/evalops.d.ts.map +1 -1
  237. package/dist/oauth/evalops.js +1 -3
  238. package/dist/oauth/evalops.js.map +1 -1
  239. package/dist/platform/a2a-client.d.ts.map +1 -1
  240. package/dist/platform/a2a-client.js +1 -3
  241. package/dist/platform/a2a-client.js.map +1 -1
  242. package/dist/platform/a2a-cockpit.d.ts +1 -0
  243. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  244. package/dist/platform/a2a-cockpit.js +42 -11
  245. package/dist/platform/a2a-cockpit.js.map +1 -1
  246. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  247. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  248. package/dist/platform/a2a-completion-audit.js +7 -11
  249. package/dist/platform/a2a-completion-audit.js.map +1 -1
  250. package/dist/platform/a2a-maestro-peer.js +16 -0
  251. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  252. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  253. package/dist/platform/a2a-peer-pairing.js +1 -3
  254. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  255. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  256. package/dist/platform/a2a-peer-registry.js +1 -3
  257. package/dist/platform/a2a-peer-registry.js.map +1 -1
  258. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  259. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  260. package/dist/platform/a2a-task-ledger.js +207 -11
  261. package/dist/platform/a2a-task-ledger.js.map +1 -1
  262. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  263. package/dist/platform/a2a-work-graph.js +1 -3
  264. package/dist/platform/a2a-work-graph.js.map +1 -1
  265. package/dist/platform/operating-layer.d.ts.map +1 -1
  266. package/dist/platform/operating-layer.js +14 -8
  267. package/dist/platform/operating-layer.js.map +1 -1
  268. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  269. package/dist/platform/tool-execution-client.js +19 -2
  270. package/dist/platform/tool-execution-client.js.map +1 -1
  271. package/dist/providers/auth.d.ts.map +1 -1
  272. package/dist/providers/auth.js +1 -3
  273. package/dist/providers/auth.js.map +1 -1
  274. package/dist/runtime/env.d.ts +9 -1
  275. package/dist/runtime/env.d.ts.map +1 -1
  276. package/dist/runtime/env.js +63 -1
  277. package/dist/runtime/env.js.map +1 -1
  278. package/dist/safety/policy.d.ts.map +1 -1
  279. package/dist/safety/policy.js +1 -4
  280. package/dist/safety/policy.js.map +1 -1
  281. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  282. package/dist/sandbox/docker-sandbox.js +6 -1
  283. package/dist/sandbox/docker-sandbox.js.map +1 -1
  284. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  285. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  286. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  287. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  288. package/dist/server/handlers/platform-a2a-push.js +53 -2
  289. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  290. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  291. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  292. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  293. package/dist/server/headless-runtime-service.d.ts +16 -0
  294. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  295. package/dist/server/headless-runtime-service.js +232 -206
  296. package/dist/server/headless-runtime-service.js.map +1 -1
  297. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  298. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  299. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  300. package/dist/server/pending-request-payload.d.ts.map +1 -1
  301. package/dist/server/pending-request-payload.js +1 -3
  302. package/dist/server/pending-request-payload.js.map +1 -1
  303. package/dist/server/route-auth.d.ts.map +1 -1
  304. package/dist/server/route-auth.js +2 -0
  305. package/dist/server/route-auth.js.map +1 -1
  306. package/dist/server/session-serialization.d.ts.map +1 -1
  307. package/dist/server/session-serialization.js +1 -3
  308. package/dist/server/session-serialization.js.map +1 -1
  309. package/dist/services/compliance/normalize.d.ts.map +1 -1
  310. package/dist/services/compliance/normalize.js +1 -3
  311. package/dist/services/compliance/normalize.js.map +1 -1
  312. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  313. package/dist/services/intelligent-router/normalize.js +1 -3
  314. package/dist/services/intelligent-router/normalize.js.map +1 -1
  315. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  316. package/dist/services/revenue-attribution/normalize.js +1 -3
  317. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  318. package/dist/services/traces/normalize.d.ts.map +1 -1
  319. package/dist/services/traces/normalize.js +1 -3
  320. package/dist/services/traces/normalize.js.map +1 -1
  321. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  322. package/dist/services/workspace-config/normalize.js +1 -3
  323. package/dist/services/workspace-config/normalize.js.map +1 -1
  324. package/dist/skills/composer.d.ts.map +1 -1
  325. package/dist/skills/composer.js +13 -1
  326. package/dist/skills/composer.js.map +1 -1
  327. package/dist/skills/index.d.ts +1 -0
  328. package/dist/skills/index.d.ts.map +1 -1
  329. package/dist/skills/index.js +1 -0
  330. package/dist/skills/index.js.map +1 -1
  331. package/dist/skills/learned-guidelines.d.ts +33 -0
  332. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  333. package/dist/skills/learned-guidelines.js +291 -0
  334. package/dist/skills/learned-guidelines.js.map +1 -0
  335. package/dist/skills/linter.d.ts.map +1 -1
  336. package/dist/skills/linter.js +1 -3
  337. package/dist/skills/linter.js.map +1 -1
  338. package/dist/skills/runtime-activation.d.ts +1 -0
  339. package/dist/skills/runtime-activation.d.ts.map +1 -1
  340. package/dist/skills/runtime-activation.js +2 -3
  341. package/dist/skills/runtime-activation.js.map +1 -1
  342. package/dist/skills/tool.d.ts.map +1 -1
  343. package/dist/skills/tool.js +26 -21
  344. package/dist/skills/tool.js.map +1 -1
  345. package/dist/skills/trust-cache.d.ts +7 -0
  346. package/dist/skills/trust-cache.d.ts.map +1 -1
  347. package/dist/skills/trust-cache.js +16 -0
  348. package/dist/skills/trust-cache.js.map +1 -1
  349. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  350. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  351. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  352. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  353. package/dist/telemetry/maestro-event-bus.js +42 -81
  354. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  355. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  356. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  357. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  358. package/dist/telemetry.d.ts.map +1 -1
  359. package/dist/telemetry.js +54 -43
  360. package/dist/telemetry.js.map +1 -1
  361. package/dist/theme/theme-loader.d.ts.map +1 -1
  362. package/dist/theme/theme-loader.js +1 -3
  363. package/dist/theme/theme-loader.js.map +1 -1
  364. package/dist/tools/apply-patch.d.ts.map +1 -1
  365. package/dist/tools/apply-patch.js +76 -8
  366. package/dist/tools/apply-patch.js.map +1 -1
  367. package/dist/tools/diff-preview.d.ts.map +1 -1
  368. package/dist/tools/diff-preview.js +10 -1
  369. package/dist/tools/diff-preview.js.map +1 -1
  370. package/dist/tools/edit.d.ts.map +1 -1
  371. package/dist/tools/edit.js +17 -0
  372. package/dist/tools/edit.js.map +1 -1
  373. package/dist/tools/write.d.ts.map +1 -1
  374. package/dist/tools/write.js +9 -0
  375. package/dist/tools/write.js.map +1 -1
  376. package/dist/undo/tracker.d.ts +5 -0
  377. package/dist/undo/tracker.d.ts.map +1 -1
  378. package/dist/undo/tracker.js +13 -0
  379. package/dist/undo/tracker.js.map +1 -1
  380. package/dist/utils/fs.d.ts +1 -1
  381. package/dist/utils/fs.d.ts.map +1 -1
  382. package/dist/utils/fs.js +29 -2
  383. package/dist/utils/fs.js.map +1 -1
  384. package/dist/utils/git-stash.d.ts.map +1 -1
  385. package/dist/utils/git-stash.js +15 -8
  386. package/dist/utils/git-stash.js.map +1 -1
  387. package/dist/utils/json.d.ts +11 -0
  388. package/dist/utils/json.d.ts.map +1 -1
  389. package/dist/utils/json.js +9 -0
  390. package/dist/utils/json.js.map +1 -1
  391. package/dist/utils/shell-env.d.ts.map +1 -1
  392. package/dist/utils/shell-env.js +2 -0
  393. package/dist/utils/shell-env.js.map +1 -1
  394. package/dist/utils/url-extractor-git.d.ts +26 -0
  395. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  396. package/dist/utils/url-extractor-git.js +259 -0
  397. package/dist/utils/url-extractor-git.js.map +1 -0
  398. package/dist/utils/url-extractor.d.ts.map +1 -1
  399. package/dist/utils/url-extractor.js +23 -251
  400. package/dist/utils/url-extractor.js.map +1 -1
  401. package/dist/version.json +2 -2
  402. package/package.json +310 -306
  403. package/skills/incident-triage/SKILL.md +19 -1
  404. package/skills/install-code-review/SKILL.md +69 -0
  405. package/skills/security-review/SKILL.md +68 -0
  406. package/skills/security-review/reference/rubric.md +85 -0
@@ -11158,12 +11158,12 @@ var require_logging_utils = __commonJS({
11158
11158
  this.setFilters();
11159
11159
  this.filtersSet = true;
11160
11160
  }
11161
- let logger8 = this.cached.get(namespace);
11162
- if (!logger8) {
11163
- logger8 = this.makeLogger(namespace);
11164
- this.cached.set(namespace, logger8);
11161
+ let logger9 = this.cached.get(namespace);
11162
+ if (!logger9) {
11163
+ logger9 = this.makeLogger(namespace);
11164
+ this.cached.set(namespace, logger9);
11165
11165
  }
11166
- logger8(fields, ...args);
11166
+ logger9(fields, ...args);
11167
11167
  } catch (e2) {
11168
11168
  console.error(e2);
11169
11169
  }
@@ -11308,7 +11308,7 @@ var require_logging_utils = __commonJS({
11308
11308
  } else if (cachedBackend === void 0) {
11309
11309
  cachedBackend = getNodeBackend();
11310
11310
  }
11311
- const logger8 = (() => {
11311
+ const logger9 = (() => {
11312
11312
  let previousBackend = void 0;
11313
11313
  const newLogger = new AdhocDebugLogger(namespace, (fields, ...args) => {
11314
11314
  if (previousBackend !== cachedBackend) {
@@ -11323,8 +11323,8 @@ var require_logging_utils = __commonJS({
11323
11323
  });
11324
11324
  return newLogger;
11325
11325
  })();
11326
- loggerCache.set(namespace, logger8);
11327
- return logger8.func;
11326
+ loggerCache.set(namespace, logger9);
11327
+ return logger9.func;
11328
11328
  }
11329
11329
  }
11330
11330
  });
@@ -11412,14 +11412,14 @@ var require_src4 = __commonJS({
11412
11412
  var gaxios_1 = require_src2();
11413
11413
  var jsonBigint = require_json_bigint();
11414
11414
  var gcp_residency_1 = require_gcp_residency();
11415
- var logger8 = __importStar(require_src3());
11415
+ var logger9 = __importStar(require_src3());
11416
11416
  exports.BASE_PATH = "/computeMetadata/v1";
11417
11417
  exports.HOST_ADDRESS = "http://169.254.169.254";
11418
11418
  exports.SECONDARY_HOST_ADDRESS = "http://metadata.google.internal.";
11419
11419
  exports.HEADER_NAME = "Metadata-Flavor";
11420
11420
  exports.HEADER_VALUE = "Google";
11421
11421
  exports.HEADERS = Object.freeze({ [exports.HEADER_NAME]: exports.HEADER_VALUE });
11422
- var log = logger8.log("gcp-metadata");
11422
+ var log = logger9.log("gcp-metadata");
11423
11423
  exports.METADATA_SERVER_DETECTION = Object.freeze({
11424
11424
  "assume-present": "don't try to ping the metadata server, but assume it's present",
11425
11425
  none: "don't try to ping the metadata server, but don't try to use it either",
@@ -18797,6 +18797,28 @@ function resolveHomePath(value, raw) {
18797
18797
  const expanded = value === "~" ? home : value.startsWith("~/") || value.startsWith("~\\") ? join3(home, value.slice(2)) : value;
18798
18798
  return resolve3(expanded);
18799
18799
  }
18800
+ function homeFromEnv(raw) {
18801
+ return trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir2();
18802
+ }
18803
+ function resolveDataLocalDir(raw) {
18804
+ const home = homeFromEnv(raw);
18805
+ if (process.platform === "darwin") {
18806
+ return join3(home, "Library", "Application Support");
18807
+ }
18808
+ if (process.platform === "win32") {
18809
+ return resolveHomePath(trim(raw.LOCALAPPDATA), raw) ?? resolveHomePath(trim(raw.APPDATA), raw) ?? join3(home, "AppData", "Local");
18810
+ }
18811
+ return resolveHomePath(trim(raw.XDG_DATA_HOME), raw) ?? join3(home, ".local", "share");
18812
+ }
18813
+ function resolveRuntimeDir(raw) {
18814
+ if (process.platform === "darwin") {
18815
+ return resolveDataLocalDir(raw);
18816
+ }
18817
+ const xdgRuntimeDir = resolveHomePath(trim(raw.XDG_RUNTIME_DIR), raw);
18818
+ if (xdgRuntimeDir)
18819
+ return xdgRuntimeDir;
18820
+ return resolveDataLocalDir(raw);
18821
+ }
18800
18822
  function createRuntimeEnv(raw) {
18801
18823
  return Object.freeze({
18802
18824
  logLevel: parseLogLevel2(trim(raw.MAESTRO_LOG_LEVEL)),
@@ -18807,6 +18829,9 @@ function createRuntimeEnv(raw) {
18807
18829
  disableKeychain: parseBoolean(trim(raw.MAESTRO_DISABLE_KEYCHAIN)),
18808
18830
  maestroHome: trim(raw.MAESTRO_HOME) ?? join3(homedir2(), ".maestro"),
18809
18831
  maestroAgentDir: trim(raw.MAESTRO_AGENT_DIR),
18832
+ missionStoreDir: resolveHomePath(trim(raw.MAESTRO_MISSION_STORE_DIR), raw),
18833
+ snapshotBlobDir: resolveHomePath(trim(raw.MAESTRO_SNAPSHOT_BLOB_DIR), raw),
18834
+ skillTrustStrict: parseBoolean(trim(raw.MAESTRO_SKILL_TRUST_STRICT)),
18810
18835
  telemetryEnabled: parseOptionalBoolean(trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY)),
18811
18836
  telemetryFlag: trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),
18812
18837
  beaconFile: resolveHomePath(trim(raw.MAESTRO_BEACON_FILE), raw),
@@ -18830,10 +18855,31 @@ function createRuntimeEnv(raw) {
18830
18855
  ]),
18831
18856
  meterBaseUrl: firstNonEmpty(raw, METER_BASE_URL_VARS),
18832
18857
  meterAccessToken: firstNonEmpty(raw, METER_ACCESS_TOKEN_VARS),
18833
- meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS)
18858
+ meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS),
18859
+ ambientLearnerFile: resolveHomePath(trim(raw.MAESTRO_AMBIENT_LEARNER_FILE), raw),
18860
+ ambientLearnerDefaultFile: join3(resolveDataLocalDir(raw), "ambient-agent", "learner.json"),
18861
+ ambientSocketFile: join3(resolveRuntimeDir(raw), "ambient-agent.sock")
18834
18862
  });
18835
18863
  }
18864
+ function isTestProcess() {
18865
+ return process.env.NODE_ENV === "test" || process.env.VITEST === "true";
18866
+ }
18867
+ function maybeReportEarlyRuntimeEnvAccess() {
18868
+ if (processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__) {
18869
+ return;
18870
+ }
18871
+ const message = "defaultRuntimeEnv() was read before loadAndFinalizeEnv() completed. Bootstrap entry points must finish dotenv loading and security scrubbing before runtime env snapshots are created.";
18872
+ if (process.env.MAESTRO_RUNTIME_ENV_STRICT_BOOTSTRAP === "1") {
18873
+ throw new Error(message);
18874
+ }
18875
+ if (isTestProcess() || processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__) {
18876
+ return;
18877
+ }
18878
+ processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__ = true;
18879
+ console.warn(`[maestro] ${message}`);
18880
+ }
18836
18881
  function defaultRuntimeEnv() {
18882
+ maybeReportEarlyRuntimeEnvAccess();
18837
18883
  if (!processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__) {
18838
18884
  processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__ = createRuntimeEnv(process.env);
18839
18885
  }
@@ -19041,6 +19087,16 @@ var init_logger = __esm({
19041
19087
  }
19042
19088
  });
19043
19089
 
19090
+ // dist/utils/json.js
19091
+ var logger2;
19092
+ var init_json = __esm({
19093
+ "dist/utils/json.js"() {
19094
+ "use strict";
19095
+ init_logger();
19096
+ logger2 = createLogger("json-utils");
19097
+ }
19098
+ });
19099
+
19044
19100
  // dist/safety/credential-patterns.js
19045
19101
  import { createHash, randomBytes } from "node:crypto";
19046
19102
  function createGlobalPatternRegex(def) {
@@ -19400,12 +19456,12 @@ var init_secret_redactor = __esm({
19400
19456
  });
19401
19457
 
19402
19458
  // dist/utils/retry.js
19403
- var logger3;
19459
+ var logger4;
19404
19460
  var init_retry = __esm({
19405
19461
  "dist/utils/retry.js"() {
19406
19462
  "use strict";
19407
19463
  init_logger();
19408
- logger3 = createLogger("retry");
19464
+ logger4 = createLogger("retry");
19409
19465
  }
19410
19466
  });
19411
19467
 
@@ -34751,11 +34807,11 @@ var parseLogLevel = (maybeLevel, sourceName, client) => {
34751
34807
  };
34752
34808
  function noop2() {
34753
34809
  }
34754
- function makeLogFn(fnLevel, logger8, logLevel) {
34755
- if (!logger8 || levelNumbers[fnLevel] > levelNumbers[logLevel]) {
34810
+ function makeLogFn(fnLevel, logger9, logLevel) {
34811
+ if (!logger9 || levelNumbers[fnLevel] > levelNumbers[logLevel]) {
34756
34812
  return noop2;
34757
34813
  } else {
34758
- return logger8[fnLevel].bind(logger8);
34814
+ return logger9[fnLevel].bind(logger9);
34759
34815
  }
34760
34816
  }
34761
34817
  var noopLogger = {
@@ -34767,22 +34823,22 @@ var noopLogger = {
34767
34823
  var cachedLoggers = /* @__PURE__ */ new WeakMap();
34768
34824
  function loggerFor(client) {
34769
34825
  var _a2;
34770
- const logger8 = client.logger;
34826
+ const logger9 = client.logger;
34771
34827
  const logLevel = (_a2 = client.logLevel) !== null && _a2 !== void 0 ? _a2 : "off";
34772
- if (!logger8) {
34828
+ if (!logger9) {
34773
34829
  return noopLogger;
34774
34830
  }
34775
- const cachedLogger = cachedLoggers.get(logger8);
34831
+ const cachedLogger = cachedLoggers.get(logger9);
34776
34832
  if (cachedLogger && cachedLogger[0] === logLevel) {
34777
34833
  return cachedLogger[1];
34778
34834
  }
34779
34835
  const levelLogger = {
34780
- error: makeLogFn("error", logger8, logLevel),
34781
- warn: makeLogFn("warn", logger8, logLevel),
34782
- info: makeLogFn("info", logger8, logLevel),
34783
- debug: makeLogFn("debug", logger8, logLevel)
34836
+ error: makeLogFn("error", logger9, logLevel),
34837
+ warn: makeLogFn("warn", logger9, logLevel),
34838
+ info: makeLogFn("info", logger9, logLevel),
34839
+ debug: makeLogFn("debug", logger9, logLevel)
34784
34840
  };
34785
- cachedLoggers.set(logger8, [logLevel, levelLogger]);
34841
+ cachedLoggers.set(logger9, [logLevel, levelLogger]);
34786
34842
  return levelLogger;
34787
34843
  }
34788
34844
  var formatRequestDetails = (details) => {
@@ -34812,7 +34868,7 @@ var Stream3 = class _Stream {
34812
34868
  }
34813
34869
  static fromSSEResponse(response, controller, client) {
34814
34870
  let consumed = false;
34815
- const logger8 = client ? loggerFor(client) : console;
34871
+ const logger9 = client ? loggerFor(client) : console;
34816
34872
  function iterator() {
34817
34873
  return __asyncGenerator(this, arguments, function* iterator_1() {
34818
34874
  var _a2, e_1, _b, _c;
@@ -34836,8 +34892,8 @@ var Stream3 = class _Stream {
34836
34892
  try {
34837
34893
  yield yield __await(JSON.parse(sse.data));
34838
34894
  } catch (e2) {
34839
- logger8.error(`Could not parse message into JSON:`, sse.data);
34840
- logger8.error(`From chunk:`, sse.raw);
34895
+ logger9.error(`Could not parse message into JSON:`, sse.data);
34896
+ logger9.error(`From chunk:`, sse.raw);
34841
34897
  throw e2;
34842
34898
  }
34843
34899
  }
@@ -37405,6 +37461,9 @@ import { Type as Type3 } from "@sinclair/typebox";
37405
37461
  // dist/utils/config-substitution.js
37406
37462
  init_path_expansion();
37407
37463
 
37464
+ // dist/models/config-loader.js
37465
+ init_json();
37466
+
37408
37467
  // dist/utils/jsonc-umd.js
37409
37468
  import { parse as parseJsonc, printParseErrorCode } from "jsonc-parser";
37410
37469
 
@@ -37447,7 +37506,7 @@ function compileTypeboxSchema(schema) {
37447
37506
  }
37448
37507
 
37449
37508
  // dist/models/config-loader.js
37450
- var logger2 = createLogger("models:registry");
37509
+ var logger3 = createLogger("models:registry");
37451
37510
  var headersSchema = Type3.Optional(Type3.Record(Type3.String(), Type3.String()));
37452
37511
  var compatSchema = Type3.Optional(Type3.Object({
37453
37512
  supportsStore: Type3.Optional(Type3.Boolean()),
@@ -37522,7 +37581,7 @@ init_retry();
37522
37581
  // dist/providers/http-hooks.js
37523
37582
  init_logger();
37524
37583
  init_secret_redactor();
37525
- var logger4 = createLogger("providers:http-hooks");
37584
+ var logger5 = createLogger("providers:http-hooks");
37526
37585
  var SENSITIVE_HEADERS_EXACT = /* @__PURE__ */ new Set([
37527
37586
  "authorization",
37528
37587
  "x-api-key",
@@ -37651,7 +37710,7 @@ var HttpHooksManager = class {
37651
37710
  }
37652
37711
  }
37653
37712
  } catch (error) {
37654
- logger4.warn("Request hook handler error", {
37713
+ logger5.warn("Request hook handler error", {
37655
37714
  error: sanitizeWithStaticMask(error instanceof Error ? error.message : String(error)),
37656
37715
  requestId
37657
37716
  });
@@ -37688,7 +37747,7 @@ var HttpHooksManager = class {
37688
37747
  try {
37689
37748
  await handler(event);
37690
37749
  } catch (err) {
37691
- logger4.warn("Response hook handler error", {
37750
+ logger5.warn("Response hook handler error", {
37692
37751
  error: err instanceof Error ? err.message : String(err),
37693
37752
  requestId
37694
37753
  });
@@ -37699,7 +37758,7 @@ var HttpHooksManager = class {
37699
37758
  var httpHooks = new HttpHooksManager();
37700
37759
 
37701
37760
  // dist/providers/network-config.js
37702
- var logger5 = createLogger("providers:network");
37761
+ var logger6 = createLogger("providers:network");
37703
37762
  var DEFAULT_CONFIG = {
37704
37763
  timeout: 12e4,
37705
37764
  maxRetries: 3,
@@ -37778,7 +37837,7 @@ function loadProviderConfigs() {
37778
37837
  }
37779
37838
  }
37780
37839
  } catch (error) {
37781
- logger5.warn("Failed to parse providers.json", { error });
37840
+ logger6.warn("Failed to parse providers.json", { error });
37782
37841
  }
37783
37842
  return configs;
37784
37843
  }
@@ -37803,7 +37862,7 @@ function getProviderNetworkConfig(provider) {
37803
37862
  }
37804
37863
 
37805
37864
  // dist/providers/stream-idle-timeout.js
37806
- var logger6 = createLogger("providers:stream-idle-timeout");
37865
+ var logger7 = createLogger("providers:stream-idle-timeout");
37807
37866
  var StreamIdleTimeoutError = class extends Error {
37808
37867
  constructor(idleMs, provider) {
37809
37868
  super(`Stream idle timeout: no data received for ${Math.round(idleMs / 1e3)}s from ${provider}`);
@@ -37842,7 +37901,7 @@ async function* withAbortableIdleTimeout(iterable, options) {
37842
37901
  const timeoutPromise = new Promise((_, reject) => {
37843
37902
  timeoutId = setTimeout(() => {
37844
37903
  const error = new StreamIdleTimeoutError(timeoutMs, options.provider);
37845
- logger6.warn("Stream idle timeout", {
37904
+ logger7.warn("Stream idle timeout", {
37846
37905
  provider: options.provider,
37847
37906
  timeoutMs
37848
37907
  });
@@ -37937,7 +37996,7 @@ function parseStreamingJson(partialJson) {
37937
37996
  }
37938
37997
 
37939
37998
  // dist/agent/providers/tool-arguments.js
37940
- function isRecord(value) {
37999
+ function isRecord2(value) {
37941
38000
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
37942
38001
  }
37943
38002
  function describeValueType(value) {
@@ -37967,7 +38026,7 @@ function createToolArgumentNormalizer(options) {
37967
38026
  }
37968
38027
  function parseFromString(raw, context, parseOptions) {
37969
38028
  const parsed = parseStreamingJson(raw);
37970
- if (isRecord(parsed)) {
38029
+ if (isRecord2(parsed)) {
37971
38030
  return parsed;
37972
38031
  }
37973
38032
  if (parseOptions?.logInvalid ?? true) {
@@ -37982,7 +38041,7 @@ function createToolArgumentNormalizer(options) {
37982
38041
  logInvalid: normalizeOptions?.logInvalid
37983
38042
  });
37984
38043
  }
37985
- if (isRecord(raw)) {
38044
+ if (isRecord2(raw)) {
37986
38045
  if (normalizeOptions?.expectString) {
37987
38046
  warnOnce("raw:object", `${options.providerLabel} tool call arguments were object, expected string`, buildWarningDetails(context));
37988
38047
  }
@@ -38005,7 +38064,7 @@ function createToolArgumentNormalizer(options) {
38005
38064
  partialJson: raw
38006
38065
  };
38007
38066
  }
38008
- if (isRecord(raw)) {
38067
+ if (isRecord2(raw)) {
38009
38068
  if (normalizeOptions?.expectString) {
38010
38069
  warnOnce("raw:object", `${options.providerLabel} tool call arguments were object, expected string`, buildWarningDetails(context));
38011
38070
  }
@@ -38150,9 +38209,9 @@ ${block.thinking}
38150
38209
  }
38151
38210
 
38152
38211
  // dist/agent/providers/google.js
38153
- var logger7 = createLogger("agent:providers:google");
38212
+ var logger8 = createLogger("agent:providers:google");
38154
38213
  var toolArgumentNormalizer = createToolArgumentNormalizer({
38155
- logger: logger7,
38214
+ logger: logger8,
38156
38215
  providerLabel: "Google"
38157
38216
  });
38158
38217
  var toolCallCounter = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"scripted.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,uBAAuB,EAEvB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,KAAK,EACX,GAAG,EAEH,qBAAqB,EACrB,OAAO,EACP,KAAK,EACL,aAAa,EAGb,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAG5D,KAAK,gBAAgB,GAAG,uBAAuB,CAAC;AAwIhD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACX,gBAAgB,CAyQlB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEnE;AAED,wBAAsB,8BAA8B,CACnD,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAwJD,wBAAuB,oBAAoB,CAC1C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACpB,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CAwJtD"}
1
+ {"version":3,"file":"scripted.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,uBAAuB,EAEvB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EACX,GAAG,EAEH,qBAAqB,EACrB,OAAO,EACP,KAAK,EACL,aAAa,EAGb,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAG5D,KAAK,gBAAgB,GAAG,uBAAuB,CAAC;AAoIhD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACX,gBAAgB,CAyQlB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEnE;AAED,wBAAsB,8BAA8B,CACnD,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAwJD,wBAAuB,oBAAoB,CAC1C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACpB,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CAwJtD"}
@@ -1,4 +1,5 @@
1
1
  import { MAESTRO_SCRIPTED_SCENARIO_SCHEMA } from "@evalops/contracts";
2
+ import { isRecord } from "../../utils/json.js";
2
3
  import { readScenarioJsonSource, readScenarioJsonSourceSync, scenarioSourceLabel, } from "../scenario-source.js";
3
4
  export const SCRIPTED_REPLAY_PROVIDER = "scripted-replay";
4
5
  export const SCRIPTED_REPLAY_MODEL_ID = "maestro-replay-v1";
@@ -24,9 +25,6 @@ const HYDRATION_MODES = [
24
25
  "fixture_workspace",
25
26
  "frozen_archive",
26
27
  ];
27
- function isRecord(value) {
28
- return typeof value === "object" && value !== null && !Array.isArray(value);
29
- }
30
28
  function requireOptionalNonEmptyString(value, label) {
31
29
  if (value !== undefined &&
32
30
  (typeof value !== "string" || value.length === 0)) {
@@ -1 +1 @@
1
- {"version":3,"file":"scripted.js","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tMaestroScriptedScenario,\n\tMaestroScriptedStatement,\n} from \"@evalops/contracts\";\nimport { MAESTRO_SCRIPTED_SCENARIO_SCHEMA } from \"@evalops/contracts\";\nimport {\n\treadScenarioJsonSource,\n\treadScenarioJsonSourceSync,\n\tscenarioSourceLabel,\n} from \"../scenario-source.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tModel,\n\tStreamOptions,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\n\nexport const SCRIPTED_REPLAY_PROVIDER = \"scripted-replay\";\nexport const SCRIPTED_REPLAY_MODEL_ID = \"maestro-replay-v1\";\n\ntype ScriptedStatement = MaestroScriptedStatement;\ntype ScriptedScenario = MaestroScriptedScenario;\n\nconst scriptedScenarioSourceCache = new Map<\n\tstring,\n\tPromise<ScriptedScenario>\n>();\nconst SCRIPTED_ASSERTION_KINDS = [\n\t\"tool_called\",\n\t\"tool_not_called\",\n\t\"file_exists\",\n\t\"file_contents\",\n\t\"workspace_manifest\",\n\t\"audit_event_emitted\",\n] as const;\nconst RELEASE_GATE_TIERS = [\"smoke\", \"regression\", \"gauntlet\"] as const;\nconst REQUIRED_ARTIFACTS = [\n\t\"trajectory\",\n\t\"replay\",\n\t\"score\",\n\t\"inspection\",\n\t\"workspace_manifest\",\n] as const;\nconst HYDRATION_MODES = [\n\t\"manifest_only\",\n\t\"fixture_workspace\",\n\t\"frozen_archive\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction requireOptionalNonEmptyString(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(typeof value !== \"string\" || value.length === 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n}\n\nfunction requireOptionalStringArray(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Array.isArray(value) ||\n\t\t\tvalue.some((item) => typeof item !== \"string\" || item.length === 0))\n\t) {\n\t\tthrow new Error(`${label} must contain non-empty strings`);\n\t}\n}\n\nfunction requireOptionalNonNegativeInteger(\n\tvalue: unknown,\n\tlabel: string,\n): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Number.isInteger(value) || (value as number) < 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-negative integer`);\n\t}\n}\n\nfunction validateScriptedReleaseGate(\n\tvalue: Record<string, unknown>,\n\tlabel: string,\n): void {\n\tconst releaseGate = value.releaseGate;\n\tif (releaseGate === undefined) return;\n\tif (!isRecord(releaseGate)) {\n\t\tthrow new Error(`Replay scenario ${label} releaseGate must be an object`);\n\t}\n\tif (typeof releaseGate.releaseBlocking !== \"boolean\") {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.releaseBlocking must be a boolean`,\n\t\t);\n\t}\n\tif (!RELEASE_GATE_TIERS.includes(releaseGate.tier as never)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.tier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\t!Array.isArray(releaseGate.requiredArtifacts) ||\n\t\treleaseGate.requiredArtifacts.length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts must not be empty`,\n\t\t);\n\t}\n\tconst unknownArtifacts = releaseGate.requiredArtifacts.filter(\n\t\t(artifact) => !REQUIRED_ARTIFACTS.includes(artifact as never),\n\t);\n\tif (unknownArtifacts.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts contains unknown artifact(s): ${unknownArtifacts.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.releaseBlocking === true &&\n\t\t!releaseGate.requiredArtifacts.includes(\"workspace_manifest\")\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking scripted scenarios must require workspace_manifest`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\ttypeof value.workspaceManifestPath !== \"string\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate requires workspace_manifest but workspaceManifestPath is missing`,\n\t\t);\n\t}\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxEvents,\n\t\t`Replay scenario ${label} releaseGate.maxEvents`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxToolCalls,\n\t\t`Replay scenario ${label} releaseGate.maxToolCalls`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxReplayDeltas,\n\t\t`Replay scenario ${label} releaseGate.maxReplayDeltas`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreFailures,\n\t\t`Replay scenario ${label} releaseGate.maxScoreFailures`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreWarnings,\n\t\t`Replay scenario ${label} releaseGate.maxScoreWarnings`,\n\t);\n}\n\nexport function parseScriptedScenario(\n\tvalue: unknown,\n\tlabel: string,\n): ScriptedScenario {\n\tif (\n\t\t!isRecord(value) ||\n\t\tvalue.schemaVersion !== MAESTRO_SCRIPTED_SCENARIO_SCHEMA\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must use schemaVersion ${MAESTRO_SCRIPTED_SCENARIO_SCHEMA}`,\n\t\t);\n\t}\n\tif (typeof value.id !== \"string\" || value.id.trim().length === 0) {\n\t\tthrow new Error(`Replay scenario ${label} must contain a non-empty id`);\n\t}\n\tif (\n\t\ttypeof value.description !== \"string\" ||\n\t\tvalue.description.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must contain a non-empty description`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.expectedOutcome !== undefined &&\n\t\tvalue.expectedOutcome !== \"pass\" &&\n\t\tvalue.expectedOutcome !== \"fail\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} expectedOutcome must be pass or fail`,\n\t\t);\n\t}\n\trequireOptionalNonEmptyString(\n\t\tvalue.workspaceManifestPath,\n\t\t`Replay scenario ${label} workspaceManifestPath`,\n\t);\n\tvalidateScriptedReleaseGate(value, label);\n\tif (!Array.isArray(value.frames)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain frames`);\n\t}\n\tif (!isRecord(value.metadata)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain metadata`);\n\t}\n\tif (\n\t\ttypeof value.metadata.recordedAt !== \"string\" ||\n\t\tvalue.metadata.recordedAt.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.recordedAt must be a non-empty string`,\n\t\t);\n\t}\n\tif (!Array.isArray(value.metadata.toolsExpected)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.toolsExpected must be an array`,\n\t\t);\n\t}\n\tfor (const [toolOffset, toolName] of value.metadata.toolsExpected.entries()) {\n\t\tif (typeof toolName !== \"string\" || toolName.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.toolsExpected[${toolOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.metadata.auditEvents !== undefined &&\n\t\t!Array.isArray(value.metadata.auditEvents)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.auditEvents must be an array`,\n\t\t);\n\t}\n\tfor (const [eventOffset, eventType] of (\n\t\tvalue.metadata.auditEvents ?? []\n\t).entries()) {\n\t\tif (typeof eventType !== \"string\" || eventType.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.auditEvents[${eventOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (value.assertions !== undefined && !Array.isArray(value.assertions)) {\n\t\tthrow new Error(`Replay scenario ${label} assertions must be an array`);\n\t}\n\tlet hasWorkspaceManifestAssertion = false;\n\tlet hasWarningWorkspaceManifestAssertion = false;\n\tfor (const [assertionOffset, assertion] of (\n\t\tvalue.assertions ?? []\n\t).entries()) {\n\t\tif (\n\t\t\t!isRecord(assertion) ||\n\t\t\ttypeof assertion.id !== \"string\" ||\n\t\t\ttypeof assertion.kind !== \"string\"\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertionOffset} must contain id and kind`,\n\t\t\t);\n\t\t}\n\t\tif (!SCRIPTED_ASSERTION_KINDS.includes(assertion.kind as never)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} has unknown kind ${assertion.kind}`,\n\t\t\t);\n\t\t}\n\t\tif (assertion.kind === \"workspace_manifest\") {\n\t\t\thasWorkspaceManifestAssertion = true;\n\t\t\thasWarningWorkspaceManifestAssertion =\n\t\t\t\thasWarningWorkspaceManifestAssertion ||\n\t\t\t\tassertion.severity === \"warning\";\n\t\t\tif (typeof value.workspaceManifestPath !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} workspace_manifest requires workspaceManifestPath`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredWorkspaceFiles,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredToolAdapters`,\n\t\t\t);\n\t\t\tif (\n\t\t\t\tassertion.requiredHydrationModes !== undefined &&\n\t\t\t\t(!Array.isArray(assertion.requiredHydrationModes) ||\n\t\t\t\t\tassertion.requiredHydrationModes.some(\n\t\t\t\t\t\t(mode) => !HYDRATION_MODES.includes(mode as never),\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredHydrationModes must contain known hydration modes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tassertion.requiredReleaseGateTier !== undefined &&\n\t\t\t\t!RELEASE_GATE_TIERS.includes(assertion.requiredReleaseGateTier as never)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredReleaseGateTier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minWorkspaceFiles,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} minWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} minToolAdapters`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\t!hasWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest gates must include a workspace_manifest assertion`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\thasWarningWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest assertions must use error severity`,\n\t\t);\n\t}\n\tfor (const [frameOffset, frame] of value.frames.entries()) {\n\t\tif (\n\t\t\t!isRecord(frame) ||\n\t\t\t!Number.isInteger(frame.index) ||\n\t\t\t!Array.isArray(frame.statements)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame ${frameOffset} must contain index and statements`,\n\t\t\t);\n\t\t}\n\t\tif (frame.index !== frameOffset) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame indexes must be contiguous, unique, and start at 0; frame ${frameOffset} has index ${frame.index}`,\n\t\t\t);\n\t\t}\n\t\tfor (const [statementOffset, statement] of frame.statements.entries()) {\n\t\t\tif (!isRecord(statement) || typeof statement.kind !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} must contain kind`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"text\" && typeof statement.text !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} text must be a string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"delay\" &&\n\t\t\t\t(typeof statement.ms !== \"number\" ||\n\t\t\t\t\t!Number.isFinite(statement.ms) ||\n\t\t\t\t\tstatement.ms < 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} delay ms must be non-negative`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\t(typeof statement.tool !== \"string\" ||\n\t\t\t\t\tstatement.tool.trim().length === 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} tool_call tool must be a non-empty string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\tstatement.expectedResult !== undefined &&\n\t\t\t\tstatement.expectedResult !== \"success\" &&\n\t\t\t\tstatement.expectedResult !== \"error\" &&\n\t\t\t\tstatement.expectedResult !== \"any\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} expectedResult must be success, error, or any`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tif (statement.type !== \"transient\" && statement.type !== \"fatal\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error type must be transient or fatal`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (typeof statement.message !== \"string\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error message must be a string`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"end\" &&\n\t\t\t\tstatement.reason !== \"complete\" &&\n\t\t\t\tstatement.reason !== \"aborted\" &&\n\t\t\t\tstatement.reason !== \"limit_exceeded\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} end reason is invalid`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t![\n\t\t\t\t\t\"text\",\n\t\t\t\t\t\"delay\",\n\t\t\t\t\t\"tool_call\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\t\"wait_for_user\",\n\t\t\t\t\t\"end\",\n\t\t\t\t].includes(statement.kind)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} has unknown kind ${statement.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn value as unknown as ScriptedScenario;\n}\n\nexport function loadScriptedScenario(path: string): ScriptedScenario {\n\treturn parseScriptedScenario(readScenarioJsonSourceSync(path), path);\n}\n\nexport async function loadScriptedScenarioFromSource(\n\tsource: string,\n): Promise<ScriptedScenario> {\n\tlet pending = scriptedScenarioSourceCache.get(source);\n\tif (!pending) {\n\t\tconst label = scenarioSourceLabel(source);\n\t\tpending = readScenarioJsonSource(source).then((value) =>\n\t\t\tparseScriptedScenario(value, label),\n\t\t);\n\t\tscriptedScenarioSourceCache.set(source, pending);\n\t}\n\ttry {\n\t\treturn await pending;\n\t} catch (error) {\n\t\tscriptedScenarioSourceCache.delete(source);\n\t\tthrow error;\n\t}\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\tcost: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 0,\n\t\t},\n\t};\n}\n\nfunction scriptedAssistantMessage(_model: Model<Api>): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: \"scripted-replay\",\n\t\tprovider: SCRIPTED_REPLAY_PROVIDER,\n\t\tmodel: SCRIPTED_REPLAY_MODEL_ID,\n\t\tusage: zeroUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction replayFrameIndex(context: Context): number {\n\treturn context.messages.filter(\n\t\t(message) =>\n\t\t\tmessage.role === \"assistant\" &&\n\t\t\tmessage.provider === SCRIPTED_REPLAY_PROVIDER,\n\t).length;\n}\n\nfunction isToolResultMessage(value: unknown): value is ToolResultMessage {\n\treturn isRecord(value) && value.role === \"toolResult\";\n}\n\nfunction expectedToolResultError(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tcontext: Context,\n): string | undefined {\n\tif (frameIndex <= 0) return undefined;\n\tconst previousFrame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex - 1,\n\t);\n\tif (!previousFrame) return undefined;\n\tfor (const [\n\t\tstatementIndex,\n\t\tstatement,\n\t] of previousFrame.statements.entries()) {\n\t\tif (\n\t\t\tstatement.kind !== \"tool_call\" ||\n\t\t\tstatement.expectedResult === undefined ||\n\t\t\tstatement.expectedResult === \"any\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst callId = toolCallId(\n\t\t\tscenario,\n\t\t\tpreviousFrame.index,\n\t\t\tstatementIndex,\n\t\t\tstatement,\n\t\t);\n\t\tlet toolResult: ToolResultMessage | undefined;\n\t\tfor (let offset = context.messages.length - 1; offset >= 0; offset -= 1) {\n\t\t\tconst message = context.messages[offset];\n\t\t\tif (\n\t\t\t\tisToolResultMessage(message) &&\n\t\t\t\tmessage.toolCallId === callId &&\n\t\t\t\tmessage.toolName === statement.tool\n\t\t\t) {\n\t\t\t\ttoolResult = message;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!toolResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but no matching tool result was present.`;\n\t\t}\n\t\tconst observed = toolResult.isError ? \"error\" : \"success\";\n\t\tif (observed !== statement.expectedResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but observed ${observed}.`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeToolInput(input: unknown): Record<string, unknown> {\n\treturn isRecord(input) ? input : {};\n}\n\nfunction toolCallId(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tstatementIndex: number,\n\tstatement: Extract<ScriptedStatement, { kind: \"tool_call\" }>,\n): string {\n\treturn (\n\t\tstatement.id ??\n\t\t`replay_${scenario.id}_${String(frameIndex).padStart(3, \"0\")}_${String(\n\t\t\tstatementIndex,\n\t\t).padStart(3, \"0\")}`\n\t);\n}\n\nfunction abortError(): Error {\n\tconst error = new Error(\"Scripted replay aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction checkAbort(\n\tsignal: AbortSignal | undefined,\n\tpartial: AssistantMessage,\n): void {\n\tif (!signal?.aborted) return;\n\tpartial.stopReason = \"aborted\";\n\tthrow abortError();\n}\n\nasync function sleep(\n\tms: number,\n\tsignal: AbortSignal | undefined,\n): Promise<void> {\n\tif (ms <= 0) return;\n\tawait new Promise<void>((resolveSleep, reject) => {\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst timeout = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolveSleep();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tcleanup();\n\t\t\treject(abortError());\n\t\t};\n\t\tif (signal?.aborted) {\n\t\t\tonAbort();\n\t\t\treturn;\n\t\t}\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport async function* streamScriptedReplay(\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: StreamOptions,\n): AsyncGenerator<AssistantMessageEvent, void, unknown> {\n\tconst scenarioPath = process.env.MAESTRO_SCENARIO_PATH;\n\tif (!scenarioPath) {\n\t\tthrow new Error(\"MAESTRO_SCENARIO_PATH is required for scripted replay.\");\n\t}\n\n\tconst scenario = await loadScriptedScenarioFromSource(scenarioPath);\n\tconst frameIndex = replayFrameIndex(context);\n\tconst frame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex,\n\t);\n\tconst partial = scriptedAssistantMessage(model);\n\n\tyield { type: \"start\", partial };\n\n\tconst expectationError = expectedToolResultError(\n\t\tscenario,\n\t\tframeIndex,\n\t\tcontext,\n\t);\n\tif (expectationError) {\n\t\tpartial.stopReason = \"error\";\n\t\tpartial.errorMessage = expectationError;\n\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\treturn;\n\t}\n\n\tif (!frame) {\n\t\tconst contentIndex = partial.content.length;\n\t\tconst text = `Scripted scenario ${scenario.id} complete.`;\n\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\tconst block = partial.content[contentIndex];\n\t\tif (block?.type === \"text\") {\n\t\t\tblock.text = text;\n\t\t}\n\t\tyield { type: \"text_delta\", contentIndex, delta: text, partial };\n\t\tyield { type: \"text_end\", contentIndex, content: text, partial };\n\t\tyield { type: \"done\", reason: \"stop\", message: partial };\n\t\treturn;\n\t}\n\n\tlet emittedToolCall = false;\n\tlet endedByTerminalStatement = false;\n\ttry {\n\t\tfor (const [statementIndex, statement] of frame.statements.entries()) {\n\t\t\tcheckAbort(options.signal, partial);\n\t\t\tif (statement.kind === \"delay\") {\n\t\t\t\tawait sleep(statement.ms, options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"text\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\t\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\t\t\tconst block = partial.content[contentIndex];\n\t\t\t\tif (block?.type !== \"text\") continue;\n\t\t\t\tconst delayPerChar =\n\t\t\t\t\tstatement.streamMs && statement.text.length > 0\n\t\t\t\t\t\t? Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.floor(statement.streamMs / statement.text.length),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: 0;\n\t\t\t\tfor (const char of statement.text) {\n\t\t\t\t\tcheckAbort(options.signal, partial);\n\t\t\t\t\tif (delayPerChar > 0) {\n\t\t\t\t\t\tawait sleep(delayPerChar, options.signal);\n\t\t\t\t\t}\n\t\t\t\t\tblock.text += char;\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\tdelta: char,\n\t\t\t\t\t\tpartial,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tcontent: block.text,\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"tool_call\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tconst call: ToolCall = {\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: toolCallId(scenario, frame.index, statementIndex, statement),\n\t\t\t\t\tname: statement.tool,\n\t\t\t\t\targuments: normalizeToolInput(statement.input),\n\t\t\t\t};\n\t\t\t\tpartial.content.push(call);\n\t\t\t\tyield { type: \"toolcall_start\", contentIndex, partial };\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tdelta: JSON.stringify(call.arguments),\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tyield { type: \"toolcall_end\", contentIndex, toolCall: call, partial };\n\t\t\t\temittedToolCall = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tpartial.stopReason = \"error\";\n\t\t\t\tpartial.errorMessage = statement.message;\n\t\t\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (statement.kind === \"wait_for_user\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason = \"stop\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (statement.kind === \"end\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason =\n\t\t\t\t\tstatement.reason === \"limit_exceeded\"\n\t\t\t\t\t\t? \"length\"\n\t\t\t\t\t\t: statement.reason === \"aborted\"\n\t\t\t\t\t\t\t? \"aborted\"\n\t\t\t\t\t\t\t: \"stop\";\n\t\t\t\tif (partial.stopReason === \"aborted\") {\n\t\t\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (emittedToolCall && !endedByTerminalStatement) {\n\t\t\tpartial.stopReason = \"toolUse\";\n\t\t}\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\treason:\n\t\t\t\tpartial.stopReason === \"length\"\n\t\t\t\t\t? \"length\"\n\t\t\t\t\t: partial.stopReason === \"toolUse\"\n\t\t\t\t\t\t? \"toolUse\"\n\t\t\t\t\t\t: \"stop\",\n\t\t\tmessage: partial,\n\t\t};\n\t} catch (error) {\n\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\tpartial.stopReason = \"aborted\";\n\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n"]}
1
+ {"version":3,"file":"scripted.js","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tMaestroScriptedScenario,\n\tMaestroScriptedStatement,\n} from \"@evalops/contracts\";\nimport { MAESTRO_SCRIPTED_SCENARIO_SCHEMA } from \"@evalops/contracts\";\nimport { isRecord } from \"../../utils/json.js\";\nimport {\n\treadScenarioJsonSource,\n\treadScenarioJsonSourceSync,\n\tscenarioSourceLabel,\n} from \"../scenario-source.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tModel,\n\tStreamOptions,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\n\nexport const SCRIPTED_REPLAY_PROVIDER = \"scripted-replay\";\nexport const SCRIPTED_REPLAY_MODEL_ID = \"maestro-replay-v1\";\n\ntype ScriptedStatement = MaestroScriptedStatement;\ntype ScriptedScenario = MaestroScriptedScenario;\n\nconst scriptedScenarioSourceCache = new Map<\n\tstring,\n\tPromise<ScriptedScenario>\n>();\nconst SCRIPTED_ASSERTION_KINDS = [\n\t\"tool_called\",\n\t\"tool_not_called\",\n\t\"file_exists\",\n\t\"file_contents\",\n\t\"workspace_manifest\",\n\t\"audit_event_emitted\",\n] as const;\nconst RELEASE_GATE_TIERS = [\"smoke\", \"regression\", \"gauntlet\"] as const;\nconst REQUIRED_ARTIFACTS = [\n\t\"trajectory\",\n\t\"replay\",\n\t\"score\",\n\t\"inspection\",\n\t\"workspace_manifest\",\n] as const;\nconst HYDRATION_MODES = [\n\t\"manifest_only\",\n\t\"fixture_workspace\",\n\t\"frozen_archive\",\n] as const;\n\nfunction requireOptionalNonEmptyString(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(typeof value !== \"string\" || value.length === 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n}\n\nfunction requireOptionalStringArray(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Array.isArray(value) ||\n\t\t\tvalue.some((item) => typeof item !== \"string\" || item.length === 0))\n\t) {\n\t\tthrow new Error(`${label} must contain non-empty strings`);\n\t}\n}\n\nfunction requireOptionalNonNegativeInteger(\n\tvalue: unknown,\n\tlabel: string,\n): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Number.isInteger(value) || (value as number) < 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-negative integer`);\n\t}\n}\n\nfunction validateScriptedReleaseGate(\n\tvalue: Record<string, unknown>,\n\tlabel: string,\n): void {\n\tconst releaseGate = value.releaseGate;\n\tif (releaseGate === undefined) return;\n\tif (!isRecord(releaseGate)) {\n\t\tthrow new Error(`Replay scenario ${label} releaseGate must be an object`);\n\t}\n\tif (typeof releaseGate.releaseBlocking !== \"boolean\") {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.releaseBlocking must be a boolean`,\n\t\t);\n\t}\n\tif (!RELEASE_GATE_TIERS.includes(releaseGate.tier as never)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.tier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\t!Array.isArray(releaseGate.requiredArtifacts) ||\n\t\treleaseGate.requiredArtifacts.length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts must not be empty`,\n\t\t);\n\t}\n\tconst unknownArtifacts = releaseGate.requiredArtifacts.filter(\n\t\t(artifact) => !REQUIRED_ARTIFACTS.includes(artifact as never),\n\t);\n\tif (unknownArtifacts.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts contains unknown artifact(s): ${unknownArtifacts.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.releaseBlocking === true &&\n\t\t!releaseGate.requiredArtifacts.includes(\"workspace_manifest\")\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking scripted scenarios must require workspace_manifest`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\ttypeof value.workspaceManifestPath !== \"string\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate requires workspace_manifest but workspaceManifestPath is missing`,\n\t\t);\n\t}\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxEvents,\n\t\t`Replay scenario ${label} releaseGate.maxEvents`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxToolCalls,\n\t\t`Replay scenario ${label} releaseGate.maxToolCalls`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxReplayDeltas,\n\t\t`Replay scenario ${label} releaseGate.maxReplayDeltas`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreFailures,\n\t\t`Replay scenario ${label} releaseGate.maxScoreFailures`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreWarnings,\n\t\t`Replay scenario ${label} releaseGate.maxScoreWarnings`,\n\t);\n}\n\nexport function parseScriptedScenario(\n\tvalue: unknown,\n\tlabel: string,\n): ScriptedScenario {\n\tif (\n\t\t!isRecord(value) ||\n\t\tvalue.schemaVersion !== MAESTRO_SCRIPTED_SCENARIO_SCHEMA\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must use schemaVersion ${MAESTRO_SCRIPTED_SCENARIO_SCHEMA}`,\n\t\t);\n\t}\n\tif (typeof value.id !== \"string\" || value.id.trim().length === 0) {\n\t\tthrow new Error(`Replay scenario ${label} must contain a non-empty id`);\n\t}\n\tif (\n\t\ttypeof value.description !== \"string\" ||\n\t\tvalue.description.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must contain a non-empty description`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.expectedOutcome !== undefined &&\n\t\tvalue.expectedOutcome !== \"pass\" &&\n\t\tvalue.expectedOutcome !== \"fail\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} expectedOutcome must be pass or fail`,\n\t\t);\n\t}\n\trequireOptionalNonEmptyString(\n\t\tvalue.workspaceManifestPath,\n\t\t`Replay scenario ${label} workspaceManifestPath`,\n\t);\n\tvalidateScriptedReleaseGate(value, label);\n\tif (!Array.isArray(value.frames)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain frames`);\n\t}\n\tif (!isRecord(value.metadata)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain metadata`);\n\t}\n\tif (\n\t\ttypeof value.metadata.recordedAt !== \"string\" ||\n\t\tvalue.metadata.recordedAt.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.recordedAt must be a non-empty string`,\n\t\t);\n\t}\n\tif (!Array.isArray(value.metadata.toolsExpected)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.toolsExpected must be an array`,\n\t\t);\n\t}\n\tfor (const [toolOffset, toolName] of value.metadata.toolsExpected.entries()) {\n\t\tif (typeof toolName !== \"string\" || toolName.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.toolsExpected[${toolOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.metadata.auditEvents !== undefined &&\n\t\t!Array.isArray(value.metadata.auditEvents)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.auditEvents must be an array`,\n\t\t);\n\t}\n\tfor (const [eventOffset, eventType] of (\n\t\tvalue.metadata.auditEvents ?? []\n\t).entries()) {\n\t\tif (typeof eventType !== \"string\" || eventType.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.auditEvents[${eventOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (value.assertions !== undefined && !Array.isArray(value.assertions)) {\n\t\tthrow new Error(`Replay scenario ${label} assertions must be an array`);\n\t}\n\tlet hasWorkspaceManifestAssertion = false;\n\tlet hasWarningWorkspaceManifestAssertion = false;\n\tfor (const [assertionOffset, assertion] of (\n\t\tvalue.assertions ?? []\n\t).entries()) {\n\t\tif (\n\t\t\t!isRecord(assertion) ||\n\t\t\ttypeof assertion.id !== \"string\" ||\n\t\t\ttypeof assertion.kind !== \"string\"\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertionOffset} must contain id and kind`,\n\t\t\t);\n\t\t}\n\t\tif (!SCRIPTED_ASSERTION_KINDS.includes(assertion.kind as never)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} has unknown kind ${assertion.kind}`,\n\t\t\t);\n\t\t}\n\t\tif (assertion.kind === \"workspace_manifest\") {\n\t\t\thasWorkspaceManifestAssertion = true;\n\t\t\thasWarningWorkspaceManifestAssertion =\n\t\t\t\thasWarningWorkspaceManifestAssertion ||\n\t\t\t\tassertion.severity === \"warning\";\n\t\t\tif (typeof value.workspaceManifestPath !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} workspace_manifest requires workspaceManifestPath`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredWorkspaceFiles,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredToolAdapters`,\n\t\t\t);\n\t\t\tif (\n\t\t\t\tassertion.requiredHydrationModes !== undefined &&\n\t\t\t\t(!Array.isArray(assertion.requiredHydrationModes) ||\n\t\t\t\t\tassertion.requiredHydrationModes.some(\n\t\t\t\t\t\t(mode) => !HYDRATION_MODES.includes(mode as never),\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredHydrationModes must contain known hydration modes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tassertion.requiredReleaseGateTier !== undefined &&\n\t\t\t\t!RELEASE_GATE_TIERS.includes(assertion.requiredReleaseGateTier as never)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} requiredReleaseGateTier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minWorkspaceFiles,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} minWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} minToolAdapters`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\t!hasWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest gates must include a workspace_manifest assertion`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\thasWarningWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest assertions must use error severity`,\n\t\t);\n\t}\n\tfor (const [frameOffset, frame] of value.frames.entries()) {\n\t\tif (\n\t\t\t!isRecord(frame) ||\n\t\t\t!Number.isInteger(frame.index) ||\n\t\t\t!Array.isArray(frame.statements)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame ${frameOffset} must contain index and statements`,\n\t\t\t);\n\t\t}\n\t\tif (frame.index !== frameOffset) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame indexes must be contiguous, unique, and start at 0; frame ${frameOffset} has index ${frame.index}`,\n\t\t\t);\n\t\t}\n\t\tfor (const [statementOffset, statement] of frame.statements.entries()) {\n\t\t\tif (!isRecord(statement) || typeof statement.kind !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} must contain kind`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"text\" && typeof statement.text !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} text must be a string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"delay\" &&\n\t\t\t\t(typeof statement.ms !== \"number\" ||\n\t\t\t\t\t!Number.isFinite(statement.ms) ||\n\t\t\t\t\tstatement.ms < 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} delay ms must be non-negative`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\t(typeof statement.tool !== \"string\" ||\n\t\t\t\t\tstatement.tool.trim().length === 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} tool_call tool must be a non-empty string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\tstatement.expectedResult !== undefined &&\n\t\t\t\tstatement.expectedResult !== \"success\" &&\n\t\t\t\tstatement.expectedResult !== \"error\" &&\n\t\t\t\tstatement.expectedResult !== \"any\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} expectedResult must be success, error, or any`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tif (statement.type !== \"transient\" && statement.type !== \"fatal\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error type must be transient or fatal`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (typeof statement.message !== \"string\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error message must be a string`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"end\" &&\n\t\t\t\tstatement.reason !== \"complete\" &&\n\t\t\t\tstatement.reason !== \"aborted\" &&\n\t\t\t\tstatement.reason !== \"limit_exceeded\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} end reason is invalid`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t![\n\t\t\t\t\t\"text\",\n\t\t\t\t\t\"delay\",\n\t\t\t\t\t\"tool_call\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\t\"wait_for_user\",\n\t\t\t\t\t\"end\",\n\t\t\t\t].includes(statement.kind)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} has unknown kind ${statement.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn value as unknown as ScriptedScenario;\n}\n\nexport function loadScriptedScenario(path: string): ScriptedScenario {\n\treturn parseScriptedScenario(readScenarioJsonSourceSync(path), path);\n}\n\nexport async function loadScriptedScenarioFromSource(\n\tsource: string,\n): Promise<ScriptedScenario> {\n\tlet pending = scriptedScenarioSourceCache.get(source);\n\tif (!pending) {\n\t\tconst label = scenarioSourceLabel(source);\n\t\tpending = readScenarioJsonSource(source).then((value) =>\n\t\t\tparseScriptedScenario(value, label),\n\t\t);\n\t\tscriptedScenarioSourceCache.set(source, pending);\n\t}\n\ttry {\n\t\treturn await pending;\n\t} catch (error) {\n\t\tscriptedScenarioSourceCache.delete(source);\n\t\tthrow error;\n\t}\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\tcost: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 0,\n\t\t},\n\t};\n}\n\nfunction scriptedAssistantMessage(_model: Model<Api>): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: \"scripted-replay\",\n\t\tprovider: SCRIPTED_REPLAY_PROVIDER,\n\t\tmodel: SCRIPTED_REPLAY_MODEL_ID,\n\t\tusage: zeroUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction replayFrameIndex(context: Context): number {\n\treturn context.messages.filter(\n\t\t(message) =>\n\t\t\tmessage.role === \"assistant\" &&\n\t\t\tmessage.provider === SCRIPTED_REPLAY_PROVIDER,\n\t).length;\n}\n\nfunction isToolResultMessage(value: unknown): value is ToolResultMessage {\n\treturn isRecord(value) && value.role === \"toolResult\";\n}\n\nfunction expectedToolResultError(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tcontext: Context,\n): string | undefined {\n\tif (frameIndex <= 0) return undefined;\n\tconst previousFrame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex - 1,\n\t);\n\tif (!previousFrame) return undefined;\n\tfor (const [\n\t\tstatementIndex,\n\t\tstatement,\n\t] of previousFrame.statements.entries()) {\n\t\tif (\n\t\t\tstatement.kind !== \"tool_call\" ||\n\t\t\tstatement.expectedResult === undefined ||\n\t\t\tstatement.expectedResult === \"any\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst callId = toolCallId(\n\t\t\tscenario,\n\t\t\tpreviousFrame.index,\n\t\t\tstatementIndex,\n\t\t\tstatement,\n\t\t);\n\t\tlet toolResult: ToolResultMessage | undefined;\n\t\tfor (let offset = context.messages.length - 1; offset >= 0; offset -= 1) {\n\t\t\tconst message = context.messages[offset];\n\t\t\tif (\n\t\t\t\tisToolResultMessage(message) &&\n\t\t\t\tmessage.toolCallId === callId &&\n\t\t\t\tmessage.toolName === statement.tool\n\t\t\t) {\n\t\t\t\ttoolResult = message;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!toolResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but no matching tool result was present.`;\n\t\t}\n\t\tconst observed = toolResult.isError ? \"error\" : \"success\";\n\t\tif (observed !== statement.expectedResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but observed ${observed}.`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeToolInput(input: unknown): Record<string, unknown> {\n\treturn isRecord(input) ? input : {};\n}\n\nfunction toolCallId(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tstatementIndex: number,\n\tstatement: Extract<ScriptedStatement, { kind: \"tool_call\" }>,\n): string {\n\treturn (\n\t\tstatement.id ??\n\t\t`replay_${scenario.id}_${String(frameIndex).padStart(3, \"0\")}_${String(\n\t\t\tstatementIndex,\n\t\t).padStart(3, \"0\")}`\n\t);\n}\n\nfunction abortError(): Error {\n\tconst error = new Error(\"Scripted replay aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction checkAbort(\n\tsignal: AbortSignal | undefined,\n\tpartial: AssistantMessage,\n): void {\n\tif (!signal?.aborted) return;\n\tpartial.stopReason = \"aborted\";\n\tthrow abortError();\n}\n\nasync function sleep(\n\tms: number,\n\tsignal: AbortSignal | undefined,\n): Promise<void> {\n\tif (ms <= 0) return;\n\tawait new Promise<void>((resolveSleep, reject) => {\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst timeout = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolveSleep();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tcleanup();\n\t\t\treject(abortError());\n\t\t};\n\t\tif (signal?.aborted) {\n\t\t\tonAbort();\n\t\t\treturn;\n\t\t}\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport async function* streamScriptedReplay(\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: StreamOptions,\n): AsyncGenerator<AssistantMessageEvent, void, unknown> {\n\tconst scenarioPath = process.env.MAESTRO_SCENARIO_PATH;\n\tif (!scenarioPath) {\n\t\tthrow new Error(\"MAESTRO_SCENARIO_PATH is required for scripted replay.\");\n\t}\n\n\tconst scenario = await loadScriptedScenarioFromSource(scenarioPath);\n\tconst frameIndex = replayFrameIndex(context);\n\tconst frame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex,\n\t);\n\tconst partial = scriptedAssistantMessage(model);\n\n\tyield { type: \"start\", partial };\n\n\tconst expectationError = expectedToolResultError(\n\t\tscenario,\n\t\tframeIndex,\n\t\tcontext,\n\t);\n\tif (expectationError) {\n\t\tpartial.stopReason = \"error\";\n\t\tpartial.errorMessage = expectationError;\n\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\treturn;\n\t}\n\n\tif (!frame) {\n\t\tconst contentIndex = partial.content.length;\n\t\tconst text = `Scripted scenario ${scenario.id} complete.`;\n\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\tconst block = partial.content[contentIndex];\n\t\tif (block?.type === \"text\") {\n\t\t\tblock.text = text;\n\t\t}\n\t\tyield { type: \"text_delta\", contentIndex, delta: text, partial };\n\t\tyield { type: \"text_end\", contentIndex, content: text, partial };\n\t\tyield { type: \"done\", reason: \"stop\", message: partial };\n\t\treturn;\n\t}\n\n\tlet emittedToolCall = false;\n\tlet endedByTerminalStatement = false;\n\ttry {\n\t\tfor (const [statementIndex, statement] of frame.statements.entries()) {\n\t\t\tcheckAbort(options.signal, partial);\n\t\t\tif (statement.kind === \"delay\") {\n\t\t\t\tawait sleep(statement.ms, options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"text\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\t\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\t\t\tconst block = partial.content[contentIndex];\n\t\t\t\tif (block?.type !== \"text\") continue;\n\t\t\t\tconst delayPerChar =\n\t\t\t\t\tstatement.streamMs && statement.text.length > 0\n\t\t\t\t\t\t? Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.floor(statement.streamMs / statement.text.length),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: 0;\n\t\t\t\tfor (const char of statement.text) {\n\t\t\t\t\tcheckAbort(options.signal, partial);\n\t\t\t\t\tif (delayPerChar > 0) {\n\t\t\t\t\t\tawait sleep(delayPerChar, options.signal);\n\t\t\t\t\t}\n\t\t\t\t\tblock.text += char;\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\tdelta: char,\n\t\t\t\t\t\tpartial,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tcontent: block.text,\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"tool_call\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tconst call: ToolCall = {\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: toolCallId(scenario, frame.index, statementIndex, statement),\n\t\t\t\t\tname: statement.tool,\n\t\t\t\t\targuments: normalizeToolInput(statement.input),\n\t\t\t\t};\n\t\t\t\tpartial.content.push(call);\n\t\t\t\tyield { type: \"toolcall_start\", contentIndex, partial };\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tdelta: JSON.stringify(call.arguments),\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tyield { type: \"toolcall_end\", contentIndex, toolCall: call, partial };\n\t\t\t\temittedToolCall = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tpartial.stopReason = \"error\";\n\t\t\t\tpartial.errorMessage = statement.message;\n\t\t\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (statement.kind === \"wait_for_user\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason = \"stop\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (statement.kind === \"end\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason =\n\t\t\t\t\tstatement.reason === \"limit_exceeded\"\n\t\t\t\t\t\t? \"length\"\n\t\t\t\t\t\t: statement.reason === \"aborted\"\n\t\t\t\t\t\t\t? \"aborted\"\n\t\t\t\t\t\t\t: \"stop\";\n\t\t\t\tif (partial.stopReason === \"aborted\") {\n\t\t\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (emittedToolCall && !endedByTerminalStatement) {\n\t\t\tpartial.stopReason = \"toolUse\";\n\t\t}\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\treason:\n\t\t\t\tpartial.stopReason === \"length\"\n\t\t\t\t\t? \"length\"\n\t\t\t\t\t: partial.stopReason === \"toolUse\"\n\t\t\t\t\t\t? \"toolUse\"\n\t\t\t\t\t\t: \"stop\",\n\t\t\tmessage: partial,\n\t\t};\n\t} catch (error) {\n\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\tpartial.stopReason = \"aborted\";\n\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/validation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2CvD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,QAAQ,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8DzB"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/validation.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2CvD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,QAAQ,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8DzB"}
@@ -2,6 +2,7 @@ import { Value } from "@sinclair/typebox/value";
2
2
  import { Ajv, } from "ajv";
3
3
  import addFormatsModule from "ajv-formats";
4
4
  import { sanitizePayload } from "../../safety/context-firewall.js";
5
+ import { isRecord } from "../../utils/json.js";
5
6
  import { createLogger } from "../../utils/logger.js";
6
7
  import { resolveDefaultExport } from "../../utils/module-interop.js";
7
8
  import { sanitizeWithStaticMask } from "../../utils/secret-redactor.js";
@@ -92,7 +93,4 @@ export function validateToolArguments(tool, toolCall) {
92
93
  const errorMessage = `Validation failed for tool "${toolCall.name}":\n${errors}\n\nReceived arguments (sanitized):\n${trimmedArgsJson}`;
93
94
  throw new Error(errorMessage);
94
95
  }
95
- function isRecord(value) {
96
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
97
- }
98
96
  //# sourceMappingURL=validation.js.map