@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":"load-env.js","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { config } from \"dotenv\";\nimport { ENV_VARS } from \"./config/env-vars.js\";\nimport { resetDefaultRuntimeEnv } from \"./runtime/env.js\";\n\nconst ENV_FILES = [\".env.local\", \".env\"];\n\n// Keys that must never be sourced from a repo-controlled dotenv file. These are\n// stripped immediately at load time so they can never reach process.env.\nconst BLOCKED_DOTENV_KEYS = new Set([\n\t\"HOME\",\n\t\"FACTORY_HOME\",\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_PROFILE\",\n\t\"MAESTRO_LLM_GATEWAY_URL\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_TRUST_PROJECT_MODEL_CONFIG\",\n\t\"USERPROFILE\",\n\t// Agent-directory overrides decide where the \"global\" APPEND_SYSTEM.md and\n\t// other agent-scoped files are loaded from. A repo-controlled value can\n\t// redirect that fallback back into the workspace, bypassing the\n\t// untrusted-project gate. See resolveLoadedAppendSystemPromptPath.\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n]);\n\n// Security-relevant settings that may legitimately come from a user's real\n// shell environment but must not be silently set by a repo-controlled dotenv\n// file. These are loaded normally and then scrubbed via\n// scrubLoadedSecurityOverrideEnv() once trust has been established.\nconst DOTENV_SECURITY_OVERRIDE_KEYS = [\n\tENV_VARS.PROFILE,\n\t\"MAESTRO_WEB_PROFILE\",\n\tENV_VARS.APPROVAL_POLICY,\n\t\"MAESTRO_APPROVAL_MODE\",\n\tENV_VARS.SANDBOX_MODE,\n\tENV_VARS.SAFE_MODE,\n\t\"MAESTRO_SAFE_REQUIRE_PLAN\",\n\t\"MAESTRO_SAFE_VALIDATORS\",\n\tENV_VARS.CONTEXT_FIREWALL_BLOCKING,\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n\t\"NODE_OPTIONS\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_NOTIFY_EVENTS\",\n\t\"MAESTRO_NOTIFY_PROGRAM\",\n\t\"MAESTRO_ENTERPRISE_POLICY_PATH\",\n\t\"MAESTRO_POLICY_PATH\",\n\t\"MAESTRO_PROMPT_HISTORY_FILE\",\n\t\"MAESTRO_TOOL_HISTORY_FILE\",\n\t\"MAESTRO_TUI_TIP_HISTORY_FILE\",\n\t\"MAESTRO_BASH_HISTORY\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n\t// EvalOps identity service URL: `bootstrapEvalOpsAgent()` and the OAuth\n\t// flow honor these aliases before the stored/derived URL. A repo .env\n\t// could otherwise point identity at an attacker service and capture the\n\t// user's OAuth bearer during agent bootstrap.\n\t\"MAESTRO_IDENTITY_URL\",\n\t\"EVALOPS_IDENTITY_URL\",\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n\t// EvalOps tenant identity aliases: any of these can scope durable-memory\n\t// writes (`X-Organization-ID`), remote-runner workspace selection, and\n\t// managed-context lookups. A repo-controlled dotenv must not be able to\n\t// redirect those tenant identifiers when a real EvalOps token is present.\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t\"MAESTRO_EVALOPS_WORKSPACE_ID\",\n\t\"EVALOPS_WORKSPACE_ID\",\n\t\"MAESTRO_WORKSPACE_ID\",\n\t\"MAESTRO_REMOTE_RUNNER_WORKSPACE_ID\",\n\t\"MAESTRO_EVALOPS_USER_ID\",\n\t\"EVALOPS_USER_ID\",\n\t\"MAESTRO_USER_ID\",\n\t\"EVALOPS_NATS_URL\",\n\t\"NATS_URL\",\n\t\"NATS_TOKEN\",\n\t\"NATS_USER\",\n\t\"NATS_PASSWORD\",\n\t\"MAESTRO_WEB_REQUIRE_KEY\",\n\t\"MAESTRO_WEB_REQUIRE_CSRF\",\n\t\"MAESTRO_WEB_REQUIRE_REDIS\",\n\t\"MAESTRO_WEB_ROOT\",\n\t// CORS / WebSocket origin policy: a repo-controlled dotenv must not be\n\t// able to broaden cross-origin browser access to the local API by\n\t// setting `MAESTRO_WEB_ORIGIN=*` (or an attacker-controlled origin)\n\t// before the user's real env is checked.\n\t\"MAESTRO_WEB_ORIGIN\",\n\t// Content-Security-Policy override: web-server.ts prefers a non-empty\n\t// MAESTRO_WEB_CSP over the prod default when building SECURITY_HEADERS,\n\t// so a repo .env could otherwise weaken the browser policy in any\n\t// hardened profile.\n\t\"MAESTRO_WEB_CSP\",\n\t\"MAESTRO_STRICT_SESSION_ACCESS\",\n\t// Session scoping controls: a repo-controlled dotenv must not be able to\n\t// collapse authenticated web sessions back to the global file store.\n\tENV_VARS.SESSION_SCOPE,\n\tENV_VARS.MULTI_USER,\n\t\"MAESTRO_REDIS_URL\",\n\t\"MAESTRO_DATABASE_URL\",\n\t\"DATABASE_URL\",\n\t\"MAESTRO_HOSTED_SESSION_STORAGE\",\n\t\"MAESTRO_SESSION_STORAGE\",\n\t\"MAESTRO_TRUST_PROXY\",\n\t\"MAESTRO_TRUST_PROXY_HOPS\",\n\t// Web/auth secret material: a repo-controlled dotenv must not be able to\n\t// choose a known API key, CSRF token, JWT signing secret, or shared secret\n\t// for endpoints that are supposed to require a user-provided credential.\n\t\"MAESTRO_WEB_API_KEY\",\n\t\"MAESTRO_WEB_CSRF_TOKEN\",\n\t\"MAESTRO_JWT_SECRET\",\n\t// `JWT_SECRET` is the unprefixed fallback honored by src/auth/jwt.ts when\n\t// `MAESTRO_JWT_SECRET` is not set; a repo-controlled dotenv must not be\n\t// able to choose the signing key for enterprise auth via this fallback.\n\t\"JWT_SECRET\",\n\t// OAuth credential file overrides: `src/providers/openai-auth.ts:91`\n\t// binds AUTH_FILE to OPENAI_OAUTH_FILE, and `saveOpenAIOAuthCredential()`\n\t// then writes access/refresh/ID tokens and the derived API key to that\n\t// path. A repo .env must not be able to redirect fresh OAuth credentials\n\t// into the checkout where they can be read on the next install.\n\t\"OPENAI_OAUTH_FILE\",\n\t\"MAESTRO_AUTH_SHARED_SECRET\",\n\t\"MAESTRO_DEVICE_IDENTITY_HELPER\",\n\t\"MAESTRO_DEVICE_IDENTITY_ALLOW_TEST_HELPER\",\n\t\"MAESTRO_USER_MCP_PATH\",\n\t\"MAESTRO_ENTERPRISE_MCP_PATH\",\n\t\"MAESTRO_MCP_PROJECT_APPROVALS_FILE\",\n\t\"MAESTRO_MCP_WORKSPACE_TRUST_FILE\",\n\t\"MAESTRO_PACKAGE_CACHE_DIR\",\n\t\"MAESTRO_RUN_SCRIPT_ALLOWLIST\",\n\t\"MAESTRO_SCRIPT_RUNNER\",\n\t// Session storage location: a repo-controlled dotenv must not be able to\n\t// redirect where session transcripts are read from or written to.\n\tENV_VARS.SESSION_DIR,\n\t// Local-state file/dir overrides: a repo-controlled dotenv must not be\n\t// able to redirect where the todo store or background-task logs are\n\t// written, which would otherwise let a checkout capture future task\n\t// content or command output for files that live outside the workspace\n\t// by default. Same reasoning extends to the web queue store and\n\t// automations store, which write user prompt/output text to env-selected\n\t// paths.\n\t\"MAESTRO_TODO_FILE\",\n\t\"MAESTRO_BACKGROUND_LOG_DIR\",\n\t\"MAESTRO_QUEUE_STATE\",\n\t\"MAESTRO_AUTOMATIONS_STATE\",\n\t// Sandbox enforcement opt-out: a repo-controlled dotenv must not be able to\n\t// enable unsandboxed fallback execution.\n\t\"MAESTRO_ALLOW_UNSANDBOXED_SANDBOX_FALLBACK\",\n\t// Bash guard / shell egress / allowlist controls: a repo-controlled dotenv\n\t// must not be able to disable command approvals or widen the allowlist.\n\t\"MAESTRO_BASH_GUARD\",\n\t\"MAESTRO_ALLOW_EGRESS_SHELL\",\n\t\"MAESTRO_FAIL_UNTAGGED_EGRESS\",\n\t\"MAESTRO_BACKGROUND_SHELL_DISABLE\",\n\t\"MAESTRO_BASH_ALLOWLIST_PATHS\",\n\t\"MAESTRO_GUARDIAN\",\n\t\"MAESTRO_MARKITDOWN\",\n\t\"MAESTRO_EVENT_BUS\",\n\t\"MAESTRO_AUDIT_BUS\",\n\t\"MAESTRO_TELEMETRY\",\n\t\"PLAYWRIGHT_TELEMETRY\",\n\t\"MAESTRO_OTEL\",\n\t// Auto-verify custom command: a repo-controlled dotenv must not be able to\n\t// inject an arbitrary shell command that AutoVerifyService runs after edits.\n\t\"MAESTRO_AUTO_TEST_COMMAND\",\n] as const;\n\nconst normalizeEnvKey = (key: string) => key.toUpperCase();\nconst DOTENV_SECURITY_OVERRIDE_KEY_SET = new Set<string>(\n\tDOTENV_SECURITY_OVERRIDE_KEYS.map(normalizeEnvKey),\n);\nconst DOTENV_SECURITY_OVERRIDE_PREFIXES = [\n\t\"APPROVALS_SERVICE_\",\n\t\"MAESTRO_ARTIFACT_ACCESS_\",\n\t\"MAESTRO_APPROVALS_\",\n\t\"MAESTRO_AGENT_MCP_\",\n\t\"MAESTRO_BEACON_\",\n\t\"MAESTRO_CEREBRO_MCP_\",\n\t\"MAESTRO_EVENT_BUS_\",\n\t\"MAESTRO_EVALOPS_AGENT_MCP_\",\n\t\"GOVERNANCE_SERVICE_\",\n\t\"MAESTRO_GOVERNANCE_\",\n\t// Internal service clients must not accept repo-selected endpoints while\n\t// falling back to user-provided bearer tokens or tenant headers.\n\t\"PIPELINE_\",\n\t\"MAESTRO_AGENT_REGISTRY_\",\n\t\"AGENT_REGISTRY_\",\n\t\"PLATFORM_AGENT_REGISTRY_\",\n\t\"MAESTRO_PLATFORM_A2A_\",\n\t\"MAESTRO_A2A_\",\n\t\"MAESTRO_AGENT_RUNTIME_\",\n\t\"AGENT_RUNTIME_\",\n\t\"PLATFORM_AGENT_RUNTIME_\",\n\t// Platform tool-execution bridge: a repo .env must not be able to point\n\t// the Connect endpoint, auth token, or tenant identifiers at an\n\t// attacker-controlled service, or bash/MCP tool args and observation\n\t// output get posted there with the user's real credentials.\n\t\"TOOL_EXECUTION_SERVICE_\",\n\t\"MAESTRO_TOOL_EXECUTION_\",\n\t\"MAESTRO_GUARDIAN_\",\n\t\"MAESTRO_HISTORY_\",\n\t\"MAESTRO_HOOKS_\",\n\t\"MAESTRO_JWT_\",\n\t\"MAESTRO_MARKITDOWN_\",\n\t\"MAESTRO_MEMORY_\",\n\t\"MAESTRO_OTEL_\",\n\t// Web rate-limit controls: `session-rate-limit.ts` and\n\t// `session-share-store.ts` read these at module load when web-server.ts\n\t// imports its handlers. A repo .env could otherwise weaken per-session\n\t// or share rate limits even in a hardened web profile.\n\t\"MAESTRO_RATE_LIMIT_\",\n\t\"MAESTRO_SHARE_RATE_LIMIT_\",\n\t\"MAESTRO_PLATFORM_MCP_\",\n\t// Prompt-service controls: these can redirect system prompt resolution and\n\t// credential-bearing service calls to a repo-selected endpoint.\n\t\"PROMPTS_SERVICE_\",\n\t\"MAESTRO_PROMPTS_\",\n\t\"MAESTRO_SAFE_\",\n\t\"MAESTRO_SCENARIO_\",\n\t\"MAESTRO_SESSION_BACKUP_\",\n\t\"MAESTRO_SESSION_RECOVERY_\",\n\t\"MAESTRO_SHARED_MEMORY_\",\n\t\"MAESTRO_TELEMETRY_\",\n\t\"OTEL_\",\n\t\"PLAYWRIGHT_TELEMETRY_\",\n\t\"SENTRY_\",\n] as const;\nconst isDotenvSecurityOverrideKey = (key: string): boolean => {\n\tconst normalizedKey = normalizeEnvKey(key);\n\treturn (\n\t\tDOTENV_SECURITY_OVERRIDE_KEY_SET.has(normalizedKey) ||\n\t\tDOTENV_SECURITY_OVERRIDE_PREFIXES.some((prefix) =>\n\t\t\tnormalizedKey.startsWith(prefix),\n\t\t)\n\t);\n};\nconst loadedEnvKeys = new Set<string>();\n\nexport function loadEnv(): string[] {\n\tconst newlyLoadedKeys = new Set<string>();\n\tfor (const file of ENV_FILES) {\n\t\tconst resolved = join(process.cwd(), file);\n\t\tif (existsSync(resolved)) {\n\t\t\tconst before = new Set(Object.keys(process.env));\n\t\t\tconst beforeNormalized = new Set([...before].map(normalizeEnvKey));\n\t\t\tconst result = config({ path: resolved, override: false });\n\t\t\tconst after = new Set(Object.keys(process.env));\n\t\t\tfor (const key of Object.keys(result.parsed ?? {})) {\n\t\t\t\tconst normalizedKey = normalizeEnvKey(key);\n\t\t\t\tconst wasLoadedByDotenv = !before.has(key) && after.has(key);\n\t\t\t\tif (!wasLoadedByDotenv) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (BLOCKED_DOTENV_KEYS.has(normalizedKey)) {\n\t\t\t\t\tReflect.deleteProperty(process.env, key);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Track newly loaded keys so they can be scrubbed later. For\n\t\t\t\t// security override keys we record the exact dotenv-loaded key even\n\t\t\t\t// when a differently cased variant already existed in the real\n\t\t\t\t// environment: env names are case-sensitive on POSIX, so dotenv can\n\t\t\t\t// create a distinct uppercase `MAESTRO_PROFILE` alongside a user's\n\t\t\t\t// `maestro_profile`, and that repo-controlled value must still be\n\t\t\t\t// scrubbed rather than survive due to the normalized collision.\n\t\t\t\tif (\n\t\t\t\t\t!beforeNormalized.has(normalizedKey) ||\n\t\t\t\t\tisDotenvSecurityOverrideKey(normalizedKey)\n\t\t\t\t) {\n\t\t\t\t\tnewlyLoadedKeys.add(key);\n\t\t\t\t\tloadedEnvKeys.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...newlyLoadedKeys];\n}\n\nexport function getLoadedEnvKeys(): string[] {\n\treturn [...loadedEnvKeys];\n}\n\nexport function scrubLoadedSecurityOverrideEnv(): string[] {\n\tconst scrubbed: string[] = [];\n\tfor (const key of DOTENV_SECURITY_OVERRIDE_KEYS) {\n\t\tconst matchingLoadedKeys = [...loadedEnvKeys].filter(\n\t\t\t(loadedKey) => normalizeEnvKey(loadedKey) === normalizeEnvKey(key),\n\t\t);\n\t\tif (matchingLoadedKeys.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const loadedKey of matchingLoadedKeys) {\n\t\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\t\tloadedEnvKeys.delete(loadedKey);\n\t\t\tscrubbed.push(loadedKey);\n\t\t}\n\t}\n\tfor (const loadedKey of [...loadedEnvKeys]) {\n\t\tif (!isDotenvSecurityOverrideKey(loadedKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\tloadedEnvKeys.delete(loadedKey);\n\t\tscrubbed.push(loadedKey);\n\t}\n\treturn scrubbed;\n}\n\nexport interface FinalizedEnvLoad {\n\tloadedEnvKeys: string[];\n\tscrubbedEnvKeys: string[];\n}\n\n/**\n * Finish dotenv bootstrap after any trust-sensitive keys have been loaded.\n *\n * The order is load -> scrub -> reset RuntimeEnv. Resetting before the scrub\n * can preserve repo-controlled security overrides in the cached runtime\n * snapshot, which is exactly the bug class closed by the OTel follow-up.\n */\nexport function finalizeLoadedEnv(\n\tloadedEnvKeys: string[] = [],\n): FinalizedEnvLoad {\n\tconst scrubbedEnvKeys = scrubLoadedSecurityOverrideEnv();\n\tresetDefaultRuntimeEnv();\n\treturn { loadedEnvKeys, scrubbedEnvKeys };\n}\n\nexport function loadAndFinalizeEnv(): FinalizedEnvLoad {\n\treturn finalizeLoadedEnv(loadEnv());\n}\n"]}
1
+ {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { config } from \"dotenv\";\nimport { ENV_VARS } from \"./config/env-vars.js\";\nimport {\n\tmarkRuntimeEnvFinalized,\n\tresetDefaultRuntimeEnv,\n} from \"./runtime/env.js\";\n\nconst ENV_FILES = [\".env.local\", \".env\"];\n\n// Keys that must never be sourced from a repo-controlled dotenv file. These are\n// stripped immediately at load time so they can never reach process.env.\nconst BLOCKED_DOTENV_KEYS = new Set([\n\t\"HOME\",\n\t\"FACTORY_HOME\",\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_PROFILE\",\n\t\"MAESTRO_LLM_GATEWAY_URL\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_TRUST_PROJECT_MODEL_CONFIG\",\n\t\"USERPROFILE\",\n\t// Agent-directory overrides decide where the \"global\" APPEND_SYSTEM.md and\n\t// other agent-scoped files are loaded from. A repo-controlled value can\n\t// redirect that fallback back into the workspace, bypassing the\n\t// untrusted-project gate. See resolveLoadedAppendSystemPromptPath.\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n]);\n\n// Security-relevant settings that may legitimately come from a user's real\n// shell environment but must not be silently set by a repo-controlled dotenv\n// file. These are loaded normally and then scrubbed via\n// scrubLoadedSecurityOverrideEnv() once trust has been established.\nconst DOTENV_SECURITY_OVERRIDE_KEYS = [\n\tENV_VARS.PROFILE,\n\t\"MAESTRO_WEB_PROFILE\",\n\tENV_VARS.APPROVAL_POLICY,\n\t\"MAESTRO_APPROVAL_MODE\",\n\tENV_VARS.SANDBOX_MODE,\n\tENV_VARS.SAFE_MODE,\n\t\"MAESTRO_SAFE_REQUIRE_PLAN\",\n\t\"MAESTRO_SAFE_VALIDATORS\",\n\tENV_VARS.CONTEXT_FIREWALL_BLOCKING,\n\t\"MAESTRO_HOME\",\n\t\"MAESTRO_AGENT_DIR\",\n\t\"PLAYWRIGHT_AGENT_DIR\",\n\t\"CODING_AGENT_DIR\",\n\t\"NODE_OPTIONS\",\n\t\"MAESTRO_CONFIG\",\n\t\"MAESTRO_MODELS_FILE\",\n\t\"MAESTRO_NOTIFY_EVENTS\",\n\t\"MAESTRO_NOTIFY_PROGRAM\",\n\t\"MAESTRO_ENTERPRISE_POLICY_PATH\",\n\t\"MAESTRO_POLICY_PATH\",\n\t\"MAESTRO_PROMPT_HISTORY_FILE\",\n\t\"MAESTRO_TOOL_HISTORY_FILE\",\n\t\"MAESTRO_TUI_TIP_HISTORY_FILE\",\n\t\"MAESTRO_BASH_HISTORY\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n\t// EvalOps identity service URL: `bootstrapEvalOpsAgent()` and the OAuth\n\t// flow honor these aliases before the stored/derived URL. A repo .env\n\t// could otherwise point identity at an attacker service and capture the\n\t// user's OAuth bearer during agent bootstrap.\n\t\"MAESTRO_IDENTITY_URL\",\n\t\"EVALOPS_IDENTITY_URL\",\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n\t// EvalOps tenant identity aliases: any of these can scope durable-memory\n\t// writes (`X-Organization-ID`), remote-runner workspace selection, and\n\t// managed-context lookups. A repo-controlled dotenv must not be able to\n\t// redirect those tenant identifiers when a real EvalOps token is present.\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n\t\"MAESTRO_EVALOPS_WORKSPACE_ID\",\n\t\"EVALOPS_WORKSPACE_ID\",\n\t\"MAESTRO_WORKSPACE_ID\",\n\t\"MAESTRO_REMOTE_RUNNER_WORKSPACE_ID\",\n\t\"MAESTRO_EVALOPS_USER_ID\",\n\t\"EVALOPS_USER_ID\",\n\t\"MAESTRO_USER_ID\",\n\t\"EVALOPS_NATS_URL\",\n\t\"NATS_URL\",\n\t\"NATS_TOKEN\",\n\t\"NATS_USER\",\n\t\"NATS_PASSWORD\",\n\t\"MAESTRO_WEB_REQUIRE_KEY\",\n\t\"MAESTRO_WEB_REQUIRE_CSRF\",\n\t\"MAESTRO_WEB_REQUIRE_REDIS\",\n\t\"MAESTRO_WEB_ROOT\",\n\t// CORS / WebSocket origin policy: a repo-controlled dotenv must not be\n\t// able to broaden cross-origin browser access to the local API by\n\t// setting `MAESTRO_WEB_ORIGIN=*` (or an attacker-controlled origin)\n\t// before the user's real env is checked.\n\t\"MAESTRO_WEB_ORIGIN\",\n\t// Content-Security-Policy override: web-server.ts prefers a non-empty\n\t// MAESTRO_WEB_CSP over the prod default when building SECURITY_HEADERS,\n\t// so a repo .env could otherwise weaken the browser policy in any\n\t// hardened profile.\n\t\"MAESTRO_WEB_CSP\",\n\t\"MAESTRO_STRICT_SESSION_ACCESS\",\n\t// Session scoping controls: a repo-controlled dotenv must not be able to\n\t// collapse authenticated web sessions back to the global file store.\n\tENV_VARS.SESSION_SCOPE,\n\tENV_VARS.MULTI_USER,\n\t\"MAESTRO_REDIS_URL\",\n\t\"MAESTRO_DATABASE_URL\",\n\t\"DATABASE_URL\",\n\t\"MAESTRO_HOSTED_SESSION_STORAGE\",\n\t\"MAESTRO_SESSION_STORAGE\",\n\t\"MAESTRO_TRUST_PROXY\",\n\t\"MAESTRO_TRUST_PROXY_HOPS\",\n\t// Web/auth secret material: a repo-controlled dotenv must not be able to\n\t// choose a known API key, CSRF token, JWT signing secret, or shared secret\n\t// for endpoints that are supposed to require a user-provided credential.\n\t\"MAESTRO_WEB_API_KEY\",\n\t\"MAESTRO_WEB_CSRF_TOKEN\",\n\t\"MAESTRO_JWT_SECRET\",\n\t// `JWT_SECRET` is the unprefixed fallback honored by src/auth/jwt.ts when\n\t// `MAESTRO_JWT_SECRET` is not set; a repo-controlled dotenv must not be\n\t// able to choose the signing key for enterprise auth via this fallback.\n\t\"JWT_SECRET\",\n\t// OAuth credential file overrides: `src/providers/openai-auth.ts:91`\n\t// binds AUTH_FILE to OPENAI_OAUTH_FILE, and `saveOpenAIOAuthCredential()`\n\t// then writes access/refresh/ID tokens and the derived API key to that\n\t// path. A repo .env must not be able to redirect fresh OAuth credentials\n\t// into the checkout where they can be read on the next install.\n\t\"OPENAI_OAUTH_FILE\",\n\t\"MAESTRO_AUTH_SHARED_SECRET\",\n\t\"MAESTRO_DEVICE_IDENTITY_HELPER\",\n\t\"MAESTRO_DEVICE_IDENTITY_ALLOW_TEST_HELPER\",\n\t\"MAESTRO_USER_MCP_PATH\",\n\t\"MAESTRO_ENTERPRISE_MCP_PATH\",\n\t\"MAESTRO_MCP_PROJECT_APPROVALS_FILE\",\n\t\"MAESTRO_MCP_WORKSPACE_TRUST_FILE\",\n\t\"MAESTRO_PACKAGE_CACHE_DIR\",\n\t\"MAESTRO_RUN_SCRIPT_ALLOWLIST\",\n\t\"MAESTRO_SCRIPT_RUNNER\",\n\t// Session storage location: a repo-controlled dotenv must not be able to\n\t// redirect where session transcripts are read from or written to.\n\tENV_VARS.SESSION_DIR,\n\t// Local-state file/dir overrides: a repo-controlled dotenv must not be\n\t// able to redirect where the todo store or background-task logs are\n\t// written, which would otherwise let a checkout capture future task\n\t// content or command output for files that live outside the workspace\n\t// by default. Same reasoning extends to the web queue store and\n\t// automations store, which write user prompt/output text to env-selected\n\t// paths.\n\t\"MAESTRO_TODO_FILE\",\n\t\"MAESTRO_BACKGROUND_LOG_DIR\",\n\t\"MAESTRO_QUEUE_STATE\",\n\t\"MAESTRO_AUTOMATIONS_STATE\",\n\t// Sandbox enforcement opt-out: a repo-controlled dotenv must not be able to\n\t// enable unsandboxed fallback execution.\n\t\"MAESTRO_ALLOW_UNSANDBOXED_SANDBOX_FALLBACK\",\n\t// Bash guard / shell egress / allowlist controls: a repo-controlled dotenv\n\t// must not be able to disable command approvals or widen the allowlist.\n\t\"MAESTRO_BASH_GUARD\",\n\t\"MAESTRO_ALLOW_EGRESS_SHELL\",\n\t\"MAESTRO_FAIL_UNTAGGED_EGRESS\",\n\t\"MAESTRO_BACKGROUND_SHELL_DISABLE\",\n\t\"MAESTRO_BASH_ALLOWLIST_PATHS\",\n\t\"MAESTRO_GUARDIAN\",\n\t\"MAESTRO_MARKITDOWN\",\n\t\"MAESTRO_EVENT_BUS\",\n\t\"MAESTRO_AUDIT_BUS\",\n\t\"MAESTRO_TELEMETRY\",\n\t\"PLAYWRIGHT_TELEMETRY\",\n\t\"MAESTRO_OTEL\",\n\t// Auto-verify custom command: a repo-controlled dotenv must not be able to\n\t// inject an arbitrary shell command that AutoVerifyService runs after edits.\n\t\"MAESTRO_AUTO_TEST_COMMAND\",\n] as const;\n\nconst normalizeEnvKey = (key: string) => key.toUpperCase();\nconst DOTENV_SECURITY_OVERRIDE_KEY_SET = new Set<string>(\n\tDOTENV_SECURITY_OVERRIDE_KEYS.map(normalizeEnvKey),\n);\nconst DOTENV_SECURITY_OVERRIDE_PREFIXES = [\n\t\"APPROVALS_SERVICE_\",\n\t\"MAESTRO_ARTIFACT_ACCESS_\",\n\t\"MAESTRO_APPROVALS_\",\n\t\"MAESTRO_AGENT_MCP_\",\n\t\"MAESTRO_BEACON_\",\n\t\"MAESTRO_CEREBRO_MCP_\",\n\t\"MAESTRO_EVENT_BUS_\",\n\t\"MAESTRO_EVALOPS_AGENT_MCP_\",\n\t\"GOVERNANCE_SERVICE_\",\n\t\"MAESTRO_GOVERNANCE_\",\n\t// Internal service clients must not accept repo-selected endpoints while\n\t// falling back to user-provided bearer tokens or tenant headers.\n\t\"PIPELINE_\",\n\t\"MAESTRO_AGENT_REGISTRY_\",\n\t\"AGENT_REGISTRY_\",\n\t\"PLATFORM_AGENT_REGISTRY_\",\n\t\"MAESTRO_PLATFORM_A2A_\",\n\t\"MAESTRO_A2A_\",\n\t\"MAESTRO_AGENT_RUNTIME_\",\n\t\"AGENT_RUNTIME_\",\n\t\"PLATFORM_AGENT_RUNTIME_\",\n\t// Platform tool-execution bridge: a repo .env must not be able to point\n\t// the Connect endpoint, auth token, or tenant identifiers at an\n\t// attacker-controlled service, or bash/MCP tool args and observation\n\t// output get posted there with the user's real credentials.\n\t\"TOOL_EXECUTION_SERVICE_\",\n\t\"MAESTRO_TOOL_EXECUTION_\",\n\t\"MAESTRO_GUARDIAN_\",\n\t\"MAESTRO_HISTORY_\",\n\t\"MAESTRO_HOOKS_\",\n\t\"MAESTRO_JWT_\",\n\t\"MAESTRO_MARKITDOWN_\",\n\t\"MAESTRO_MEMORY_\",\n\t\"MAESTRO_OTEL_\",\n\t// Web rate-limit controls: `session-rate-limit.ts` and\n\t// `session-share-store.ts` read these at module load when web-server.ts\n\t// imports its handlers. A repo .env could otherwise weaken per-session\n\t// or share rate limits even in a hardened web profile.\n\t\"MAESTRO_RATE_LIMIT_\",\n\t\"MAESTRO_SHARE_RATE_LIMIT_\",\n\t\"MAESTRO_PLATFORM_MCP_\",\n\t// Prompt-service controls: these can redirect system prompt resolution and\n\t// credential-bearing service calls to a repo-selected endpoint.\n\t\"PROMPTS_SERVICE_\",\n\t\"MAESTRO_PROMPTS_\",\n\t\"MAESTRO_SAFE_\",\n\t\"MAESTRO_SCENARIO_\",\n\t\"MAESTRO_SESSION_BACKUP_\",\n\t\"MAESTRO_SESSION_RECOVERY_\",\n\t\"MAESTRO_SHARED_MEMORY_\",\n\t\"MAESTRO_TELEMETRY_\",\n\t\"OTEL_\",\n\t\"PLAYWRIGHT_TELEMETRY_\",\n\t\"SENTRY_\",\n] as const;\nconst isDotenvSecurityOverrideKey = (key: string): boolean => {\n\tconst normalizedKey = normalizeEnvKey(key);\n\treturn (\n\t\tDOTENV_SECURITY_OVERRIDE_KEY_SET.has(normalizedKey) ||\n\t\tDOTENV_SECURITY_OVERRIDE_PREFIXES.some((prefix) =>\n\t\t\tnormalizedKey.startsWith(prefix),\n\t\t)\n\t);\n};\nconst loadedEnvKeys = new Set<string>();\n\nexport function loadEnv(): string[] {\n\tconst newlyLoadedKeys = new Set<string>();\n\tfor (const file of ENV_FILES) {\n\t\tconst resolved = join(process.cwd(), file);\n\t\tif (existsSync(resolved)) {\n\t\t\tconst before = new Set(Object.keys(process.env));\n\t\t\tconst beforeNormalized = new Set([...before].map(normalizeEnvKey));\n\t\t\tconst result = config({ path: resolved, override: false });\n\t\t\tconst after = new Set(Object.keys(process.env));\n\t\t\tfor (const key of Object.keys(result.parsed ?? {})) {\n\t\t\t\tconst normalizedKey = normalizeEnvKey(key);\n\t\t\t\tconst wasLoadedByDotenv = !before.has(key) && after.has(key);\n\t\t\t\tif (!wasLoadedByDotenv) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (BLOCKED_DOTENV_KEYS.has(normalizedKey)) {\n\t\t\t\t\tReflect.deleteProperty(process.env, key);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Track newly loaded keys so they can be scrubbed later. For\n\t\t\t\t// security override keys we record the exact dotenv-loaded key even\n\t\t\t\t// when a differently cased variant already existed in the real\n\t\t\t\t// environment: env names are case-sensitive on POSIX, so dotenv can\n\t\t\t\t// create a distinct uppercase `MAESTRO_PROFILE` alongside a user's\n\t\t\t\t// `maestro_profile`, and that repo-controlled value must still be\n\t\t\t\t// scrubbed rather than survive due to the normalized collision.\n\t\t\t\tif (\n\t\t\t\t\t!beforeNormalized.has(normalizedKey) ||\n\t\t\t\t\tisDotenvSecurityOverrideKey(normalizedKey)\n\t\t\t\t) {\n\t\t\t\t\tnewlyLoadedKeys.add(key);\n\t\t\t\t\tloadedEnvKeys.add(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...newlyLoadedKeys];\n}\n\nexport function getLoadedEnvKeys(): string[] {\n\treturn [...loadedEnvKeys];\n}\n\nexport function scrubLoadedSecurityOverrideEnv(): string[] {\n\tconst scrubbed: string[] = [];\n\tfor (const key of DOTENV_SECURITY_OVERRIDE_KEYS) {\n\t\tconst matchingLoadedKeys = [...loadedEnvKeys].filter(\n\t\t\t(loadedKey) => normalizeEnvKey(loadedKey) === normalizeEnvKey(key),\n\t\t);\n\t\tif (matchingLoadedKeys.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const loadedKey of matchingLoadedKeys) {\n\t\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\t\tloadedEnvKeys.delete(loadedKey);\n\t\t\tscrubbed.push(loadedKey);\n\t\t}\n\t}\n\tfor (const loadedKey of [...loadedEnvKeys]) {\n\t\tif (!isDotenvSecurityOverrideKey(loadedKey)) {\n\t\t\tcontinue;\n\t\t}\n\t\tReflect.deleteProperty(process.env, loadedKey);\n\t\tloadedEnvKeys.delete(loadedKey);\n\t\tscrubbed.push(loadedKey);\n\t}\n\treturn scrubbed;\n}\n\nexport interface FinalizedEnvLoad {\n\tloadedEnvKeys: string[];\n\tscrubbedEnvKeys: string[];\n}\n\n/**\n * Finish dotenv bootstrap after any trust-sensitive keys have been loaded.\n *\n * The order is load -> scrub -> reset RuntimeEnv. Resetting before the scrub\n * can preserve repo-controlled security overrides in the cached runtime\n * snapshot, which is exactly the bug class closed by the OTel follow-up.\n */\nexport function finalizeLoadedEnv(\n\tloadedEnvKeys: string[] = [],\n): FinalizedEnvLoad {\n\tconst scrubbedEnvKeys = scrubLoadedSecurityOverrideEnv();\n\tresetDefaultRuntimeEnv();\n\tmarkRuntimeEnvFinalized();\n\treturn { loadedEnvKeys, scrubbedEnvKeys };\n}\n\nexport function loadAndFinalizeEnv(): FinalizedEnvLoad {\n\treturn finalizeLoadedEnv(loadEnv());\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AA6dH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAs/CxC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AA2fH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAokDxC"}
package/dist/main.js CHANGED
@@ -118,6 +118,37 @@ const STARTUP_TELEMETRY_EXIT_WAIT_GRACE_MS = 25;
118
118
  let enterpriseCleanupRegistered = false;
119
119
  let checkpointCleanupRegistered = false;
120
120
  let sandboxCleanupRegistered = false;
121
+ async function cleanupNonInteractiveRuntimeResources() {
122
+ let timeout;
123
+ const timeoutPromise = new Promise((resolve) => {
124
+ timeout = setTimeout(() => resolve("timeout"), 5_000);
125
+ });
126
+ const cleanupPromise = (async () => {
127
+ try {
128
+ const [{ mcpManager }, { lspManager }] = await Promise.all([
129
+ import("./mcp/manager.js"),
130
+ import("./lsp/manager.js"),
131
+ ]);
132
+ await Promise.allSettled([
133
+ mcpManager.disconnectAll(),
134
+ lspManager.shutdownAll(),
135
+ ]);
136
+ }
137
+ catch {
138
+ // Best-effort shutdown must not mask the command's original result.
139
+ }
140
+ return "done";
141
+ })();
142
+ try {
143
+ await Promise.race([cleanupPromise, timeoutPromise]);
144
+ }
145
+ finally {
146
+ void cleanupPromise.catch(() => undefined);
147
+ if (timeout) {
148
+ clearTimeout(timeout);
149
+ }
150
+ }
151
+ }
121
152
  function isTruthyEnvFlag(value) {
122
153
  switch (value?.trim().toLowerCase()) {
123
154
  case "1":
@@ -611,6 +642,13 @@ export async function main(args) {
611
642
  await handleStatusCommand();
612
643
  return;
613
644
  }
645
+ if (parsed.command === "mission") {
646
+ const { handleMissionCommand } = await import("./cli/commands/mission.js");
647
+ await handleMissionCommand(parsed.subcommand, parsed.messages, {
648
+ json: parsed.execJson,
649
+ });
650
+ return;
651
+ }
614
652
  if (parsed.command === "update") {
615
653
  const { handleUpdateCommand } = await import("./cli/commands/update.js");
616
654
  await handleUpdateCommand(parsed.commandArgs ?? []);
@@ -1021,6 +1059,34 @@ export async function main(args) {
1021
1059
  process.exit(1);
1022
1060
  }
1023
1061
  }
1062
+ if (parsed.command === "value") {
1063
+ const { handleValueCommand } = await import("./cli/commands/value.js");
1064
+ switch (parsed.subcommand) {
1065
+ case undefined:
1066
+ case "today":
1067
+ case "yesterday":
1068
+ case "week":
1069
+ case "7d":
1070
+ case "month":
1071
+ case "30d":
1072
+ case "all":
1073
+ await handleValueCommand(parsed.subcommand, {
1074
+ format: parsed.exportFormat,
1075
+ outputDir: parsed.outputDir,
1076
+ writeArtifacts: parsed.valueWrite,
1077
+ });
1078
+ return;
1079
+ default:
1080
+ console.error(chalk.red(`Unknown value subcommand: ${parsed.subcommand}`));
1081
+ console.log(chalk.dim("\nAvailable commands:"));
1082
+ console.log(chalk.dim(" maestro value - Show last 30 days"));
1083
+ console.log(chalk.dim(" maestro value week - Show last 7 days"));
1084
+ console.log(chalk.dim(" maestro value all - Show all local evidence"));
1085
+ console.log(chalk.dim(" maestro value --format json|md - Export value report"));
1086
+ console.log(chalk.dim(" maestro value --write --output-dir .maestro/value-reports - Persist report artifacts"));
1087
+ process.exit(1);
1088
+ }
1089
+ }
1024
1090
  // Handle models commands
1025
1091
  if (parsed.command === "models") {
1026
1092
  const { handleModelsList, handleModelsProviders } = await import("./cli/commands/models.js");
@@ -1064,13 +1130,30 @@ export async function main(args) {
1064
1130
  : "maestro agents init --force";
1065
1131
  // Handle "maestro agents init" command to generate AGENTS.md
1066
1132
  if (parsed.command === "agents") {
1067
- const { buildAgentsInitPrompt, handleAgentsInit } = await import("./cli/commands/agents.js");
1133
+ const { buildAgentsInitPrompt, handleAgentsInit, handleAgentsProfileCommand, } = await import("./cli/commands/agents.js");
1134
+ if (parsed.subcommand === "profile") {
1135
+ try {
1136
+ handleAgentsProfileCommand(parsed.commandArgs ?? parsed.messages, {
1137
+ force: parsed.force,
1138
+ json: parsed.execJson,
1139
+ });
1140
+ return;
1141
+ }
1142
+ catch (error) {
1143
+ const message = error instanceof Error
1144
+ ? error.message
1145
+ : "Failed to manage specialist profile";
1146
+ console.error(chalk.red(message));
1147
+ process.exit(1);
1148
+ }
1149
+ }
1068
1150
  if (parsed.subcommand && parsed.subcommand !== "init") {
1069
- console.error(chalk.red(`Unknown agents subcommand: ${parsed.subcommand}. Try "maestro agents init"`));
1151
+ console.error(chalk.red(`Unknown agents subcommand: ${parsed.subcommand}. Try "maestro agents init" or "maestro agents profile list"`));
1070
1152
  process.exit(1);
1071
1153
  }
1072
1154
  try {
1073
- const targetArg = parsed.messages[0];
1155
+ const agentsArgs = parsed.commandArgs ?? parsed.messages;
1156
+ const targetArg = agentsArgs[0];
1074
1157
  const result = handleAgentsInit(targetArg, { force: parsed.force });
1075
1158
  if (result.action === "preview") {
1076
1159
  const { sanitizeTerminalPreview } = await import("./cli-tui/utils/text-formatting.js");
@@ -1568,6 +1651,12 @@ export async function main(args) {
1568
1651
  }
1569
1652
  finally {
1570
1653
  await automaticMemory.flush();
1654
+ if (!isInteractive ||
1655
+ mode === "rpc" ||
1656
+ mode === "headless" ||
1657
+ parsed.headless) {
1658
+ await cleanupNonInteractiveRuntimeResources();
1659
+ }
1571
1660
  }
1572
1661
  }
1573
1662
  //# sourceMappingURL=main.js.map