@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
package/dist/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.10.49",
3
- "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.49 is now available."
2
+ "version": "0.10.51",
3
+ "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.51 is now available."
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,MAAM,WAAW,CAAC;AA+BnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiB5D,OAAO,KAAK,EACX,mBAAmB,EAEnB,MAAM,yBAAyB,CAAC;AAsBjC,UAAU,qBAAqB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA0FD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAsQrD,eAAO,MAAM,qBAAqB;iBACpB,eAAe;;;kBAbT,MAAM;iBAAW,MAAM;;CAgB1C,CAAC;AA+OF,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACrC,aAAa,SAAiB,GAC5B,OAAO,CAET;AAkLD,wBAAsB,cAAc,CACnC,IAAI,SAAO,EACX,OAAO,GAAE,qBAA0B,iFA2SnC"}
1
+ {"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,MAAM,WAAW,CAAC;AA+BnB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAgB5D,OAAO,KAAK,EACX,mBAAmB,EAEnB,MAAM,yBAAyB,CAAC;AAsBjC,UAAU,qBAAqB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA0FD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAoQrD,eAAO,MAAM,qBAAqB;iBACpB,eAAe;;;kBAbT,MAAM;iBAAW,MAAM;;CAgB1C,CAAC;AA+OF,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACrC,aAAa,SAAiB,GAC5B,OAAO,CAET;AAkLD,wBAAsB,cAAc,CACnC,IAAI,SAAO,EACX,OAAO,GAAE,qBAA0B,iFA2SnC"}
@@ -14,7 +14,7 @@ import { detectRuntimeConstraintContext } from "./cli/system-prompt.js";
14
14
  import { resolveDefaultApprovalMode } from "./config/default-approval-mode.js";
15
15
  import { loadUnifiedContextManifest } from "./context/manifest.js";
16
16
  import { initLifecycle, shutdownLifecycle } from "./lifecycle.js";
17
- import { loadEnv, scrubLoadedSecurityOverrideEnv } from "./load-env.js";
17
+ import { loadAndFinalizeEnv } from "./load-env.js";
18
18
  import { bootstrapLsp } from "./lsp/bootstrap.js";
19
19
  import { loadMcpConfig, mcpManager } from "./mcp/index.js";
20
20
  import { prefetchOfficialMcpRegistry } from "./mcp/official-registry.js";
@@ -27,7 +27,6 @@ import { resolveMaestroSystemPrompt } from "./prompts/system-prompt.js";
27
27
  import { getEnvVarsForProvider } from "./providers/api-keys.js";
28
28
  import { createAuthResolver, } from "./providers/auth.js";
29
29
  import { registerBackgroundTaskShutdownHooks } from "./runtime/background-task-hooks.js";
30
- import { resetDefaultRuntimeEnv } from "./runtime/env.js";
31
30
  import { configureSafeMode } from "./safety/safe-mode.js";
32
31
  import { HostedRunnerDrainReasonValue, HostedRunnerDrainStatusValue, drainHostedRunnerForShutdown, } from "./server/handlers/hosted-runner-drain.js";
33
32
  import { createWorkspaceConfigMiddleware } from "./services/workspace-config/middleware.js";
@@ -93,9 +92,7 @@ import { webComposerManagers } from "./server/web-composer-registry.js";
93
92
  import { resolveWebRoot } from "./server/web-root.js";
94
93
  // Re-export for existing test imports
95
94
  export { SseSession } from "./server/sse-session.js";
96
- loadEnv();
97
- scrubLoadedSecurityOverrideEnv();
98
- resetDefaultRuntimeEnv();
95
+ loadAndFinalizeEnv();
99
96
  void initOpenTelemetry("composer-web-server");
100
97
  initSentry("maestro-web-server");
101
98
  // Global crash handlers
@@ -1 +1 @@
1
- {"version":3,"file":"web-server.js","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Web server for Maestro - HTTP/SSE API used by the web UI\n */\n\nimport { randomBytes, randomUUID } from \"node:crypto\";\nimport {\n\ttype IncomingMessage,\n\ttype ServerResponse,\n\tcreateServer,\n} from \"node:http\";\nimport type { Socket } from \"node:net\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath, parse } from \"node:url\";\nimport { WebSocketServer } from \"ws\";\nimport type {\n\tActionApprovalService,\n\tApprovalMode,\n} from \"./agent/action-approval.js\";\nimport { createBackgroundTextAgent } from \"./agent/background-agent.js\";\nimport {\n\tBackgroundTaskContextSource,\n\tCurrentDateContextSource,\n\tFrameworkPreferenceContextSource,\n\tGitSnapshotContextSource,\n\tIDEContextSource,\n\tLspContextSource,\n\tTeamMemoryContextSource,\n\tTodoContextSource,\n} from \"./agent/context-providers.js\";\nimport { Agent, ProviderTransport } from \"./agent/index.js\";\nimport type { ToolRetryService } from \"./agent/tool-retry.js\";\nimport type { ClientToolExecutionService } from \"./agent/transport.js\";\nimport type { PlatformToolExecutionBridge } from \"./agent/transport/tool-execution-bridge.js\";\nimport type { AgentTool, ThinkingLevel } from \"./agent/types.js\";\nimport {\n\tdisposeCheckpointService,\n\tinitCheckpointService,\n} from \"./checkpoints/index.js\";\nimport { detectRuntimeConstraintContext } from \"./cli/system-prompt.js\";\nimport { resolveDefaultApprovalMode } from \"./config/default-approval-mode.js\";\nimport type { ComposerConfig } from \"./config/index.js\";\nimport { loadUnifiedContextManifest } from \"./context/manifest.js\";\nimport { initLifecycle, shutdownLifecycle } from \"./lifecycle.js\";\nimport { loadEnv, scrubLoadedSecurityOverrideEnv } from \"./load-env.js\";\nimport { bootstrapLsp } from \"./lsp/bootstrap.js\";\nimport { loadMcpConfig, mcpManager } from \"./mcp/index.js\";\nimport { prefetchOfficialMcpRegistry } from \"./mcp/official-registry.js\";\nimport { getAllMcpTools } from \"./mcp/tool-bridge.js\";\nimport { getMemoryExtractionSystemPrompt } from \"./memory/auto-extraction.js\";\nimport type { RegisteredModel } from \"./models/registry.js\";\nimport {\n\tgetFactoryDefaultModelSelection,\n\treloadModelConfig,\n} from \"./models/registry.js\";\nimport { initOpenTelemetry } from \"./opentelemetry.js\";\nimport { setConfiguredPackageRuntimeContext } from \"./packages/runtime.js\";\nimport { resolveMaestroSystemPrompt } from \"./prompts/system-prompt.js\";\nimport { getEnvVarsForProvider } from \"./providers/api-keys.js\";\nimport {\n\ttype AuthCredential,\n\ttype AuthMode,\n\tcreateAuthResolver,\n} from \"./providers/auth.js\";\nimport { registerBackgroundTaskShutdownHooks } from \"./runtime/background-task-hooks.js\";\nimport { resetDefaultRuntimeEnv } from \"./runtime/env.js\";\nimport { configureSafeMode } from \"./safety/safe-mode.js\";\nimport type {\n\tHostedRunnerContext,\n\tWebServerContext,\n} from \"./server/app-context.js\";\nimport {\n\tHostedRunnerDrainReasonValue,\n\tHostedRunnerDrainStatusValue,\n\tdrainHostedRunnerForShutdown,\n} from \"./server/handlers/hosted-runner-drain.js\";\nimport { createWorkspaceConfigMiddleware } from \"./services/workspace-config/middleware.js\";\nimport { recordApiRequest } from \"./telemetry.js\";\nimport { artifactsClientTool } from \"./tools/artifacts-client.js\";\nimport { askUserClientTool } from \"./tools/ask-user-client.js\";\nimport {\n\tcodingTools,\n\tconductorClientTools,\n\tjetbrainsTools,\n\tvscodeTools,\n} from \"./tools/index.js\";\nimport { javascriptReplClientTool } from \"./tools/javascript-repl-client.js\";\nimport { createLogger } from \"./utils/logger.js\";\nimport { sanitizeWithStaticMask } from \"./utils/secret-redactor.js\";\n\nconst logger = createLogger(\"web-server\");\n\ninterface StartWebServerOptions {\n\thost?: string;\n\thostedRunner?: HostedRunnerContext;\n\tprofileName?: string;\n\tcliOverrides?: Partial<ComposerConfig>;\n\tskipStartupMigration?: boolean;\n}\n\nconst getAuditModule = (() => {\n\tlet promise: Promise<\n\t\ttypeof import(\"./enterprise/audit-integration.js\")\n\t> | null = null;\n\treturn () => {\n\t\tif (!promise) {\n\t\t\tpromise = import(\"./enterprise/audit-integration.js\");\n\t\t}\n\t\treturn promise;\n\t};\n})();\n\nconst getBillingModule = (() => {\n\tlet promise: Promise<typeof import(\"./billing/token-tracker.js\")> | null =\n\t\tnull;\n\treturn () => {\n\t\tif (!promise) {\n\t\t\tpromise = import(\"./billing/token-tracker.js\");\n\t\t}\n\t\treturn promise;\n\t};\n})();\n\nconst getDbModule = (() => {\n\tlet promise: Promise<typeof import(\"./db/client.js\")> | null = null;\n\treturn () => {\n\t\tif (!promise) {\n\t\t\tpromise = import(\"./db/client.js\");\n\t\t}\n\t\treturn promise;\n\t};\n})();\nimport { captureSentryException, flushSentry, initSentry } from \"./sentry.js\";\nimport { WebActionApprovalService } from \"./server/approval-service.js\";\nimport { checkApiAuth, getAuthSubject } from \"./server/authz.js\";\nimport { startAutomationScheduler } from \"./server/automations/scheduler.js\";\nimport { clientToolService } from \"./server/client-tools-service.js\";\nimport { handleChatWebSocket } from \"./server/handlers/chat-ws.js\";\nimport { platformA2APushAuthBoundaryExemptPaths } from \"./server/handlers/platform-a2a-push.js\";\nimport { handleRuntimeAppServerWebSocket } from \"./server/handlers/runtime-app-server-ws.js\";\nimport {\n\tsessionIdPattern,\n\tverifySessionOwnership,\n} from \"./server/handlers/sessions.js\";\nimport { HeadlessRuntimeService } from \"./server/headless-runtime-service.js\";\nimport {\n\tisOverloaded,\n\tlogError,\n\tlogRequest,\n\tlogStartup,\n\tstartStatsCollection,\n\tstopStatsCollection,\n} from \"./server/logger.js\";\nimport { compose } from \"./server/middleware.js\";\nimport {\n\tdetermineModelSelection,\n\tgetRegisteredModelOrThrow,\n} from \"./server/model-selection.js\";\nimport { TieredRateLimiter } from \"./server/rate-limiter.js\";\nimport {\n\ttype RequestContext,\n\tparseTraceParent,\n\trequestContextStorage,\n} from \"./server/request-context.js\";\nimport { requestTracker } from \"./server/request-tracker.js\";\nimport { createRequestHandler } from \"./server/router.js\";\nimport { createRoutes } from \"./server/routes.js\";\nimport { authorizeRuntimeWebSocketSession } from \"./server/runtime-ws-access.js\";\nimport {\n\tcreateAuthMiddleware,\n\tcreateCorsMiddleware,\n\tcreateCsrfMiddleware,\n\tcreateLoadSheddingMiddleware,\n\tcreateRouterMiddleware,\n\tcreateTieredRateLimitMiddleware,\n} from \"./server/server-middlewares.js\";\nimport {\n\tApiError,\n\tauthenticateRequest,\n\tcreateCorsHeaders,\n\tsendJson,\n} from \"./server/server-utils.js\";\nimport { createWebSessionManagerForRequest } from \"./server/session-scope.js\";\nimport { serveStatic } from \"./server/static-server.js\";\nimport { webComposerManagers } from \"./server/web-composer-registry.js\";\nimport { resolveWebRoot } from \"./server/web-root.js\";\n\n// Re-export for existing test imports\nexport { SseSession } from \"./server/sse-session.js\";\n\nloadEnv();\nscrubLoadedSecurityOverrideEnv();\nresetDefaultRuntimeEnv();\nvoid initOpenTelemetry(\"composer-web-server\");\ninitSentry(\"maestro-web-server\");\n\n// Global crash handlers\nfunction registerCrashHandlers() {\n\tprocess.on(\"uncaughtException\", (error) => {\n\t\tlogError(error);\n\t\tcaptureSentryException(error);\n\t\tlogger.error(\"FATAL: Uncaught Exception. Exiting...\");\n\t\tvoid flushSentry().finally(() => process.exit(1));\n\t});\n\n\tprocess.on(\"unhandledRejection\", (reason) => {\n\t\tconst error =\n\t\t\treason instanceof Error\n\t\t\t\t? reason\n\t\t\t\t: new Error(`Unhandled Rejection: ${String(reason)}`);\n\t\tlogError(error);\n\t\tcaptureSentryException(error);\n\t\tlogger.error(\"FATAL: Unhandled Rejection. Exiting...\");\n\t\tvoid flushSentry().finally(() => process.exit(1));\n\t});\n}\n\nasync function validateRuntimeSessionAccess(\n\treq: IncomingMessage,\n\tsessionId: string,\n): Promise<boolean> {\n\tif (!sessionIdPattern.test(sessionId)) {\n\t\treturn false;\n\t}\n\tconst sessionManager = createWebSessionManagerForRequest(req, false);\n\tconst session = await sessionManager.loadSession(sessionId);\n\tif (!session) {\n\t\treturn false;\n\t}\n\treturn verifySessionOwnership(session, getAuthSubject(req));\n}\n\nfunction normalizeAuthMode(value?: string | null): AuthMode {\n\tconst normalized = value?.trim().toLowerCase();\n\tif (normalized === \"auto\" || normalized === \"api-key\") {\n\t\treturn normalized;\n\t}\n\treturn \"auto\";\n}\n\nconst AUTH_MODE = normalizeAuthMode(process.env.MAESTRO_AUTH_MODE);\nconst WEB_API_KEY = process.env.MAESTRO_WEB_API_KEY?.trim() || null;\nconst requireKeyEnv = process.env.MAESTRO_WEB_REQUIRE_KEY;\nconst requireRedisEnv = process.env.MAESTRO_WEB_REQUIRE_REDIS;\nconst AUTH_BOUNDARY_EXEMPT_PATHS = platformA2APushAuthBoundaryExemptPaths();\n// Default: require in normal runtime, but don't break tests unless explicitly opted in.\nconst REQUIRE_WEB_API_KEY =\n\t(requireKeyEnv ?? (process.env.NODE_ENV === \"test\" ? \"0\" : \"1\")) !== \"0\";\nconst REQUIRE_REDIS =\n\t(requireRedisEnv ?? (process.env.NODE_ENV === \"test\" ? \"0\" : \"1\")) !== \"0\";\nconst DEFAULT_WEB_ORIGIN =\n\tprocess.env.MAESTRO_WEB_ORIGIN?.trim() || \"http://localhost:4173\";\n\nfunction normalizeProfileName(profileName?: string | null): string {\n\treturn (\n\t\tprofileName ||\n\t\tprocess.env.MAESTRO_PROFILE ||\n\t\tprocess.env.MAESTRO_WEB_PROFILE ||\n\t\t\"\"\n\t)\n\t\t.trim()\n\t\t.toLowerCase();\n}\n\nfunction isProductionProfile(profileName: string): boolean {\n\treturn (\n\t\tprofileName === \"prod\" ||\n\t\tprofileName === \"production\" ||\n\t\tprofileName === \"secure\" ||\n\t\tprofileName === \"hardened\"\n\t);\n}\n\nconst profileManagedSecurityEnvVars = [\n\t\"MAESTRO_FAIL_UNTAGGED_EGRESS\",\n\t\"MAESTRO_BACKGROUND_SHELL_DISABLE\",\n] as const;\nconst autoEnabledProfileSecurityEnvVars = new Set<string>();\n\nfunction applyProfileSecurityEnvDefaults(prodProfile: boolean): void {\n\tfor (const envKey of profileManagedSecurityEnvVars) {\n\t\tif (prodProfile) {\n\t\t\tif (!process.env[envKey]) {\n\t\t\t\tprocess.env[envKey] = \"1\";\n\t\t\t\tautoEnabledProfileSecurityEnvVars.add(envKey);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tautoEnabledProfileSecurityEnvVars.has(envKey) &&\n\t\t\tprocess.env[envKey] === \"1\"\n\t\t) {\n\t\t\tdelete process.env[envKey];\n\t\t}\n\t\tautoEnabledProfileSecurityEnvVars.delete(envKey);\n\t}\n}\n\nfunction resolveProfileSecurityConfig(profileName?: string | null): {\n\tdefaultApprovalMode: ApprovalMode;\n\tcsrfToken: string | null;\n\trequireCsrf: boolean;\n\tsecurityHeaders: Record<string, string>;\n} {\n\tconst profile = normalizeProfileName(profileName);\n\tconst prodProfile = isProductionProfile(profile);\n\tconst csrfToken = process.env.MAESTRO_WEB_CSRF_TOKEN?.trim() || null;\n\tconst requireCsrf =\n\t\t(prodProfile && process.env.MAESTRO_WEB_REQUIRE_CSRF !== \"0\") ||\n\t\tBoolean(process.env.MAESTRO_WEB_CSRF_TOKEN);\n\n\tapplyProfileSecurityEnvDefaults(prodProfile);\n\tif (requireCsrf && !csrfToken) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_WEB_CSRF_TOKEN is required when CSRF enforcement is enabled (MAESTRO_PROFILE=prod or MAESTRO_WEB_REQUIRE_CSRF=1).\",\n\t\t);\n\t}\n\n\treturn {\n\t\tdefaultApprovalMode: resolveDefaultApprovalMode({\n\t\t\tprofile,\n\t\t\texplicitApprovalMode: process.env.MAESTRO_APPROVAL_MODE,\n\t\t}),\n\t\tcsrfToken,\n\t\trequireCsrf,\n\t\tsecurityHeaders:\n\t\t\tprodProfile || process.env.MAESTRO_WEB_CSP?.trim()\n\t\t\t\t? {\n\t\t\t\t\t\t\"Content-Security-Policy\":\n\t\t\t\t\t\t\tprocess.env.MAESTRO_WEB_CSP ||\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"default-src 'none'\",\n\t\t\t\t\t\t\t\t`connect-src 'self' ${DEFAULT_WEB_ORIGIN}`,\n\t\t\t\t\t\t\t\t\"img-src 'self' data:\",\n\t\t\t\t\t\t\t\t\"style-src 'self' 'unsafe-inline'\",\n\t\t\t\t\t\t\t\t\"script-src 'self'\",\n\t\t\t\t\t\t\t\t\"font-src 'self' data:\",\n\t\t\t\t\t\t\t\t\"frame-ancestors 'none'\",\n\t\t\t\t\t\t\t\t\"base-uri 'self'\",\n\t\t\t\t\t\t\t\t\"form-action 'self'\",\n\t\t\t\t\t\t\t].join(\"; \"),\n\t\t\t\t\t\t\"Referrer-Policy\": \"no-referrer\",\n\t\t\t\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t\t\t\t\"Permissions-Policy\":\n\t\t\t\t\t\t\t\"geolocation=(), microphone=(self), camera=()\",\n\t\t\t\t\t}\n\t\t\t\t: {},\n\t};\n}\n\nlet profileSecurityConfig = resolveProfileSecurityConfig();\nconst STATIC_MAX_AGE =\n\tNumber.parseInt(\n\t\tprocess.env.MAESTRO_STATIC_MAX_AGE ||\n\t\t\t(process.env.NODE_ENV === \"production\" ? \"86400\" : \"60\"),\n\t\t10,\n\t) || 60;\nconst MAX_SSE_CONNECTIONS =\n\tNumber.parseInt(process.env.MAESTRO_MAX_SSE_CONNECTIONS || \"100\", 10) || 100;\nconst REQUEST_TIMEOUT_MS =\n\tNumber.parseInt(process.env.MAESTRO_REQUEST_TIMEOUT_MS || \"60000\", 10) ||\n\t60000;\n\n// Harden defaults for hosted deployments.\nprocess.env.MAESTRO_WEB_SERVER = \"1\";\nif (!process.env.MAESTRO_SAFE_MODE) process.env.MAESTRO_SAFE_MODE = \"1\";\nif (!process.env.MAESTRO_SAFE_REQUIRE_PLAN)\n\tprocess.env.MAESTRO_SAFE_REQUIRE_PLAN = \"1\";\n\n// Parse and validate TRUST_PROXY setting\n// WARNING: Only enable if behind a trusted reverse proxy that sets X-Forwarded-For\nconst trustProxyEnv = process.env.MAESTRO_TRUST_PROXY?.toLowerCase();\nconst TRUST_PROXY = trustProxyEnv === \"true\";\n\n// Number of trusted proxy hops (default 1). Use this to extract the correct client IP\n// when behind multiple proxies (e.g., CDN -> nginx -> app). The IP is read from the\n// right side of X-Forwarded-For, skipping this many trusted proxy IPs.\nconst rawProxyHops = Number.parseInt(\n\tprocess.env.MAESTRO_TRUST_PROXY_HOPS || \"1\",\n\t10,\n);\nconst TRUST_PROXY_HOPS =\n\tNumber.isNaN(rawProxyHops) || rawProxyHops < 1 ? 1 : rawProxyHops;\n\nif (\n\tprocess.env.MAESTRO_TRUST_PROXY_HOPS &&\n\t(Number.isNaN(rawProxyHops) || rawProxyHops < 1)\n) {\n\tlogger.warn(\n\t\t\"Invalid MAESTRO_TRUST_PROXY_HOPS value. Must be a positive integer. Defaulting to 1.\",\n\t\t{ value: process.env.MAESTRO_TRUST_PROXY_HOPS },\n\t);\n}\n\nif (trustProxyEnv && trustProxyEnv !== \"true\" && trustProxyEnv !== \"false\") {\n\tlogger.warn(\n\t\t\"Invalid MAESTRO_TRUST_PROXY value. Must be 'true' or 'false'. Defaulting to false.\",\n\t\t{ value: process.env.MAESTRO_TRUST_PROXY },\n\t);\n}\n\nif (TRUST_PROXY) {\n\tlogger.warn(\n\t\t\"MAESTRO_TRUST_PROXY is enabled. Ensure this server is behind a trusted reverse proxy.\",\n\t);\n}\n\nconst sseLimiter = {\n\tactive: 0,\n\tmax: MAX_SSE_CONNECTIONS,\n\ttryAcquire(): symbol | null {\n\t\tif (this.active >= this.max) return null;\n\t\tthis.active += 1;\n\t\treturn Symbol(\"sse-lease\");\n\t},\n\trelease(token: symbol | null) {\n\t\tif (!token) return;\n\t\tif (this.active > 0) this.active -= 1;\n\t},\n};\n\nconst authResolver = createAuthResolver({\n\tmode: AUTH_MODE,\n});\n\nconst DEFAULT_PROVIDER = \"openai-codex\";\nconst DEFAULT_MODEL_ID = \"gpt-5.5\";\n\n/**\n * Process-local selection store (keeps last chosen model for convenience only).\n * This avoids cross-request mutations elsewhere and can be replaced with\n * per-session selection later without blocking concurrent requests.\n */\nconst modelSelectionStore = {\n\tcurrentKey: null as string | null,\n\tset(model: RegisteredModel) {\n\t\tthis.currentKey = `${model.provider}/${model.id}`;\n\t},\n\tget(): { provider: string; modelId: string } | null {\n\t\tif (!this.currentKey) return null;\n\t\tconst [provider, ...modelParts] = this.currentKey.split(\"/\");\n\t\tconst modelId = modelParts.join(\"/\");\n\t\treturn provider && modelId ? { provider, modelId } : null;\n\t},\n\treset() {\n\t\tthis.currentKey = null;\n\t},\n};\n\n// Exposed for testing/internal use only\nexport const __modelSelectionStore = {\n\tset: (model: RegisteredModel) => modelSelectionStore.set(model),\n\treset: () => modelSelectionStore.reset(),\n\tget: () => modelSelectionStore.get(),\n};\n\nfunction logMissingCredentialHints(provider: string): void {\n\tconst envVars = getEnvVarsForProvider(provider);\n\tconst hints: string[] = [`Missing credentials for provider \"${provider}\".`];\n\tif (envVars.length > 0) {\n\t\thints.push(\n\t\t\t`Populate ${envVars.join(\" or \")} or configure a custom provider secret before retrying.`,\n\t\t);\n\t}\n\tif (provider === \"anthropic\") {\n\t\thints.push(\"Set ANTHROPIC_API_KEY to use Anthropic models.\");\n\t} else if (provider === \"openai\") {\n\t\thints.push(\"Set OPENAI_API_KEY or run `maestro openai login`.\");\n\t} else if (provider === \"openai-codex\") {\n\t\thints.push(\"Run `maestro codex login` to sign in with ChatGPT.\");\n\t}\n\tlogger.warn(hints.join(\" \"), { provider });\n}\n\nfunction buildMissingCredentialMessage(provider: string): string {\n\tlogMissingCredentialHints(provider);\n\treturn `Credentials are required for provider \"${provider}\".`;\n}\n\nasync function ensureCredential(provider: string): Promise<AuthCredential> {\n\tconst credential = await authResolver(provider);\n\tif (credential) {\n\t\treturn credential;\n\t}\n\tthrow new ApiError(401, buildMissingCredentialMessage(provider));\n}\n\nasync function getRegisteredModel(input: string | null | undefined) {\n\tconst selection = determineModelSelection(\n\t\tinput,\n\t\tDEFAULT_PROVIDER,\n\t\tDEFAULT_MODEL_ID,\n\t);\n\tconst registeredModel = getRegisteredModelOrThrow(selection);\n\tif (registeredModel.api !== \"openai-codex-app-server\") {\n\t\tawait ensureCredential(registeredModel.provider);\n\t}\n\t// Do NOT store into the shared modelSelectionStore here: every request\n\t// that resolves a model would overwrite the global, causing the selection\n\t// of one tenant/session to bleed into another request that omits a model\n\t// (fixes #2539 cross-tenant model-selection bleed). The store is written\n\t// only by explicit setModelSelection() calls from UI-driven model picker.\n\treturn registeredModel;\n}\n\nfunction getCurrentSelection(): { provider: string; modelId: string } {\n\tconst stored = modelSelectionStore.get();\n\tif (stored) return stored;\n\tconst factoryDefault = getFactoryDefaultModelSelection();\n\tif (factoryDefault) return factoryDefault;\n\treturn { provider: DEFAULT_PROVIDER, modelId: DEFAULT_MODEL_ID };\n}\n\nasync function createAgent(\n\tregisteredModel: RegisteredModel,\n\tthinkingLevel: ThinkingLevel = \"off\",\n\tapprovalMode: ApprovalMode = profileSecurityConfig.defaultApprovalMode,\n\toptions?: {\n\t\tcwd?: string;\n\t\tpersistedSystemPromptSourcePaths?: string[];\n\t\tenableClientTools?: boolean;\n\t\tuseClientAskUser?: boolean;\n\t\tincludeVscodeTools?: boolean;\n\t\tincludeJetBrainsTools?: boolean;\n\t\tincludeConductorTools?: boolean;\n\t\tapprovalService?: ActionApprovalService;\n\t\tclientToolService?: ClientToolExecutionService;\n\t\ttoolRetryService?: ToolRetryService;\n\t\tplatformToolExecutionBridge?: PlatformToolExecutionBridge | false;\n\t\tprofileName?: string;\n\t\tcliOverrides?: Partial<ComposerConfig>;\n\t},\n): Promise<Agent> {\n\tconst cwd = options?.cwd ?? process.cwd();\n\tconst sessionTokenCounter = async (sessionId: string) => {\n\t\ttry {\n\t\t\tconst { isDatabaseConfigured } = await getDbModule();\n\t\t\tif (!isDatabaseConfigured()) return null;\n\t\t\tconst { getSessionTokenCount } = await getBillingModule();\n\t\t\treturn await getSessionTokenCount(sessionId);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to get session token count\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tconst auditLogger = async (entry: {\n\t\ttoolName: string;\n\t\targs: Record<string, unknown>;\n\t\tstatus: \"success\" | \"failure\" | \"denied\";\n\t\tdurationMs: number;\n\t\terror?: string;\n\t}) => {\n\t\ttry {\n\t\t\tconst { logSensitiveToolExecution } = await getAuditModule();\n\t\t\tawait logSensitiveToolExecution(\n\t\t\t\tentry.toolName,\n\t\t\t\tentry.args,\n\t\t\t\tentry.status,\n\t\t\t\tentry.durationMs,\n\t\t\t\tentry.error,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to log tool execution\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t\ttoolName: entry.toolName,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst transport = new ProviderTransport({\n\t\tgetAuthContext: async (provider: string) => authResolver(provider),\n\t\tcwd,\n\t\tapprovalService:\n\t\t\toptions?.approvalService ?? new WebActionApprovalService(approvalMode),\n\t\ttoolRetryService: options?.toolRetryService,\n\t\tclientToolService:\n\t\t\toptions?.clientToolService ??\n\t\t\t(options?.enableClientTools || options?.useClientAskUser\n\t\t\t\t? clientToolService\n\t\t\t\t: undefined),\n\t\tplatformToolExecutionBridge: options?.platformToolExecutionBridge,\n\t\tsessionTokenCounter,\n\t\tauditLogger,\n\t});\n\n\tconst runtimeConstraints = detectRuntimeConstraintContext({\n\t\tcwd,\n\t\tsandboxMode: process.env.MAESTRO_SANDBOX_MODE ?? null,\n\t});\n\tconst {\n\t\tsystemPrompt,\n\t\tpromptMetadata,\n\t\tpromptContextManifest,\n\t\tsystemPromptSourcePaths: freshSystemPromptSourcePaths,\n\t} = await resolveMaestroSystemPrompt({\n\t\tcwd,\n\t\tprofileName: options?.profileName ?? context.profileName,\n\t\tcliOverrides: options?.cliOverrides ?? context.cliOverrides,\n\t\truntimeConstraints,\n\t});\n\tconst systemPromptSourcePaths = Array.from(\n\t\tnew Set([\n\t\t\t...freshSystemPromptSourcePaths,\n\t\t\t...(options?.persistedSystemPromptSourcePaths ?? []),\n\t\t]),\n\t);\n\tconst unifiedContextManifest = loadUnifiedContextManifest(cwd, {\n\t\tprojectDocs: promptContextManifest,\n\t});\n\n\t// Only include IDE client tools when a compatible client is connected.\n\t// Without a connected client, these tools will hang waiting for responses.\n\tconst mcpTools = getAllMcpTools();\n\tconst baseTools = options?.useClientAskUser\n\t\t? codingTools.map((tool) =>\n\t\t\t\ttool.name === \"ask_user\" ? askUserClientTool : tool,\n\t\t\t)\n\t\t: codingTools;\n\tconst tools: AgentTool[] = [...baseTools, ...mcpTools];\n\tif (options?.includeVscodeTools) {\n\t\ttools.push(...vscodeTools);\n\t}\n\tif (options?.includeJetBrainsTools) {\n\t\ttools.push(...jetbrainsTools);\n\t}\n\tif (options?.enableClientTools) {\n\t\ttools.push(artifactsClientTool);\n\t\ttools.push(javascriptReplClientTool);\n\t\tif (options?.includeConductorTools) {\n\t\t\ttools.push(...conductorClientTools);\n\t\t}\n\t}\n\n\tconst agent = new Agent({\n\t\ttransport,\n\t\tinitialState: {\n\t\t\tsystemPrompt,\n\t\t\tpromptMetadata,\n\t\t\tsystemPromptSourcePaths,\n\t\t\tpromptContextManifest,\n\t\t\tunifiedContextManifest,\n\t\t\tmodel: registeredModel,\n\t\t\tthinkingLevel,\n\t\t\ttools,\n\t\t\tsandboxMode: process.env.MAESTRO_SANDBOX ?? null,\n\t\t\tsandboxEnabled: Boolean(process.env.MAESTRO_SANDBOX),\n\t\t},\n\t\tcontextSources: [\n\t\t\tnew TodoContextSource(),\n\t\t\tnew BackgroundTaskContextSource(),\n\t\t\tnew CurrentDateContextSource(),\n\t\t\tnew GitSnapshotContextSource(cwd),\n\t\t\tnew LspContextSource(cwd),\n\t\t\tnew FrameworkPreferenceContextSource(),\n\t\t\tnew TeamMemoryContextSource(cwd),\n\t\t\tnew IDEContextSource(),\n\t\t],\n\t});\n\n\t// Initialize a session-scoped composer manager for this web agent.\n\twebComposerManagers.initializeAgent(agent, systemPrompt, tools, cwd);\n\n\treturn agent;\n}\n\nasync function createBackgroundAgent(\n\tregisteredModel: RegisteredModel,\n\toptions?: {\n\t\tcwd?: string;\n\t\tsystemPrompt?: string;\n\t},\n): Promise<Agent> {\n\treturn createBackgroundTextAgent({\n\t\tmodel: registeredModel,\n\t\tsystemPrompt: options?.systemPrompt ?? getMemoryExtractionSystemPrompt(),\n\t\tcwd: options?.cwd ?? process.cwd(),\n\t\tgetAuthContext: async (provider: string) => authResolver(provider),\n\t});\n}\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst WEB_ROOT = resolveWebRoot({ baseDir: __dirname });\nconst ALLOWED_ORIGIN = DEFAULT_WEB_ORIGIN;\nconst CORS_HEADERS = createCorsHeaders(ALLOWED_ORIGIN);\n\nexport function isAllowedWebSocketOrigin(\n\torigin: string | string[] | undefined,\n\tallowedOrigin = ALLOWED_ORIGIN,\n): boolean {\n\treturn allowedOrigin === \"*\" || origin === allowedOrigin;\n}\n\nconst headlessRuntimeService = new HeadlessRuntimeService();\n\nconst context: WebServerContext = {\n\tcorsHeaders: CORS_HEADERS,\n\tstaticMaxAge: STATIC_MAX_AGE,\n\tdefaultApprovalMode: profileSecurityConfig.defaultApprovalMode,\n\tdefaultProvider: DEFAULT_PROVIDER,\n\tdefaultModelId: DEFAULT_MODEL_ID,\n\tprofileName: process.env.MAESTRO_PROFILE,\n\tcreateAgent,\n\tcreateBackgroundAgent,\n\tgetRegisteredModel,\n\tgetCurrentSelection,\n\tensureCredential,\n\tsetModelSelection: (model) => modelSelectionStore.set(model),\n\tacquireSse: () => sseLimiter.tryAcquire(),\n\treleaseSse: (token) => sseLimiter.release(token),\n\theadlessRuntimeService,\n\tcomposerManagers: webComposerManagers,\n};\n\nconst routes = createRoutes(context);\n\nconst router = createRequestHandler(\n\troutes,\n\t(req, res, pathname) => {\n\t\tif (pathname.startsWith(\"/api\")) {\n\t\t\tsendJson(res, 404, { error: \"Not found\" }, CORS_HEADERS, req);\n\t\t\treturn;\n\t\t}\n\t\tserveStatic(pathname, req, res, {\n\t\t\twebRoot: WEB_ROOT,\n\t\t\tcorsHeaders: CORS_HEADERS,\n\t\t\tmaxAgeSeconds: STATIC_MAX_AGE,\n\t\t\tsecurityHeaders: profileSecurityConfig.securityHeaders,\n\t\t\tspaFallback: true,\n\t\t});\n\t},\n\tCORS_HEADERS,\n);\n\n// Active request tracking for graceful shutdown and debugging\n// Tiered rate limiter with per-endpoint limits\n// Global: 1000/min, with stricter limits for expensive endpoints\nconst rateLimiter = new TieredRateLimiter();\n\nasync function handleRequest(req: IncomingMessage, res: ServerResponse) {\n\tconst start = performance.now();\n\tconst parsedUrl = parse(req.url || \"/\", true);\n\tconst pathname = parsedUrl.pathname || \"/\";\n\tconst requestId = randomUUID();\n\n\t// Parse W3C Trace Context\n\t// traceparent: 00-traceid-spanid-flags\n\tconst traceParent = req.headers.traceparent as string | undefined;\n\tconst { traceId, parentSpanId } = parseTraceParent(traceParent);\n\tconst spanId = randomBytes(8).toString(\"hex\"); // New span for this service\n\tconst responseTraceParent = `00-${traceId}-${spanId}-01`;\n\tres.setHeader(\"traceparent\", responseTraceParent);\n\tres.setHeader(\"server-timing\", `traceparent;desc=\"${responseTraceParent}\"`);\n\n\t// Attach request to response for easy access in helpers\n\t(res as ServerResponse & { req?: IncomingMessage }).req = req;\n\n\tconst context: RequestContext = {\n\t\trequestId,\n\t\ttraceId,\n\t\tspanId,\n\t\tstartTime: start,\n\t\tmethod: req.method || \"GET\",\n\t\turl: pathname,\n\t};\n\n\t// Set a hard timeout for processing\n\t// Skip for SSE endpoints which are meant to be long-lived\n\tif (!pathname.startsWith(\"/api/chat\")) {\n\t\tconst timeout = setTimeout(() => {\n\t\t\tif (!res.headersSent && !res.writableEnded) {\n\t\t\t\trequestContextStorage.run(context, () => {\n\t\t\t\t\tlogError(`Request timeout for ${pathname} [${requestId}]`);\n\t\t\t\t\tconst duration = performance.now() - start;\n\t\t\t\t\trecordApiRequest(req.method || \"UNKNOWN\", pathname, 504, duration, {\n\t\t\t\t\t\trequestId,\n\t\t\t\t\t\ttraceId,\n\t\t\t\t\t\tspanId,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tres.writeHead(504, {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...CORS_HEADERS,\n\t\t\t\t});\n\t\t\t\tres.end(JSON.stringify({ error: \"Gateway Timeout\" }));\n\t\t\t}\n\t\t}, REQUEST_TIMEOUT_MS);\n\n\t\tconst cleanup = () => {\n\t\t\tclearTimeout(timeout);\n\t\t};\n\n\t\tres.on(\"finish\", cleanup);\n\t\tres.on(\"close\", cleanup);\n\t}\n\n\t// Track request for introspection (Channelz) and graceful shutdown\n\trequestTracker.track(req, {\n\t\tid: requestId,\n\t\tmethod: req.method || \"GET\",\n\t\turl: pathname,\n\t\tstartTime: start,\n\t\tuserAgent: req.headers[\"user-agent\"],\n\t});\n\n\tres.on(\"close\", () => {\n\t\trequestTracker.untrack(req);\n\t});\n\n\t// Await the context storage run to prevent unhandled promise rejections\n\tawait requestContextStorage.run(context, async () => {\n\t\t// Setup logging listener inside context to capture trace/span IDs in closure\n\t\tres.on(\"finish\", () => {\n\t\t\tconst duration = performance.now() - start;\n\t\t\tlogRequest(req, res.statusCode, start);\n\t\t\trecordApiRequest(\n\t\t\t\treq.method || \"UNKNOWN\",\n\t\t\t\tpathname,\n\t\t\t\tres.statusCode,\n\t\t\t\tduration,\n\t\t\t\t{ requestId, traceId, spanId },\n\t\t\t);\n\t\t});\n\n\t\tconst app = compose([\n\t\t\tcreateLoadSheddingMiddleware(CORS_HEADERS),\n\t\t\tcreateTieredRateLimitMiddleware(\n\t\t\t\trateLimiter,\n\t\t\t\tCORS_HEADERS,\n\t\t\t\tTRUST_PROXY,\n\t\t\t\tTRUST_PROXY_HOPS,\n\t\t\t),\n\t\t\tcreateCorsMiddleware(CORS_HEADERS),\n\t\t\tcreateAuthMiddleware(WEB_API_KEY, CORS_HEADERS, REQUIRE_WEB_API_KEY, {\n\t\t\t\texemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,\n\t\t\t\troutes,\n\t\t\t}),\n\t\t\tcreateCsrfMiddleware(\n\t\t\t\tprofileSecurityConfig.csrfToken,\n\t\t\t\tCORS_HEADERS,\n\t\t\t\tprofileSecurityConfig.requireCsrf,\n\t\t\t\t{\n\t\t\t\t\texemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,\n\t\t\t\t},\n\t\t\t),\n\t\t\tcreateWorkspaceConfigMiddleware(CORS_HEADERS),\n\t\t\tcreateRouterMiddleware(router),\n\t\t]);\n\n\t\ttry {\n\t\t\tawait app(req, res, () => {\n\t\t\t\t// This fallback should rarely be reached as the router handles 404s\n\t\t\t\tif (!res.headersSent && !res.writableEnded) {\n\t\t\t\t\tsendJson(res, 404, { error: \"Not found\" }, CORS_HEADERS, req);\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tlogError(error instanceof Error ? error : new Error(String(error)));\n\t\t\tif (!res.headersSent && !res.writableEnded) {\n\t\t\t\tres.writeHead(500, {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...CORS_HEADERS,\n\t\t\t\t});\n\t\t\t\tres.end(JSON.stringify({ error: \"Internal server error\" }));\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport async function startWebServer(\n\tport = 8080,\n\toptions: StartWebServerOptions = {},\n) {\n\tprofileSecurityConfig = resolveProfileSecurityConfig(options.profileName);\n\tcontext.defaultApprovalMode = profileSecurityConfig.defaultApprovalMode;\n\tif (options.hostedRunner) {\n\t\tcontext.hostedRunner = options.hostedRunner;\n\t}\n\tconst resolvedProfileName =\n\t\toptions.profileName ?? process.env.MAESTRO_PROFILE;\n\tif (resolvedProfileName) {\n\t\tcontext.profileName = resolvedProfileName;\n\t} else {\n\t\tdelete context.profileName;\n\t}\n\tcontext.cliOverrides = options.cliOverrides;\n\tsetConfiguredPackageRuntimeContext(process.cwd(), {\n\t\tprofileName: resolvedProfileName,\n\t\tcliOverrides: options.cliOverrides,\n\t});\n\n\tregisterCrashHandlers();\n\tif (!options.skipStartupMigration) {\n\t\tconst { migrate } = await import(\"./db/migrate.js\");\n\t\tconst applied = await migrate();\n\t\tif (applied > 0) {\n\t\t\tlogger.info(\"Startup database migrations completed\", { count: applied });\n\t\t}\n\t}\n\tawait reloadModelConfig();\n\tawait initLifecycle();\n\tstartAutomationScheduler(context);\n\n\t// Initialize enterprise context for user/org tracking (optional, only if enterprise features enabled)\n\tconst { enterpriseContext } = await import(\"./enterprise/context.js\");\n\tawait enterpriseContext.initialize();\n\n\t// Initialize audit integration if enterprise features are available\n\tif (enterpriseContext.isEnterprise()) {\n\t\tconst { initializeAuditIntegration } = await import(\n\t\t\t\"./enterprise/audit-integration.js\"\n\t\t);\n\t\tinitializeAuditIntegration();\n\t}\n\n\t// Initialize enterprise features (RBAC, permissions, default roles) if database is configured\n\tconst { isDatabaseConfigured } = await import(\"./db/client.js\");\n\tif (isDatabaseConfigured()) {\n\t\ttry {\n\t\t\tconst { initializeEnterpriseFeatures } = await import(\n\t\t\t\t\"./api/enterprise-routes.js\"\n\t\t\t);\n\t\t\tawait initializeEnterpriseFeatures();\n\t\t\tlogger.info(\"Enterprise features initialized\");\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to initialize enterprise features\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t});\n\t\t}\n\t}\n\n\t// Configure safe mode settings (e.g., disabling certain tools in sandboxed environments)\n\tconfigureSafeMode(true);\n\n\t// Register shutdown hooks for background tasks to ensure clean cleanup\n\tregisterBackgroundTaskShutdownHooks();\n\n\t// Bootstrap LSP for IDE integration (enables diagnostics, hover, etc.)\n\tawait bootstrapLsp();\n\n\t// Initialize checkpoint service for undo/redo functionality\n\tinitCheckpointService(process.cwd());\n\n\t// Initialize MCP servers\n\ttry {\n\t\tconst mcpConfig = loadMcpConfig(process.cwd(), { includeEnvLimits: true });\n\t\tif (mcpConfig.servers.length > 0) {\n\t\t\tlogger.info(\"Initializing MCP servers...\");\n\t\t\tif (\n\t\t\t\tmcpConfig.servers.some(\n\t\t\t\t\t(server) => server.transport === \"http\" || server.transport === \"sse\",\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tvoid prefetchOfficialMcpRegistry();\n\t\t\t}\n\n\t\t\t// Listen for connection events\n\t\t\tmcpManager.on(\"connected\", (event) => {\n\t\t\t\tlogger.info(`MCP server connected: ${event.name}`);\n\t\t\t});\n\n\t\t\tmcpManager.on(\"disconnected\", (event) => {\n\t\t\t\tlogger.info(`MCP server disconnected: ${event.name}`);\n\t\t\t});\n\n\t\t\tawait mcpManager.configure(mcpConfig);\n\t\t}\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to initialize MCP servers\", {\n\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t),\n\t\t});\n\t}\n\n\tif (REQUIRE_WEB_API_KEY && !WEB_API_KEY) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_WEB_API_KEY is required. Set MAESTRO_WEB_REQUIRE_KEY=0 to allow unauthenticated APIs for local-only testing.\",\n\t\t);\n\t}\n\n\tif (REQUIRE_REDIS && !process.env.MAESTRO_REDIS_URL) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_REDIS_URL must be set for shared rate limiting. Set MAESTRO_WEB_REQUIRE_REDIS=0 to bypass in single-node dev only.\",\n\t\t);\n\t}\n\n\tconst server = createServer(handleRequest);\n\tconst wsMaxPayload =\n\t\tNumber.parseInt(process.env.MAESTRO_WS_MAX_PAYLOAD || \"1048576\", 10) ||\n\t\t1048576;\n\tconst wsServer = new WebSocketServer({\n\t\tnoServer: true,\n\t\tmaxPayload: wsMaxPayload,\n\t});\n\tconst sockets = new Set<Socket>();\n\tlet shuttingDown = false;\n\tlet drainTimeout: NodeJS.Timeout | null = null;\n\tlet drainInterval: NodeJS.Timeout | null = null;\n\n\tserver.on(\"connection\", (socket) => {\n\t\tsockets.add(socket);\n\t\tsocket.on(\"close\", () => {\n\t\t\tsockets.delete(socket);\n\t\t});\n\t});\n\n\tserver.on(\"upgrade\", async (req, socket, head) => {\n\t\tconst url = new URL(\n\t\t\treq.url || \"/\",\n\t\t\t`http://${req.headers.host || \"localhost\"}`,\n\t\t);\n\t\tif (url.pathname !== \"/api/chat/ws\" && url.pathname !== \"/api/runtime/ws\") {\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isAllowedWebSocketOrigin(req.headers.origin)) {\n\t\t\tsocket.write(\"HTTP/1.1 403 Forbidden\\r\\n\\r\\n\");\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst auth = await checkApiAuth(req);\n\t\tif (!auth.ok) {\n\t\t\tsocket.write(\"HTTP/1.1 401 Unauthorized\\r\\n\\r\\n\");\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\n\t\tlet runtimeSessionId: string | undefined;\n\t\tif (url.pathname === \"/api/runtime/ws\") {\n\t\t\tconst authorization = await authorizeRuntimeWebSocketSession({\n\t\t\t\treq,\n\t\t\t\tsocket,\n\t\t\t\trequestedSessionId: url.searchParams.get(\"sessionId\"),\n\t\t\t\tvalidateSessionAccess: validateRuntimeSessionAccess,\n\t\t\t\tlogAccessError: logError,\n\t\t\t});\n\t\t\tif (authorization === null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\truntimeSessionId = authorization;\n\t\t}\n\n\t\twsServer.handleUpgrade(req, socket, head, (ws) => {\n\t\t\tif (url.pathname === \"/api/runtime/ws\") {\n\t\t\t\thandleRuntimeAppServerWebSocket(ws, {\n\t\t\t\t\tsessionId: runtimeSessionId,\n\t\t\t\t\tvalidateSessionAccess: (sessionId) =>\n\t\t\t\t\t\tvalidateRuntimeSessionAccess(req, sessionId),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleChatWebSocket(ws, req, context);\n\t\t});\n\t});\n\n\tconst onListening = () => {\n\t\tlogStartup(port);\n\t\tif (context.hostedRunner) {\n\t\t\tlogger.info(\"Hosted runner mode enabled\", {\n\t\t\t\trunnerSessionId: context.hostedRunner.runnerSessionId,\n\t\t\t\tworkspaceRoot: context.hostedRunner.workspaceRoot,\n\t\t\t\tsnapshotRoot: context.hostedRunner.snapshotRoot,\n\t\t\t\tworkspaceId: context.hostedRunner.workspaceId,\n\t\t\t\tagentRunId: context.hostedRunner.agentRunId,\n\t\t\t\tlistenHost: options.host,\n\t\t\t\tlistenPort: port,\n\t\t\t});\n\t\t}\n\t\tstartStatsCollection();\n\t};\n\tif (options.host) {\n\t\tserver.listen(port, options.host, onListening);\n\t} else {\n\t\tserver.listen(port, onListening);\n\t}\n\n\t// Don't register signal handlers in test mode - vitest manages process lifecycle\n\tconst isTestMode =\n\t\tprocess.env.VITEST === \"true\" || process.env.NODE_ENV === \"test\";\n\tif (!isTestMode) {\n\t\tconst beginShutdown = async (signal: NodeJS.Signals) => {\n\t\t\tif (shuttingDown) return;\n\t\t\tshuttingDown = true;\n\t\t\tif (context.hostedRunner) {\n\t\t\t\tif (context.hostedRunner.draining) {\n\t\t\t\t\tlogger.info(\"Hosted runner already draining before shutdown\", {\n\t\t\t\t\t\trunnerSessionId: context.hostedRunner.runnerSessionId,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst drainResult = await drainHostedRunnerForShutdown(context, {\n\t\t\t\t\t\t\treason: HostedRunnerDrainReasonValue.ProcessShutdown,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (drainResult) {\n\t\t\t\t\t\t\tconst log =\n\t\t\t\t\t\t\t\tdrainResult.status === HostedRunnerDrainStatusValue.Interrupted\n\t\t\t\t\t\t\t\t\t? logger.warn.bind(logger)\n\t\t\t\t\t\t\t\t\t: logger.info.bind(logger);\n\t\t\t\t\t\t\tlog(\"Hosted runner drained during graceful shutdown\", {\n\t\t\t\t\t\t\t\trunnerSessionId: drainResult.runner_session_id,\n\t\t\t\t\t\t\t\tstatus: drainResult.status,\n\t\t\t\t\t\t\t\tmanifestPath: drainResult.manifest_path,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tcontext.hostedRunner.draining = true;\n\t\t\t\t\t\tlogger.warn(\"Hosted runner shutdown drain failed\", {\n\t\t\t\t\t\t\trunnerSessionId: context.hostedRunner.runnerSessionId,\n\t\t\t\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.info(`${signal} received. Starting graceful shutdown...`);\n\t\t\tstopStatsCollection();\n\t\t\tdisposeCheckpointService();\n\t\t\t// End enterprise session if initialized\n\t\t\tconst { enterpriseContext } = await import(\"./enterprise/context.js\");\n\t\t\tif (enterpriseContext.isEnterprise()) {\n\t\t\t\tenterpriseContext.endSession();\n\t\t\t}\n\t\t\tawait shutdownLifecycle();\n\n\t\t\t// Stop accepting new connections\n\t\t\tserver.close();\n\n\t\t\t// Drain existing requests\n\t\t\tconst activeCount = requestTracker.getCount();\n\t\t\tif (activeCount > 0) {\n\t\t\t\tlogger.info(\"Waiting for active requests to complete...\", {\n\t\t\t\t\tactiveCount,\n\t\t\t\t});\n\t\t\t\tdrainTimeout = setTimeout(() => {\n\t\t\t\t\tlogger.warn(\"Drain timeout reached. Forcing shutdown...\");\n\t\t\t\t\tfor (const socket of sockets) {\n\t\t\t\t\t\tsocket.destroy();\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}, 10000); // 10s drain timeout\n\n\t\t\t\t// Poll for drain\n\t\t\t\tdrainInterval = setInterval(() => {\n\t\t\t\t\tif (requestTracker.getCount() === 0) {\n\t\t\t\t\t\tif (drainInterval) clearInterval(drainInterval);\n\t\t\t\t\t\tif (drainTimeout) clearTimeout(drainTimeout);\n\t\t\t\t\t\tlogger.info(\"All requests completed. Exiting.\");\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\t\t\t\t}, 100);\n\t\t\t} else {\n\t\t\t\tlogger.info(\"No active requests. Exiting.\");\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t};\n\t\tprocess.on(\"SIGINT\", () => {\n\t\t\tvoid beginShutdown(\"SIGINT\");\n\t\t});\n\t\tprocess.on(\"SIGTERM\", () => {\n\t\t\tvoid beginShutdown(\"SIGTERM\");\n\t\t});\n\t}\n\n\treturn server;\n}\n\n// Run if called directly\nif (process.argv[1] && __filename === resolve(process.argv[1])) {\n\tconst port = Number.parseInt(process.env.PORT || \"8080\", 10);\n\tstartWebServer(port);\n}\n"]}
1
+ {"version":3,"file":"web-server.js","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Web server for Maestro - HTTP/SSE API used by the web UI\n */\n\nimport { randomBytes, randomUUID } from \"node:crypto\";\nimport {\n\ttype IncomingMessage,\n\ttype ServerResponse,\n\tcreateServer,\n} from \"node:http\";\nimport type { Socket } from \"node:net\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath, parse } from \"node:url\";\nimport { WebSocketServer } from \"ws\";\nimport type {\n\tActionApprovalService,\n\tApprovalMode,\n} from \"./agent/action-approval.js\";\nimport { createBackgroundTextAgent } from \"./agent/background-agent.js\";\nimport {\n\tBackgroundTaskContextSource,\n\tCurrentDateContextSource,\n\tFrameworkPreferenceContextSource,\n\tGitSnapshotContextSource,\n\tIDEContextSource,\n\tLspContextSource,\n\tTeamMemoryContextSource,\n\tTodoContextSource,\n} from \"./agent/context-providers.js\";\nimport { Agent, ProviderTransport } from \"./agent/index.js\";\nimport type { ToolRetryService } from \"./agent/tool-retry.js\";\nimport type { ClientToolExecutionService } from \"./agent/transport.js\";\nimport type { PlatformToolExecutionBridge } from \"./agent/transport/tool-execution-bridge.js\";\nimport type { AgentTool, ThinkingLevel } from \"./agent/types.js\";\nimport {\n\tdisposeCheckpointService,\n\tinitCheckpointService,\n} from \"./checkpoints/index.js\";\nimport { detectRuntimeConstraintContext } from \"./cli/system-prompt.js\";\nimport { resolveDefaultApprovalMode } from \"./config/default-approval-mode.js\";\nimport type { ComposerConfig } from \"./config/index.js\";\nimport { loadUnifiedContextManifest } from \"./context/manifest.js\";\nimport { initLifecycle, shutdownLifecycle } from \"./lifecycle.js\";\nimport { loadAndFinalizeEnv } from \"./load-env.js\";\nimport { bootstrapLsp } from \"./lsp/bootstrap.js\";\nimport { loadMcpConfig, mcpManager } from \"./mcp/index.js\";\nimport { prefetchOfficialMcpRegistry } from \"./mcp/official-registry.js\";\nimport { getAllMcpTools } from \"./mcp/tool-bridge.js\";\nimport { getMemoryExtractionSystemPrompt } from \"./memory/auto-extraction.js\";\nimport type { RegisteredModel } from \"./models/registry.js\";\nimport {\n\tgetFactoryDefaultModelSelection,\n\treloadModelConfig,\n} from \"./models/registry.js\";\nimport { initOpenTelemetry } from \"./opentelemetry.js\";\nimport { setConfiguredPackageRuntimeContext } from \"./packages/runtime.js\";\nimport { resolveMaestroSystemPrompt } from \"./prompts/system-prompt.js\";\nimport { getEnvVarsForProvider } from \"./providers/api-keys.js\";\nimport {\n\ttype AuthCredential,\n\ttype AuthMode,\n\tcreateAuthResolver,\n} from \"./providers/auth.js\";\nimport { registerBackgroundTaskShutdownHooks } from \"./runtime/background-task-hooks.js\";\nimport { configureSafeMode } from \"./safety/safe-mode.js\";\nimport type {\n\tHostedRunnerContext,\n\tWebServerContext,\n} from \"./server/app-context.js\";\nimport {\n\tHostedRunnerDrainReasonValue,\n\tHostedRunnerDrainStatusValue,\n\tdrainHostedRunnerForShutdown,\n} from \"./server/handlers/hosted-runner-drain.js\";\nimport { createWorkspaceConfigMiddleware } from \"./services/workspace-config/middleware.js\";\nimport { recordApiRequest } from \"./telemetry.js\";\nimport { artifactsClientTool } from \"./tools/artifacts-client.js\";\nimport { askUserClientTool } from \"./tools/ask-user-client.js\";\nimport {\n\tcodingTools,\n\tconductorClientTools,\n\tjetbrainsTools,\n\tvscodeTools,\n} from \"./tools/index.js\";\nimport { javascriptReplClientTool } from \"./tools/javascript-repl-client.js\";\nimport { createLogger } from \"./utils/logger.js\";\nimport { sanitizeWithStaticMask } from \"./utils/secret-redactor.js\";\n\nconst logger = createLogger(\"web-server\");\n\ninterface StartWebServerOptions {\n\thost?: string;\n\thostedRunner?: HostedRunnerContext;\n\tprofileName?: string;\n\tcliOverrides?: Partial<ComposerConfig>;\n\tskipStartupMigration?: boolean;\n}\n\nconst getAuditModule = (() => {\n\tlet promise: Promise<\n\t\ttypeof import(\"./enterprise/audit-integration.js\")\n\t> | null = null;\n\treturn () => {\n\t\tif (!promise) {\n\t\t\tpromise = import(\"./enterprise/audit-integration.js\");\n\t\t}\n\t\treturn promise;\n\t};\n})();\n\nconst getBillingModule = (() => {\n\tlet promise: Promise<typeof import(\"./billing/token-tracker.js\")> | null =\n\t\tnull;\n\treturn () => {\n\t\tif (!promise) {\n\t\t\tpromise = import(\"./billing/token-tracker.js\");\n\t\t}\n\t\treturn promise;\n\t};\n})();\n\nconst getDbModule = (() => {\n\tlet promise: Promise<typeof import(\"./db/client.js\")> | null = null;\n\treturn () => {\n\t\tif (!promise) {\n\t\t\tpromise = import(\"./db/client.js\");\n\t\t}\n\t\treturn promise;\n\t};\n})();\nimport { captureSentryException, flushSentry, initSentry } from \"./sentry.js\";\nimport { WebActionApprovalService } from \"./server/approval-service.js\";\nimport { checkApiAuth, getAuthSubject } from \"./server/authz.js\";\nimport { startAutomationScheduler } from \"./server/automations/scheduler.js\";\nimport { clientToolService } from \"./server/client-tools-service.js\";\nimport { handleChatWebSocket } from \"./server/handlers/chat-ws.js\";\nimport { platformA2APushAuthBoundaryExemptPaths } from \"./server/handlers/platform-a2a-push.js\";\nimport { handleRuntimeAppServerWebSocket } from \"./server/handlers/runtime-app-server-ws.js\";\nimport {\n\tsessionIdPattern,\n\tverifySessionOwnership,\n} from \"./server/handlers/sessions.js\";\nimport { HeadlessRuntimeService } from \"./server/headless-runtime-service.js\";\nimport {\n\tisOverloaded,\n\tlogError,\n\tlogRequest,\n\tlogStartup,\n\tstartStatsCollection,\n\tstopStatsCollection,\n} from \"./server/logger.js\";\nimport { compose } from \"./server/middleware.js\";\nimport {\n\tdetermineModelSelection,\n\tgetRegisteredModelOrThrow,\n} from \"./server/model-selection.js\";\nimport { TieredRateLimiter } from \"./server/rate-limiter.js\";\nimport {\n\ttype RequestContext,\n\tparseTraceParent,\n\trequestContextStorage,\n} from \"./server/request-context.js\";\nimport { requestTracker } from \"./server/request-tracker.js\";\nimport { createRequestHandler } from \"./server/router.js\";\nimport { createRoutes } from \"./server/routes.js\";\nimport { authorizeRuntimeWebSocketSession } from \"./server/runtime-ws-access.js\";\nimport {\n\tcreateAuthMiddleware,\n\tcreateCorsMiddleware,\n\tcreateCsrfMiddleware,\n\tcreateLoadSheddingMiddleware,\n\tcreateRouterMiddleware,\n\tcreateTieredRateLimitMiddleware,\n} from \"./server/server-middlewares.js\";\nimport {\n\tApiError,\n\tauthenticateRequest,\n\tcreateCorsHeaders,\n\tsendJson,\n} from \"./server/server-utils.js\";\nimport { createWebSessionManagerForRequest } from \"./server/session-scope.js\";\nimport { serveStatic } from \"./server/static-server.js\";\nimport { webComposerManagers } from \"./server/web-composer-registry.js\";\nimport { resolveWebRoot } from \"./server/web-root.js\";\n\n// Re-export for existing test imports\nexport { SseSession } from \"./server/sse-session.js\";\n\nloadAndFinalizeEnv();\nvoid initOpenTelemetry(\"composer-web-server\");\ninitSentry(\"maestro-web-server\");\n\n// Global crash handlers\nfunction registerCrashHandlers() {\n\tprocess.on(\"uncaughtException\", (error) => {\n\t\tlogError(error);\n\t\tcaptureSentryException(error);\n\t\tlogger.error(\"FATAL: Uncaught Exception. Exiting...\");\n\t\tvoid flushSentry().finally(() => process.exit(1));\n\t});\n\n\tprocess.on(\"unhandledRejection\", (reason) => {\n\t\tconst error =\n\t\t\treason instanceof Error\n\t\t\t\t? reason\n\t\t\t\t: new Error(`Unhandled Rejection: ${String(reason)}`);\n\t\tlogError(error);\n\t\tcaptureSentryException(error);\n\t\tlogger.error(\"FATAL: Unhandled Rejection. Exiting...\");\n\t\tvoid flushSentry().finally(() => process.exit(1));\n\t});\n}\n\nasync function validateRuntimeSessionAccess(\n\treq: IncomingMessage,\n\tsessionId: string,\n): Promise<boolean> {\n\tif (!sessionIdPattern.test(sessionId)) {\n\t\treturn false;\n\t}\n\tconst sessionManager = createWebSessionManagerForRequest(req, false);\n\tconst session = await sessionManager.loadSession(sessionId);\n\tif (!session) {\n\t\treturn false;\n\t}\n\treturn verifySessionOwnership(session, getAuthSubject(req));\n}\n\nfunction normalizeAuthMode(value?: string | null): AuthMode {\n\tconst normalized = value?.trim().toLowerCase();\n\tif (normalized === \"auto\" || normalized === \"api-key\") {\n\t\treturn normalized;\n\t}\n\treturn \"auto\";\n}\n\nconst AUTH_MODE = normalizeAuthMode(process.env.MAESTRO_AUTH_MODE);\nconst WEB_API_KEY = process.env.MAESTRO_WEB_API_KEY?.trim() || null;\nconst requireKeyEnv = process.env.MAESTRO_WEB_REQUIRE_KEY;\nconst requireRedisEnv = process.env.MAESTRO_WEB_REQUIRE_REDIS;\nconst AUTH_BOUNDARY_EXEMPT_PATHS = platformA2APushAuthBoundaryExemptPaths();\n// Default: require in normal runtime, but don't break tests unless explicitly opted in.\nconst REQUIRE_WEB_API_KEY =\n\t(requireKeyEnv ?? (process.env.NODE_ENV === \"test\" ? \"0\" : \"1\")) !== \"0\";\nconst REQUIRE_REDIS =\n\t(requireRedisEnv ?? (process.env.NODE_ENV === \"test\" ? \"0\" : \"1\")) !== \"0\";\nconst DEFAULT_WEB_ORIGIN =\n\tprocess.env.MAESTRO_WEB_ORIGIN?.trim() || \"http://localhost:4173\";\n\nfunction normalizeProfileName(profileName?: string | null): string {\n\treturn (\n\t\tprofileName ||\n\t\tprocess.env.MAESTRO_PROFILE ||\n\t\tprocess.env.MAESTRO_WEB_PROFILE ||\n\t\t\"\"\n\t)\n\t\t.trim()\n\t\t.toLowerCase();\n}\n\nfunction isProductionProfile(profileName: string): boolean {\n\treturn (\n\t\tprofileName === \"prod\" ||\n\t\tprofileName === \"production\" ||\n\t\tprofileName === \"secure\" ||\n\t\tprofileName === \"hardened\"\n\t);\n}\n\nconst profileManagedSecurityEnvVars = [\n\t\"MAESTRO_FAIL_UNTAGGED_EGRESS\",\n\t\"MAESTRO_BACKGROUND_SHELL_DISABLE\",\n] as const;\nconst autoEnabledProfileSecurityEnvVars = new Set<string>();\n\nfunction applyProfileSecurityEnvDefaults(prodProfile: boolean): void {\n\tfor (const envKey of profileManagedSecurityEnvVars) {\n\t\tif (prodProfile) {\n\t\t\tif (!process.env[envKey]) {\n\t\t\t\tprocess.env[envKey] = \"1\";\n\t\t\t\tautoEnabledProfileSecurityEnvVars.add(envKey);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tautoEnabledProfileSecurityEnvVars.has(envKey) &&\n\t\t\tprocess.env[envKey] === \"1\"\n\t\t) {\n\t\t\tdelete process.env[envKey];\n\t\t}\n\t\tautoEnabledProfileSecurityEnvVars.delete(envKey);\n\t}\n}\n\nfunction resolveProfileSecurityConfig(profileName?: string | null): {\n\tdefaultApprovalMode: ApprovalMode;\n\tcsrfToken: string | null;\n\trequireCsrf: boolean;\n\tsecurityHeaders: Record<string, string>;\n} {\n\tconst profile = normalizeProfileName(profileName);\n\tconst prodProfile = isProductionProfile(profile);\n\tconst csrfToken = process.env.MAESTRO_WEB_CSRF_TOKEN?.trim() || null;\n\tconst requireCsrf =\n\t\t(prodProfile && process.env.MAESTRO_WEB_REQUIRE_CSRF !== \"0\") ||\n\t\tBoolean(process.env.MAESTRO_WEB_CSRF_TOKEN);\n\n\tapplyProfileSecurityEnvDefaults(prodProfile);\n\tif (requireCsrf && !csrfToken) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_WEB_CSRF_TOKEN is required when CSRF enforcement is enabled (MAESTRO_PROFILE=prod or MAESTRO_WEB_REQUIRE_CSRF=1).\",\n\t\t);\n\t}\n\n\treturn {\n\t\tdefaultApprovalMode: resolveDefaultApprovalMode({\n\t\t\tprofile,\n\t\t\texplicitApprovalMode: process.env.MAESTRO_APPROVAL_MODE,\n\t\t}),\n\t\tcsrfToken,\n\t\trequireCsrf,\n\t\tsecurityHeaders:\n\t\t\tprodProfile || process.env.MAESTRO_WEB_CSP?.trim()\n\t\t\t\t? {\n\t\t\t\t\t\t\"Content-Security-Policy\":\n\t\t\t\t\t\t\tprocess.env.MAESTRO_WEB_CSP ||\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"default-src 'none'\",\n\t\t\t\t\t\t\t\t`connect-src 'self' ${DEFAULT_WEB_ORIGIN}`,\n\t\t\t\t\t\t\t\t\"img-src 'self' data:\",\n\t\t\t\t\t\t\t\t\"style-src 'self' 'unsafe-inline'\",\n\t\t\t\t\t\t\t\t\"script-src 'self'\",\n\t\t\t\t\t\t\t\t\"font-src 'self' data:\",\n\t\t\t\t\t\t\t\t\"frame-ancestors 'none'\",\n\t\t\t\t\t\t\t\t\"base-uri 'self'\",\n\t\t\t\t\t\t\t\t\"form-action 'self'\",\n\t\t\t\t\t\t\t].join(\"; \"),\n\t\t\t\t\t\t\"Referrer-Policy\": \"no-referrer\",\n\t\t\t\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t\t\t\t\"Permissions-Policy\":\n\t\t\t\t\t\t\t\"geolocation=(), microphone=(self), camera=()\",\n\t\t\t\t\t}\n\t\t\t\t: {},\n\t};\n}\n\nlet profileSecurityConfig = resolveProfileSecurityConfig();\nconst STATIC_MAX_AGE =\n\tNumber.parseInt(\n\t\tprocess.env.MAESTRO_STATIC_MAX_AGE ||\n\t\t\t(process.env.NODE_ENV === \"production\" ? \"86400\" : \"60\"),\n\t\t10,\n\t) || 60;\nconst MAX_SSE_CONNECTIONS =\n\tNumber.parseInt(process.env.MAESTRO_MAX_SSE_CONNECTIONS || \"100\", 10) || 100;\nconst REQUEST_TIMEOUT_MS =\n\tNumber.parseInt(process.env.MAESTRO_REQUEST_TIMEOUT_MS || \"60000\", 10) ||\n\t60000;\n\n// Harden defaults for hosted deployments.\nprocess.env.MAESTRO_WEB_SERVER = \"1\";\nif (!process.env.MAESTRO_SAFE_MODE) process.env.MAESTRO_SAFE_MODE = \"1\";\nif (!process.env.MAESTRO_SAFE_REQUIRE_PLAN)\n\tprocess.env.MAESTRO_SAFE_REQUIRE_PLAN = \"1\";\n\n// Parse and validate TRUST_PROXY setting\n// WARNING: Only enable if behind a trusted reverse proxy that sets X-Forwarded-For\nconst trustProxyEnv = process.env.MAESTRO_TRUST_PROXY?.toLowerCase();\nconst TRUST_PROXY = trustProxyEnv === \"true\";\n\n// Number of trusted proxy hops (default 1). Use this to extract the correct client IP\n// when behind multiple proxies (e.g., CDN -> nginx -> app). The IP is read from the\n// right side of X-Forwarded-For, skipping this many trusted proxy IPs.\nconst rawProxyHops = Number.parseInt(\n\tprocess.env.MAESTRO_TRUST_PROXY_HOPS || \"1\",\n\t10,\n);\nconst TRUST_PROXY_HOPS =\n\tNumber.isNaN(rawProxyHops) || rawProxyHops < 1 ? 1 : rawProxyHops;\n\nif (\n\tprocess.env.MAESTRO_TRUST_PROXY_HOPS &&\n\t(Number.isNaN(rawProxyHops) || rawProxyHops < 1)\n) {\n\tlogger.warn(\n\t\t\"Invalid MAESTRO_TRUST_PROXY_HOPS value. Must be a positive integer. Defaulting to 1.\",\n\t\t{ value: process.env.MAESTRO_TRUST_PROXY_HOPS },\n\t);\n}\n\nif (trustProxyEnv && trustProxyEnv !== \"true\" && trustProxyEnv !== \"false\") {\n\tlogger.warn(\n\t\t\"Invalid MAESTRO_TRUST_PROXY value. Must be 'true' or 'false'. Defaulting to false.\",\n\t\t{ value: process.env.MAESTRO_TRUST_PROXY },\n\t);\n}\n\nif (TRUST_PROXY) {\n\tlogger.warn(\n\t\t\"MAESTRO_TRUST_PROXY is enabled. Ensure this server is behind a trusted reverse proxy.\",\n\t);\n}\n\nconst sseLimiter = {\n\tactive: 0,\n\tmax: MAX_SSE_CONNECTIONS,\n\ttryAcquire(): symbol | null {\n\t\tif (this.active >= this.max) return null;\n\t\tthis.active += 1;\n\t\treturn Symbol(\"sse-lease\");\n\t},\n\trelease(token: symbol | null) {\n\t\tif (!token) return;\n\t\tif (this.active > 0) this.active -= 1;\n\t},\n};\n\nconst authResolver = createAuthResolver({\n\tmode: AUTH_MODE,\n});\n\nconst DEFAULT_PROVIDER = \"openai-codex\";\nconst DEFAULT_MODEL_ID = \"gpt-5.5\";\n\n/**\n * Process-local selection store (keeps last chosen model for convenience only).\n * This avoids cross-request mutations elsewhere and can be replaced with\n * per-session selection later without blocking concurrent requests.\n */\nconst modelSelectionStore = {\n\tcurrentKey: null as string | null,\n\tset(model: RegisteredModel) {\n\t\tthis.currentKey = `${model.provider}/${model.id}`;\n\t},\n\tget(): { provider: string; modelId: string } | null {\n\t\tif (!this.currentKey) return null;\n\t\tconst [provider, ...modelParts] = this.currentKey.split(\"/\");\n\t\tconst modelId = modelParts.join(\"/\");\n\t\treturn provider && modelId ? { provider, modelId } : null;\n\t},\n\treset() {\n\t\tthis.currentKey = null;\n\t},\n};\n\n// Exposed for testing/internal use only\nexport const __modelSelectionStore = {\n\tset: (model: RegisteredModel) => modelSelectionStore.set(model),\n\treset: () => modelSelectionStore.reset(),\n\tget: () => modelSelectionStore.get(),\n};\n\nfunction logMissingCredentialHints(provider: string): void {\n\tconst envVars = getEnvVarsForProvider(provider);\n\tconst hints: string[] = [`Missing credentials for provider \"${provider}\".`];\n\tif (envVars.length > 0) {\n\t\thints.push(\n\t\t\t`Populate ${envVars.join(\" or \")} or configure a custom provider secret before retrying.`,\n\t\t);\n\t}\n\tif (provider === \"anthropic\") {\n\t\thints.push(\"Set ANTHROPIC_API_KEY to use Anthropic models.\");\n\t} else if (provider === \"openai\") {\n\t\thints.push(\"Set OPENAI_API_KEY or run `maestro openai login`.\");\n\t} else if (provider === \"openai-codex\") {\n\t\thints.push(\"Run `maestro codex login` to sign in with ChatGPT.\");\n\t}\n\tlogger.warn(hints.join(\" \"), { provider });\n}\n\nfunction buildMissingCredentialMessage(provider: string): string {\n\tlogMissingCredentialHints(provider);\n\treturn `Credentials are required for provider \"${provider}\".`;\n}\n\nasync function ensureCredential(provider: string): Promise<AuthCredential> {\n\tconst credential = await authResolver(provider);\n\tif (credential) {\n\t\treturn credential;\n\t}\n\tthrow new ApiError(401, buildMissingCredentialMessage(provider));\n}\n\nasync function getRegisteredModel(input: string | null | undefined) {\n\tconst selection = determineModelSelection(\n\t\tinput,\n\t\tDEFAULT_PROVIDER,\n\t\tDEFAULT_MODEL_ID,\n\t);\n\tconst registeredModel = getRegisteredModelOrThrow(selection);\n\tif (registeredModel.api !== \"openai-codex-app-server\") {\n\t\tawait ensureCredential(registeredModel.provider);\n\t}\n\t// Do NOT store into the shared modelSelectionStore here: every request\n\t// that resolves a model would overwrite the global, causing the selection\n\t// of one tenant/session to bleed into another request that omits a model\n\t// (fixes #2539 cross-tenant model-selection bleed). The store is written\n\t// only by explicit setModelSelection() calls from UI-driven model picker.\n\treturn registeredModel;\n}\n\nfunction getCurrentSelection(): { provider: string; modelId: string } {\n\tconst stored = modelSelectionStore.get();\n\tif (stored) return stored;\n\tconst factoryDefault = getFactoryDefaultModelSelection();\n\tif (factoryDefault) return factoryDefault;\n\treturn { provider: DEFAULT_PROVIDER, modelId: DEFAULT_MODEL_ID };\n}\n\nasync function createAgent(\n\tregisteredModel: RegisteredModel,\n\tthinkingLevel: ThinkingLevel = \"off\",\n\tapprovalMode: ApprovalMode = profileSecurityConfig.defaultApprovalMode,\n\toptions?: {\n\t\tcwd?: string;\n\t\tpersistedSystemPromptSourcePaths?: string[];\n\t\tenableClientTools?: boolean;\n\t\tuseClientAskUser?: boolean;\n\t\tincludeVscodeTools?: boolean;\n\t\tincludeJetBrainsTools?: boolean;\n\t\tincludeConductorTools?: boolean;\n\t\tapprovalService?: ActionApprovalService;\n\t\tclientToolService?: ClientToolExecutionService;\n\t\ttoolRetryService?: ToolRetryService;\n\t\tplatformToolExecutionBridge?: PlatformToolExecutionBridge | false;\n\t\tprofileName?: string;\n\t\tcliOverrides?: Partial<ComposerConfig>;\n\t},\n): Promise<Agent> {\n\tconst cwd = options?.cwd ?? process.cwd();\n\tconst sessionTokenCounter = async (sessionId: string) => {\n\t\ttry {\n\t\t\tconst { isDatabaseConfigured } = await getDbModule();\n\t\t\tif (!isDatabaseConfigured()) return null;\n\t\t\tconst { getSessionTokenCount } = await getBillingModule();\n\t\t\treturn await getSessionTokenCount(sessionId);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to get session token count\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tconst auditLogger = async (entry: {\n\t\ttoolName: string;\n\t\targs: Record<string, unknown>;\n\t\tstatus: \"success\" | \"failure\" | \"denied\";\n\t\tdurationMs: number;\n\t\terror?: string;\n\t}) => {\n\t\ttry {\n\t\t\tconst { logSensitiveToolExecution } = await getAuditModule();\n\t\t\tawait logSensitiveToolExecution(\n\t\t\t\tentry.toolName,\n\t\t\t\tentry.args,\n\t\t\t\tentry.status,\n\t\t\t\tentry.durationMs,\n\t\t\t\tentry.error,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to log tool execution\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t\ttoolName: entry.toolName,\n\t\t\t});\n\t\t}\n\t};\n\n\tconst transport = new ProviderTransport({\n\t\tgetAuthContext: async (provider: string) => authResolver(provider),\n\t\tcwd,\n\t\tapprovalService:\n\t\t\toptions?.approvalService ?? new WebActionApprovalService(approvalMode),\n\t\ttoolRetryService: options?.toolRetryService,\n\t\tclientToolService:\n\t\t\toptions?.clientToolService ??\n\t\t\t(options?.enableClientTools || options?.useClientAskUser\n\t\t\t\t? clientToolService\n\t\t\t\t: undefined),\n\t\tplatformToolExecutionBridge: options?.platformToolExecutionBridge,\n\t\tsessionTokenCounter,\n\t\tauditLogger,\n\t});\n\n\tconst runtimeConstraints = detectRuntimeConstraintContext({\n\t\tcwd,\n\t\tsandboxMode: process.env.MAESTRO_SANDBOX_MODE ?? null,\n\t});\n\tconst {\n\t\tsystemPrompt,\n\t\tpromptMetadata,\n\t\tpromptContextManifest,\n\t\tsystemPromptSourcePaths: freshSystemPromptSourcePaths,\n\t} = await resolveMaestroSystemPrompt({\n\t\tcwd,\n\t\tprofileName: options?.profileName ?? context.profileName,\n\t\tcliOverrides: options?.cliOverrides ?? context.cliOverrides,\n\t\truntimeConstraints,\n\t});\n\tconst systemPromptSourcePaths = Array.from(\n\t\tnew Set([\n\t\t\t...freshSystemPromptSourcePaths,\n\t\t\t...(options?.persistedSystemPromptSourcePaths ?? []),\n\t\t]),\n\t);\n\tconst unifiedContextManifest = loadUnifiedContextManifest(cwd, {\n\t\tprojectDocs: promptContextManifest,\n\t});\n\n\t// Only include IDE client tools when a compatible client is connected.\n\t// Without a connected client, these tools will hang waiting for responses.\n\tconst mcpTools = getAllMcpTools();\n\tconst baseTools = options?.useClientAskUser\n\t\t? codingTools.map((tool) =>\n\t\t\t\ttool.name === \"ask_user\" ? askUserClientTool : tool,\n\t\t\t)\n\t\t: codingTools;\n\tconst tools: AgentTool[] = [...baseTools, ...mcpTools];\n\tif (options?.includeVscodeTools) {\n\t\ttools.push(...vscodeTools);\n\t}\n\tif (options?.includeJetBrainsTools) {\n\t\ttools.push(...jetbrainsTools);\n\t}\n\tif (options?.enableClientTools) {\n\t\ttools.push(artifactsClientTool);\n\t\ttools.push(javascriptReplClientTool);\n\t\tif (options?.includeConductorTools) {\n\t\t\ttools.push(...conductorClientTools);\n\t\t}\n\t}\n\n\tconst agent = new Agent({\n\t\ttransport,\n\t\tinitialState: {\n\t\t\tsystemPrompt,\n\t\t\tpromptMetadata,\n\t\t\tsystemPromptSourcePaths,\n\t\t\tpromptContextManifest,\n\t\t\tunifiedContextManifest,\n\t\t\tmodel: registeredModel,\n\t\t\tthinkingLevel,\n\t\t\ttools,\n\t\t\tsandboxMode: process.env.MAESTRO_SANDBOX ?? null,\n\t\t\tsandboxEnabled: Boolean(process.env.MAESTRO_SANDBOX),\n\t\t},\n\t\tcontextSources: [\n\t\t\tnew TodoContextSource(),\n\t\t\tnew BackgroundTaskContextSource(),\n\t\t\tnew CurrentDateContextSource(),\n\t\t\tnew GitSnapshotContextSource(cwd),\n\t\t\tnew LspContextSource(cwd),\n\t\t\tnew FrameworkPreferenceContextSource(),\n\t\t\tnew TeamMemoryContextSource(cwd),\n\t\t\tnew IDEContextSource(),\n\t\t],\n\t});\n\n\t// Initialize a session-scoped composer manager for this web agent.\n\twebComposerManagers.initializeAgent(agent, systemPrompt, tools, cwd);\n\n\treturn agent;\n}\n\nasync function createBackgroundAgent(\n\tregisteredModel: RegisteredModel,\n\toptions?: {\n\t\tcwd?: string;\n\t\tsystemPrompt?: string;\n\t},\n): Promise<Agent> {\n\treturn createBackgroundTextAgent({\n\t\tmodel: registeredModel,\n\t\tsystemPrompt: options?.systemPrompt ?? getMemoryExtractionSystemPrompt(),\n\t\tcwd: options?.cwd ?? process.cwd(),\n\t\tgetAuthContext: async (provider: string) => authResolver(provider),\n\t});\n}\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst WEB_ROOT = resolveWebRoot({ baseDir: __dirname });\nconst ALLOWED_ORIGIN = DEFAULT_WEB_ORIGIN;\nconst CORS_HEADERS = createCorsHeaders(ALLOWED_ORIGIN);\n\nexport function isAllowedWebSocketOrigin(\n\torigin: string | string[] | undefined,\n\tallowedOrigin = ALLOWED_ORIGIN,\n): boolean {\n\treturn allowedOrigin === \"*\" || origin === allowedOrigin;\n}\n\nconst headlessRuntimeService = new HeadlessRuntimeService();\n\nconst context: WebServerContext = {\n\tcorsHeaders: CORS_HEADERS,\n\tstaticMaxAge: STATIC_MAX_AGE,\n\tdefaultApprovalMode: profileSecurityConfig.defaultApprovalMode,\n\tdefaultProvider: DEFAULT_PROVIDER,\n\tdefaultModelId: DEFAULT_MODEL_ID,\n\tprofileName: process.env.MAESTRO_PROFILE,\n\tcreateAgent,\n\tcreateBackgroundAgent,\n\tgetRegisteredModel,\n\tgetCurrentSelection,\n\tensureCredential,\n\tsetModelSelection: (model) => modelSelectionStore.set(model),\n\tacquireSse: () => sseLimiter.tryAcquire(),\n\treleaseSse: (token) => sseLimiter.release(token),\n\theadlessRuntimeService,\n\tcomposerManagers: webComposerManagers,\n};\n\nconst routes = createRoutes(context);\n\nconst router = createRequestHandler(\n\troutes,\n\t(req, res, pathname) => {\n\t\tif (pathname.startsWith(\"/api\")) {\n\t\t\tsendJson(res, 404, { error: \"Not found\" }, CORS_HEADERS, req);\n\t\t\treturn;\n\t\t}\n\t\tserveStatic(pathname, req, res, {\n\t\t\twebRoot: WEB_ROOT,\n\t\t\tcorsHeaders: CORS_HEADERS,\n\t\t\tmaxAgeSeconds: STATIC_MAX_AGE,\n\t\t\tsecurityHeaders: profileSecurityConfig.securityHeaders,\n\t\t\tspaFallback: true,\n\t\t});\n\t},\n\tCORS_HEADERS,\n);\n\n// Active request tracking for graceful shutdown and debugging\n// Tiered rate limiter with per-endpoint limits\n// Global: 1000/min, with stricter limits for expensive endpoints\nconst rateLimiter = new TieredRateLimiter();\n\nasync function handleRequest(req: IncomingMessage, res: ServerResponse) {\n\tconst start = performance.now();\n\tconst parsedUrl = parse(req.url || \"/\", true);\n\tconst pathname = parsedUrl.pathname || \"/\";\n\tconst requestId = randomUUID();\n\n\t// Parse W3C Trace Context\n\t// traceparent: 00-traceid-spanid-flags\n\tconst traceParent = req.headers.traceparent as string | undefined;\n\tconst { traceId, parentSpanId } = parseTraceParent(traceParent);\n\tconst spanId = randomBytes(8).toString(\"hex\"); // New span for this service\n\tconst responseTraceParent = `00-${traceId}-${spanId}-01`;\n\tres.setHeader(\"traceparent\", responseTraceParent);\n\tres.setHeader(\"server-timing\", `traceparent;desc=\"${responseTraceParent}\"`);\n\n\t// Attach request to response for easy access in helpers\n\t(res as ServerResponse & { req?: IncomingMessage }).req = req;\n\n\tconst context: RequestContext = {\n\t\trequestId,\n\t\ttraceId,\n\t\tspanId,\n\t\tstartTime: start,\n\t\tmethod: req.method || \"GET\",\n\t\turl: pathname,\n\t};\n\n\t// Set a hard timeout for processing\n\t// Skip for SSE endpoints which are meant to be long-lived\n\tif (!pathname.startsWith(\"/api/chat\")) {\n\t\tconst timeout = setTimeout(() => {\n\t\t\tif (!res.headersSent && !res.writableEnded) {\n\t\t\t\trequestContextStorage.run(context, () => {\n\t\t\t\t\tlogError(`Request timeout for ${pathname} [${requestId}]`);\n\t\t\t\t\tconst duration = performance.now() - start;\n\t\t\t\t\trecordApiRequest(req.method || \"UNKNOWN\", pathname, 504, duration, {\n\t\t\t\t\t\trequestId,\n\t\t\t\t\t\ttraceId,\n\t\t\t\t\t\tspanId,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tres.writeHead(504, {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...CORS_HEADERS,\n\t\t\t\t});\n\t\t\t\tres.end(JSON.stringify({ error: \"Gateway Timeout\" }));\n\t\t\t}\n\t\t}, REQUEST_TIMEOUT_MS);\n\n\t\tconst cleanup = () => {\n\t\t\tclearTimeout(timeout);\n\t\t};\n\n\t\tres.on(\"finish\", cleanup);\n\t\tres.on(\"close\", cleanup);\n\t}\n\n\t// Track request for introspection (Channelz) and graceful shutdown\n\trequestTracker.track(req, {\n\t\tid: requestId,\n\t\tmethod: req.method || \"GET\",\n\t\turl: pathname,\n\t\tstartTime: start,\n\t\tuserAgent: req.headers[\"user-agent\"],\n\t});\n\n\tres.on(\"close\", () => {\n\t\trequestTracker.untrack(req);\n\t});\n\n\t// Await the context storage run to prevent unhandled promise rejections\n\tawait requestContextStorage.run(context, async () => {\n\t\t// Setup logging listener inside context to capture trace/span IDs in closure\n\t\tres.on(\"finish\", () => {\n\t\t\tconst duration = performance.now() - start;\n\t\t\tlogRequest(req, res.statusCode, start);\n\t\t\trecordApiRequest(\n\t\t\t\treq.method || \"UNKNOWN\",\n\t\t\t\tpathname,\n\t\t\t\tres.statusCode,\n\t\t\t\tduration,\n\t\t\t\t{ requestId, traceId, spanId },\n\t\t\t);\n\t\t});\n\n\t\tconst app = compose([\n\t\t\tcreateLoadSheddingMiddleware(CORS_HEADERS),\n\t\t\tcreateTieredRateLimitMiddleware(\n\t\t\t\trateLimiter,\n\t\t\t\tCORS_HEADERS,\n\t\t\t\tTRUST_PROXY,\n\t\t\t\tTRUST_PROXY_HOPS,\n\t\t\t),\n\t\t\tcreateCorsMiddleware(CORS_HEADERS),\n\t\t\tcreateAuthMiddleware(WEB_API_KEY, CORS_HEADERS, REQUIRE_WEB_API_KEY, {\n\t\t\t\texemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,\n\t\t\t\troutes,\n\t\t\t}),\n\t\t\tcreateCsrfMiddleware(\n\t\t\t\tprofileSecurityConfig.csrfToken,\n\t\t\t\tCORS_HEADERS,\n\t\t\t\tprofileSecurityConfig.requireCsrf,\n\t\t\t\t{\n\t\t\t\t\texemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,\n\t\t\t\t},\n\t\t\t),\n\t\t\tcreateWorkspaceConfigMiddleware(CORS_HEADERS),\n\t\t\tcreateRouterMiddleware(router),\n\t\t]);\n\n\t\ttry {\n\t\t\tawait app(req, res, () => {\n\t\t\t\t// This fallback should rarely be reached as the router handles 404s\n\t\t\t\tif (!res.headersSent && !res.writableEnded) {\n\t\t\t\t\tsendJson(res, 404, { error: \"Not found\" }, CORS_HEADERS, req);\n\t\t\t\t}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tlogError(error instanceof Error ? error : new Error(String(error)));\n\t\t\tif (!res.headersSent && !res.writableEnded) {\n\t\t\t\tres.writeHead(500, {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...CORS_HEADERS,\n\t\t\t\t});\n\t\t\t\tres.end(JSON.stringify({ error: \"Internal server error\" }));\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport async function startWebServer(\n\tport = 8080,\n\toptions: StartWebServerOptions = {},\n) {\n\tprofileSecurityConfig = resolveProfileSecurityConfig(options.profileName);\n\tcontext.defaultApprovalMode = profileSecurityConfig.defaultApprovalMode;\n\tif (options.hostedRunner) {\n\t\tcontext.hostedRunner = options.hostedRunner;\n\t}\n\tconst resolvedProfileName =\n\t\toptions.profileName ?? process.env.MAESTRO_PROFILE;\n\tif (resolvedProfileName) {\n\t\tcontext.profileName = resolvedProfileName;\n\t} else {\n\t\tdelete context.profileName;\n\t}\n\tcontext.cliOverrides = options.cliOverrides;\n\tsetConfiguredPackageRuntimeContext(process.cwd(), {\n\t\tprofileName: resolvedProfileName,\n\t\tcliOverrides: options.cliOverrides,\n\t});\n\n\tregisterCrashHandlers();\n\tif (!options.skipStartupMigration) {\n\t\tconst { migrate } = await import(\"./db/migrate.js\");\n\t\tconst applied = await migrate();\n\t\tif (applied > 0) {\n\t\t\tlogger.info(\"Startup database migrations completed\", { count: applied });\n\t\t}\n\t}\n\tawait reloadModelConfig();\n\tawait initLifecycle();\n\tstartAutomationScheduler(context);\n\n\t// Initialize enterprise context for user/org tracking (optional, only if enterprise features enabled)\n\tconst { enterpriseContext } = await import(\"./enterprise/context.js\");\n\tawait enterpriseContext.initialize();\n\n\t// Initialize audit integration if enterprise features are available\n\tif (enterpriseContext.isEnterprise()) {\n\t\tconst { initializeAuditIntegration } = await import(\n\t\t\t\"./enterprise/audit-integration.js\"\n\t\t);\n\t\tinitializeAuditIntegration();\n\t}\n\n\t// Initialize enterprise features (RBAC, permissions, default roles) if database is configured\n\tconst { isDatabaseConfigured } = await import(\"./db/client.js\");\n\tif (isDatabaseConfigured()) {\n\t\ttry {\n\t\t\tconst { initializeEnterpriseFeatures } = await import(\n\t\t\t\t\"./api/enterprise-routes.js\"\n\t\t\t);\n\t\t\tawait initializeEnterpriseFeatures();\n\t\t\tlogger.info(\"Enterprise features initialized\");\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to initialize enterprise features\", {\n\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t),\n\t\t\t});\n\t\t}\n\t}\n\n\t// Configure safe mode settings (e.g., disabling certain tools in sandboxed environments)\n\tconfigureSafeMode(true);\n\n\t// Register shutdown hooks for background tasks to ensure clean cleanup\n\tregisterBackgroundTaskShutdownHooks();\n\n\t// Bootstrap LSP for IDE integration (enables diagnostics, hover, etc.)\n\tawait bootstrapLsp();\n\n\t// Initialize checkpoint service for undo/redo functionality\n\tinitCheckpointService(process.cwd());\n\n\t// Initialize MCP servers\n\ttry {\n\t\tconst mcpConfig = loadMcpConfig(process.cwd(), { includeEnvLimits: true });\n\t\tif (mcpConfig.servers.length > 0) {\n\t\t\tlogger.info(\"Initializing MCP servers...\");\n\t\t\tif (\n\t\t\t\tmcpConfig.servers.some(\n\t\t\t\t\t(server) => server.transport === \"http\" || server.transport === \"sse\",\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tvoid prefetchOfficialMcpRegistry();\n\t\t\t}\n\n\t\t\t// Listen for connection events\n\t\t\tmcpManager.on(\"connected\", (event) => {\n\t\t\t\tlogger.info(`MCP server connected: ${event.name}`);\n\t\t\t});\n\n\t\t\tmcpManager.on(\"disconnected\", (event) => {\n\t\t\t\tlogger.info(`MCP server disconnected: ${event.name}`);\n\t\t\t});\n\n\t\t\tawait mcpManager.configure(mcpConfig);\n\t\t}\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to initialize MCP servers\", {\n\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t),\n\t\t});\n\t}\n\n\tif (REQUIRE_WEB_API_KEY && !WEB_API_KEY) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_WEB_API_KEY is required. Set MAESTRO_WEB_REQUIRE_KEY=0 to allow unauthenticated APIs for local-only testing.\",\n\t\t);\n\t}\n\n\tif (REQUIRE_REDIS && !process.env.MAESTRO_REDIS_URL) {\n\t\tthrow new Error(\n\t\t\t\"MAESTRO_REDIS_URL must be set for shared rate limiting. Set MAESTRO_WEB_REQUIRE_REDIS=0 to bypass in single-node dev only.\",\n\t\t);\n\t}\n\n\tconst server = createServer(handleRequest);\n\tconst wsMaxPayload =\n\t\tNumber.parseInt(process.env.MAESTRO_WS_MAX_PAYLOAD || \"1048576\", 10) ||\n\t\t1048576;\n\tconst wsServer = new WebSocketServer({\n\t\tnoServer: true,\n\t\tmaxPayload: wsMaxPayload,\n\t});\n\tconst sockets = new Set<Socket>();\n\tlet shuttingDown = false;\n\tlet drainTimeout: NodeJS.Timeout | null = null;\n\tlet drainInterval: NodeJS.Timeout | null = null;\n\n\tserver.on(\"connection\", (socket) => {\n\t\tsockets.add(socket);\n\t\tsocket.on(\"close\", () => {\n\t\t\tsockets.delete(socket);\n\t\t});\n\t});\n\n\tserver.on(\"upgrade\", async (req, socket, head) => {\n\t\tconst url = new URL(\n\t\t\treq.url || \"/\",\n\t\t\t`http://${req.headers.host || \"localhost\"}`,\n\t\t);\n\t\tif (url.pathname !== \"/api/chat/ws\" && url.pathname !== \"/api/runtime/ws\") {\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isAllowedWebSocketOrigin(req.headers.origin)) {\n\t\t\tsocket.write(\"HTTP/1.1 403 Forbidden\\r\\n\\r\\n\");\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst auth = await checkApiAuth(req);\n\t\tif (!auth.ok) {\n\t\t\tsocket.write(\"HTTP/1.1 401 Unauthorized\\r\\n\\r\\n\");\n\t\t\tsocket.destroy();\n\t\t\treturn;\n\t\t}\n\n\t\tlet runtimeSessionId: string | undefined;\n\t\tif (url.pathname === \"/api/runtime/ws\") {\n\t\t\tconst authorization = await authorizeRuntimeWebSocketSession({\n\t\t\t\treq,\n\t\t\t\tsocket,\n\t\t\t\trequestedSessionId: url.searchParams.get(\"sessionId\"),\n\t\t\t\tvalidateSessionAccess: validateRuntimeSessionAccess,\n\t\t\t\tlogAccessError: logError,\n\t\t\t});\n\t\t\tif (authorization === null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\truntimeSessionId = authorization;\n\t\t}\n\n\t\twsServer.handleUpgrade(req, socket, head, (ws) => {\n\t\t\tif (url.pathname === \"/api/runtime/ws\") {\n\t\t\t\thandleRuntimeAppServerWebSocket(ws, {\n\t\t\t\t\tsessionId: runtimeSessionId,\n\t\t\t\t\tvalidateSessionAccess: (sessionId) =>\n\t\t\t\t\t\tvalidateRuntimeSessionAccess(req, sessionId),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleChatWebSocket(ws, req, context);\n\t\t});\n\t});\n\n\tconst onListening = () => {\n\t\tlogStartup(port);\n\t\tif (context.hostedRunner) {\n\t\t\tlogger.info(\"Hosted runner mode enabled\", {\n\t\t\t\trunnerSessionId: context.hostedRunner.runnerSessionId,\n\t\t\t\tworkspaceRoot: context.hostedRunner.workspaceRoot,\n\t\t\t\tsnapshotRoot: context.hostedRunner.snapshotRoot,\n\t\t\t\tworkspaceId: context.hostedRunner.workspaceId,\n\t\t\t\tagentRunId: context.hostedRunner.agentRunId,\n\t\t\t\tlistenHost: options.host,\n\t\t\t\tlistenPort: port,\n\t\t\t});\n\t\t}\n\t\tstartStatsCollection();\n\t};\n\tif (options.host) {\n\t\tserver.listen(port, options.host, onListening);\n\t} else {\n\t\tserver.listen(port, onListening);\n\t}\n\n\t// Don't register signal handlers in test mode - vitest manages process lifecycle\n\tconst isTestMode =\n\t\tprocess.env.VITEST === \"true\" || process.env.NODE_ENV === \"test\";\n\tif (!isTestMode) {\n\t\tconst beginShutdown = async (signal: NodeJS.Signals) => {\n\t\t\tif (shuttingDown) return;\n\t\t\tshuttingDown = true;\n\t\t\tif (context.hostedRunner) {\n\t\t\t\tif (context.hostedRunner.draining) {\n\t\t\t\t\tlogger.info(\"Hosted runner already draining before shutdown\", {\n\t\t\t\t\t\trunnerSessionId: context.hostedRunner.runnerSessionId,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst drainResult = await drainHostedRunnerForShutdown(context, {\n\t\t\t\t\t\t\treason: HostedRunnerDrainReasonValue.ProcessShutdown,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (drainResult) {\n\t\t\t\t\t\t\tconst log =\n\t\t\t\t\t\t\t\tdrainResult.status === HostedRunnerDrainStatusValue.Interrupted\n\t\t\t\t\t\t\t\t\t? logger.warn.bind(logger)\n\t\t\t\t\t\t\t\t\t: logger.info.bind(logger);\n\t\t\t\t\t\t\tlog(\"Hosted runner drained during graceful shutdown\", {\n\t\t\t\t\t\t\t\trunnerSessionId: drainResult.runner_session_id,\n\t\t\t\t\t\t\t\tstatus: drainResult.status,\n\t\t\t\t\t\t\t\tmanifestPath: drainResult.manifest_path,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tcontext.hostedRunner.draining = true;\n\t\t\t\t\t\tlogger.warn(\"Hosted runner shutdown drain failed\", {\n\t\t\t\t\t\t\trunnerSessionId: context.hostedRunner.runnerSessionId,\n\t\t\t\t\t\t\terror: sanitizeWithStaticMask(\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.info(`${signal} received. Starting graceful shutdown...`);\n\t\t\tstopStatsCollection();\n\t\t\tdisposeCheckpointService();\n\t\t\t// End enterprise session if initialized\n\t\t\tconst { enterpriseContext } = await import(\"./enterprise/context.js\");\n\t\t\tif (enterpriseContext.isEnterprise()) {\n\t\t\t\tenterpriseContext.endSession();\n\t\t\t}\n\t\t\tawait shutdownLifecycle();\n\n\t\t\t// Stop accepting new connections\n\t\t\tserver.close();\n\n\t\t\t// Drain existing requests\n\t\t\tconst activeCount = requestTracker.getCount();\n\t\t\tif (activeCount > 0) {\n\t\t\t\tlogger.info(\"Waiting for active requests to complete...\", {\n\t\t\t\t\tactiveCount,\n\t\t\t\t});\n\t\t\t\tdrainTimeout = setTimeout(() => {\n\t\t\t\t\tlogger.warn(\"Drain timeout reached. Forcing shutdown...\");\n\t\t\t\t\tfor (const socket of sockets) {\n\t\t\t\t\t\tsocket.destroy();\n\t\t\t\t\t}\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}, 10000); // 10s drain timeout\n\n\t\t\t\t// Poll for drain\n\t\t\t\tdrainInterval = setInterval(() => {\n\t\t\t\t\tif (requestTracker.getCount() === 0) {\n\t\t\t\t\t\tif (drainInterval) clearInterval(drainInterval);\n\t\t\t\t\t\tif (drainTimeout) clearTimeout(drainTimeout);\n\t\t\t\t\t\tlogger.info(\"All requests completed. Exiting.\");\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\t\t\t\t}, 100);\n\t\t\t} else {\n\t\t\t\tlogger.info(\"No active requests. Exiting.\");\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t};\n\t\tprocess.on(\"SIGINT\", () => {\n\t\t\tvoid beginShutdown(\"SIGINT\");\n\t\t});\n\t\tprocess.on(\"SIGTERM\", () => {\n\t\t\tvoid beginShutdown(\"SIGTERM\");\n\t\t});\n\t}\n\n\treturn server;\n}\n\n// Run if called directly\nif (process.argv[1] && __filename === resolve(process.argv[1])) {\n\tconst port = Number.parseInt(process.env.PORT || \"8080\", 10);\n\tstartWebServer(port);\n}\n"]}