@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
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/agent/providers/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Value } from \"@sinclair/typebox/value\";\nimport {\n\tAjv,\n\ttype AnySchema,\n\ttype ErrorObject,\n\ttype ValidateFunction,\n} from \"ajv\";\nimport addFormatsModule, { type FormatsPlugin } from \"ajv-formats\";\nimport { sanitizePayload } from \"../../safety/context-firewall.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport { resolveDefaultExport } from \"../../utils/module-interop.js\";\nimport { sanitizeWithStaticMask } from \"../../utils/secret-redactor.js\";\nimport type { AgentTool, ToolCall } from \"../types.js\";\n\nconst logger = createLogger(\"agent:providers:validation\");\n\n// ESM/CJS interop: ajv-formats default may be nested under .default in some loaders\nconst addFormats = resolveDefaultExport<FormatsPlugin>(addFormatsModule);\n\n// Detect if we're in a browser extension environment with strict CSP\n// Chrome extensions with Manifest V3 don't allow eval/Function constructor\ninterface ChromeRuntime {\n\tchrome?: { runtime?: { id?: string } };\n}\nconst isBrowserExtension =\n\ttypeof globalThis !== \"undefined\" &&\n\t(globalThis as typeof globalThis & ChromeRuntime).chrome?.runtime?.id !==\n\t\tundefined;\n\n// Create a singleton AJV instance with formats (only if not in browser extension)\n// AJV requires 'unsafe-eval' CSP which is not allowed in Manifest V3\nlet ajv: Ajv | null = null;\nconst validatorCache = new WeakMap<\n\tobject,\n\tValidateFunction & {\n\t\terrors?: ErrorObject[] | null;\n\t}\n>();\nif (!isBrowserExtension) {\n\ttry {\n\t\tajv = new Ajv({\n\t\t\t// Limit error output to avoid unbounded allocations on malformed input\n\t\t\tallErrors: false,\n\t\t\tstrict: false,\n\t\t});\n\t\taddFormats(ajv);\n\t} catch (e) {\n\t\t// AJV initialization failed (likely CSP restriction)\n\t\tlogger.warn(\"AJV validation disabled due to CSP restrictions\", {\n\t\t\terror: e instanceof Error ? e.message : String(e),\n\t\t\tisBrowserExtension,\n\t\t});\n\t}\n}\n\n/**\n * Validates tool call arguments against the tool's TypeBox schema\n * @param tool The tool definition with TypeBox schema\n * @param toolCall The tool call from the LLM\n * @returns The validated arguments\n * @throws Error with formatted message if validation fails\n */\nexport function validateToolArguments(\n\ttool: AgentTool,\n\ttoolCall: ToolCall,\n): Record<string, unknown> {\n\t// Skip validation in browser extension environment (CSP restrictions prevent AJV from working)\n\tif (!ajv || isBrowserExtension) {\n\t\tconst args = isRecord(toolCall.arguments) ? toolCall.arguments : {};\n\t\t// Browser extensions can't use AJV due to Manifest V3 CSP restrictions.\n\t\t// TypeBox's Value.Check avoids eval, so we can still validate safely here.\n\t\ttry {\n\t\t\tif (Value.Check(tool.parameters, args)) {\n\t\t\t\treturn args;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"TypeBox validation failed in CSP-safe mode\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t\ttool: tool.name,\n\t\t\t});\n\t\t}\n\t\tlogger.warn(\"Tool arguments failed validation in CSP-safe mode\", {\n\t\t\ttool: tool.name,\n\t\t});\n\t\treturn {};\n\t}\n\n\t// Compile (or reuse) the schema\n\tlet validate = validatorCache.get(tool.parameters);\n\tif (!validate) {\n\t\tvalidate = ajv.compile(tool.parameters as AnySchema);\n\t\tvalidatorCache.set(tool.parameters, validate);\n\t}\n\n\t// Validate the arguments\n\tif (validate(toolCall.arguments)) {\n\t\treturn isRecord(toolCall.arguments) ? toolCall.arguments : {};\n\t}\n\n\t// Format validation errors nicely\n\tconst errors =\n\t\t(validate.errors ?? [])\n\t\t\t.map((err: ErrorObject) => {\n\t\t\t\tconst path =\n\t\t\t\t\terr.instancePath && err.instancePath.length > 1\n\t\t\t\t\t\t? err.instancePath.substring(1)\n\t\t\t\t\t\t: (err.params as { missingProperty?: string }).missingProperty ||\n\t\t\t\t\t\t\t\"root\";\n\t\t\t\treturn ` - ${path}: ${err.message ?? \"invalid value\"}`;\n\t\t\t})\n\t\t\t.join(\"\\n\") || \"Unknown validation error\";\n\n\tconst sanitizedArgs = sanitizePayload(toolCall.arguments, {\n\t\tredactSecrets: true,\n\t\tvaultCredentials: false,\n\t});\n\tconst argsJson = JSON.stringify(sanitizedArgs, null, 2) ?? \"{}\";\n\tconst trimmedArgsJson =\n\t\targsJson.length > 2000\n\t\t\t? `${argsJson.slice(0, 2000)}\\n... (truncated ${argsJson.length - 2000} chars)`\n\t\t\t: argsJson;\n\n\tconst errorMessage = `Validation failed for tool \"${toolCall.name}\":\\n${errors}\\n\\nReceived arguments (sanitized):\\n${trimmedArgsJson}`;\n\n\tthrow new Error(errorMessage);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n"]}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/agent/providers/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Value } from \"@sinclair/typebox/value\";\nimport {\n\tAjv,\n\ttype AnySchema,\n\ttype ErrorObject,\n\ttype ValidateFunction,\n} from \"ajv\";\nimport addFormatsModule, { type FormatsPlugin } from \"ajv-formats\";\nimport { sanitizePayload } from \"../../safety/context-firewall.js\";\nimport { isRecord } from \"../../utils/json.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport { resolveDefaultExport } from \"../../utils/module-interop.js\";\nimport { sanitizeWithStaticMask } from \"../../utils/secret-redactor.js\";\nimport type { AgentTool, ToolCall } from \"../types.js\";\n\nconst logger = createLogger(\"agent:providers:validation\");\n\n// ESM/CJS interop: ajv-formats default may be nested under .default in some loaders\nconst addFormats = resolveDefaultExport<FormatsPlugin>(addFormatsModule);\n\n// Detect if we're in a browser extension environment with strict CSP\n// Chrome extensions with Manifest V3 don't allow eval/Function constructor\ninterface ChromeRuntime {\n\tchrome?: { runtime?: { id?: string } };\n}\nconst isBrowserExtension =\n\ttypeof globalThis !== \"undefined\" &&\n\t(globalThis as typeof globalThis & ChromeRuntime).chrome?.runtime?.id !==\n\t\tundefined;\n\n// Create a singleton AJV instance with formats (only if not in browser extension)\n// AJV requires 'unsafe-eval' CSP which is not allowed in Manifest V3\nlet ajv: Ajv | null = null;\nconst validatorCache = new WeakMap<\n\tobject,\n\tValidateFunction & {\n\t\terrors?: ErrorObject[] | null;\n\t}\n>();\nif (!isBrowserExtension) {\n\ttry {\n\t\tajv = new Ajv({\n\t\t\t// Limit error output to avoid unbounded allocations on malformed input\n\t\t\tallErrors: false,\n\t\t\tstrict: false,\n\t\t});\n\t\taddFormats(ajv);\n\t} catch (e) {\n\t\t// AJV initialization failed (likely CSP restriction)\n\t\tlogger.warn(\"AJV validation disabled due to CSP restrictions\", {\n\t\t\terror: e instanceof Error ? e.message : String(e),\n\t\t\tisBrowserExtension,\n\t\t});\n\t}\n}\n\n/**\n * Validates tool call arguments against the tool's TypeBox schema\n * @param tool The tool definition with TypeBox schema\n * @param toolCall The tool call from the LLM\n * @returns The validated arguments\n * @throws Error with formatted message if validation fails\n */\nexport function validateToolArguments(\n\ttool: AgentTool,\n\ttoolCall: ToolCall,\n): Record<string, unknown> {\n\t// Skip validation in browser extension environment (CSP restrictions prevent AJV from working)\n\tif (!ajv || isBrowserExtension) {\n\t\tconst args = isRecord(toolCall.arguments) ? toolCall.arguments : {};\n\t\t// Browser extensions can't use AJV due to Manifest V3 CSP restrictions.\n\t\t// TypeBox's Value.Check avoids eval, so we can still validate safely here.\n\t\ttry {\n\t\t\tif (Value.Check(tool.parameters, args)) {\n\t\t\t\treturn args;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"TypeBox validation failed in CSP-safe mode\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t\ttool: tool.name,\n\t\t\t});\n\t\t}\n\t\tlogger.warn(\"Tool arguments failed validation in CSP-safe mode\", {\n\t\t\ttool: tool.name,\n\t\t});\n\t\treturn {};\n\t}\n\n\t// Compile (or reuse) the schema\n\tlet validate = validatorCache.get(tool.parameters);\n\tif (!validate) {\n\t\tvalidate = ajv.compile(tool.parameters as AnySchema);\n\t\tvalidatorCache.set(tool.parameters, validate);\n\t}\n\n\t// Validate the arguments\n\tif (validate(toolCall.arguments)) {\n\t\treturn isRecord(toolCall.arguments) ? toolCall.arguments : {};\n\t}\n\n\t// Format validation errors nicely\n\tconst errors =\n\t\t(validate.errors ?? [])\n\t\t\t.map((err: ErrorObject) => {\n\t\t\t\tconst path =\n\t\t\t\t\terr.instancePath && err.instancePath.length > 1\n\t\t\t\t\t\t? err.instancePath.substring(1)\n\t\t\t\t\t\t: (err.params as { missingProperty?: string }).missingProperty ||\n\t\t\t\t\t\t\t\"root\";\n\t\t\t\treturn ` - ${path}: ${err.message ?? \"invalid value\"}`;\n\t\t\t})\n\t\t\t.join(\"\\n\") || \"Unknown validation error\";\n\n\tconst sanitizedArgs = sanitizePayload(toolCall.arguments, {\n\t\tredactSecrets: true,\n\t\tvaultCredentials: false,\n\t});\n\tconst argsJson = JSON.stringify(sanitizedArgs, null, 2) ?? \"{}\";\n\tconst trimmedArgsJson =\n\t\targsJson.length > 2000\n\t\t\t? `${argsJson.slice(0, 2000)}\\n... (truncated ${argsJson.length - 2000} chars)`\n\t\t\t: argsJson;\n\n\tconst errorMessage = `Validation failed for tool \"${toolCall.name}\":\\n${errors}\\n\\nReceived arguments (sanitized):\\n${trimmedArgsJson}`;\n\n\tthrow new Error(errorMessage);\n}\n"]}
@@ -18490,6 +18490,28 @@ function resolveHomePath(value, raw) {
18490
18490
  const expanded = value === "~" ? home : value.startsWith("~/") || value.startsWith("~\\") ? join4(home, value.slice(2)) : value;
18491
18491
  return resolve3(expanded);
18492
18492
  }
18493
+ function homeFromEnv(raw) {
18494
+ return trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir2();
18495
+ }
18496
+ function resolveDataLocalDir(raw) {
18497
+ const home = homeFromEnv(raw);
18498
+ if (process.platform === "darwin") {
18499
+ return join4(home, "Library", "Application Support");
18500
+ }
18501
+ if (process.platform === "win32") {
18502
+ return resolveHomePath(trim(raw.LOCALAPPDATA), raw) ?? resolveHomePath(trim(raw.APPDATA), raw) ?? join4(home, "AppData", "Local");
18503
+ }
18504
+ return resolveHomePath(trim(raw.XDG_DATA_HOME), raw) ?? join4(home, ".local", "share");
18505
+ }
18506
+ function resolveRuntimeDir(raw) {
18507
+ if (process.platform === "darwin") {
18508
+ return resolveDataLocalDir(raw);
18509
+ }
18510
+ const xdgRuntimeDir = resolveHomePath(trim(raw.XDG_RUNTIME_DIR), raw);
18511
+ if (xdgRuntimeDir)
18512
+ return xdgRuntimeDir;
18513
+ return resolveDataLocalDir(raw);
18514
+ }
18493
18515
  function createRuntimeEnv(raw) {
18494
18516
  return Object.freeze({
18495
18517
  logLevel: parseLogLevel(trim(raw.MAESTRO_LOG_LEVEL)),
@@ -18500,6 +18522,9 @@ function createRuntimeEnv(raw) {
18500
18522
  disableKeychain: parseBoolean(trim(raw.MAESTRO_DISABLE_KEYCHAIN)),
18501
18523
  maestroHome: trim(raw.MAESTRO_HOME) ?? join4(homedir2(), ".maestro"),
18502
18524
  maestroAgentDir: trim(raw.MAESTRO_AGENT_DIR),
18525
+ missionStoreDir: resolveHomePath(trim(raw.MAESTRO_MISSION_STORE_DIR), raw),
18526
+ snapshotBlobDir: resolveHomePath(trim(raw.MAESTRO_SNAPSHOT_BLOB_DIR), raw),
18527
+ skillTrustStrict: parseBoolean(trim(raw.MAESTRO_SKILL_TRUST_STRICT)),
18503
18528
  telemetryEnabled: parseOptionalBoolean(trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY)),
18504
18529
  telemetryFlag: trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),
18505
18530
  beaconFile: resolveHomePath(trim(raw.MAESTRO_BEACON_FILE), raw),
@@ -18523,10 +18548,31 @@ function createRuntimeEnv(raw) {
18523
18548
  ]),
18524
18549
  meterBaseUrl: firstNonEmpty(raw, METER_BASE_URL_VARS),
18525
18550
  meterAccessToken: firstNonEmpty(raw, METER_ACCESS_TOKEN_VARS),
18526
- meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS)
18551
+ meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS),
18552
+ ambientLearnerFile: resolveHomePath(trim(raw.MAESTRO_AMBIENT_LEARNER_FILE), raw),
18553
+ ambientLearnerDefaultFile: join4(resolveDataLocalDir(raw), "ambient-agent", "learner.json"),
18554
+ ambientSocketFile: join4(resolveRuntimeDir(raw), "ambient-agent.sock")
18527
18555
  });
18528
18556
  }
18557
+ function isTestProcess() {
18558
+ return process.env.NODE_ENV === "test" || process.env.VITEST === "true";
18559
+ }
18560
+ function maybeReportEarlyRuntimeEnvAccess() {
18561
+ if (processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__) {
18562
+ return;
18563
+ }
18564
+ const message = "defaultRuntimeEnv() was read before loadAndFinalizeEnv() completed. Bootstrap entry points must finish dotenv loading and security scrubbing before runtime env snapshots are created.";
18565
+ if (process.env.MAESTRO_RUNTIME_ENV_STRICT_BOOTSTRAP === "1") {
18566
+ throw new Error(message);
18567
+ }
18568
+ if (isTestProcess() || processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__) {
18569
+ return;
18570
+ }
18571
+ processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__ = true;
18572
+ console.warn(`[maestro] ${message}`);
18573
+ }
18529
18574
  function defaultRuntimeEnv() {
18575
+ maybeReportEarlyRuntimeEnvAccess();
18530
18576
  if (!processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__) {
18531
18577
  processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__ = createRuntimeEnv(process.env);
18532
18578
  }
@@ -18734,6 +18780,43 @@ var init_logger = __esm({
18734
18780
  }
18735
18781
  });
18736
18782
 
18783
+ // dist/utils/json.js
18784
+ function safeJsonParse(input, context) {
18785
+ try {
18786
+ const data = JSON.parse(input);
18787
+ return { success: true, data };
18788
+ } catch (error) {
18789
+ const message = context ? `Failed to parse JSON in ${context}` : "Failed to parse JSON";
18790
+ const parseError = new JsonParseError(
18791
+ message,
18792
+ input.slice(0, 200),
18793
+ // Limit stored input
18794
+ error instanceof Error ? error : void 0
18795
+ );
18796
+ logger2.debug(message, { inputLength: input.length, error });
18797
+ return { success: false, error: parseError };
18798
+ }
18799
+ }
18800
+ function isRecord(value) {
18801
+ return typeof value === "object" && value !== null && !Array.isArray(value);
18802
+ }
18803
+ var logger2, JsonParseError;
18804
+ var init_json = __esm({
18805
+ "dist/utils/json.js"() {
18806
+ "use strict";
18807
+ init_logger();
18808
+ logger2 = createLogger("json-utils");
18809
+ JsonParseError = class extends Error {
18810
+ constructor(message, input, cause) {
18811
+ super(message);
18812
+ this.input = input;
18813
+ this.cause = cause;
18814
+ this.name = "JsonParseError";
18815
+ }
18816
+ };
18817
+ }
18818
+ });
18819
+
18737
18820
  // dist/safety/credential-patterns.js
18738
18821
  import { createHash, randomBytes } from "node:crypto";
18739
18822
  function createGlobalPatternRegex(def) {
@@ -19236,40 +19319,6 @@ var init_feature_flags = __esm({
19236
19319
  }
19237
19320
  });
19238
19321
 
19239
- // dist/utils/json.js
19240
- function safeJsonParse(input, context) {
19241
- try {
19242
- const data = JSON.parse(input);
19243
- return { success: true, data };
19244
- } catch (error) {
19245
- const message = context ? `Failed to parse JSON in ${context}` : "Failed to parse JSON";
19246
- const parseError = new JsonParseError(
19247
- message,
19248
- input.slice(0, 200),
19249
- // Limit stored input
19250
- error instanceof Error ? error : void 0
19251
- );
19252
- logger2.debug(message, { inputLength: input.length, error });
19253
- return { success: false, error: parseError };
19254
- }
19255
- }
19256
- var logger2, JsonParseError;
19257
- var init_json = __esm({
19258
- "dist/utils/json.js"() {
19259
- "use strict";
19260
- init_logger();
19261
- logger2 = createLogger("json-utils");
19262
- JsonParseError = class extends Error {
19263
- constructor(message, input, cause) {
19264
- super(message);
19265
- this.input = input;
19266
- this.cause = cause;
19267
- this.name = "JsonParseError";
19268
- }
19269
- };
19270
- }
19271
- });
19272
-
19273
19322
  // dist/utils/fs.js
19274
19323
  import { randomBytes as randomBytes2 } from "node:crypto";
19275
19324
  import { constants, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync as readFileSync3, renameSync, statSync as statSync3, unlinkSync, writeFileSync } from "node:fs";
@@ -19321,7 +19370,16 @@ function readJsonFile(path, options = {}) {
19321
19370
  error: result.error.message
19322
19371
  });
19323
19372
  if (rotateOnParseFail) {
19324
- rotateCorruptJsonFile(path);
19373
+ const rotatedPath = rotateCorruptJsonFile(path, content);
19374
+ if (!rotatedPath) {
19375
+ const repairedContent = readTextFile(path, { fallback: "" });
19376
+ if (repairedContent !== "" && repairedContent !== content) {
19377
+ const repaired = safeJsonParse(repairedContent, path);
19378
+ if (repaired.success) {
19379
+ return repaired.data;
19380
+ }
19381
+ }
19382
+ }
19325
19383
  }
19326
19384
  return fallback;
19327
19385
  }
@@ -19336,9 +19394,26 @@ function readJsonFile(path, options = {}) {
19336
19394
  throw error;
19337
19395
  }
19338
19396
  }
19339
- function rotateCorruptJsonFile(path) {
19397
+ function rotateCorruptJsonFile(path, expectedContent) {
19340
19398
  if (!fileExists(path))
19341
19399
  return null;
19400
+ if (expectedContent !== void 0) {
19401
+ try {
19402
+ const currentContent = readFileSync3(path, "utf8");
19403
+ if (currentContent !== expectedContent) {
19404
+ logger3.warn("Skipped corrupt JSON rotation; file changed after read", {
19405
+ path
19406
+ });
19407
+ return null;
19408
+ }
19409
+ } catch (error) {
19410
+ logger3.warn("Failed to re-read corrupt JSON before rotation", {
19411
+ path,
19412
+ error: error instanceof Error ? error.message : String(error)
19413
+ });
19414
+ return null;
19415
+ }
19416
+ }
19342
19417
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
19343
19418
  const nonce = randomBytes2(4).toString("hex");
19344
19419
  const rotatedPath = `${path}.corrupt.${timestamp}.${nonce}`;
@@ -20239,7 +20314,10 @@ function defaultCorrelation(env, managedContext) {
20239
20314
  remote_runner_session_id: readEnv(env, [
20240
20315
  "MAESTRO_REMOTE_RUNNER_SESSION_ID"
20241
20316
  ]),
20242
- objective_id: readEnv(env, ["MAESTRO_OBJECTIVE_ID"]),
20317
+ objective_id: readEnv(env, [
20318
+ "MAESTRO_OBJECTIVE_ID",
20319
+ "MAESTRO_EVALOPS_OBJECTIVE_ID"
20320
+ ]),
20243
20321
  conversation_id: readEnv(env, ["MAESTRO_CONVERSATION_ID"]),
20244
20322
  attributes: readStringRecord(env, "MAESTRO_EVENT_BUS_ATTR_")
20245
20323
  };
@@ -20505,28 +20583,34 @@ function contextFromMetadata(metadata, extra) {
20505
20583
  Object.assign(context, extra);
20506
20584
  return Object.keys(context).length > 0 ? context : void 0;
20507
20585
  }
20586
+ function normalizeOptionalString(value) {
20587
+ if (typeof value !== "string")
20588
+ return void 0;
20589
+ const trimmed = value.trim();
20590
+ return trimmed.length > 0 ? trimmed : void 0;
20591
+ }
20508
20592
  function correlationFromMetadata(metadata) {
20509
20593
  if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
20510
20594
  return void 0;
20511
20595
  }
20512
20596
  const record = metadata;
20513
20597
  return {
20514
- session_id: typeof record.sessionId === "string" ? record.sessionId : typeof record.session_id === "string" ? record.session_id : void 0,
20515
- workspace_id: typeof record.workspaceId === "string" ? record.workspaceId : typeof record.workspace_id === "string" ? record.workspace_id : void 0,
20516
- agent_run_id: typeof record.agentRunId === "string" ? record.agentRunId : typeof record.agent_run_id === "string" ? record.agent_run_id : void 0,
20517
- agent_run_step_id: typeof record.toolCallId === "string" ? record.toolCallId : typeof record.tool_call_id === "string" ? record.tool_call_id : void 0,
20518
- organization_id: typeof record.organizationId === "string" ? record.organizationId : typeof record.organization_id === "string" ? record.organization_id : void 0,
20519
- user_id: typeof record.userId === "string" ? record.userId : typeof record.user_id === "string" ? record.user_id : void 0,
20520
- agent_id: typeof record.agentId === "string" ? record.agentId : typeof record.agent_id === "string" ? record.agent_id : void 0,
20521
- actor_id: typeof record.actorId === "string" ? record.actorId : typeof record.actor_id === "string" ? record.actor_id : void 0,
20522
- principal_id: typeof record.principalId === "string" ? record.principalId : typeof record.principal_id === "string" ? record.principal_id : void 0,
20523
- trace_id: typeof record.traceId === "string" ? record.traceId : typeof record.trace_id === "string" ? record.trace_id : void 0,
20524
- traceparent: typeof record.traceparent === "string" ? record.traceparent : typeof record.trace_parent === "string" ? record.trace_parent : void 0,
20525
- tracestate: typeof record.tracestate === "string" ? record.tracestate : typeof record.trace_state === "string" ? record.trace_state : void 0,
20526
- request_id: typeof record.requestId === "string" ? record.requestId : typeof record.request_id === "string" ? record.request_id : void 0,
20527
- remote_runner_session_id: typeof record.remoteRunnerSessionId === "string" ? record.remoteRunnerSessionId : typeof record.remote_runner_session_id === "string" ? record.remote_runner_session_id : void 0,
20528
- objective_id: typeof record.objectiveId === "string" ? record.objectiveId : typeof record.objective_id === "string" ? record.objective_id : void 0,
20529
- conversation_id: typeof record.conversationId === "string" ? record.conversationId : typeof record.conversation_id === "string" ? record.conversation_id : void 0
20598
+ session_id: normalizeOptionalString(record.sessionId) ?? normalizeOptionalString(record.session_id),
20599
+ workspace_id: normalizeOptionalString(record.workspaceId) ?? normalizeOptionalString(record.workspace_id),
20600
+ agent_run_id: normalizeOptionalString(record.agentRunId) ?? normalizeOptionalString(record.agent_run_id),
20601
+ agent_run_step_id: normalizeOptionalString(record.toolCallId) ?? normalizeOptionalString(record.tool_call_id),
20602
+ organization_id: normalizeOptionalString(record.organizationId) ?? normalizeOptionalString(record.organization_id),
20603
+ user_id: normalizeOptionalString(record.userId) ?? normalizeOptionalString(record.user_id),
20604
+ agent_id: normalizeOptionalString(record.agentId) ?? normalizeOptionalString(record.agent_id),
20605
+ actor_id: normalizeOptionalString(record.actorId) ?? normalizeOptionalString(record.actor_id),
20606
+ principal_id: normalizeOptionalString(record.principalId) ?? normalizeOptionalString(record.principal_id),
20607
+ trace_id: normalizeOptionalString(record.traceId) ?? normalizeOptionalString(record.trace_id),
20608
+ traceparent: normalizeOptionalString(record.traceparent) ?? normalizeOptionalString(record.trace_parent),
20609
+ tracestate: normalizeOptionalString(record.tracestate) ?? normalizeOptionalString(record.trace_state),
20610
+ request_id: normalizeOptionalString(record.requestId) ?? normalizeOptionalString(record.request_id),
20611
+ remote_runner_session_id: normalizeOptionalString(record.remoteRunnerSessionId) ?? normalizeOptionalString(record.remote_runner_session_id),
20612
+ objective_id: normalizeOptionalString(record.objectiveId) ?? normalizeOptionalString(record.objective_id),
20613
+ conversation_id: normalizeOptionalString(record.conversationId) ?? normalizeOptionalString(record.conversation_id)
20530
20614
  };
20531
20615
  }
20532
20616
  function stringMetadata(metadata, name) {
@@ -21124,9 +21208,6 @@ function resolveBundledCodexBinPath() {
21124
21208
  return null;
21125
21209
  }
21126
21210
  }
21127
- function isRecord(value) {
21128
- return Boolean(value && typeof value === "object" && !Array.isArray(value));
21129
- }
21130
21211
  function defaultServerRequestResponse(method) {
21131
21212
  switch (method) {
21132
21213
  case "item/commandExecution/requestApproval":
@@ -21162,6 +21243,7 @@ var init_app_server_client = __esm({
21162
21243
  "dist/codex/app-server-client.js"() {
21163
21244
  "use strict";
21164
21245
  init_package_version();
21246
+ init_json();
21165
21247
  DEFAULT_REQUEST_TIMEOUT_MS = 3e4;
21166
21248
  DEFAULT_LOGIN_TIMEOUT_MS = 5 * 6e4;
21167
21249
  MAX_NOTIFICATION_HISTORY = 100;
@@ -23092,9 +23174,6 @@ var init_service_client = __esm({
23092
23174
  function isConnectorOAuthProvider(provider) {
23093
23175
  return Object.prototype.hasOwnProperty.call(CONNECTOR_PROVIDER_BY_OAUTH_PROVIDER, provider);
23094
23176
  }
23095
- function isRecord2(value) {
23096
- return typeof value === "object" && value !== null && !Array.isArray(value);
23097
- }
23098
23177
  function getMetadataString(metadata, key) {
23099
23178
  const value = metadata?.[key];
23100
23179
  return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
@@ -23109,7 +23188,7 @@ function getMetadataStringArray(metadata, key) {
23109
23188
  }
23110
23189
  function getMetadataStringMap(metadata, key) {
23111
23190
  const value = metadata?.[key];
23112
- if (!isRecord2(value)) {
23191
+ if (!isRecord(value)) {
23113
23192
  return void 0;
23114
23193
  }
23115
23194
  const entries = Object.entries(value).map(([entryKey, entryValue]) => [
@@ -23220,6 +23299,7 @@ var init_connectors = __esm({
23220
23299
  "dist/oauth/connectors.js"() {
23221
23300
  "use strict";
23222
23301
  init_service_client();
23302
+ init_json();
23223
23303
  init_storage();
23224
23304
  CONNECTOR_PROVIDER_BY_OAUTH_PROVIDER = {
23225
23305
  "github-copilot": "github",
@@ -23598,9 +23678,6 @@ function parseScopesPayload(value) {
23598
23678
  }
23599
23679
  return value.filter((entry2) => typeof entry2 === "string").map((entry2) => entry2.trim()).filter((entry2) => entry2.length > 0);
23600
23680
  }
23601
- function isRecord3(value) {
23602
- return typeof value === "object" && value !== null && !Array.isArray(value);
23603
- }
23604
23681
  function getMetadataString2(metadata, key) {
23605
23682
  const value = metadata?.[key];
23606
23683
  return typeof value === "string" && value.trim().length > 0 ? value : void 0;
@@ -23614,7 +23691,7 @@ function getMetadataScopes(metadata) {
23614
23691
  }
23615
23692
  function resolveProviderRef(metadata) {
23616
23693
  const fallback = getProviderRef();
23617
- const providerRef = isRecord3(metadata?.providerRef) ? metadata.providerRef : void 0;
23694
+ const providerRef = isRecord(metadata?.providerRef) ? metadata.providerRef : void 0;
23618
23695
  return {
23619
23696
  provider: getMetadataString2(providerRef, "provider") ?? fallback.provider,
23620
23697
  environment: getMetadataString2(providerRef, "environment") ?? fallback.environment,
@@ -23981,6 +24058,7 @@ var init_evalops = __esm({
23981
24058
  init_env_aliases();
23982
24059
  init_core_services();
23983
24060
  init_downstream_http();
24061
+ init_json();
23984
24062
  init_logger();
23985
24063
  init_loopback_http();
23986
24064
  init_device_identity();
@@ -26297,28 +26375,58 @@ __export(telemetry_exports, {
26297
26375
  import { appendFile as appendFile2, mkdir as mkdir2 } from "node:fs/promises";
26298
26376
  import { dirname as dirname6 } from "node:path";
26299
26377
  import { SpanStatusCode } from "@opentelemetry/api";
26378
+ function createExporterRuntimeConfig(env) {
26379
+ const file = env.exporterFile;
26380
+ const endpoint = env.exporterEndpoint;
26381
+ const initialEnabled = shouldEnableTelemetryForEnv(env, file, endpoint);
26382
+ return {
26383
+ endpoint,
26384
+ env,
26385
+ file,
26386
+ flag: env.telemetryFlag,
26387
+ initialEnabled,
26388
+ // `RuntimeEnv.telemetrySampleRate` is already parsed and clamped to
26389
+ // `[0, 1]`; `null` means no signal, treated as full-sampling.
26390
+ sampleRate: env.telemetrySampleRate ?? 1
26391
+ };
26392
+ }
26393
+ function getExporterRuntimeConfig() {
26394
+ const env = defaultRuntimeEnv();
26395
+ if (!exporterRuntimeConfig || exporterRuntimeConfig.env !== env) {
26396
+ exporterRuntimeConfig = createExporterRuntimeConfig(env);
26397
+ }
26398
+ return exporterRuntimeConfig;
26399
+ }
26400
+ function shouldEnableTelemetryForEnv(env, file, endpoint) {
26401
+ if (env.telemetryEnabled === false)
26402
+ return false;
26403
+ if (env.telemetryEnabled === true)
26404
+ return true;
26405
+ return Boolean(endpoint || file || hasRemoteMeterDestination());
26406
+ }
26300
26407
  function getTelemetryStatus() {
26408
+ const config = getExporterRuntimeConfig();
26301
26409
  let reason = "disabled";
26302
- const baseEnabled = initialTelemetryEnabled && samplingRate > 0;
26303
- if (!shouldEnableTelemetry()) {
26410
+ const baseEnabled = config.initialEnabled && config.sampleRate > 0;
26411
+ if (!shouldEnableTelemetry(config)) {
26304
26412
  reason = "flag disabled";
26305
- } else if (samplingRate === 0) {
26413
+ } else if (config.sampleRate === 0) {
26306
26414
  reason = "sampling=0";
26307
- } else if (telemetryEndpointEnv) {
26415
+ } else if (config.endpoint) {
26308
26416
  reason = "endpoint";
26309
26417
  } else if (hasRemoteMeterDestination()) {
26310
26418
  reason = "meter";
26311
- } else if (telemetryFileEnv || baseEnabled) {
26419
+ } else if (config.file || baseEnabled) {
26312
26420
  reason = "file";
26313
26421
  }
26314
26422
  const runtimeOverride = telemetryOverride === null ? void 0 : telemetryOverride ? "enabled" : "disabled";
26315
26423
  return {
26316
- enabled: telemetryEnabled && samplingRate > 0,
26424
+ enabled: (telemetryOverride === null ? config.initialEnabled : telemetryOverride) && config.sampleRate > 0,
26317
26425
  reason,
26318
- endpoint: telemetryEndpointEnv ?? void 0,
26319
- filePath: telemetryFileEnv ?? defaultTelemetryFile,
26320
- sampleRate: samplingRate,
26321
- flagValue: telemetryFlag ?? void 0,
26426
+ endpoint: config.endpoint ?? void 0,
26427
+ filePath: config.file ?? defaultTelemetryFile,
26428
+ sampleRate: config.sampleRate,
26429
+ flagValue: config.flag ?? void 0,
26322
26430
  runtimeOverride,
26323
26431
  overrideReason: telemetryOverrideReason
26324
26432
  };
@@ -26326,7 +26434,6 @@ function getTelemetryStatus() {
26326
26434
  function setTelemetryRuntimeOverride(enabled, reason) {
26327
26435
  telemetryOverride = enabled;
26328
26436
  telemetryOverrideReason = reason;
26329
- telemetryEnabled = enabled === null ? initialTelemetryEnabled : enabled;
26330
26437
  }
26331
26438
  function normalizeTelemetryEventMetadata(event) {
26332
26439
  if (!("metadata" in event) && !("sensitiveMetadata" in event)) {
@@ -26354,7 +26461,7 @@ function isCanonicalTurnTelemetryEvent(event) {
26354
26461
  return event.type === "canonical-turn" && "model" in event && "tokens" in event;
26355
26462
  }
26356
26463
  async function writeToFile(payload) {
26357
- const filePath = telemetryFileEnv || defaultTelemetryFile;
26464
+ const filePath = getExporterRuntimeConfig().file || defaultTelemetryFile;
26358
26465
  await mkdir2(dirname6(filePath), { recursive: true });
26359
26466
  await appendFile2(filePath, `${payload}
26360
26467
  `, "utf-8");
@@ -26365,7 +26472,7 @@ async function appendToolFailure(payload) {
26365
26472
  `, "utf-8");
26366
26473
  }
26367
26474
  async function postToEndpoint(payload) {
26368
- const endpoint = telemetryEndpointEnv;
26475
+ const endpoint = getExporterRuntimeConfig().endpoint;
26369
26476
  if (!endpoint) {
26370
26477
  return;
26371
26478
  }
@@ -26673,17 +26780,18 @@ function maestroCorrelationSpanAttributes(event) {
26673
26780
  return Object.fromEntries(Object.entries(attributes).filter((entry2) => typeof entry2[1] === "string" && entry2[1].trim().length > 0 && entry2[1] !== "unknown"));
26674
26781
  }
26675
26782
  async function persistTelemetry(event) {
26783
+ const config = getExporterRuntimeConfig();
26676
26784
  const payload = JSON.stringify(event);
26677
26785
  const tasks = [];
26678
26786
  if (isCanonicalTurnTelemetryEvent(event)) {
26679
26787
  tasks.push(mirrorCanonicalTurnEventToMeter(event).then(() => void 0));
26680
26788
  }
26681
- if (telemetryEndpointEnv) {
26789
+ if (config.endpoint) {
26682
26790
  tasks.push(postToEndpoint(payload));
26683
26791
  }
26684
- if (telemetryEndpointEnv === void 0) {
26792
+ if (config.file) {
26685
26793
  tasks.push(writeToFile(payload));
26686
- } else if (telemetryFileEnv) {
26794
+ } else if (config.endpoint === null && !hasRemoteMeterDestination(config.env)) {
26687
26795
  tasks.push(writeToFile(payload));
26688
26796
  }
26689
26797
  await Promise.all(tasks);
@@ -26711,6 +26819,7 @@ async function recordTelemetry(event) {
26711
26819
  if (isInternalTelemetryDisabled()) {
26712
26820
  return;
26713
26821
  }
26822
+ const config = getExporterRuntimeConfig();
26714
26823
  const normalizedEvent = normalizeTelemetryEventMetadata(event);
26715
26824
  const openTelemetryEnabled = isOpenTelemetryEnabled();
26716
26825
  if (openTelemetryEnabled) {
@@ -26718,12 +26827,12 @@ async function recordTelemetry(event) {
26718
26827
  recordOpenTelemetryMetric(normalizedEvent);
26719
26828
  }
26720
26829
  const eventBusTask = mirrorTelemetryToMaestroEventBus(normalizedEvent);
26721
- const legacyEnabled = telemetryEnabled && samplingRate > 0;
26830
+ const legacyEnabled = (telemetryOverride === null ? config.initialEnabled : telemetryOverride) && config.sampleRate > 0;
26722
26831
  if (!legacyEnabled) {
26723
26832
  await eventBusTask;
26724
26833
  return;
26725
26834
  }
26726
- if (samplingRate < 1 && Math.random() > samplingRate) {
26835
+ if (config.sampleRate < 1 && Math.random() > config.sampleRate) {
26727
26836
  await eventBusTask;
26728
26837
  return;
26729
26838
  }
@@ -26977,7 +27086,7 @@ function recordSandboxViolation(event, tool, action, reason, options) {
26977
27086
  metadata: options?.metadata ? { ...options.metadata, sessionId: options.sessionId } : options?.sessionId ? { sessionId: options.sessionId } : void 0
26978
27087
  });
26979
27088
  }
26980
- var exporterRuntimeEnv, telemetryFileEnv, telemetryEndpointEnv, telemetryFlag, telemetrySampleRate, shouldEnableTelemetry, initialTelemetryEnabled, telemetryEnabled, telemetryOverride, telemetryOverrideReason, A2A_PHASE_EVENT_TYPES, samplingRate, defaultTelemetryFile, toolFailureLogFile, BACKGROUND_TASK_HISTORY_LIMIT, backgroundTaskHistory;
27089
+ var exporterRuntimeConfig, shouldEnableTelemetry, telemetryOverride, telemetryOverrideReason, A2A_PHASE_EVENT_TYPES, defaultTelemetryFile, toolFailureLogFile, BACKGROUND_TASK_HISTORY_LIMIT, backgroundTaskHistory;
26981
27090
  var init_telemetry = __esm({
26982
27091
  "dist/telemetry.js"() {
26983
27092
  "use strict";
@@ -26993,20 +27102,8 @@ var init_telemetry = __esm({
26993
27102
  init_wide_events();
26994
27103
  init_secret_redactor();
26995
27104
  init_metadata_normalization();
26996
- exporterRuntimeEnv = defaultRuntimeEnv();
26997
- telemetryFileEnv = exporterRuntimeEnv.exporterFile;
26998
- telemetryEndpointEnv = exporterRuntimeEnv.exporterEndpoint;
26999
- telemetryFlag = exporterRuntimeEnv.telemetryFlag;
27000
- telemetrySampleRate = exporterRuntimeEnv.telemetrySampleRate;
27001
- shouldEnableTelemetry = () => {
27002
- if (exporterRuntimeEnv.telemetryEnabled === false)
27003
- return false;
27004
- if (exporterRuntimeEnv.telemetryEnabled === true)
27005
- return true;
27006
- return Boolean(telemetryEndpointEnv || telemetryFileEnv || hasRemoteMeterDestination());
27007
- };
27008
- initialTelemetryEnabled = shouldEnableTelemetry();
27009
- telemetryEnabled = initialTelemetryEnabled;
27105
+ exporterRuntimeConfig = null;
27106
+ shouldEnableTelemetry = (config = getExporterRuntimeConfig()) => shouldEnableTelemetryForEnv(config.env, config.file, config.endpoint);
27010
27107
  telemetryOverride = null;
27011
27108
  A2A_PHASE_EVENT_TYPES = {
27012
27109
  peer_selected: MaestroBusEventType.A2APeerSelected,
@@ -27018,7 +27115,6 @@ var init_telemetry = __esm({
27018
27115
  push_received: MaestroBusEventType.A2APushReceived,
27019
27116
  evidence_completed: MaestroBusEventType.A2AEvidenceCompleted
27020
27117
  };
27021
- samplingRate = telemetrySampleRate ?? 1;
27022
27118
  defaultTelemetryFile = PATHS.TELEMETRY_LOG;
27023
27119
  toolFailureLogFile = PATHS.TOOL_FAILURE_LOG;
27024
27120
  BACKGROUND_TASK_HISTORY_LIMIT = 50;
@@ -27110,6 +27206,9 @@ ${errMsg}`);
27110
27206
  return result;
27111
27207
  }
27112
27208
 
27209
+ // dist/models/config-loader.js
27210
+ init_json();
27211
+
27113
27212
  // dist/utils/jsonc-umd.js
27114
27213
  import { parse as parseJsonc, printParseErrorCode } from "jsonc-parser";
27115
27214
 
@@ -27666,9 +27765,6 @@ var configSchema = Type2.Object({
27666
27765
  var configValidator = compileTypeboxSchema(configSchema);
27667
27766
  var TRUST_PROJECT_MODEL_CONFIG_ENV = "MAESTRO_TRUST_PROJECT_MODEL_CONFIG";
27668
27767
  var TRUE_ENV_VALUES = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]);
27669
- function isRecord4(value) {
27670
- return typeof value === "object" && value !== null && !Array.isArray(value);
27671
- }
27672
27768
  function isProjectModelConfigTrusted() {
27673
27769
  const value = process.env[TRUST_PROJECT_MODEL_CONFIG_ENV];
27674
27770
  return value !== void 0 && TRUE_ENV_VALUES.has(value.toLowerCase());
@@ -27937,7 +28033,7 @@ function loadUntrustedProjectConfigFile(path) {
27937
28033
  }
27938
28034
  function sanitizeUntrustedProjectConfig(config, path) {
27939
28035
  const providers = [];
27940
- if (!isRecord4(config)) {
28036
+ if (!isRecord(config)) {
27941
28037
  logger19.warn("Ignoring invalid untrusted project model config", {
27942
28038
  path,
27943
28039
  trustEnv: TRUST_PROJECT_MODEL_CONFIG_ENV
@@ -28706,7 +28802,7 @@ function parseStreamingJson(partialJson) {
28706
28802
  }
28707
28803
 
28708
28804
  // dist/agent/providers/tool-arguments.js
28709
- function isRecord5(value) {
28805
+ function isRecord2(value) {
28710
28806
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
28711
28807
  }
28712
28808
  function describeValueType(value) {
@@ -28736,7 +28832,7 @@ function createToolArgumentNormalizer(options) {
28736
28832
  }
28737
28833
  function parseFromString(raw, context, parseOptions) {
28738
28834
  const parsed = parseStreamingJson(raw);
28739
- if (isRecord5(parsed)) {
28835
+ if (isRecord2(parsed)) {
28740
28836
  return parsed;
28741
28837
  }
28742
28838
  if (parseOptions?.logInvalid ?? true) {
@@ -28751,7 +28847,7 @@ function createToolArgumentNormalizer(options) {
28751
28847
  logInvalid: normalizeOptions?.logInvalid
28752
28848
  });
28753
28849
  }
28754
- if (isRecord5(raw)) {
28850
+ if (isRecord2(raw)) {
28755
28851
  if (normalizeOptions?.expectString) {
28756
28852
  warnOnce("raw:object", `${options.providerLabel} tool call arguments were object, expected string`, buildWarningDetails(context));
28757
28853
  }
@@ -28774,7 +28870,7 @@ function createToolArgumentNormalizer(options) {
28774
28870
  partialJson: raw
28775
28871
  };
28776
28872
  }
28777
- if (isRecord5(raw)) {
28873
+ if (isRecord2(raw)) {
28778
28874
  if (normalizeOptions?.expectString) {
28779
28875
  warnOnce("raw:object", `${options.providerLabel} tool call arguments were object, expected string`, buildWarningDetails(context));
28780
28876
  }
@@ -0,0 +1,32 @@
1
+ import type { RewindPlan } from "./snapshot-rewind-plan.js";
2
+ export interface SnapshotBlobStoreConfig {
3
+ rootDir?: string;
4
+ }
5
+ export interface RewindExecutionResult {
6
+ targetIndex: number;
7
+ fromIndex: number;
8
+ restored: string[];
9
+ deleted: string[];
10
+ bytesRestored: number;
11
+ dryRun: boolean;
12
+ }
13
+ export declare function getSnapshotBlobRoot(rootDir?: string): string;
14
+ export declare function sha256Content(content: string | Buffer): string;
15
+ export declare class SnapshotBlobStore {
16
+ private readonly rootDir;
17
+ constructor(config?: SnapshotBlobStoreConfig);
18
+ put(content: string | Buffer): {
19
+ contentSha256: string;
20
+ size: number;
21
+ };
22
+ get(contentSha256: string): Buffer;
23
+ has(contentSha256: string): boolean;
24
+ getPath(contentSha256: string): string;
25
+ }
26
+ export declare function executeRewindPlan(options: {
27
+ plan: RewindPlan;
28
+ workspaceDir: string;
29
+ store?: SnapshotBlobStore;
30
+ dryRun?: boolean;
31
+ }): RewindExecutionResult;
32
+ //# sourceMappingURL=snapshot-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-store.d.ts","sourceRoot":"","sources":["../../src/agent/snapshot-store.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,2BAA2B,CAAC;AAI7E,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CAChB;AAgBD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE9D;AAED,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,GAAE,uBAA4B;IAIhD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAYtE,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAQlC,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAInC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAItC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,qBAAqB,CAgDxB"}