@evalops/maestro 0.10.49 → 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 (422) 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-command-runtime.js +2 -2
  143. package/dist/cli-command-runtime.js.map +1 -1
  144. package/dist/cli-runtime.js +7798 -2805
  145. package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
  146. package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
  147. package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
  148. package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
  149. package/dist/cli-tui/commands/undo-handlers.js +7 -2
  150. package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
  151. package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
  152. package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
  153. package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
  154. package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
  155. package/dist/cli.js +4 -6
  156. package/dist/cli.js.map +1 -1
  157. package/dist/codex/app-server-client.d.ts.map +1 -1
  158. package/dist/codex/app-server-client.js +1 -3
  159. package/dist/codex/app-server-client.js.map +1 -1
  160. package/dist/codex/compatibility.d.ts.map +1 -1
  161. package/dist/codex/compatibility.js +1 -3
  162. package/dist/codex/compatibility.js.map +1 -1
  163. package/dist/codex/subagent-dispatch-table.d.ts +8 -0
  164. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
  165. package/dist/codex/subagent-dispatch-table.js +23 -0
  166. package/dist/codex/subagent-dispatch-table.js.map +1 -1
  167. package/dist/context/manifest.d.ts.map +1 -1
  168. package/dist/context/manifest.js +1 -3
  169. package/dist/context/manifest.js.map +1 -1
  170. package/dist/conversation/render-model.d.ts +0 -36
  171. package/dist/conversation/render-model.d.ts.map +1 -1
  172. package/dist/conversation/render-model.js +1 -3
  173. package/dist/conversation/render-model.js.map +1 -1
  174. package/dist/customer-value/ambient-learning.d.ts +75 -0
  175. package/dist/customer-value/ambient-learning.d.ts.map +1 -0
  176. package/dist/customer-value/ambient-learning.js +472 -0
  177. package/dist/customer-value/ambient-learning.js.map +1 -0
  178. package/dist/customer-value/internal-helpers.d.ts +13 -0
  179. package/dist/customer-value/internal-helpers.d.ts.map +1 -0
  180. package/dist/customer-value/internal-helpers.js +70 -0
  181. package/dist/customer-value/internal-helpers.js.map +1 -0
  182. package/dist/customer-value/report.d.ts +282 -0
  183. package/dist/customer-value/report.d.ts.map +1 -0
  184. package/dist/customer-value/report.js +2085 -0
  185. package/dist/customer-value/report.js.map +1 -0
  186. package/dist/db/health.d.ts +1 -1
  187. package/dist/db/health.d.ts.map +1 -1
  188. package/dist/db/health.js +10 -0
  189. package/dist/db/health.js.map +1 -1
  190. package/dist/db/migrations/0009_operating_layer_evidence.sql +30 -0
  191. package/dist/db/migrations/meta/_journal.json +7 -0
  192. package/dist/db/schema.d.ts +268 -1
  193. package/dist/db/schema.d.ts.map +1 -1
  194. package/dist/db/schema.js +28 -0
  195. package/dist/db/schema.js.map +1 -1
  196. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  197. package/dist/evalops/agent-bootstrap.js +1 -3
  198. package/dist/evalops/agent-bootstrap.js.map +1 -1
  199. package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
  200. package/dist/evalops/agent-mcp-metadata.js +1 -3
  201. package/dist/evalops/agent-mcp-metadata.js.map +1 -1
  202. package/dist/index.d.ts +1 -0
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +1 -0
  205. package/dist/index.js.map +1 -1
  206. package/dist/installers/maestro-review-workflow.d.ts +38 -0
  207. package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
  208. package/dist/installers/maestro-review-workflow.js +163 -0
  209. package/dist/installers/maestro-review-workflow.js.map +1 -0
  210. package/dist/load-env.d.ts +13 -0
  211. package/dist/load-env.d.ts.map +1 -1
  212. package/dist/load-env.js +17 -0
  213. package/dist/load-env.js.map +1 -1
  214. package/dist/main.d.ts.map +1 -1
  215. package/dist/main.js +96 -7
  216. package/dist/main.js.map +1 -1
  217. package/dist/mcp/config.d.ts.map +1 -1
  218. package/dist/mcp/config.js +1 -3
  219. package/dist/mcp/config.js.map +1 -1
  220. package/dist/mcp/elicitation.d.ts.map +1 -1
  221. package/dist/mcp/elicitation.js +1 -3
  222. package/dist/mcp/elicitation.js.map +1 -1
  223. package/dist/mcp/official-registry.d.ts.map +1 -1
  224. package/dist/mcp/official-registry.js +1 -3
  225. package/dist/mcp/official-registry.js.map +1 -1
  226. package/dist/mcp/workspace-trust.d.ts.map +1 -1
  227. package/dist/mcp/workspace-trust.js +1 -3
  228. package/dist/mcp/workspace-trust.js.map +1 -1
  229. package/dist/memory/service-client.d.ts.map +1 -1
  230. package/dist/memory/service-client.js +1 -3
  231. package/dist/memory/service-client.js.map +1 -1
  232. package/dist/models/config-loader.d.ts.map +1 -1
  233. package/dist/models/config-loader.js +1 -3
  234. package/dist/models/config-loader.js.map +1 -1
  235. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
  236. package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  237. package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
  238. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  239. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
  240. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
  241. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
  242. package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
  243. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  244. package/dist/node_modules/@evalops/tui/package.json +1 -1
  245. package/dist/oauth/connectors.d.ts.map +1 -1
  246. package/dist/oauth/connectors.js +1 -3
  247. package/dist/oauth/connectors.js.map +1 -1
  248. package/dist/oauth/evalops.d.ts.map +1 -1
  249. package/dist/oauth/evalops.js +1 -3
  250. package/dist/oauth/evalops.js.map +1 -1
  251. package/dist/platform/a2a-client.d.ts.map +1 -1
  252. package/dist/platform/a2a-client.js +1 -3
  253. package/dist/platform/a2a-client.js.map +1 -1
  254. package/dist/platform/a2a-cockpit.d.ts +1 -0
  255. package/dist/platform/a2a-cockpit.d.ts.map +1 -1
  256. package/dist/platform/a2a-cockpit.js +42 -11
  257. package/dist/platform/a2a-cockpit.js.map +1 -1
  258. package/dist/platform/a2a-completion-audit.d.ts +1 -1
  259. package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
  260. package/dist/platform/a2a-completion-audit.js +7 -11
  261. package/dist/platform/a2a-completion-audit.js.map +1 -1
  262. package/dist/platform/a2a-maestro-peer.js +16 -0
  263. package/dist/platform/a2a-maestro-peer.js.map +1 -1
  264. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
  265. package/dist/platform/a2a-peer-pairing.js +1 -3
  266. package/dist/platform/a2a-peer-pairing.js.map +1 -1
  267. package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
  268. package/dist/platform/a2a-peer-registry.js +1 -3
  269. package/dist/platform/a2a-peer-registry.js.map +1 -1
  270. package/dist/platform/a2a-task-ledger.d.ts +20 -0
  271. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  272. package/dist/platform/a2a-task-ledger.js +207 -11
  273. package/dist/platform/a2a-task-ledger.js.map +1 -1
  274. package/dist/platform/a2a-work-graph.d.ts.map +1 -1
  275. package/dist/platform/a2a-work-graph.js +1 -3
  276. package/dist/platform/a2a-work-graph.js.map +1 -1
  277. package/dist/platform/operating-layer.d.ts +127 -0
  278. package/dist/platform/operating-layer.d.ts.map +1 -0
  279. package/dist/platform/operating-layer.js +360 -0
  280. package/dist/platform/operating-layer.js.map +1 -0
  281. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  282. package/dist/platform/tool-execution-client.js +19 -2
  283. package/dist/platform/tool-execution-client.js.map +1 -1
  284. package/dist/providers/auth.d.ts.map +1 -1
  285. package/dist/providers/auth.js +1 -3
  286. package/dist/providers/auth.js.map +1 -1
  287. package/dist/runtime/env.d.ts +9 -1
  288. package/dist/runtime/env.d.ts.map +1 -1
  289. package/dist/runtime/env.js +63 -1
  290. package/dist/runtime/env.js.map +1 -1
  291. package/dist/safety/policy.d.ts.map +1 -1
  292. package/dist/safety/policy.js +1 -4
  293. package/dist/safety/policy.js.map +1 -1
  294. package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
  295. package/dist/sandbox/docker-sandbox.js +6 -1
  296. package/dist/sandbox/docker-sandbox.js.map +1 -1
  297. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  298. package/dist/server/handlers/hosted-runner-drain.js +1 -3
  299. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  300. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  301. package/dist/server/handlers/platform-a2a-push.js +53 -2
  302. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  303. package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
  304. package/dist/server/handlers/runtime-app-server-ws.js +1 -3
  305. package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
  306. package/dist/server/headless-runtime-service.d.ts +16 -0
  307. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  308. package/dist/server/headless-runtime-service.js +232 -206
  309. package/dist/server/headless-runtime-service.js.map +1 -1
  310. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  311. package/dist/server/hosted-agent-runtime-progress.js +12 -3
  312. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  313. package/dist/server/pending-request-payload.d.ts.map +1 -1
  314. package/dist/server/pending-request-payload.js +1 -3
  315. package/dist/server/pending-request-payload.js.map +1 -1
  316. package/dist/server/route-auth.d.ts.map +1 -1
  317. package/dist/server/route-auth.js +2 -0
  318. package/dist/server/route-auth.js.map +1 -1
  319. package/dist/server/session-serialization.d.ts.map +1 -1
  320. package/dist/server/session-serialization.js +1 -3
  321. package/dist/server/session-serialization.js.map +1 -1
  322. package/dist/services/compliance/normalize.d.ts.map +1 -1
  323. package/dist/services/compliance/normalize.js +1 -3
  324. package/dist/services/compliance/normalize.js.map +1 -1
  325. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  326. package/dist/services/intelligent-router/normalize.js +1 -3
  327. package/dist/services/intelligent-router/normalize.js.map +1 -1
  328. package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
  329. package/dist/services/revenue-attribution/normalize.js +1 -3
  330. package/dist/services/revenue-attribution/normalize.js.map +1 -1
  331. package/dist/services/traces/normalize.d.ts.map +1 -1
  332. package/dist/services/traces/normalize.js +1 -3
  333. package/dist/services/traces/normalize.js.map +1 -1
  334. package/dist/services/workspace-config/normalize.d.ts.map +1 -1
  335. package/dist/services/workspace-config/normalize.js +1 -3
  336. package/dist/services/workspace-config/normalize.js.map +1 -1
  337. package/dist/skills/composer.d.ts.map +1 -1
  338. package/dist/skills/composer.js +13 -1
  339. package/dist/skills/composer.js.map +1 -1
  340. package/dist/skills/index.d.ts +1 -0
  341. package/dist/skills/index.d.ts.map +1 -1
  342. package/dist/skills/index.js +1 -0
  343. package/dist/skills/index.js.map +1 -1
  344. package/dist/skills/learned-guidelines.d.ts +33 -0
  345. package/dist/skills/learned-guidelines.d.ts.map +1 -0
  346. package/dist/skills/learned-guidelines.js +291 -0
  347. package/dist/skills/learned-guidelines.js.map +1 -0
  348. package/dist/skills/linter.d.ts.map +1 -1
  349. package/dist/skills/linter.js +1 -3
  350. package/dist/skills/linter.js.map +1 -1
  351. package/dist/skills/runtime-activation.d.ts +1 -0
  352. package/dist/skills/runtime-activation.d.ts.map +1 -1
  353. package/dist/skills/runtime-activation.js +2 -3
  354. package/dist/skills/runtime-activation.js.map +1 -1
  355. package/dist/skills/tool.d.ts.map +1 -1
  356. package/dist/skills/tool.js +26 -21
  357. package/dist/skills/tool.js.map +1 -1
  358. package/dist/skills/trust-cache.d.ts +7 -0
  359. package/dist/skills/trust-cache.d.ts.map +1 -1
  360. package/dist/skills/trust-cache.js +16 -0
  361. package/dist/skills/trust-cache.js.map +1 -1
  362. package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
  363. package/dist/telemetry/agent-workforce-native-event.js +1 -3
  364. package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
  365. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  366. package/dist/telemetry/maestro-event-bus.js +42 -81
  367. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  368. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  369. package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
  370. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  371. package/dist/telemetry.d.ts.map +1 -1
  372. package/dist/telemetry.js +54 -43
  373. package/dist/telemetry.js.map +1 -1
  374. package/dist/theme/theme-loader.d.ts.map +1 -1
  375. package/dist/theme/theme-loader.js +1 -3
  376. package/dist/theme/theme-loader.js.map +1 -1
  377. package/dist/tools/apply-patch.d.ts.map +1 -1
  378. package/dist/tools/apply-patch.js +76 -8
  379. package/dist/tools/apply-patch.js.map +1 -1
  380. package/dist/tools/diff-preview.d.ts.map +1 -1
  381. package/dist/tools/diff-preview.js +10 -1
  382. package/dist/tools/diff-preview.js.map +1 -1
  383. package/dist/tools/edit.d.ts.map +1 -1
  384. package/dist/tools/edit.js +17 -0
  385. package/dist/tools/edit.js.map +1 -1
  386. package/dist/tools/write.d.ts.map +1 -1
  387. package/dist/tools/write.js +9 -0
  388. package/dist/tools/write.js.map +1 -1
  389. package/dist/undo/tracker.d.ts +5 -0
  390. package/dist/undo/tracker.d.ts.map +1 -1
  391. package/dist/undo/tracker.js +13 -0
  392. package/dist/undo/tracker.js.map +1 -1
  393. package/dist/utils/fs.d.ts +1 -1
  394. package/dist/utils/fs.d.ts.map +1 -1
  395. package/dist/utils/fs.js +29 -2
  396. package/dist/utils/fs.js.map +1 -1
  397. package/dist/utils/git-stash.d.ts.map +1 -1
  398. package/dist/utils/git-stash.js +15 -8
  399. package/dist/utils/git-stash.js.map +1 -1
  400. package/dist/utils/json.d.ts +11 -0
  401. package/dist/utils/json.d.ts.map +1 -1
  402. package/dist/utils/json.js +9 -0
  403. package/dist/utils/json.js.map +1 -1
  404. package/dist/utils/shell-env.d.ts.map +1 -1
  405. package/dist/utils/shell-env.js +2 -0
  406. package/dist/utils/shell-env.js.map +1 -1
  407. package/dist/utils/url-extractor-git.d.ts +26 -0
  408. package/dist/utils/url-extractor-git.d.ts.map +1 -0
  409. package/dist/utils/url-extractor-git.js +259 -0
  410. package/dist/utils/url-extractor-git.js.map +1 -0
  411. package/dist/utils/url-extractor.d.ts.map +1 -1
  412. package/dist/utils/url-extractor.js +23 -251
  413. package/dist/utils/url-extractor.js.map +1 -1
  414. package/dist/version.json +2 -2
  415. package/dist/web-server.d.ts.map +1 -1
  416. package/dist/web-server.js +2 -5
  417. package/dist/web-server.js.map +1 -1
  418. package/package.json +310 -306
  419. package/skills/incident-triage/SKILL.md +19 -1
  420. package/skills/install-code-review/SKILL.md +69 -0
  421. package/skills/security-review/SKILL.md +68 -0
  422. package/skills/security-review/reference/rubric.md +85 -0
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Authentication Resolver - Unified Credential Resolution\n *\n * This module provides a unified authentication resolver that handles\n * multiple credential sources and authentication modes for all supported\n * AI providers. It abstracts the complexity of OAuth, API keys, and\n * environment variables into a single interface.\n *\n * ## Authentication Modes\n *\n * | Mode | Description |\n * |----------|------------------------------------------------|\n * | auto | Try OAuth first, fallback to API keys (default)|\n * | api-key | Only use API keys, skip OAuth |\n *\n * ## Credential Resolution Order\n *\n * 1. **Explicit API key**: Passed directly via options\n * 2. **OAuth tokens**: Provider-specific OAuth flows (if mode allows)\n * 3. **Environment variables**: Standard env var lookup\n * 4. **Custom providers**: From models registry configuration\n *\n * ## Credential Sources\n *\n * | Source | Description |\n * |---------------------|------------------------------------------|\n * | explicit | Passed directly to resolver |\n * | env | From environment variable |\n * | custom_literal | Hardcoded in custom provider config |\n * | custom_env | Env var from custom provider config |\n * | evalops_oauth_file | EvalOps managed OAuth from stored credentials |\n * | openai_oauth_file | OpenAI OAuth from stored credentials |\n * | openai_codex_oauth_file | OpenAI Codex ChatGPT OAuth from stored credentials |\n * | google_oauth_file | Google OAuth from stored credentials |\n *\n * ## Example\n *\n * ```typescript\n * const resolver = createAuthResolver({ mode: 'auto' });\n * const credential = await resolver('anthropic');\n *\n * if (credential) {\n * console.log(`Using ${credential.type} from ${credential.source}`);\n * // Use credential.token for API requests\n * }\n * ```\n *\n * @module providers/auth\n */\n\nimport {\n\tEVALOPS_ORGANIZATION_ID_ENV_VARS,\n\tEVALOPS_WORKSPACE_ID_ENV_VARS,\n\treadEvalOpsEnv,\n} from \"../evalops/env-aliases.js\";\nimport { getOAuthToken } from \"../oauth/index.js\";\nimport { loadOAuthCredentials } from \"../oauth/storage.js\";\nimport { lookupApiKey } from \"./api-keys.js\";\nimport {\n\tgetEvalOpsManagedProviderDefinition,\n\tisEvalOpsManagedGatewayEnabled,\n\tisEvalOpsManagedProvider,\n\tisKnownEvalOpsManagedProvider,\n} from \"./evalops-managed.js\";\nimport { getFreshOpenAIOAuthCredential } from \"./openai-auth.js\";\n\nexport type AuthMode = \"auto\" | \"api-key\";\n\nexport type AuthCredentialType = \"api-key\" | \"bearer-token\";\n\nexport type AuthCredentialSource =\n\t| \"explicit\"\n\t| \"env\"\n\t| \"custom_literal\"\n\t| \"custom_env\"\n\t| \"evalops_agent_key_file\"\n\t| \"evalops_oauth_file\"\n\t| \"openai_oauth_file\"\n\t| \"openai_codex_oauth_file\"\n\t| \"google_oauth_file\"\n\t| \"github_copilot_oauth_file\";\n\nexport interface AuthCredential {\n\tprovider: string;\n\ttoken: string;\n\ttype: AuthCredentialType;\n\tsource: AuthCredentialSource;\n\tenvVar?: string;\n\theaders?: Record<string, string>;\n\tmetadata?: Record<string, unknown>;\n\trequestBody?: Record<string, unknown>;\n}\n\nexport interface AuthResolverOptions {\n\tmode: AuthMode;\n\texplicitApiKey?: string;\n}\n\ntype AuthResolver = (provider: string) => Promise<AuthCredential | undefined>;\n\nfunction isOpenAIProvider(provider: string): boolean {\n\tconst normalized = provider.toLowerCase();\n\treturn (\n\t\tnormalized !== \"openai-codex\" &&\n\t\t(normalized === \"openai\" ||\n\t\t\tnormalized.startsWith(\"openai/\") ||\n\t\t\tnormalized.includes(\"openai-\"))\n\t);\n}\n\nfunction isOpenAICodexProvider(provider: string): boolean {\n\tconst normalized = provider.toLowerCase();\n\treturn normalized === \"openai-codex\";\n}\n\nfunction isGoogleGeminiCliProvider(provider: string): boolean {\n\tconst normalized = provider.toLowerCase();\n\treturn (\n\t\tnormalized === \"google-gemini-cli\" || normalized === \"google-antigravity\"\n\t);\n}\n\nfunction isGitHubCopilotProvider(provider: string): boolean {\n\treturn provider.toLowerCase() === \"github-copilot\";\n}\n\nfunction resolveEvalOpsCredentialType(provider: string): AuthCredentialType {\n\treturn getEvalOpsManagedProviderDefinition(provider)?.usesAnthropicOAuth\n\t\t? \"bearer-token\"\n\t\t: \"api-key\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction getNonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tconst candidate = getNonEmptyString(value);\n\t\tif (candidate) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction readFirstEnv(names: readonly string[]): string | undefined {\n\treturn firstNonEmptyString(...names.map((name) => process.env[name]));\n}\n\nfunction getStringArray(value: unknown): string[] {\n\treturn Array.isArray(value)\n\t\t? value\n\t\t\t\t.map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n\t\t\t\t.filter((entry) => entry.length > 0)\n\t\t: [];\n}\n\nfunction isFutureTimestamp(value: unknown): boolean {\n\tconst timestamp = getNonEmptyString(value);\n\treturn !timestamp || Date.parse(timestamp) > Date.now();\n}\n\nfunction resolveEvalOpsAgentMcpAPIKey(\n\tmetadata?: Record<string, unknown>,\n): string | undefined {\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst apiKey = getNonEmptyString(agentMcp?.apiKey);\n\tif (!apiKey || !isFutureTimestamp(agentMcp?.expiresAt)) {\n\t\treturn undefined;\n\t}\n\tconst scopes = getStringArray(agentMcp?.scopes);\n\tif (scopes.length > 0 && !scopes.includes(\"llm_gateway:invoke\")) {\n\t\treturn undefined;\n\t}\n\treturn apiKey;\n}\n\nfunction resolveEvalOpsOrganizationId(\n\tmetadata?: Record<string, unknown>,\n): string | undefined {\n\tconst candidate = getNonEmptyString(metadata?.organizationId);\n\tif (candidate && candidate.trim().length > 0) {\n\t\treturn candidate.trim();\n\t}\n\treturn readEvalOpsEnv(process.env, EVALOPS_ORGANIZATION_ID_ENV_VARS);\n}\n\nfunction resolveEvalOpsProviderRef(\n\tprovider: string,\n\tmetadata?: Record<string, unknown>,\n): Record<string, string> {\n\tconst providerRef = isRecord(metadata?.providerRef)\n\t\t? metadata.providerRef\n\t\t: null;\n\tconst definition = getEvalOpsManagedProviderDefinition(provider);\n\tconst metadataProvider = getNonEmptyString(providerRef?.provider);\n\tconst configuredProvider =\n\t\tprocess.env.MAESTRO_EVALOPS_PROVIDER?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_PROVIDER?.trim();\n\tconst resolvedProvider =\n\t\t(definition && definition.id !== \"evalops\"\n\t\t\t? definition.providerRefProvider\n\t\t\t: undefined) ??\n\t\tmetadataProvider ??\n\t\tconfiguredProvider ??\n\t\tdefinition?.providerRefProvider ??\n\t\t\"openai\";\n\tconst environment =\n\t\tgetNonEmptyString(providerRef?.environment) ??\n\t\tprocess.env.MAESTRO_EVALOPS_ENVIRONMENT?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_ENVIRONMENT?.trim() ??\n\t\t\"prod\";\n\tconst credentialName =\n\t\tgetNonEmptyString(providerRef?.credential_name) ??\n\t\tprocess.env.MAESTRO_EVALOPS_CREDENTIAL_NAME?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_CREDENTIAL_NAME?.trim();\n\tconst teamId =\n\t\tgetNonEmptyString(providerRef?.team_id) ??\n\t\tprocess.env.MAESTRO_EVALOPS_TEAM_ID?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_TEAM_ID?.trim();\n\treturn {\n\t\tprovider: resolvedProvider,\n\t\tenvironment,\n\t\t...(credentialName ? { credential_name: credentialName } : {}),\n\t\t...(teamId ? { team_id: teamId } : {}),\n\t};\n}\n\nfunction resolveEvalOpsRequestMetadata(\n\tmetadata?: Record<string, unknown>,\n): Record<string, string> {\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst agentID = firstNonEmptyString(\n\t\tmetadata?.agentId,\n\t\tmetadata?.agent_id,\n\t\tagentMcp?.agentId,\n\t\tagentMcp?.agent_id,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_AGENT_ID\", \"MAESTRO_AGENT_ID\"]),\n\t);\n\tconst platformRunID = firstNonEmptyString(\n\t\tmetadata?.runId,\n\t\tmetadata?.run_id,\n\t\tagentMcp?.runId,\n\t\tagentMcp?.run_id,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_RUN_ID\"]),\n\t);\n\tconst agentRunID = firstNonEmptyString(\n\t\tmetadata?.agentRunId,\n\t\tmetadata?.agent_run_id,\n\t\tagentMcp?.agentRunId,\n\t\tagentMcp?.agent_run_id,\n\t\treadFirstEnv([\"MAESTRO_AGENT_RUN_ID\", \"MAESTRO_EVALOPS_AGENT_RUN_ID\"]),\n\t\tplatformRunID,\n\t);\n\tconst runID = platformRunID ?? agentRunID;\n\tconst platformSessionID = firstNonEmptyString(\n\t\tmetadata?.sessionId,\n\t\tmetadata?.session_id,\n\t\tagentMcp?.sessionId,\n\t\tagentMcp?.session_id,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_SESSION_ID\"]),\n\t);\n\tconst maestroSessionID = firstNonEmptyString(\n\t\tmetadata?.maestroSessionId,\n\t\tmetadata?.maestro_session_id,\n\t\treadFirstEnv([\"MAESTRO_SESSION_ID\"]),\n\t\tplatformSessionID,\n\t);\n\tconst sessionID = platformSessionID ?? maestroSessionID;\n\tconst workspaceID = firstNonEmptyString(\n\t\tmetadata?.workspaceId,\n\t\tmetadata?.workspace_id,\n\t\tagentMcp?.workspaceId,\n\t\tagentMcp?.workspace_id,\n\t\treadEvalOpsEnv(process.env, EVALOPS_WORKSPACE_ID_ENV_VARS),\n\t);\n\tconst objectiveID = firstNonEmptyString(\n\t\tmetadata?.objectiveId,\n\t\tmetadata?.objective_id,\n\t\tagentMcp?.objectiveId,\n\t\tagentMcp?.objective_id,\n\t\treadFirstEnv([\"MAESTRO_OBJECTIVE_ID\", \"MAESTRO_EVALOPS_OBJECTIVE_ID\"]),\n\t);\n\tconst stepID = firstNonEmptyString(\n\t\tmetadata?.agentRunStepId,\n\t\tmetadata?.agent_run_step_id,\n\t\tmetadata?.stepId,\n\t\tmetadata?.step_id,\n\t\tagentMcp?.agentRunStepId,\n\t\tagentMcp?.agent_run_step_id,\n\t\treadFirstEnv([\n\t\t\t\"MAESTRO_AGENT_RUN_STEP_ID\",\n\t\t\t\"MAESTRO_EVALOPS_AGENT_RUN_STEP_ID\",\n\t\t]),\n\t);\n\tconst traceID = firstNonEmptyString(\n\t\tmetadata?.traceId,\n\t\tmetadata?.trace_id,\n\t\tagentMcp?.traceId,\n\t\tagentMcp?.trace_id,\n\t\treadFirstEnv([\"MAESTRO_TRACE_ID\", \"TRACE_ID\"]),\n\t);\n\tconst threadID = firstNonEmptyString(\n\t\tmetadata?.threadId,\n\t\tmetadata?.thread_id,\n\t\tagentMcp?.threadId,\n\t\tagentMcp?.thread_id,\n\t\treadFirstEnv([\"MAESTRO_THREAD_ID\", \"MAESTRO_EVALOPS_THREAD_ID\"]),\n\t);\n\tconst turnID = firstNonEmptyString(\n\t\tmetadata?.turnId,\n\t\tmetadata?.turn_id,\n\t\tagentMcp?.turnId,\n\t\tagentMcp?.turn_id,\n\t\treadFirstEnv([\"MAESTRO_TURN_ID\", \"MAESTRO_EVALOPS_TURN_ID\"]),\n\t);\n\tconst toolCallID = firstNonEmptyString(\n\t\tmetadata?.toolCallId,\n\t\tmetadata?.tool_call_id,\n\t\tagentMcp?.toolCallId,\n\t\tagentMcp?.tool_call_id,\n\t\treadFirstEnv([\"MAESTRO_TOOL_CALL_ID\", \"MAESTRO_EVALOPS_TOOL_CALL_ID\"]),\n\t);\n\tconst workload = firstNonEmptyString(\n\t\tmetadata?.workload,\n\t\tagentMcp?.workload,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_WORKLOAD\", \"MAESTRO_WORKLOAD\"]),\n\t);\n\tconst surface =\n\t\tfirstNonEmptyString(\n\t\t\tmetadata?.surface,\n\t\t\tagentMcp?.surface,\n\t\t\treadFirstEnv([\"MAESTRO_EVALOPS_SURFACE\", \"MAESTRO_SURFACE\"]),\n\t\t) ?? \"maestro\";\n\n\treturn Object.fromEntries(\n\t\tObject.entries({\n\t\t\tagent_id: agentID,\n\t\t\tworkspace_id: workspaceID,\n\t\t\tobjective_id: objectiveID,\n\t\t\trun_id: runID,\n\t\t\tagent_run_id: agentRunID,\n\t\t\tagent_run_step_id: stepID,\n\t\t\tsession_id: sessionID,\n\t\t\tmaestro_session_id: maestroSessionID,\n\t\t\tsurface,\n\t\t\ttrace_id: traceID,\n\t\t\tthread_id: threadID,\n\t\t\tturn_id: turnID,\n\t\t\ttool_call_id: toolCallID,\n\t\t\tworkload,\n\t\t}).filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\ttypeof entry[1] === \"string\" && entry[1].trim().length > 0,\n\t\t),\n\t);\n}\n\nfunction buildEvalOpsCredential(\n\tprovider: string,\n\ttoken: string,\n\tsource: AuthCredentialSource,\n\tmetadata?: Record<string, unknown>,\n\tenvVar?: string,\n): AuthCredential | undefined {\n\tconst organizationId = resolveEvalOpsOrganizationId(metadata);\n\tif (!organizationId) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tprovider,\n\t\ttoken,\n\t\ttype: resolveEvalOpsCredentialType(provider),\n\t\tsource,\n\t\tenvVar,\n\t\theaders: {\n\t\t\t\"X-Organization-ID\": organizationId,\n\t\t},\n\t\tmetadata,\n\t\trequestBody: {\n\t\t\tmetadata: resolveEvalOpsRequestMetadata(metadata),\n\t\t\tprovider_ref: resolveEvalOpsProviderRef(provider, metadata),\n\t\t},\n\t};\n}\n\nexport function createAuthResolver(options: AuthResolverOptions): AuthResolver {\n\tconst explicitKey = options.explicitApiKey?.trim();\n\treturn async (provider: string): Promise<AuthCredential | undefined> => {\n\t\tif (\n\t\t\tisKnownEvalOpsManagedProvider(provider) &&\n\t\t\t!isEvalOpsManagedGatewayEnabled()\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst normalizedProvider = provider.toLowerCase();\n\n\t\tif (explicitKey) {\n\t\t\tif (isEvalOpsManagedProvider(provider)) {\n\t\t\t\treturn buildEvalOpsCredential(provider, explicitKey, \"explicit\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\ttoken: explicitKey,\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: \"explicit\",\n\t\t\t};\n\t\t}\n\n\t\tif (isEvalOpsManagedProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst credentials = loadOAuthCredentials(\"evalops\");\n\t\t\tconst agentAPIKey = resolveEvalOpsAgentMcpAPIKey(credentials?.metadata);\n\t\t\tif (agentAPIKey) {\n\t\t\t\treturn buildEvalOpsCredential(\n\t\t\t\t\tprovider,\n\t\t\t\t\tagentAPIKey,\n\t\t\t\t\t\"evalops_agent_key_file\",\n\t\t\t\t\tcredentials?.metadata,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oauthToken = await getOAuthToken(\"evalops\");\n\t\t\tif (oauthToken) {\n\t\t\t\tconst refreshedCredentials = loadOAuthCredentials(\"evalops\");\n\t\t\t\treturn buildEvalOpsCredential(\n\t\t\t\t\tprovider,\n\t\t\t\t\toauthToken,\n\t\t\t\t\t\"evalops_oauth_file\",\n\t\t\t\t\trefreshedCredentials?.metadata ?? credentials?.metadata,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (isOpenAICodexProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst oauthToken = await getOAuthToken(\"openai-codex\");\n\t\t\tif (oauthToken) {\n\t\t\t\tconst credentials = loadOAuthCredentials(\"openai-codex\");\n\t\t\t\tconst accountId =\n\t\t\t\t\ttypeof credentials?.metadata?.accountId === \"string\"\n\t\t\t\t\t\t? credentials.metadata.accountId\n\t\t\t\t\t\t: undefined;\n\t\t\t\treturn {\n\t\t\t\t\tprovider,\n\t\t\t\t\ttoken: oauthToken,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"openai_codex_oauth_file\",\n\t\t\t\t\theaders: accountId ? { \"chatgpt-account-id\": accountId } : undefined,\n\t\t\t\t\tmetadata: credentials?.metadata,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Handle OpenAI Auth\n\t\tif (isOpenAIProvider(provider) && options.mode !== \"api-key\") {\n\t\t\t// OpenAI OAuth\n\t\t\tconst oauthCred = await getFreshOpenAIOAuthCredential();\n\t\t\tif (oauthCred?.apiKey) {\n\t\t\t\treturn {\n\t\t\t\t\tprovider,\n\t\t\t\t\ttoken: oauthCred.apiKey,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"openai_oauth_file\",\n\t\t\t\t\tmetadata: { mode: oauthCred.mode },\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (isGitHubCopilotProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst oauthToken = await getOAuthToken(\"github-copilot\");\n\t\t\tif (oauthToken) {\n\t\t\t\tconst credentials = loadOAuthCredentials(\"github-copilot\");\n\t\t\t\treturn {\n\t\t\t\t\tprovider,\n\t\t\t\t\ttoken: oauthToken,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"github_copilot_oauth_file\",\n\t\t\t\t\tmetadata: credentials?.metadata,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (isGoogleGeminiCliProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst oauthProvider =\n\t\t\t\tnormalizedProvider === \"google-antigravity\"\n\t\t\t\t\t? \"google-antigravity\"\n\t\t\t\t\t: \"google-gemini-cli\";\n\t\t\tconst oauthToken = await getOAuthToken(oauthProvider);\n\t\t\tif (oauthToken) {\n\t\t\t\tconst credentials = loadOAuthCredentials(oauthProvider);\n\t\t\t\tconst projectId =\n\t\t\t\t\ttypeof credentials?.metadata?.projectId === \"string\"\n\t\t\t\t\t\t? credentials.metadata.projectId\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (projectId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\ttoken: JSON.stringify({ token: oauthToken, projectId }),\n\t\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\t\tsource: \"google_oauth_file\",\n\t\t\t\t\t\tmetadata: credentials?.metadata,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst lookup = lookupApiKey(provider, explicitKey);\n\t\tif (lookup.key) {\n\t\t\tif (lookup.source === \"missing\") {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (isEvalOpsManagedProvider(provider)) {\n\t\t\t\treturn buildEvalOpsCredential(\n\t\t\t\t\tprovider,\n\t\t\t\t\tlookup.key,\n\t\t\t\t\tlookup.source,\n\t\t\t\t\tundefined,\n\t\t\t\t\tlookup.envVar,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\ttoken: lookup.key,\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: lookup.source,\n\t\t\t\tenvVar: lookup.envVar,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t};\n}\n"]}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Authentication Resolver - Unified Credential Resolution\n *\n * This module provides a unified authentication resolver that handles\n * multiple credential sources and authentication modes for all supported\n * AI providers. It abstracts the complexity of OAuth, API keys, and\n * environment variables into a single interface.\n *\n * ## Authentication Modes\n *\n * | Mode | Description |\n * |----------|------------------------------------------------|\n * | auto | Try OAuth first, fallback to API keys (default)|\n * | api-key | Only use API keys, skip OAuth |\n *\n * ## Credential Resolution Order\n *\n * 1. **Explicit API key**: Passed directly via options\n * 2. **OAuth tokens**: Provider-specific OAuth flows (if mode allows)\n * 3. **Environment variables**: Standard env var lookup\n * 4. **Custom providers**: From models registry configuration\n *\n * ## Credential Sources\n *\n * | Source | Description |\n * |---------------------|------------------------------------------|\n * | explicit | Passed directly to resolver |\n * | env | From environment variable |\n * | custom_literal | Hardcoded in custom provider config |\n * | custom_env | Env var from custom provider config |\n * | evalops_oauth_file | EvalOps managed OAuth from stored credentials |\n * | openai_oauth_file | OpenAI OAuth from stored credentials |\n * | openai_codex_oauth_file | OpenAI Codex ChatGPT OAuth from stored credentials |\n * | google_oauth_file | Google OAuth from stored credentials |\n *\n * ## Example\n *\n * ```typescript\n * const resolver = createAuthResolver({ mode: 'auto' });\n * const credential = await resolver('anthropic');\n *\n * if (credential) {\n * console.log(`Using ${credential.type} from ${credential.source}`);\n * // Use credential.token for API requests\n * }\n * ```\n *\n * @module providers/auth\n */\n\nimport {\n\tEVALOPS_ORGANIZATION_ID_ENV_VARS,\n\tEVALOPS_WORKSPACE_ID_ENV_VARS,\n\treadEvalOpsEnv,\n} from \"../evalops/env-aliases.js\";\nimport { getOAuthToken } from \"../oauth/index.js\";\nimport { loadOAuthCredentials } from \"../oauth/storage.js\";\nimport { isRecord } from \"../utils/json.js\";\nimport { lookupApiKey } from \"./api-keys.js\";\nimport {\n\tgetEvalOpsManagedProviderDefinition,\n\tisEvalOpsManagedGatewayEnabled,\n\tisEvalOpsManagedProvider,\n\tisKnownEvalOpsManagedProvider,\n} from \"./evalops-managed.js\";\nimport { getFreshOpenAIOAuthCredential } from \"./openai-auth.js\";\n\nexport type AuthMode = \"auto\" | \"api-key\";\n\nexport type AuthCredentialType = \"api-key\" | \"bearer-token\";\n\nexport type AuthCredentialSource =\n\t| \"explicit\"\n\t| \"env\"\n\t| \"custom_literal\"\n\t| \"custom_env\"\n\t| \"evalops_agent_key_file\"\n\t| \"evalops_oauth_file\"\n\t| \"openai_oauth_file\"\n\t| \"openai_codex_oauth_file\"\n\t| \"google_oauth_file\"\n\t| \"github_copilot_oauth_file\";\n\nexport interface AuthCredential {\n\tprovider: string;\n\ttoken: string;\n\ttype: AuthCredentialType;\n\tsource: AuthCredentialSource;\n\tenvVar?: string;\n\theaders?: Record<string, string>;\n\tmetadata?: Record<string, unknown>;\n\trequestBody?: Record<string, unknown>;\n}\n\nexport interface AuthResolverOptions {\n\tmode: AuthMode;\n\texplicitApiKey?: string;\n}\n\ntype AuthResolver = (provider: string) => Promise<AuthCredential | undefined>;\n\nfunction isOpenAIProvider(provider: string): boolean {\n\tconst normalized = provider.toLowerCase();\n\treturn (\n\t\tnormalized !== \"openai-codex\" &&\n\t\t(normalized === \"openai\" ||\n\t\t\tnormalized.startsWith(\"openai/\") ||\n\t\t\tnormalized.includes(\"openai-\"))\n\t);\n}\n\nfunction isOpenAICodexProvider(provider: string): boolean {\n\tconst normalized = provider.toLowerCase();\n\treturn normalized === \"openai-codex\";\n}\n\nfunction isGoogleGeminiCliProvider(provider: string): boolean {\n\tconst normalized = provider.toLowerCase();\n\treturn (\n\t\tnormalized === \"google-gemini-cli\" || normalized === \"google-antigravity\"\n\t);\n}\n\nfunction isGitHubCopilotProvider(provider: string): boolean {\n\treturn provider.toLowerCase() === \"github-copilot\";\n}\n\nfunction resolveEvalOpsCredentialType(provider: string): AuthCredentialType {\n\treturn getEvalOpsManagedProviderDefinition(provider)?.usesAnthropicOAuth\n\t\t? \"bearer-token\"\n\t\t: \"api-key\";\n}\n\nfunction getNonEmptyString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tconst candidate = getNonEmptyString(value);\n\t\tif (candidate) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction readFirstEnv(names: readonly string[]): string | undefined {\n\treturn firstNonEmptyString(...names.map((name) => process.env[name]));\n}\n\nfunction getStringArray(value: unknown): string[] {\n\treturn Array.isArray(value)\n\t\t? value\n\t\t\t\t.map((entry) => (typeof entry === \"string\" ? entry.trim() : \"\"))\n\t\t\t\t.filter((entry) => entry.length > 0)\n\t\t: [];\n}\n\nfunction isFutureTimestamp(value: unknown): boolean {\n\tconst timestamp = getNonEmptyString(value);\n\treturn !timestamp || Date.parse(timestamp) > Date.now();\n}\n\nfunction resolveEvalOpsAgentMcpAPIKey(\n\tmetadata?: Record<string, unknown>,\n): string | undefined {\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst apiKey = getNonEmptyString(agentMcp?.apiKey);\n\tif (!apiKey || !isFutureTimestamp(agentMcp?.expiresAt)) {\n\t\treturn undefined;\n\t}\n\tconst scopes = getStringArray(agentMcp?.scopes);\n\tif (scopes.length > 0 && !scopes.includes(\"llm_gateway:invoke\")) {\n\t\treturn undefined;\n\t}\n\treturn apiKey;\n}\n\nfunction resolveEvalOpsOrganizationId(\n\tmetadata?: Record<string, unknown>,\n): string | undefined {\n\tconst candidate = getNonEmptyString(metadata?.organizationId);\n\tif (candidate && candidate.trim().length > 0) {\n\t\treturn candidate.trim();\n\t}\n\treturn readEvalOpsEnv(process.env, EVALOPS_ORGANIZATION_ID_ENV_VARS);\n}\n\nfunction resolveEvalOpsProviderRef(\n\tprovider: string,\n\tmetadata?: Record<string, unknown>,\n): Record<string, string> {\n\tconst providerRef = isRecord(metadata?.providerRef)\n\t\t? metadata.providerRef\n\t\t: null;\n\tconst definition = getEvalOpsManagedProviderDefinition(provider);\n\tconst metadataProvider = getNonEmptyString(providerRef?.provider);\n\tconst configuredProvider =\n\t\tprocess.env.MAESTRO_EVALOPS_PROVIDER?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_PROVIDER?.trim();\n\tconst resolvedProvider =\n\t\t(definition && definition.id !== \"evalops\"\n\t\t\t? definition.providerRefProvider\n\t\t\t: undefined) ??\n\t\tmetadataProvider ??\n\t\tconfiguredProvider ??\n\t\tdefinition?.providerRefProvider ??\n\t\t\"openai\";\n\tconst environment =\n\t\tgetNonEmptyString(providerRef?.environment) ??\n\t\tprocess.env.MAESTRO_EVALOPS_ENVIRONMENT?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_ENVIRONMENT?.trim() ??\n\t\t\"prod\";\n\tconst credentialName =\n\t\tgetNonEmptyString(providerRef?.credential_name) ??\n\t\tprocess.env.MAESTRO_EVALOPS_CREDENTIAL_NAME?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_CREDENTIAL_NAME?.trim();\n\tconst teamId =\n\t\tgetNonEmptyString(providerRef?.team_id) ??\n\t\tprocess.env.MAESTRO_EVALOPS_TEAM_ID?.trim() ??\n\t\tprocess.env.MAESTRO_LLM_GATEWAY_TEAM_ID?.trim();\n\treturn {\n\t\tprovider: resolvedProvider,\n\t\tenvironment,\n\t\t...(credentialName ? { credential_name: credentialName } : {}),\n\t\t...(teamId ? { team_id: teamId } : {}),\n\t};\n}\n\nfunction resolveEvalOpsRequestMetadata(\n\tmetadata?: Record<string, unknown>,\n): Record<string, string> {\n\tconst agentMcp = isRecord(metadata?.agentMcp) ? metadata.agentMcp : undefined;\n\tconst agentID = firstNonEmptyString(\n\t\tmetadata?.agentId,\n\t\tmetadata?.agent_id,\n\t\tagentMcp?.agentId,\n\t\tagentMcp?.agent_id,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_AGENT_ID\", \"MAESTRO_AGENT_ID\"]),\n\t);\n\tconst platformRunID = firstNonEmptyString(\n\t\tmetadata?.runId,\n\t\tmetadata?.run_id,\n\t\tagentMcp?.runId,\n\t\tagentMcp?.run_id,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_RUN_ID\"]),\n\t);\n\tconst agentRunID = firstNonEmptyString(\n\t\tmetadata?.agentRunId,\n\t\tmetadata?.agent_run_id,\n\t\tagentMcp?.agentRunId,\n\t\tagentMcp?.agent_run_id,\n\t\treadFirstEnv([\"MAESTRO_AGENT_RUN_ID\", \"MAESTRO_EVALOPS_AGENT_RUN_ID\"]),\n\t\tplatformRunID,\n\t);\n\tconst runID = platformRunID ?? agentRunID;\n\tconst platformSessionID = firstNonEmptyString(\n\t\tmetadata?.sessionId,\n\t\tmetadata?.session_id,\n\t\tagentMcp?.sessionId,\n\t\tagentMcp?.session_id,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_SESSION_ID\"]),\n\t);\n\tconst maestroSessionID = firstNonEmptyString(\n\t\tmetadata?.maestroSessionId,\n\t\tmetadata?.maestro_session_id,\n\t\treadFirstEnv([\"MAESTRO_SESSION_ID\"]),\n\t\tplatformSessionID,\n\t);\n\tconst sessionID = platformSessionID ?? maestroSessionID;\n\tconst workspaceID = firstNonEmptyString(\n\t\tmetadata?.workspaceId,\n\t\tmetadata?.workspace_id,\n\t\tagentMcp?.workspaceId,\n\t\tagentMcp?.workspace_id,\n\t\treadEvalOpsEnv(process.env, EVALOPS_WORKSPACE_ID_ENV_VARS),\n\t);\n\tconst objectiveID = firstNonEmptyString(\n\t\tmetadata?.objectiveId,\n\t\tmetadata?.objective_id,\n\t\tagentMcp?.objectiveId,\n\t\tagentMcp?.objective_id,\n\t\treadFirstEnv([\"MAESTRO_OBJECTIVE_ID\", \"MAESTRO_EVALOPS_OBJECTIVE_ID\"]),\n\t);\n\tconst stepID = firstNonEmptyString(\n\t\tmetadata?.agentRunStepId,\n\t\tmetadata?.agent_run_step_id,\n\t\tmetadata?.stepId,\n\t\tmetadata?.step_id,\n\t\tagentMcp?.agentRunStepId,\n\t\tagentMcp?.agent_run_step_id,\n\t\treadFirstEnv([\n\t\t\t\"MAESTRO_AGENT_RUN_STEP_ID\",\n\t\t\t\"MAESTRO_EVALOPS_AGENT_RUN_STEP_ID\",\n\t\t]),\n\t);\n\tconst traceID = firstNonEmptyString(\n\t\tmetadata?.traceId,\n\t\tmetadata?.trace_id,\n\t\tagentMcp?.traceId,\n\t\tagentMcp?.trace_id,\n\t\treadFirstEnv([\"MAESTRO_TRACE_ID\", \"TRACE_ID\"]),\n\t);\n\tconst threadID = firstNonEmptyString(\n\t\tmetadata?.threadId,\n\t\tmetadata?.thread_id,\n\t\tagentMcp?.threadId,\n\t\tagentMcp?.thread_id,\n\t\treadFirstEnv([\"MAESTRO_THREAD_ID\", \"MAESTRO_EVALOPS_THREAD_ID\"]),\n\t);\n\tconst turnID = firstNonEmptyString(\n\t\tmetadata?.turnId,\n\t\tmetadata?.turn_id,\n\t\tagentMcp?.turnId,\n\t\tagentMcp?.turn_id,\n\t\treadFirstEnv([\"MAESTRO_TURN_ID\", \"MAESTRO_EVALOPS_TURN_ID\"]),\n\t);\n\tconst toolCallID = firstNonEmptyString(\n\t\tmetadata?.toolCallId,\n\t\tmetadata?.tool_call_id,\n\t\tagentMcp?.toolCallId,\n\t\tagentMcp?.tool_call_id,\n\t\treadFirstEnv([\"MAESTRO_TOOL_CALL_ID\", \"MAESTRO_EVALOPS_TOOL_CALL_ID\"]),\n\t);\n\tconst workload = firstNonEmptyString(\n\t\tmetadata?.workload,\n\t\tagentMcp?.workload,\n\t\treadFirstEnv([\"MAESTRO_EVALOPS_WORKLOAD\", \"MAESTRO_WORKLOAD\"]),\n\t);\n\tconst surface =\n\t\tfirstNonEmptyString(\n\t\t\tmetadata?.surface,\n\t\t\tagentMcp?.surface,\n\t\t\treadFirstEnv([\"MAESTRO_EVALOPS_SURFACE\", \"MAESTRO_SURFACE\"]),\n\t\t) ?? \"maestro\";\n\n\treturn Object.fromEntries(\n\t\tObject.entries({\n\t\t\tagent_id: agentID,\n\t\t\tworkspace_id: workspaceID,\n\t\t\tobjective_id: objectiveID,\n\t\t\trun_id: runID,\n\t\t\tagent_run_id: agentRunID,\n\t\t\tagent_run_step_id: stepID,\n\t\t\tsession_id: sessionID,\n\t\t\tmaestro_session_id: maestroSessionID,\n\t\t\tsurface,\n\t\t\ttrace_id: traceID,\n\t\t\tthread_id: threadID,\n\t\t\tturn_id: turnID,\n\t\t\ttool_call_id: toolCallID,\n\t\t\tworkload,\n\t\t}).filter(\n\t\t\t(entry): entry is [string, string] =>\n\t\t\t\ttypeof entry[1] === \"string\" && entry[1].trim().length > 0,\n\t\t),\n\t);\n}\n\nfunction buildEvalOpsCredential(\n\tprovider: string,\n\ttoken: string,\n\tsource: AuthCredentialSource,\n\tmetadata?: Record<string, unknown>,\n\tenvVar?: string,\n): AuthCredential | undefined {\n\tconst organizationId = resolveEvalOpsOrganizationId(metadata);\n\tif (!organizationId) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\tprovider,\n\t\ttoken,\n\t\ttype: resolveEvalOpsCredentialType(provider),\n\t\tsource,\n\t\tenvVar,\n\t\theaders: {\n\t\t\t\"X-Organization-ID\": organizationId,\n\t\t},\n\t\tmetadata,\n\t\trequestBody: {\n\t\t\tmetadata: resolveEvalOpsRequestMetadata(metadata),\n\t\t\tprovider_ref: resolveEvalOpsProviderRef(provider, metadata),\n\t\t},\n\t};\n}\n\nexport function createAuthResolver(options: AuthResolverOptions): AuthResolver {\n\tconst explicitKey = options.explicitApiKey?.trim();\n\treturn async (provider: string): Promise<AuthCredential | undefined> => {\n\t\tif (\n\t\t\tisKnownEvalOpsManagedProvider(provider) &&\n\t\t\t!isEvalOpsManagedGatewayEnabled()\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst normalizedProvider = provider.toLowerCase();\n\n\t\tif (explicitKey) {\n\t\t\tif (isEvalOpsManagedProvider(provider)) {\n\t\t\t\treturn buildEvalOpsCredential(provider, explicitKey, \"explicit\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\ttoken: explicitKey,\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: \"explicit\",\n\t\t\t};\n\t\t}\n\n\t\tif (isEvalOpsManagedProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst credentials = loadOAuthCredentials(\"evalops\");\n\t\t\tconst agentAPIKey = resolveEvalOpsAgentMcpAPIKey(credentials?.metadata);\n\t\t\tif (agentAPIKey) {\n\t\t\t\treturn buildEvalOpsCredential(\n\t\t\t\t\tprovider,\n\t\t\t\t\tagentAPIKey,\n\t\t\t\t\t\"evalops_agent_key_file\",\n\t\t\t\t\tcredentials?.metadata,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oauthToken = await getOAuthToken(\"evalops\");\n\t\t\tif (oauthToken) {\n\t\t\t\tconst refreshedCredentials = loadOAuthCredentials(\"evalops\");\n\t\t\t\treturn buildEvalOpsCredential(\n\t\t\t\t\tprovider,\n\t\t\t\t\toauthToken,\n\t\t\t\t\t\"evalops_oauth_file\",\n\t\t\t\t\trefreshedCredentials?.metadata ?? credentials?.metadata,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (isOpenAICodexProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst oauthToken = await getOAuthToken(\"openai-codex\");\n\t\t\tif (oauthToken) {\n\t\t\t\tconst credentials = loadOAuthCredentials(\"openai-codex\");\n\t\t\t\tconst accountId =\n\t\t\t\t\ttypeof credentials?.metadata?.accountId === \"string\"\n\t\t\t\t\t\t? credentials.metadata.accountId\n\t\t\t\t\t\t: undefined;\n\t\t\t\treturn {\n\t\t\t\t\tprovider,\n\t\t\t\t\ttoken: oauthToken,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"openai_codex_oauth_file\",\n\t\t\t\t\theaders: accountId ? { \"chatgpt-account-id\": accountId } : undefined,\n\t\t\t\t\tmetadata: credentials?.metadata,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Handle OpenAI Auth\n\t\tif (isOpenAIProvider(provider) && options.mode !== \"api-key\") {\n\t\t\t// OpenAI OAuth\n\t\t\tconst oauthCred = await getFreshOpenAIOAuthCredential();\n\t\t\tif (oauthCred?.apiKey) {\n\t\t\t\treturn {\n\t\t\t\t\tprovider,\n\t\t\t\t\ttoken: oauthCred.apiKey,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"openai_oauth_file\",\n\t\t\t\t\tmetadata: { mode: oauthCred.mode },\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (isGitHubCopilotProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst oauthToken = await getOAuthToken(\"github-copilot\");\n\t\t\tif (oauthToken) {\n\t\t\t\tconst credentials = loadOAuthCredentials(\"github-copilot\");\n\t\t\t\treturn {\n\t\t\t\t\tprovider,\n\t\t\t\t\ttoken: oauthToken,\n\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\tsource: \"github_copilot_oauth_file\",\n\t\t\t\t\tmetadata: credentials?.metadata,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (isGoogleGeminiCliProvider(provider) && options.mode !== \"api-key\") {\n\t\t\tconst oauthProvider =\n\t\t\t\tnormalizedProvider === \"google-antigravity\"\n\t\t\t\t\t? \"google-antigravity\"\n\t\t\t\t\t: \"google-gemini-cli\";\n\t\t\tconst oauthToken = await getOAuthToken(oauthProvider);\n\t\t\tif (oauthToken) {\n\t\t\t\tconst credentials = loadOAuthCredentials(oauthProvider);\n\t\t\t\tconst projectId =\n\t\t\t\t\ttypeof credentials?.metadata?.projectId === \"string\"\n\t\t\t\t\t\t? credentials.metadata.projectId\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (projectId) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\ttoken: JSON.stringify({ token: oauthToken, projectId }),\n\t\t\t\t\t\ttype: \"api-key\",\n\t\t\t\t\t\tsource: \"google_oauth_file\",\n\t\t\t\t\t\tmetadata: credentials?.metadata,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst lookup = lookupApiKey(provider, explicitKey);\n\t\tif (lookup.key) {\n\t\t\tif (lookup.source === \"missing\") {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (isEvalOpsManagedProvider(provider)) {\n\t\t\t\treturn buildEvalOpsCredential(\n\t\t\t\t\tprovider,\n\t\t\t\t\tlookup.key,\n\t\t\t\t\tlookup.source,\n\t\t\t\t\tundefined,\n\t\t\t\t\tlookup.envVar,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\ttoken: lookup.key,\n\t\t\t\ttype: \"api-key\",\n\t\t\t\tsource: lookup.source,\n\t\t\t\tenvVar: lookup.envVar,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t};\n}\n"]}
@@ -60,6 +60,9 @@ export interface RuntimeEnv {
60
60
  readonly disableKeychain: boolean;
61
61
  readonly maestroHome: string;
62
62
  readonly maestroAgentDir: string | null;
63
+ readonly missionStoreDir: string | null;
64
+ readonly snapshotBlobDir: string | null;
65
+ readonly skillTrustStrict: boolean;
63
66
  /**
64
67
  * Tri-state parsed signal: true (opt-in), false (opt-out), null (no
65
68
  * signal). For diagnostics that need the raw user string, see
@@ -122,6 +125,9 @@ export interface RuntimeEnv {
122
125
  readonly meterBaseUrl: string | null;
123
126
  readonly meterAccessToken: string | null;
124
127
  readonly meterOrganizationId: string | null;
128
+ readonly ambientLearnerFile: string | null;
129
+ readonly ambientLearnerDefaultFile: string;
130
+ readonly ambientSocketFile: string;
125
131
  }
126
132
  export declare function parseOptionalBoolean(value: string | null): boolean | null;
127
133
  /**
@@ -146,6 +152,8 @@ export declare function createRuntimeEnv(raw: NodeJS.ProcessEnv): RuntimeEnv;
146
152
  * the migration.
147
153
  */
148
154
  export declare function defaultRuntimeEnv(): RuntimeEnv;
155
+ export declare function markRuntimeEnvFinalized(): void;
156
+ export declare function isRuntimeEnvFinalized(): boolean;
149
157
  /**
150
158
  * Drop the cached default snapshot so the next `defaultRuntimeEnv()` call
151
159
  * re-reads `process.env`.
@@ -155,5 +163,5 @@ export declare function defaultRuntimeEnv(): RuntimeEnv;
155
163
  * `process.env` before handing control to migrated modules.
156
164
  */
157
165
  export declare function resetDefaultRuntimeEnv(): void;
158
- export declare const resetDefaultRuntimeEnvForTests: typeof resetDefaultRuntimeEnv;
166
+ export declare function resetDefaultRuntimeEnvForTests(): void;
159
167
  //# sourceMappingURL=env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/runtime/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IAE1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAGlC;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAGnD;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAGpC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAiED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAMzE;AAkCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAqDnE;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,CAM9C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAED,eAAO,MAAM,8BAA8B,+BAAyB,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/runtime/env.ts"],"names":[],"mappings":"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"}
@@ -132,6 +132,31 @@ function resolveHomePath(value, raw) {
132
132
  : value;
133
133
  return resolve(expanded);
134
134
  }
135
+ function homeFromEnv(raw) {
136
+ return trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir();
137
+ }
138
+ function resolveDataLocalDir(raw) {
139
+ const home = homeFromEnv(raw);
140
+ if (process.platform === "darwin") {
141
+ return join(home, "Library", "Application Support");
142
+ }
143
+ if (process.platform === "win32") {
144
+ return (resolveHomePath(trim(raw.LOCALAPPDATA), raw) ??
145
+ resolveHomePath(trim(raw.APPDATA), raw) ??
146
+ join(home, "AppData", "Local"));
147
+ }
148
+ return (resolveHomePath(trim(raw.XDG_DATA_HOME), raw) ??
149
+ join(home, ".local", "share"));
150
+ }
151
+ function resolveRuntimeDir(raw) {
152
+ if (process.platform === "darwin") {
153
+ return resolveDataLocalDir(raw);
154
+ }
155
+ const xdgRuntimeDir = resolveHomePath(trim(raw.XDG_RUNTIME_DIR), raw);
156
+ if (xdgRuntimeDir)
157
+ return xdgRuntimeDir;
158
+ return resolveDataLocalDir(raw);
159
+ }
135
160
  /**
136
161
  * Build an immutable snapshot of the env vars this codebase cares about.
137
162
  *
@@ -149,6 +174,9 @@ export function createRuntimeEnv(raw) {
149
174
  disableKeychain: parseBoolean(trim(raw.MAESTRO_DISABLE_KEYCHAIN)),
150
175
  maestroHome: trim(raw.MAESTRO_HOME) ?? join(homedir(), ".maestro"),
151
176
  maestroAgentDir: trim(raw.MAESTRO_AGENT_DIR),
177
+ missionStoreDir: resolveHomePath(trim(raw.MAESTRO_MISSION_STORE_DIR), raw),
178
+ snapshotBlobDir: resolveHomePath(trim(raw.MAESTRO_SNAPSHOT_BLOB_DIR), raw),
179
+ skillTrustStrict: parseBoolean(trim(raw.MAESTRO_SKILL_TRUST_STRICT)),
152
180
  telemetryEnabled: parseOptionalBoolean(trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY)),
153
181
  telemetryFlag: trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),
154
182
  beaconFile: resolveHomePath(trim(raw.MAESTRO_BEACON_FILE), raw),
@@ -175,9 +203,31 @@ export function createRuntimeEnv(raw) {
175
203
  meterBaseUrl: firstNonEmpty(raw, METER_BASE_URL_VARS),
176
204
  meterAccessToken: firstNonEmpty(raw, METER_ACCESS_TOKEN_VARS),
177
205
  meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS),
206
+ ambientLearnerFile: resolveHomePath(trim(raw.MAESTRO_AMBIENT_LEARNER_FILE), raw),
207
+ ambientLearnerDefaultFile: join(resolveDataLocalDir(raw), "ambient-agent", "learner.json"),
208
+ ambientSocketFile: join(resolveRuntimeDir(raw), "ambient-agent.sock"),
178
209
  });
179
210
  }
180
211
  const processWithRuntimeEnvCache = process;
212
+ function isTestProcess() {
213
+ return process.env.NODE_ENV === "test" || process.env.VITEST === "true";
214
+ }
215
+ function maybeReportEarlyRuntimeEnvAccess() {
216
+ if (processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__) {
217
+ return;
218
+ }
219
+ const message = "defaultRuntimeEnv() was read before loadAndFinalizeEnv() completed. " +
220
+ "Bootstrap entry points must finish dotenv loading and security scrubbing before runtime env snapshots are created.";
221
+ if (process.env.MAESTRO_RUNTIME_ENV_STRICT_BOOTSTRAP === "1") {
222
+ throw new Error(message);
223
+ }
224
+ if (isTestProcess() ||
225
+ processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__) {
226
+ return;
227
+ }
228
+ processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__ = true;
229
+ console.warn(`[maestro] ${message}`);
230
+ }
181
231
  /**
182
232
  * Return the process-wide snapshot of `process.env`.
183
233
  *
@@ -192,12 +242,20 @@ const processWithRuntimeEnvCache = process;
192
242
  * the migration.
193
243
  */
194
244
  export function defaultRuntimeEnv() {
245
+ maybeReportEarlyRuntimeEnvAccess();
195
246
  if (!processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__) {
196
247
  processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__ =
197
248
  createRuntimeEnv(process.env);
198
249
  }
199
250
  return processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__;
200
251
  }
252
+ export function markRuntimeEnvFinalized() {
253
+ processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__ = true;
254
+ Reflect.deleteProperty(processWithRuntimeEnvCache, "__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__");
255
+ }
256
+ export function isRuntimeEnvFinalized() {
257
+ return processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__ === true;
258
+ }
201
259
  /**
202
260
  * Drop the cached default snapshot so the next `defaultRuntimeEnv()` call
203
261
  * re-reads `process.env`.
@@ -209,5 +267,9 @@ export function defaultRuntimeEnv() {
209
267
  export function resetDefaultRuntimeEnv() {
210
268
  Reflect.deleteProperty(processWithRuntimeEnvCache, "__MAESTRO_DEFAULT_RUNTIME_ENV__");
211
269
  }
212
- export const resetDefaultRuntimeEnvForTests = resetDefaultRuntimeEnv;
270
+ export function resetDefaultRuntimeEnvForTests() {
271
+ resetDefaultRuntimeEnv();
272
+ Reflect.deleteProperty(processWithRuntimeEnvCache, "__MAESTRO_RUNTIME_ENV_FINALIZED__");
273
+ Reflect.deleteProperty(processWithRuntimeEnvCache, "__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__");
274
+ }
213
275
  //# sourceMappingURL=env.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/runtime/env.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime environment substrate.\n *\n * # Why this exists\n *\n * Ambient `process.env` reads scattered through library code are the root\n * cause of an entire class of flakes:\n *\n * - Logger config frozen at setup-file import time (PR #2768/#2769).\n * - Meter test passing on runner-2, failing on runner-1 because the CI\n * runner's env had `EVALOPS_ORG_ID` set (PR #2763).\n * - CLI integration test `prints providers summary for filter` flaking\n * intermittently because OAuth keychain mode was captured by the first\n * test in a vitest worker (PRs #2752, #2761, #2762, #2766).\n * - CLI aggregator's `setInterval` outliving the test that started it,\n * later reading the *next* test's env-driven buffer path (PR #2772).\n *\n * Every one of those was the same shape: shared mutable state with no\n * causal ordering between writers and readers and no owner.\n *\n * The substrate fix is to make environment a *parameter*, not a *global*.\n * Library code receives a `RuntimeEnv`. Tests construct one with a literal.\n * The single place that reads `process.env` is `createRuntimeEnv` —\n * everything else passes the typed result around.\n *\n * # Migration strategy\n *\n * `defaultRuntimeEnv()` is a one-call-per-process snapshot of\n * `process.env`. Code not yet migrated can pick it up incrementally. The\n * `scripts/check-env-reads.mjs` baseline prevents *new* direct reads from\n * `process.env` in `src/` without going through `RuntimeEnv` first.\n *\n * # What's typed here\n *\n * The fields below are the env vars that have produced production flakes,\n * security gaps, or cross-test pollution in the last quarter. Untyped\n * vars stay as ambient `process.env` reads for now — the scanner just\n * prevents new ones being added — and graduate into this type as their\n * consumers are migrated.\n */\n\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface RuntimeEnv {\n\t// --- Logger ---\n\treadonly logLevel: LogLevel;\n\treadonly logJsonFormat: boolean;\n\treadonly logSplitStreams: boolean;\n\n\t// --- EvalOps identity (the flake surface PR #2763 closed) ---\n\t/**\n\t * Organization id resolved across the documented alias list.\n\t * Source vars (first non-empty wins):\n\t * - MAESTRO_EVALOPS_ORG_ID\n\t * - EVALOPS_ORGANIZATION_ID\n\t * - EVALOPS_ORG_ID\n\t * - MAESTRO_ENTERPRISE_ORG_ID\n\t */\n\treadonly evalopsOrgId: string | null;\n\t/**\n\t * Access token resolved across the documented alias list.\n\t * Source vars: MAESTRO_EVALOPS_ACCESS_TOKEN, EVALOPS_TOKEN.\n\t */\n\treadonly evalopsAccessToken: string | null;\n\n\t// --- OAuth storage isolation (PRs #2752/#2761/#2762/#2766) ---\n\treadonly disableKeychain: boolean;\n\treadonly maestroHome: string;\n\treadonly maestroAgentDir: string | null;\n\n\t// --- CLI command aggregator / telemetry (PR #2772 timer leak) ---\n\t/**\n\t * Tri-state parsed signal: true (opt-in), false (opt-out), null (no\n\t * signal). For diagnostics that need the raw user string, see\n\t * `telemetryFlag` below.\n\t */\n\treadonly telemetryEnabled: boolean | null;\n\t/**\n\t * Raw `MAESTRO_TELEMETRY` (or `PLAYWRIGHT_TELEMETRY` fallback) string,\n\t * trimmed. Preserved separately from `telemetryEnabled` so diagnostic\n\t * surfaces (e.g. `getTelemetryStatus().flagValue`) can show the literal\n\t * user setting.\n\t */\n\treadonly telemetryFlag: string | null;\n\treadonly beaconFile: string | null;\n\treadonly beaconEndpoint: string | null;\n\treadonly beaconApiKey: string | null;\n\t/**\n\t * Beacon request timeout in ms. `null` means use the consumer's default.\n\t */\n\treadonly beaconTimeoutMs: number | null;\n\t/**\n\t * Telemetry sampling probability in `[0, 1]`. `null` means full sampling.\n\t */\n\treadonly telemetrySampleRate: number | null;\n\treadonly cliCommandBeaconBufferFile: string | null;\n\n\t// --- OpenTelemetry SDK boot (`src/opentelemetry.ts`) ---\n\t/**\n\t * Tri-state for `MAESTRO_OTEL`. `null` means no explicit signal —\n\t * the OTel boot logic infers enablement from the presence of an\n\t * exporter endpoint.\n\t */\n\treadonly otelEnabled: boolean | null;\n\t/**\n\t * Raw `MAESTRO_OTEL` string preserved for `getOpenTelemetryStatus`\n\t * reason-string diagnostics that distinguish \"MAESTRO_OTEL=1\" from\n\t * \"MAESTRO_OTEL=0\" in the human-readable reason.\n\t */\n\treadonly otelFlag: string | null;\n\treadonly otelServiceName: string | null;\n\treadonly otelSampler: string | null;\n\n\t// --- OpenTelemetry exporter (`src/telemetry.ts`) ---\n\t/**\n\t * Where the OTel exporter dumps a local log of telemetry events.\n\t * Source vars (first non-empty wins, tilde-expanded):\n\t * - MAESTRO_TELEMETRY_FILE\n\t * - PLAYWRIGHT_TELEMETRY_FILE\n\t *\n\t * This is separate from `beaconFile` (`MAESTRO_BEACON_FILE`) — the\n\t * OTel exporter writes structured events, the beacon writes one JSON\n\t * line per event. Users that set only one of the two expect the other\n\t * to remain off.\n\t */\n\treadonly exporterFile: string | null;\n\t/**\n\t * HTTP endpoint for the OTel exporter. Distinct from `beaconEndpoint`\n\t * because `MAESTRO_BEACON_ENDPOINT` is a beacon-specific override that\n\t * shouldn't redirect the OTel exporter.\n\t * - MAESTRO_TELEMETRY_ENDPOINT\n\t * - PLAYWRIGHT_TELEMETRY_ENDPOINT\n\t */\n\treadonly exporterEndpoint: string | null;\n\n\t// --- Meter remote-mirror gate (PR #2763 failure) ---\n\treadonly meterBaseUrl: string | null;\n\treadonly meterAccessToken: string | null;\n\treadonly meterOrganizationId: string | null;\n}\n\nfunction trim(value: unknown): string | null {\n\tif (typeof value !== \"string\") return null;\n\tconst t = value.trim();\n\treturn t.length > 0 ? t : null;\n}\n\nfunction firstNonEmpty(\n\traw: NodeJS.ProcessEnv,\n\tnames: readonly string[],\n): string | null {\n\tfor (const name of names) {\n\t\tconst v = trim(raw[name]);\n\t\tif (v) return v;\n\t}\n\treturn null;\n}\n\nconst EVALOPS_ORG_ID_VARS = [\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n] as const;\n\nconst EVALOPS_ACCESS_TOKEN_VARS = [\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n] as const;\n\nconst METER_BASE_URL_VARS = [\n\t\"MAESTRO_METER_BASE\",\n\t\"MAESTRO_METER_SERVICE_URL\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst METER_ACCESS_TOKEN_VARS = [\n\t\"MAESTRO_METER_ACCESS_TOKEN\",\n\t...EVALOPS_ACCESS_TOKEN_VARS,\n] as const;\n\nconst METER_ORG_ID_VARS = [\n\t\"MAESTRO_METER_ORGANIZATION_ID\",\n\t...EVALOPS_ORG_ID_VARS,\n] as const;\n\nfunction parseLogLevel(value: string | null): LogLevel {\n\tswitch (value) {\n\t\tcase \"debug\":\n\t\tcase \"info\":\n\t\tcase \"warn\":\n\t\tcase \"error\":\n\t\t\treturn value;\n\t\tdefault:\n\t\t\treturn \"info\";\n\t}\n}\n\nfunction parseBoolean(value: string | null): boolean {\n\treturn value === \"1\" || value === \"true\";\n}\n\nexport function parseOptionalBoolean(value: string | null): boolean | null {\n\tif (value === null) return null;\n\tconst normalized = value.toLowerCase();\n\tif (normalized === \"0\" || normalized === \"false\") return false;\n\tif (normalized === \"1\" || normalized === \"true\") return true;\n\treturn null;\n}\n\nfunction parseOptionalSampleRate(value: string | null): number | null {\n\tif (value === null) return null;\n\tconst parsed = Number.parseFloat(value);\n\tif (!Number.isFinite(parsed)) return null;\n\treturn Math.min(Math.max(parsed, 0), 1);\n}\n\nfunction parseOptionalPositiveInt(value: string | null): number | null {\n\tif (value === null) return null;\n\tconst parsed = Number.parseInt(value, 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : null;\n}\n\nfunction resolveHomePath(\n\tvalue: string | null,\n\traw: NodeJS.ProcessEnv,\n): string | null {\n\tif (value === null) return null;\n\t// Match the legacy `resolveEnvPath` chain: honor an overridden HOME\n\t// (or USERPROFILE on Windows) before falling back to `homedir()`. This\n\t// keeps tests and tools that pin HOME to a temp dir working as they did\n\t// when this read went through `src/utils/path-expansion.ts`.\n\tconst home = trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir();\n\tconst expanded =\n\t\tvalue === \"~\"\n\t\t\t? home\n\t\t\t: value.startsWith(\"~/\") || value.startsWith(\"~\\\\\")\n\t\t\t\t? join(home, value.slice(2))\n\t\t\t\t: value;\n\treturn resolve(expanded);\n}\n\n/**\n * Build an immutable snapshot of the env vars this codebase cares about.\n *\n * Pure function: same input → same output. Call it once at process\n * startup (or in tests, with a literal) and thread the result through the\n * program. Do not call it on every operation — that defeats the purpose.\n */\nexport function createRuntimeEnv(raw: NodeJS.ProcessEnv): RuntimeEnv {\n\treturn Object.freeze({\n\t\tlogLevel: parseLogLevel(trim(raw.MAESTRO_LOG_LEVEL)),\n\t\tlogJsonFormat: parseBoolean(trim(raw.MAESTRO_LOG_JSON)),\n\t\tlogSplitStreams: parseBoolean(trim(raw.MAESTRO_LOG_SPLIT_STREAMS)),\n\n\t\tevalopsOrgId: firstNonEmpty(raw, EVALOPS_ORG_ID_VARS),\n\t\tevalopsAccessToken: firstNonEmpty(raw, EVALOPS_ACCESS_TOKEN_VARS),\n\n\t\tdisableKeychain: parseBoolean(trim(raw.MAESTRO_DISABLE_KEYCHAIN)),\n\t\tmaestroHome: trim(raw.MAESTRO_HOME) ?? join(homedir(), \".maestro\"),\n\t\tmaestroAgentDir: trim(raw.MAESTRO_AGENT_DIR),\n\n\t\ttelemetryEnabled: parseOptionalBoolean(\n\t\t\ttrim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),\n\t\t),\n\t\ttelemetryFlag:\n\t\t\ttrim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),\n\t\tbeaconFile: resolveHomePath(trim(raw.MAESTRO_BEACON_FILE), raw),\n\t\tbeaconEndpoint: firstNonEmpty(raw, [\n\t\t\t\"MAESTRO_BEACON_ENDPOINT\",\n\t\t\t\"MAESTRO_TELEMETRY_ENDPOINT\",\n\t\t\t\"PLAYWRIGHT_TELEMETRY_ENDPOINT\",\n\t\t]),\n\t\tbeaconApiKey: trim(raw.MAESTRO_BEACON_API_KEY),\n\t\tbeaconTimeoutMs: parseOptionalPositiveInt(\n\t\t\ttrim(raw.MAESTRO_BEACON_TIMEOUT_MS),\n\t\t),\n\t\ttelemetrySampleRate: parseOptionalSampleRate(\n\t\t\ttrim(raw.MAESTRO_TELEMETRY_SAMPLE) ??\n\t\t\t\ttrim(raw.PLAYWRIGHT_TELEMETRY_SAMPLE),\n\t\t),\n\t\tcliCommandBeaconBufferFile: trim(\n\t\t\traw.MAESTRO_CLI_COMMAND_BEACON_BUFFER_FILE,\n\t\t),\n\n\t\totelEnabled: parseOptionalBoolean(trim(raw.MAESTRO_OTEL)),\n\t\totelFlag: trim(raw.MAESTRO_OTEL),\n\t\totelServiceName: trim(raw.MAESTRO_OTEL_SERVICE_NAME),\n\t\totelSampler: trim(raw.MAESTRO_OTEL_SAMPLER),\n\n\t\texporterFile:\n\t\t\tresolveHomePath(trim(raw.MAESTRO_TELEMETRY_FILE), raw) ??\n\t\t\tresolveHomePath(trim(raw.PLAYWRIGHT_TELEMETRY_FILE), raw),\n\t\texporterEndpoint: firstNonEmpty(raw, [\n\t\t\t\"MAESTRO_TELEMETRY_ENDPOINT\",\n\t\t\t\"PLAYWRIGHT_TELEMETRY_ENDPOINT\",\n\t\t]),\n\n\t\tmeterBaseUrl: firstNonEmpty(raw, METER_BASE_URL_VARS),\n\t\tmeterAccessToken: firstNonEmpty(raw, METER_ACCESS_TOKEN_VARS),\n\t\tmeterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS),\n\t});\n}\n\ntype ProcessWithRuntimeEnvCache = typeof process & {\n\t__MAESTRO_DEFAULT_RUNTIME_ENV__?: RuntimeEnv;\n};\n\nconst processWithRuntimeEnvCache = process as ProcessWithRuntimeEnvCache;\n\n/**\n * Return the process-wide snapshot of `process.env`.\n *\n * Builds the snapshot lazily on first call so the timing of module load\n * doesn't matter — by the time anything calls this, env has finished\n * settling (CLI argv parsed, dotenv loaded, vitest setup files run). The\n * returned object is frozen and shared.\n *\n * Library code that's been migrated to the substrate should *not* call\n * this directly; it should accept a `RuntimeEnv` parameter. This export\n * exists as the bootstrap entry point and as a compatibility shim during\n * the migration.\n */\nexport function defaultRuntimeEnv(): RuntimeEnv {\n\tif (!processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__) {\n\t\tprocessWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__ =\n\t\t\tcreateRuntimeEnv(process.env);\n\t}\n\treturn processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__;\n}\n\n/**\n * Drop the cached default snapshot so the next `defaultRuntimeEnv()` call\n * re-reads `process.env`.\n *\n * Prefer constructing a `RuntimeEnv` with `createRuntimeEnv` and injecting it.\n * This reset is reserved for process bootstrap paths that intentionally mutate\n * `process.env` before handing control to migrated modules.\n */\nexport function resetDefaultRuntimeEnv(): void {\n\tReflect.deleteProperty(\n\t\tprocessWithRuntimeEnvCache,\n\t\t\"__MAESTRO_DEFAULT_RUNTIME_ENV__\",\n\t);\n}\n\nexport const resetDefaultRuntimeEnvForTests = resetDefaultRuntimeEnv;\n"]}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/runtime/env.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime environment substrate.\n *\n * # Why this exists\n *\n * Ambient `process.env` reads scattered through library code are the root\n * cause of an entire class of flakes:\n *\n * - Logger config frozen at setup-file import time (PR #2768/#2769).\n * - Meter test passing on runner-2, failing on runner-1 because the CI\n * runner's env had `EVALOPS_ORG_ID` set (PR #2763).\n * - CLI integration test `prints providers summary for filter` flaking\n * intermittently because OAuth keychain mode was captured by the first\n * test in a vitest worker (PRs #2752, #2761, #2762, #2766).\n * - CLI aggregator's `setInterval` outliving the test that started it,\n * later reading the *next* test's env-driven buffer path (PR #2772).\n *\n * Every one of those was the same shape: shared mutable state with no\n * causal ordering between writers and readers and no owner.\n *\n * The substrate fix is to make environment a *parameter*, not a *global*.\n * Library code receives a `RuntimeEnv`. Tests construct one with a literal.\n * The single place that reads `process.env` is `createRuntimeEnv` —\n * everything else passes the typed result around.\n *\n * # Migration strategy\n *\n * `defaultRuntimeEnv()` is a one-call-per-process snapshot of\n * `process.env`. Code not yet migrated can pick it up incrementally. The\n * `scripts/check-env-reads.mjs` baseline prevents *new* direct reads from\n * `process.env` in `src/` without going through `RuntimeEnv` first.\n *\n * # What's typed here\n *\n * The fields below are the env vars that have produced production flakes,\n * security gaps, or cross-test pollution in the last quarter. Untyped\n * vars stay as ambient `process.env` reads for now — the scanner just\n * prevents new ones being added — and graduate into this type as their\n * consumers are migrated.\n */\n\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface RuntimeEnv {\n\t// --- Logger ---\n\treadonly logLevel: LogLevel;\n\treadonly logJsonFormat: boolean;\n\treadonly logSplitStreams: boolean;\n\n\t// --- EvalOps identity (the flake surface PR #2763 closed) ---\n\t/**\n\t * Organization id resolved across the documented alias list.\n\t * Source vars (first non-empty wins):\n\t * - MAESTRO_EVALOPS_ORG_ID\n\t * - EVALOPS_ORGANIZATION_ID\n\t * - EVALOPS_ORG_ID\n\t * - MAESTRO_ENTERPRISE_ORG_ID\n\t */\n\treadonly evalopsOrgId: string | null;\n\t/**\n\t * Access token resolved across the documented alias list.\n\t * Source vars: MAESTRO_EVALOPS_ACCESS_TOKEN, EVALOPS_TOKEN.\n\t */\n\treadonly evalopsAccessToken: string | null;\n\n\t// --- OAuth storage isolation (PRs #2752/#2761/#2762/#2766) ---\n\treadonly disableKeychain: boolean;\n\treadonly maestroHome: string;\n\treadonly maestroAgentDir: string | null;\n\treadonly missionStoreDir: string | null;\n\treadonly snapshotBlobDir: string | null;\n\treadonly skillTrustStrict: boolean;\n\n\t// --- CLI command aggregator / telemetry (PR #2772 timer leak) ---\n\t/**\n\t * Tri-state parsed signal: true (opt-in), false (opt-out), null (no\n\t * signal). For diagnostics that need the raw user string, see\n\t * `telemetryFlag` below.\n\t */\n\treadonly telemetryEnabled: boolean | null;\n\t/**\n\t * Raw `MAESTRO_TELEMETRY` (or `PLAYWRIGHT_TELEMETRY` fallback) string,\n\t * trimmed. Preserved separately from `telemetryEnabled` so diagnostic\n\t * surfaces (e.g. `getTelemetryStatus().flagValue`) can show the literal\n\t * user setting.\n\t */\n\treadonly telemetryFlag: string | null;\n\treadonly beaconFile: string | null;\n\treadonly beaconEndpoint: string | null;\n\treadonly beaconApiKey: string | null;\n\t/**\n\t * Beacon request timeout in ms. `null` means use the consumer's default.\n\t */\n\treadonly beaconTimeoutMs: number | null;\n\t/**\n\t * Telemetry sampling probability in `[0, 1]`. `null` means full sampling.\n\t */\n\treadonly telemetrySampleRate: number | null;\n\treadonly cliCommandBeaconBufferFile: string | null;\n\n\t// --- OpenTelemetry SDK boot (`src/opentelemetry.ts`) ---\n\t/**\n\t * Tri-state for `MAESTRO_OTEL`. `null` means no explicit signal —\n\t * the OTel boot logic infers enablement from the presence of an\n\t * exporter endpoint.\n\t */\n\treadonly otelEnabled: boolean | null;\n\t/**\n\t * Raw `MAESTRO_OTEL` string preserved for `getOpenTelemetryStatus`\n\t * reason-string diagnostics that distinguish \"MAESTRO_OTEL=1\" from\n\t * \"MAESTRO_OTEL=0\" in the human-readable reason.\n\t */\n\treadonly otelFlag: string | null;\n\treadonly otelServiceName: string | null;\n\treadonly otelSampler: string | null;\n\n\t// --- OpenTelemetry exporter (`src/telemetry.ts`) ---\n\t/**\n\t * Where the OTel exporter dumps a local log of telemetry events.\n\t * Source vars (first non-empty wins, tilde-expanded):\n\t * - MAESTRO_TELEMETRY_FILE\n\t * - PLAYWRIGHT_TELEMETRY_FILE\n\t *\n\t * This is separate from `beaconFile` (`MAESTRO_BEACON_FILE`) — the\n\t * OTel exporter writes structured events, the beacon writes one JSON\n\t * line per event. Users that set only one of the two expect the other\n\t * to remain off.\n\t */\n\treadonly exporterFile: string | null;\n\t/**\n\t * HTTP endpoint for the OTel exporter. Distinct from `beaconEndpoint`\n\t * because `MAESTRO_BEACON_ENDPOINT` is a beacon-specific override that\n\t * shouldn't redirect the OTel exporter.\n\t * - MAESTRO_TELEMETRY_ENDPOINT\n\t * - PLAYWRIGHT_TELEMETRY_ENDPOINT\n\t */\n\treadonly exporterEndpoint: string | null;\n\n\t// --- Meter remote-mirror gate (PR #2763 failure) ---\n\treadonly meterBaseUrl: string | null;\n\treadonly meterAccessToken: string | null;\n\treadonly meterOrganizationId: string | null;\n\n\t// --- Ambient agent evidence ---\n\treadonly ambientLearnerFile: string | null;\n\treadonly ambientLearnerDefaultFile: string;\n\treadonly ambientSocketFile: string;\n}\n\nfunction trim(value: unknown): string | null {\n\tif (typeof value !== \"string\") return null;\n\tconst t = value.trim();\n\treturn t.length > 0 ? t : null;\n}\n\nfunction firstNonEmpty(\n\traw: NodeJS.ProcessEnv,\n\tnames: readonly string[],\n): string | null {\n\tfor (const name of names) {\n\t\tconst v = trim(raw[name]);\n\t\tif (v) return v;\n\t}\n\treturn null;\n}\n\nconst EVALOPS_ORG_ID_VARS = [\n\t\"MAESTRO_EVALOPS_ORG_ID\",\n\t\"EVALOPS_ORGANIZATION_ID\",\n\t\"EVALOPS_ORG_ID\",\n\t\"MAESTRO_ENTERPRISE_ORG_ID\",\n] as const;\n\nconst EVALOPS_ACCESS_TOKEN_VARS = [\n\t\"MAESTRO_EVALOPS_ACCESS_TOKEN\",\n\t\"EVALOPS_TOKEN\",\n] as const;\n\nconst METER_BASE_URL_VARS = [\n\t\"MAESTRO_METER_BASE\",\n\t\"MAESTRO_METER_SERVICE_URL\",\n\t\"MAESTRO_PLATFORM_BASE_URL\",\n\t\"MAESTRO_EVALOPS_BASE_URL\",\n\t\"EVALOPS_BASE_URL\",\n] as const;\n\nconst METER_ACCESS_TOKEN_VARS = [\n\t\"MAESTRO_METER_ACCESS_TOKEN\",\n\t...EVALOPS_ACCESS_TOKEN_VARS,\n] as const;\n\nconst METER_ORG_ID_VARS = [\n\t\"MAESTRO_METER_ORGANIZATION_ID\",\n\t...EVALOPS_ORG_ID_VARS,\n] as const;\n\nfunction parseLogLevel(value: string | null): LogLevel {\n\tswitch (value) {\n\t\tcase \"debug\":\n\t\tcase \"info\":\n\t\tcase \"warn\":\n\t\tcase \"error\":\n\t\t\treturn value;\n\t\tdefault:\n\t\t\treturn \"info\";\n\t}\n}\n\nfunction parseBoolean(value: string | null): boolean {\n\treturn value === \"1\" || value === \"true\";\n}\n\nexport function parseOptionalBoolean(value: string | null): boolean | null {\n\tif (value === null) return null;\n\tconst normalized = value.toLowerCase();\n\tif (normalized === \"0\" || normalized === \"false\") return false;\n\tif (normalized === \"1\" || normalized === \"true\") return true;\n\treturn null;\n}\n\nfunction parseOptionalSampleRate(value: string | null): number | null {\n\tif (value === null) return null;\n\tconst parsed = Number.parseFloat(value);\n\tif (!Number.isFinite(parsed)) return null;\n\treturn Math.min(Math.max(parsed, 0), 1);\n}\n\nfunction parseOptionalPositiveInt(value: string | null): number | null {\n\tif (value === null) return null;\n\tconst parsed = Number.parseInt(value, 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : null;\n}\n\nfunction resolveHomePath(\n\tvalue: string | null,\n\traw: NodeJS.ProcessEnv,\n): string | null {\n\tif (value === null) return null;\n\t// Match the legacy `resolveEnvPath` chain: honor an overridden HOME\n\t// (or USERPROFILE on Windows) before falling back to `homedir()`. This\n\t// keeps tests and tools that pin HOME to a temp dir working as they did\n\t// when this read went through `src/utils/path-expansion.ts`.\n\tconst home = trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir();\n\tconst expanded =\n\t\tvalue === \"~\"\n\t\t\t? home\n\t\t\t: value.startsWith(\"~/\") || value.startsWith(\"~\\\\\")\n\t\t\t\t? join(home, value.slice(2))\n\t\t\t\t: value;\n\treturn resolve(expanded);\n}\n\nfunction homeFromEnv(raw: NodeJS.ProcessEnv): string {\n\treturn trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir();\n}\n\nfunction resolveDataLocalDir(raw: NodeJS.ProcessEnv): string {\n\tconst home = homeFromEnv(raw);\n\tif (process.platform === \"darwin\") {\n\t\treturn join(home, \"Library\", \"Application Support\");\n\t}\n\tif (process.platform === \"win32\") {\n\t\treturn (\n\t\t\tresolveHomePath(trim(raw.LOCALAPPDATA), raw) ??\n\t\t\tresolveHomePath(trim(raw.APPDATA), raw) ??\n\t\t\tjoin(home, \"AppData\", \"Local\")\n\t\t);\n\t}\n\treturn (\n\t\tresolveHomePath(trim(raw.XDG_DATA_HOME), raw) ??\n\t\tjoin(home, \".local\", \"share\")\n\t);\n}\n\nfunction resolveRuntimeDir(raw: NodeJS.ProcessEnv): string {\n\tif (process.platform === \"darwin\") {\n\t\treturn resolveDataLocalDir(raw);\n\t}\n\tconst xdgRuntimeDir = resolveHomePath(trim(raw.XDG_RUNTIME_DIR), raw);\n\tif (xdgRuntimeDir) return xdgRuntimeDir;\n\treturn resolveDataLocalDir(raw);\n}\n\n/**\n * Build an immutable snapshot of the env vars this codebase cares about.\n *\n * Pure function: same input → same output. Call it once at process\n * startup (or in tests, with a literal) and thread the result through the\n * program. Do not call it on every operation — that defeats the purpose.\n */\nexport function createRuntimeEnv(raw: NodeJS.ProcessEnv): RuntimeEnv {\n\treturn Object.freeze({\n\t\tlogLevel: parseLogLevel(trim(raw.MAESTRO_LOG_LEVEL)),\n\t\tlogJsonFormat: parseBoolean(trim(raw.MAESTRO_LOG_JSON)),\n\t\tlogSplitStreams: parseBoolean(trim(raw.MAESTRO_LOG_SPLIT_STREAMS)),\n\n\t\tevalopsOrgId: firstNonEmpty(raw, EVALOPS_ORG_ID_VARS),\n\t\tevalopsAccessToken: firstNonEmpty(raw, EVALOPS_ACCESS_TOKEN_VARS),\n\n\t\tdisableKeychain: parseBoolean(trim(raw.MAESTRO_DISABLE_KEYCHAIN)),\n\t\tmaestroHome: trim(raw.MAESTRO_HOME) ?? join(homedir(), \".maestro\"),\n\t\tmaestroAgentDir: trim(raw.MAESTRO_AGENT_DIR),\n\t\tmissionStoreDir: resolveHomePath(trim(raw.MAESTRO_MISSION_STORE_DIR), raw),\n\t\tsnapshotBlobDir: resolveHomePath(trim(raw.MAESTRO_SNAPSHOT_BLOB_DIR), raw),\n\t\tskillTrustStrict: parseBoolean(trim(raw.MAESTRO_SKILL_TRUST_STRICT)),\n\n\t\ttelemetryEnabled: parseOptionalBoolean(\n\t\t\ttrim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),\n\t\t),\n\t\ttelemetryFlag:\n\t\t\ttrim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),\n\t\tbeaconFile: resolveHomePath(trim(raw.MAESTRO_BEACON_FILE), raw),\n\t\tbeaconEndpoint: firstNonEmpty(raw, [\n\t\t\t\"MAESTRO_BEACON_ENDPOINT\",\n\t\t\t\"MAESTRO_TELEMETRY_ENDPOINT\",\n\t\t\t\"PLAYWRIGHT_TELEMETRY_ENDPOINT\",\n\t\t]),\n\t\tbeaconApiKey: trim(raw.MAESTRO_BEACON_API_KEY),\n\t\tbeaconTimeoutMs: parseOptionalPositiveInt(\n\t\t\ttrim(raw.MAESTRO_BEACON_TIMEOUT_MS),\n\t\t),\n\t\ttelemetrySampleRate: parseOptionalSampleRate(\n\t\t\ttrim(raw.MAESTRO_TELEMETRY_SAMPLE) ??\n\t\t\t\ttrim(raw.PLAYWRIGHT_TELEMETRY_SAMPLE),\n\t\t),\n\t\tcliCommandBeaconBufferFile: trim(\n\t\t\traw.MAESTRO_CLI_COMMAND_BEACON_BUFFER_FILE,\n\t\t),\n\n\t\totelEnabled: parseOptionalBoolean(trim(raw.MAESTRO_OTEL)),\n\t\totelFlag: trim(raw.MAESTRO_OTEL),\n\t\totelServiceName: trim(raw.MAESTRO_OTEL_SERVICE_NAME),\n\t\totelSampler: trim(raw.MAESTRO_OTEL_SAMPLER),\n\n\t\texporterFile:\n\t\t\tresolveHomePath(trim(raw.MAESTRO_TELEMETRY_FILE), raw) ??\n\t\t\tresolveHomePath(trim(raw.PLAYWRIGHT_TELEMETRY_FILE), raw),\n\t\texporterEndpoint: firstNonEmpty(raw, [\n\t\t\t\"MAESTRO_TELEMETRY_ENDPOINT\",\n\t\t\t\"PLAYWRIGHT_TELEMETRY_ENDPOINT\",\n\t\t]),\n\n\t\tmeterBaseUrl: firstNonEmpty(raw, METER_BASE_URL_VARS),\n\t\tmeterAccessToken: firstNonEmpty(raw, METER_ACCESS_TOKEN_VARS),\n\t\tmeterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS),\n\t\tambientLearnerFile: resolveHomePath(\n\t\t\ttrim(raw.MAESTRO_AMBIENT_LEARNER_FILE),\n\t\t\traw,\n\t\t),\n\t\tambientLearnerDefaultFile: join(\n\t\t\tresolveDataLocalDir(raw),\n\t\t\t\"ambient-agent\",\n\t\t\t\"learner.json\",\n\t\t),\n\t\tambientSocketFile: join(resolveRuntimeDir(raw), \"ambient-agent.sock\"),\n\t});\n}\n\ntype ProcessWithRuntimeEnvCache = typeof process & {\n\t__MAESTRO_DEFAULT_RUNTIME_ENV__?: RuntimeEnv;\n\t__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__?: boolean;\n\t__MAESTRO_RUNTIME_ENV_FINALIZED__?: boolean;\n};\n\nconst processWithRuntimeEnvCache = process as ProcessWithRuntimeEnvCache;\n\nfunction isTestProcess(): boolean {\n\treturn process.env.NODE_ENV === \"test\" || process.env.VITEST === \"true\";\n}\n\nfunction maybeReportEarlyRuntimeEnvAccess(): void {\n\tif (processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__) {\n\t\treturn;\n\t}\n\tconst message =\n\t\t\"defaultRuntimeEnv() was read before loadAndFinalizeEnv() completed. \" +\n\t\t\"Bootstrap entry points must finish dotenv loading and security scrubbing before runtime env snapshots are created.\";\n\tif (process.env.MAESTRO_RUNTIME_ENV_STRICT_BOOTSTRAP === \"1\") {\n\t\tthrow new Error(message);\n\t}\n\tif (\n\t\tisTestProcess() ||\n\t\tprocessWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__\n\t) {\n\t\treturn;\n\t}\n\tprocessWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__ = true;\n\tconsole.warn(`[maestro] ${message}`);\n}\n\n/**\n * Return the process-wide snapshot of `process.env`.\n *\n * Builds the snapshot lazily on first call so the timing of module load\n * doesn't matter — by the time anything calls this, env has finished\n * settling (CLI argv parsed, dotenv loaded, vitest setup files run). The\n * returned object is frozen and shared.\n *\n * Library code that's been migrated to the substrate should *not* call\n * this directly; it should accept a `RuntimeEnv` parameter. This export\n * exists as the bootstrap entry point and as a compatibility shim during\n * the migration.\n */\nexport function defaultRuntimeEnv(): RuntimeEnv {\n\tmaybeReportEarlyRuntimeEnvAccess();\n\tif (!processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__) {\n\t\tprocessWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__ =\n\t\t\tcreateRuntimeEnv(process.env);\n\t}\n\treturn processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__;\n}\n\nexport function markRuntimeEnvFinalized(): void {\n\tprocessWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__ = true;\n\tReflect.deleteProperty(\n\t\tprocessWithRuntimeEnvCache,\n\t\t\"__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__\",\n\t);\n}\n\nexport function isRuntimeEnvFinalized(): boolean {\n\treturn processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__ === true;\n}\n\n/**\n * Drop the cached default snapshot so the next `defaultRuntimeEnv()` call\n * re-reads `process.env`.\n *\n * Prefer constructing a `RuntimeEnv` with `createRuntimeEnv` and injecting it.\n * This reset is reserved for process bootstrap paths that intentionally mutate\n * `process.env` before handing control to migrated modules.\n */\nexport function resetDefaultRuntimeEnv(): void {\n\tReflect.deleteProperty(\n\t\tprocessWithRuntimeEnvCache,\n\t\t\"__MAESTRO_DEFAULT_RUNTIME_ENV__\",\n\t);\n}\n\nexport function resetDefaultRuntimeEnvForTests(): void {\n\tresetDefaultRuntimeEnv();\n\tReflect.deleteProperty(\n\t\tprocessWithRuntimeEnvCache,\n\t\t\"__MAESTRO_RUNTIME_ENV_FINALIZED__\",\n\t);\n\tReflect.deleteProperty(\n\t\tprocessWithRuntimeEnvCache,\n\t\t\"__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__\",\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/safety/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAYH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAmBzE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAChC,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,sEAAsE;IACtE,KAAK,CAAC,EAAE;QACP,gEAAgE;QAChE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,sEAAsE;QACtE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,mDAAmD;IACnD,YAAY,CAAC,EAAE;QACd,4CAA4C;QAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,4CAA4C;QAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,8DAA8D;IAC9D,MAAM,CAAC,EAAE;QACR,gEAAgE;QAChE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,0CAA0C;QAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,8DAA8D;IAC9D,MAAM,CAAC,EAAE;QACR,uDAAuD;QACvD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAEF,oCAAoC;IACpC,KAAK,CAAC,EAAE;QACP,0EAA0E;QAC1E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,2DAA2D;QAC3D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,kCAAkC;IAClC,OAAO,CAAC,EAAE;QACT,8DAA8D;QAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,+DAA+D;QAC/D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,iDAAiD;QACjD,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,uEAAuE;QACvE,eAAe,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,CAAC,EAAE;QACR,oDAAoD;QACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,0CAA0C;QAC1C,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,yCAAyC;QACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACF;AAimBD,wBAAgB,UAAU,CAAC,KAAK,UAAQ,GAAG,gBAAgB,GAAG,IAAI,CAgDjE;AAoGD,wBAAsB,WAAW,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAuBD;AAqJD,qBAAa,WAAY,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI3B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CA0BA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,EAC5B,KAAK,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAmEA;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,IAAI,CASnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,GAAG,IAAI,CAM1D"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/safety/policy.ts"],"names":[],"mappings":"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"}
@@ -100,7 +100,7 @@ import { Type } from "@sinclair/typebox";
100
100
  import { parse as parseTOML } from "smol-toml";
101
101
  import { PATHS } from "../config/constants.js";
102
102
  import { extractDependencies } from "../utils/dependency-extractor.js";
103
- import { safeJsonParse } from "../utils/json.js";
103
+ import { isRecord, safeJsonParse } from "../utils/json.js";
104
104
  import { createLogger } from "../utils/logger.js";
105
105
  import { getHomeDir, resolveEnvPath } from "../utils/path-expansion.js";
106
106
  import { uniquePaths } from "../utils/path-utils.js";
@@ -186,9 +186,6 @@ let cachedPolicy = null;
186
186
  let cachedPolicyKey = null;
187
187
  let cachedPolicyLayers = [];
188
188
  let policyWatchers = [];
189
- function isRecord(value) {
190
- return typeof value === "object" && value !== null && !Array.isArray(value);
191
- }
192
189
  function getPolicySources() {
193
190
  const sources = [];
194
191
  const userPolicyPath = getEffectiveUserPolicyPath();