@evalops/maestro 0.10.17 → 0.10.20

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 (930) hide show
  1. package/README.md +56 -1
  2. package/dist/agent/action-approval.d.ts +12 -2
  3. package/dist/agent/action-approval.d.ts.map +1 -1
  4. package/dist/agent/action-approval.js +19 -32
  5. package/dist/agent/action-approval.js.map +1 -1
  6. package/dist/agent/agent.d.ts +1 -0
  7. package/dist/agent/agent.d.ts.map +1 -1
  8. package/dist/agent/agent.js +26 -0
  9. package/dist/agent/agent.js.map +1 -1
  10. package/dist/agent/compaction.d.ts +2 -0
  11. package/dist/agent/compaction.d.ts.map +1 -1
  12. package/dist/agent/compaction.js +4 -2
  13. package/dist/agent/compaction.js.map +1 -1
  14. package/dist/agent/index.d.ts +1 -1
  15. package/dist/agent/index.d.ts.map +1 -1
  16. package/dist/agent/index.js +1 -1
  17. package/dist/agent/index.js.map +1 -1
  18. package/dist/agent/modes.d.ts +56 -4
  19. package/dist/agent/modes.d.ts.map +1 -1
  20. package/dist/agent/modes.js +163 -2
  21. package/dist/agent/modes.js.map +1 -1
  22. package/dist/agent/prompt-recovery.d.ts.map +1 -1
  23. package/dist/agent/prompt-recovery.js +1 -3
  24. package/dist/agent/prompt-recovery.js.map +1 -1
  25. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  26. package/dist/agent/providers/anthropic.js +9 -1
  27. package/dist/agent/providers/anthropic.js.map +1 -1
  28. package/dist/agent/providers/codex-app-server.d.ts +12 -0
  29. package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
  30. package/dist/agent/providers/codex-app-server.js +788 -0
  31. package/dist/agent/providers/codex-app-server.js.map +1 -0
  32. package/dist/agent/providers/google-gemini-cli.js +14 -3
  33. package/dist/agent/providers/google.js +22 -3
  34. package/dist/agent/providers/scripted.d.ts +11 -0
  35. package/dist/agent/providers/scripted.d.ts.map +1 -0
  36. package/dist/agent/providers/scripted.js +399 -0
  37. package/dist/agent/providers/scripted.js.map +1 -0
  38. package/dist/agent/providers/vertex.js +14 -3
  39. package/dist/agent/scenario-source.d.ts +19 -0
  40. package/dist/agent/scenario-source.d.ts.map +1 -0
  41. package/dist/agent/scenario-source.js +112 -0
  42. package/dist/agent/scenario-source.js.map +1 -0
  43. package/dist/agent/subagent-specs.d.ts +1 -1
  44. package/dist/agent/subagent-specs.js +1 -1
  45. package/dist/agent/subagent-specs.js.map +1 -1
  46. package/dist/agent/swarm/executor.d.ts +25 -0
  47. package/dist/agent/swarm/executor.d.ts.map +1 -1
  48. package/dist/agent/swarm/executor.js +795 -20
  49. package/dist/agent/swarm/executor.js.map +1 -1
  50. package/dist/agent/swarm/runtime-events.d.ts +11 -0
  51. package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
  52. package/dist/agent/swarm/runtime-events.js +26 -0
  53. package/dist/agent/swarm/runtime-events.js.map +1 -0
  54. package/dist/agent/swarm/types.d.ts +78 -0
  55. package/dist/agent/swarm/types.d.ts.map +1 -1
  56. package/dist/agent/swarm/types.js.map +1 -1
  57. package/dist/agent/tracing.d.ts +1 -1
  58. package/dist/agent/tracing.d.ts.map +1 -1
  59. package/dist/agent/tracing.js +17 -9
  60. package/dist/agent/tracing.js.map +1 -1
  61. package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
  62. package/dist/agent/transport/create-provider-stream.js +14 -0
  63. package/dist/agent/transport/create-provider-stream.js.map +1 -1
  64. package/dist/agent/transport/stable-stringify.d.ts +2 -0
  65. package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
  66. package/dist/agent/transport/stable-stringify.js +14 -0
  67. package/dist/agent/transport/stable-stringify.js.map +1 -0
  68. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  69. package/dist/agent/transport/tool-execution-bridge.js +2 -15
  70. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  71. package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
  72. package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
  73. package/dist/agent/transport/tool-safety-pipeline.js +184 -36
  74. package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
  75. package/dist/agent/transport.d.ts +8 -0
  76. package/dist/agent/transport.d.ts.map +1 -1
  77. package/dist/agent/transport.js +1613 -68
  78. package/dist/agent/transport.js.map +1 -1
  79. package/dist/agent/types.d.ts +170 -2
  80. package/dist/agent/types.d.ts.map +1 -1
  81. package/dist/agent/types.js.map +1 -1
  82. package/dist/api/enterprise-routes.d.ts.map +1 -1
  83. package/dist/api/enterprise-routes.js +34 -3
  84. package/dist/api/enterprise-routes.js.map +1 -1
  85. package/dist/app-server/in-process-client.d.ts +32 -0
  86. package/dist/app-server/in-process-client.d.ts.map +1 -0
  87. package/dist/app-server/in-process-client.js +73 -0
  88. package/dist/app-server/in-process-client.js.map +1 -0
  89. package/dist/app-server/session-api.d.ts +36 -0
  90. package/dist/app-server/session-api.d.ts.map +1 -0
  91. package/dist/app-server/session-api.js +713 -0
  92. package/dist/app-server/session-api.js.map +1 -0
  93. package/dist/approvals/platform-action-approval.d.ts +3 -1
  94. package/dist/approvals/platform-action-approval.d.ts.map +1 -1
  95. package/dist/approvals/platform-action-approval.js +16 -9
  96. package/dist/approvals/platform-action-approval.js.map +1 -1
  97. package/dist/approvals/service-client.d.ts.map +1 -1
  98. package/dist/approvals/service-client.js +7 -7
  99. package/dist/approvals/service-client.js.map +1 -1
  100. package/dist/audit/logger.d.ts +4 -4
  101. package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
  102. package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
  103. package/dist/bootstrap/agent-creation-setup.js +3 -1
  104. package/dist/bootstrap/agent-creation-setup.js.map +1 -1
  105. package/dist/bootstrap/auth-setup.js +1 -1
  106. package/dist/bootstrap/auth-setup.js.map +1 -1
  107. package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
  108. package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
  109. package/dist/bootstrap/event-subscriptions-setup.js +26 -2
  110. package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
  111. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  112. package/dist/bootstrap/model-resolution-setup.js +4 -1
  113. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  114. package/dist/bootstrap/tools-setup.d.ts +2 -1
  115. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  116. package/dist/bootstrap/tools-setup.js +5 -1
  117. package/dist/bootstrap/tools-setup.js.map +1 -1
  118. package/dist/cli/args.d.ts +9 -1
  119. package/dist/cli/args.d.ts.map +1 -1
  120. package/dist/cli/args.js +130 -5
  121. package/dist/cli/args.js.map +1 -1
  122. package/dist/cli/commands/a2a.d.ts +9 -0
  123. package/dist/cli/commands/a2a.d.ts.map +1 -0
  124. package/dist/cli/commands/a2a.js +1714 -0
  125. package/dist/cli/commands/a2a.js.map +1 -0
  126. package/dist/cli/commands/agents.d.ts +16 -2
  127. package/dist/cli/commands/agents.d.ts.map +1 -1
  128. package/dist/cli/commands/agents.js +223 -35
  129. package/dist/cli/commands/agents.js.map +1 -1
  130. package/dist/cli/commands/codex.d.ts +1 -1
  131. package/dist/cli/commands/codex.d.ts.map +1 -1
  132. package/dist/cli/commands/codex.js +145 -39
  133. package/dist/cli/commands/codex.js.map +1 -1
  134. package/dist/cli/commands/context.d.ts +10 -0
  135. package/dist/cli/commands/context.d.ts.map +1 -0
  136. package/dist/cli/commands/context.js +176 -0
  137. package/dist/cli/commands/context.js.map +1 -0
  138. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  139. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  140. package/dist/cli/commands/hosted-runner.js +9 -1
  141. package/dist/cli/commands/hosted-runner.js.map +1 -1
  142. package/dist/cli/commands/init.d.ts.map +1 -1
  143. package/dist/cli/commands/init.js +6 -0
  144. package/dist/cli/commands/init.js.map +1 -1
  145. package/dist/cli/commands/modes.d.ts +8 -0
  146. package/dist/cli/commands/modes.d.ts.map +1 -0
  147. package/dist/cli/commands/modes.js +151 -0
  148. package/dist/cli/commands/modes.js.map +1 -0
  149. package/dist/cli/commands/operating-plane.d.ts +14 -0
  150. package/dist/cli/commands/operating-plane.d.ts.map +1 -0
  151. package/dist/cli/commands/operating-plane.js +160 -0
  152. package/dist/cli/commands/operating-plane.js.map +1 -0
  153. package/dist/cli/commands/run.d.ts +87 -0
  154. package/dist/cli/commands/run.d.ts.map +1 -0
  155. package/dist/cli/commands/run.js +356 -0
  156. package/dist/cli/commands/run.js.map +1 -0
  157. package/dist/cli/commands/scenario.d.ts +7 -0
  158. package/dist/cli/commands/scenario.d.ts.map +1 -0
  159. package/dist/cli/commands/scenario.js +195 -0
  160. package/dist/cli/commands/scenario.js.map +1 -0
  161. package/dist/cli/commands/skill.d.ts +7 -0
  162. package/dist/cli/commands/skill.d.ts.map +1 -0
  163. package/dist/cli/commands/skill.js +286 -0
  164. package/dist/cli/commands/skill.js.map +1 -0
  165. package/dist/cli/headless-protocol.d.ts +55 -1
  166. package/dist/cli/headless-protocol.d.ts.map +1 -1
  167. package/dist/cli/headless-protocol.js +446 -7
  168. package/dist/cli/headless-protocol.js.map +1 -1
  169. package/dist/cli/headless-runtime-selection.d.ts +38 -0
  170. package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
  171. package/dist/cli/headless-runtime-selection.js +48 -0
  172. package/dist/cli/headless-runtime-selection.js.map +1 -0
  173. package/dist/cli/headless.d.ts +5 -1
  174. package/dist/cli/headless.d.ts.map +1 -1
  175. package/dist/cli/headless.js +11 -1
  176. package/dist/cli/headless.js.map +1 -1
  177. package/dist/cli/help.d.ts +3 -1
  178. package/dist/cli/help.d.ts.map +1 -1
  179. package/dist/cli/help.js +136 -30
  180. package/dist/cli/help.js.map +1 -1
  181. package/dist/cli/system-prompt.d.ts +22 -4
  182. package/dist/cli/system-prompt.d.ts.map +1 -1
  183. package/dist/cli/system-prompt.js +224 -127
  184. package/dist/cli/system-prompt.js.map +1 -1
  185. package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
  186. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
  187. package/dist/cli-tui/commands/a2a-handlers.js +160 -0
  188. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
  189. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  190. package/dist/cli-tui/commands/command-catalog.js +15 -0
  191. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  192. package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
  193. package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
  194. package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
  195. package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
  196. package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
  197. package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
  198. package/dist/cli-tui/commands/mcp-handlers.js +6 -5
  199. package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
  200. package/dist/cli-tui/commands/types.d.ts +1 -0
  201. package/dist/cli-tui/commands/types.d.ts.map +1 -1
  202. package/dist/cli-tui/commands/types.js.map +1 -1
  203. package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
  204. package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
  205. package/dist/cli-tui/commands/utility-handlers.js +45 -6
  206. package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
  207. package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
  208. package/dist/cli-tui/run/run-shell-command.js +14 -5
  209. package/dist/cli-tui/run/run-shell-command.js.map +1 -1
  210. package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
  211. package/dist/cli-tui/run/streaming-shell-command.js +14 -5
  212. package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
  213. package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
  214. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  215. package/dist/cli-tui/selectors/model-selector.js +6 -2
  216. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  217. package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
  218. package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
  219. package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
  220. package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
  221. package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
  222. package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
  223. package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
  224. package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
  225. package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
  226. package/dist/cli-tui/utils/runtime-badges.js +7 -0
  227. package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
  228. package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
  229. package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
  230. package/dist/cli-tui/utils/text-formatting.js +5 -0
  231. package/dist/cli-tui/utils/text-formatting.js.map +1 -1
  232. package/dist/cli.js +49209 -26165
  233. package/dist/cli.js.map +1 -1
  234. package/dist/codex/app-server-client.d.ts +139 -0
  235. package/dist/codex/app-server-client.d.ts.map +1 -0
  236. package/dist/codex/app-server-client.js +352 -0
  237. package/dist/codex/app-server-client.js.map +1 -0
  238. package/dist/codex/compatibility.d.ts +48 -0
  239. package/dist/codex/compatibility.d.ts.map +1 -0
  240. package/dist/codex/compatibility.js +344 -0
  241. package/dist/codex/compatibility.js.map +1 -0
  242. package/dist/codex/subagent-dispatch-table.d.ts +66 -0
  243. package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
  244. package/dist/codex/subagent-dispatch-table.js +127 -0
  245. package/dist/codex/subagent-dispatch-table.js.map +1 -0
  246. package/dist/codex/subagent-workgraph.d.ts +56 -0
  247. package/dist/codex/subagent-workgraph.d.ts.map +1 -0
  248. package/dist/codex/subagent-workgraph.js +89 -0
  249. package/dist/codex/subagent-workgraph.js.map +1 -0
  250. package/dist/config/constants.d.ts +3 -1
  251. package/dist/config/constants.d.ts.map +1 -1
  252. package/dist/config/constants.js +9 -0
  253. package/dist/config/constants.js.map +1 -1
  254. package/dist/config/feature-flags.d.ts +10 -1
  255. package/dist/config/feature-flags.d.ts.map +1 -1
  256. package/dist/config/feature-flags.js +17 -6
  257. package/dist/config/feature-flags.js.map +1 -1
  258. package/dist/config/index.d.ts +1 -1
  259. package/dist/config/index.d.ts.map +1 -1
  260. package/dist/config/index.js +1 -1
  261. package/dist/config/index.js.map +1 -1
  262. package/dist/config/toml-config.d.ts +32 -0
  263. package/dist/config/toml-config.d.ts.map +1 -1
  264. package/dist/config/toml-config.js +152 -43
  265. package/dist/config/toml-config.js.map +1 -1
  266. package/dist/connectors/service-client.d.ts.map +1 -1
  267. package/dist/connectors/service-client.js +4 -7
  268. package/dist/connectors/service-client.js.map +1 -1
  269. package/dist/context/manifest-types.d.ts +59 -0
  270. package/dist/context/manifest-types.d.ts.map +1 -0
  271. package/dist/context/manifest-types.js +2 -0
  272. package/dist/context/manifest-types.js.map +1 -0
  273. package/dist/context/manifest.d.ts +16 -0
  274. package/dist/context/manifest.d.ts.map +1 -0
  275. package/dist/context/manifest.js +503 -0
  276. package/dist/context/manifest.js.map +1 -0
  277. package/dist/db/schema.d.ts +10 -1
  278. package/dist/db/schema.d.ts.map +1 -1
  279. package/dist/db/schema.js.map +1 -1
  280. package/dist/evalops/agent-bootstrap.d.ts +1 -0
  281. package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
  282. package/dist/evalops/agent-bootstrap.js +41 -1
  283. package/dist/evalops/agent-bootstrap.js.map +1 -1
  284. package/dist/evalops/env-aliases.d.ts +13 -0
  285. package/dist/evalops/env-aliases.d.ts.map +1 -0
  286. package/dist/evalops/env-aliases.js +60 -0
  287. package/dist/evalops/env-aliases.js.map +1 -0
  288. package/dist/evalops/managed-context.d.ts.map +1 -1
  289. package/dist/evalops/managed-context.js +28 -62
  290. package/dist/evalops/managed-context.js.map +1 -1
  291. package/dist/guardian/config.d.ts.map +1 -1
  292. package/dist/guardian/config.js +1 -0
  293. package/dist/guardian/config.js.map +1 -1
  294. package/dist/guardian/runner.d.ts +2 -0
  295. package/dist/guardian/runner.d.ts.map +1 -1
  296. package/dist/guardian/runner.js +105 -2
  297. package/dist/guardian/runner.js.map +1 -1
  298. package/dist/guardian/types.d.ts +1 -0
  299. package/dist/guardian/types.d.ts.map +1 -1
  300. package/dist/guardian/types.js.map +1 -1
  301. package/dist/index.d.ts +6 -1
  302. package/dist/index.d.ts.map +1 -1
  303. package/dist/index.js +6 -1
  304. package/dist/index.js.map +1 -1
  305. package/dist/main.d.ts.map +1 -1
  306. package/dist/main.js +267 -55
  307. package/dist/main.js.map +1 -1
  308. package/dist/mcp/config.d.ts.map +1 -1
  309. package/dist/mcp/config.js +89 -7
  310. package/dist/mcp/config.js.map +1 -1
  311. package/dist/mcp/manager.d.ts +5 -1
  312. package/dist/mcp/manager.d.ts.map +1 -1
  313. package/dist/mcp/manager.js +159 -4
  314. package/dist/mcp/manager.js.map +1 -1
  315. package/dist/mcp/platform-plugin.d.ts.map +1 -1
  316. package/dist/mcp/platform-plugin.js +9 -26
  317. package/dist/mcp/platform-plugin.js.map +1 -1
  318. package/dist/mcp/schema.d.ts +15 -0
  319. package/dist/mcp/schema.d.ts.map +1 -1
  320. package/dist/mcp/schema.js +24 -0
  321. package/dist/mcp/schema.js.map +1 -1
  322. package/dist/mcp/tool-bridge.d.ts +39 -10
  323. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  324. package/dist/mcp/tool-bridge.js +101 -24
  325. package/dist/mcp/tool-bridge.js.map +1 -1
  326. package/dist/mcp/types.d.ts +27 -0
  327. package/dist/mcp/types.d.ts.map +1 -1
  328. package/dist/mcp/types.js.map +1 -1
  329. package/dist/mcp/workspace-trust.d.ts +10 -0
  330. package/dist/mcp/workspace-trust.d.ts.map +1 -0
  331. package/dist/mcp/workspace-trust.js +295 -0
  332. package/dist/mcp/workspace-trust.js.map +1 -0
  333. package/dist/memory/service-client.d.ts +1 -0
  334. package/dist/memory/service-client.d.ts.map +1 -1
  335. package/dist/memory/service-client.js +194 -9
  336. package/dist/memory/service-client.js.map +1 -1
  337. package/dist/models/builtin.d.ts.map +1 -1
  338. package/dist/models/builtin.js +66 -25
  339. package/dist/models/builtin.js.map +1 -1
  340. package/dist/models/config-loader.d.ts +10 -10
  341. package/dist/models/config-loader.d.ts.map +1 -1
  342. package/dist/models/config-loader.js +2 -0
  343. package/dist/models/config-loader.js.map +1 -1
  344. package/dist/models/registry.d.ts +1 -0
  345. package/dist/models/registry.d.ts.map +1 -1
  346. package/dist/models/registry.js +1 -0
  347. package/dist/models/registry.js.map +1 -1
  348. package/dist/oauth/device-identity.d.ts.map +1 -1
  349. package/dist/oauth/device-identity.js +1 -3
  350. package/dist/oauth/device-identity.js.map +1 -1
  351. package/dist/oauth/evalops.d.ts.map +1 -1
  352. package/dist/oauth/evalops.js +2 -5
  353. package/dist/oauth/evalops.js.map +1 -1
  354. package/dist/opentelemetry.d.ts.map +1 -1
  355. package/dist/opentelemetry.js +12 -12
  356. package/dist/opentelemetry.js.map +1 -1
  357. package/dist/package-version.d.ts +2 -0
  358. package/dist/package-version.d.ts.map +1 -0
  359. package/dist/package-version.js +11 -0
  360. package/dist/package-version.js.map +1 -0
  361. package/dist/packages/constants.d.ts +3 -0
  362. package/dist/packages/constants.d.ts.map +1 -0
  363. package/dist/packages/constants.js +3 -0
  364. package/dist/packages/constants.js.map +1 -0
  365. package/dist/packages/inspection.d.ts.map +1 -1
  366. package/dist/packages/inspection.js +2 -1
  367. package/dist/packages/inspection.js.map +1 -1
  368. package/dist/packages/search.d.ts.map +1 -1
  369. package/dist/packages/search.js +1 -1
  370. package/dist/packages/search.js.map +1 -1
  371. package/dist/platform/a2a-capability-market.d.ts +21 -0
  372. package/dist/platform/a2a-capability-market.d.ts.map +1 -0
  373. package/dist/platform/a2a-capability-market.js +176 -0
  374. package/dist/platform/a2a-capability-market.js.map +1 -0
  375. package/dist/platform/a2a-client.d.ts +217 -0
  376. package/dist/platform/a2a-client.d.ts.map +1 -0
  377. package/dist/platform/a2a-client.js +589 -0
  378. package/dist/platform/a2a-client.js.map +1 -0
  379. package/dist/platform/a2a-fleet.d.ts +41 -0
  380. package/dist/platform/a2a-fleet.d.ts.map +1 -0
  381. package/dist/platform/a2a-fleet.js +109 -0
  382. package/dist/platform/a2a-fleet.js.map +1 -0
  383. package/dist/platform/a2a-maestro-peer.d.ts +20 -0
  384. package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
  385. package/dist/platform/a2a-maestro-peer.js +176 -0
  386. package/dist/platform/a2a-maestro-peer.js.map +1 -0
  387. package/dist/platform/a2a-peer-pairing.d.ts +107 -0
  388. package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
  389. package/dist/platform/a2a-peer-pairing.js +489 -0
  390. package/dist/platform/a2a-peer-pairing.js.map +1 -0
  391. package/dist/platform/a2a-peer-registry.d.ts +68 -0
  392. package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
  393. package/dist/platform/a2a-peer-registry.js +320 -0
  394. package/dist/platform/a2a-peer-registry.js.map +1 -0
  395. package/dist/platform/a2a-task-ledger.d.ts +86 -0
  396. package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
  397. package/dist/platform/a2a-task-ledger.js +546 -0
  398. package/dist/platform/a2a-task-ledger.js.map +1 -0
  399. package/dist/platform/a2a-work-graph.d.ts +43 -0
  400. package/dist/platform/a2a-work-graph.d.ts.map +1 -0
  401. package/dist/platform/a2a-work-graph.js +267 -0
  402. package/dist/platform/a2a-work-graph.js.map +1 -0
  403. package/dist/platform/agent-registry-client.d.ts +327 -0
  404. package/dist/platform/agent-registry-client.d.ts.map +1 -0
  405. package/dist/platform/agent-registry-client.js +803 -0
  406. package/dist/platform/agent-registry-client.js.map +1 -0
  407. package/dist/platform/agent-runtime-client.d.ts +135 -1
  408. package/dist/platform/agent-runtime-client.d.ts.map +1 -1
  409. package/dist/platform/agent-runtime-client.js +467 -10
  410. package/dist/platform/agent-runtime-client.js.map +1 -1
  411. package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
  412. package/dist/platform/cerebro-facts-client.js +4 -7
  413. package/dist/platform/cerebro-facts-client.js.map +1 -1
  414. package/dist/platform/client.d.ts +2 -0
  415. package/dist/platform/client.d.ts.map +1 -1
  416. package/dist/platform/client.js +7 -14
  417. package/dist/platform/client.js.map +1 -1
  418. package/dist/platform/core-services.d.ts +68 -0
  419. package/dist/platform/core-services.d.ts.map +1 -1
  420. package/dist/platform/core-services.js +68 -0
  421. package/dist/platform/core-services.js.map +1 -1
  422. package/dist/platform/fermata-eval-client.d.ts +195 -0
  423. package/dist/platform/fermata-eval-client.d.ts.map +1 -0
  424. package/dist/platform/fermata-eval-client.js +146 -0
  425. package/dist/platform/fermata-eval-client.js.map +1 -0
  426. package/dist/platform/fermata-scenario-suite.d.ts +99 -0
  427. package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
  428. package/dist/platform/fermata-scenario-suite.js +459 -0
  429. package/dist/platform/fermata-scenario-suite.js.map +1 -0
  430. package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
  431. package/dist/platform/maestro-timeline-client.js +5 -11
  432. package/dist/platform/maestro-timeline-client.js.map +1 -1
  433. package/dist/platform/operating-plane-client.d.ts +156 -0
  434. package/dist/platform/operating-plane-client.d.ts.map +1 -0
  435. package/dist/platform/operating-plane-client.js +131 -0
  436. package/dist/platform/operating-plane-client.js.map +1 -0
  437. package/dist/platform/operating-plane-summary.d.ts +47 -0
  438. package/dist/platform/operating-plane-summary.d.ts.map +1 -0
  439. package/dist/platform/operating-plane-summary.js +209 -0
  440. package/dist/platform/operating-plane-summary.js.map +1 -0
  441. package/dist/platform/tool-execution-client.d.ts.map +1 -1
  442. package/dist/platform/tool-execution-client.js +4 -11
  443. package/dist/platform/tool-execution-client.js.map +1 -1
  444. package/dist/prompts/service-client.d.ts.map +1 -1
  445. package/dist/prompts/service-client.js +3 -5
  446. package/dist/prompts/service-client.js.map +1 -1
  447. package/dist/prompts/system-prompt.d.ts +3 -0
  448. package/dist/prompts/system-prompt.d.ts.map +1 -1
  449. package/dist/prompts/system-prompt.js +13 -3
  450. package/dist/prompts/system-prompt.js.map +1 -1
  451. package/dist/prompts/types.d.ts +2 -0
  452. package/dist/prompts/types.d.ts.map +1 -1
  453. package/dist/prompts/types.js.map +1 -1
  454. package/dist/providers/api-keys.d.ts +1 -1
  455. package/dist/providers/api-keys.d.ts.map +1 -1
  456. package/dist/providers/api-keys.js +2 -1
  457. package/dist/providers/api-keys.js.map +1 -1
  458. package/dist/providers/auth.d.ts.map +1 -1
  459. package/dist/providers/auth.js +48 -25
  460. package/dist/providers/auth.js.map +1 -1
  461. package/dist/remote-runner/attach-client.d.ts.map +1 -1
  462. package/dist/remote-runner/attach-client.js +1 -0
  463. package/dist/remote-runner/attach-client.js.map +1 -1
  464. package/dist/remote-runner/client.d.ts.map +1 -1
  465. package/dist/remote-runner/client.js +4 -7
  466. package/dist/remote-runner/client.js.map +1 -1
  467. package/dist/rpc/rpc-types.d.ts.map +1 -1
  468. package/dist/rpc/rpc-types.js +1 -0
  469. package/dist/rpc/rpc-types.js.map +1 -1
  470. package/dist/safety/action-firewall.d.ts.map +1 -1
  471. package/dist/safety/action-firewall.js +69 -6
  472. package/dist/safety/action-firewall.js.map +1 -1
  473. package/dist/safety/attack-patterns.d.ts.map +1 -1
  474. package/dist/safety/attack-patterns.js +31 -14
  475. package/dist/safety/attack-patterns.js.map +1 -1
  476. package/dist/safety/bash-parser.d.ts.map +1 -1
  477. package/dist/safety/bash-parser.js +4 -3
  478. package/dist/safety/bash-parser.js.map +1 -1
  479. package/dist/safety/execpolicy.d.ts +15 -3
  480. package/dist/safety/execpolicy.d.ts.map +1 -1
  481. package/dist/safety/execpolicy.js +248 -37
  482. package/dist/safety/execpolicy.js.map +1 -1
  483. package/dist/safety/governance-service-client.d.ts.map +1 -1
  484. package/dist/safety/governance-service-client.js +4 -7
  485. package/dist/safety/governance-service-client.js.map +1 -1
  486. package/dist/safety/guarded-files.d.ts +34 -0
  487. package/dist/safety/guarded-files.d.ts.map +1 -0
  488. package/dist/safety/guarded-files.js +372 -0
  489. package/dist/safety/guarded-files.js.map +1 -0
  490. package/dist/safety/loop-detector.d.ts.map +1 -1
  491. package/dist/safety/loop-detector.js +6 -1
  492. package/dist/safety/loop-detector.js.map +1 -1
  493. package/dist/safety/permission-profile.d.ts +47 -0
  494. package/dist/safety/permission-profile.d.ts.map +1 -0
  495. package/dist/safety/permission-profile.js +349 -0
  496. package/dist/safety/permission-profile.js.map +1 -0
  497. package/dist/safety/safety-middleware.d.ts +5 -1
  498. package/dist/safety/safety-middleware.d.ts.map +1 -1
  499. package/dist/safety/safety-middleware.js +3 -2
  500. package/dist/safety/safety-middleware.js.map +1 -1
  501. package/dist/safety/suspicious-patterns.d.ts.map +1 -1
  502. package/dist/safety/suspicious-patterns.js +12 -7
  503. package/dist/safety/suspicious-patterns.js.map +1 -1
  504. package/dist/safety/tool-categorization.js +1 -1
  505. package/dist/safety/tool-categorization.js.map +1 -1
  506. package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
  507. package/dist/safety/validators/path-policy-validator.js +7 -0
  508. package/dist/safety/validators/path-policy-validator.js.map +1 -1
  509. package/dist/sandbox/index.d.ts +6 -1
  510. package/dist/sandbox/index.d.ts.map +1 -1
  511. package/dist/sandbox/index.js +30 -4
  512. package/dist/sandbox/index.js.map +1 -1
  513. package/dist/sandbox/native-sandbox.d.ts +3 -0
  514. package/dist/sandbox/native-sandbox.d.ts.map +1 -1
  515. package/dist/sandbox/native-sandbox.js +139 -18
  516. package/dist/sandbox/native-sandbox.js.map +1 -1
  517. package/dist/sentry.d.ts +17 -0
  518. package/dist/sentry.d.ts.map +1 -0
  519. package/dist/sentry.js +91 -0
  520. package/dist/sentry.js.map +1 -0
  521. package/dist/server/agent-runtime-ledger.d.ts +141 -0
  522. package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
  523. package/dist/server/agent-runtime-ledger.js +334 -0
  524. package/dist/server/agent-runtime-ledger.js.map +1 -0
  525. package/dist/server/agent-trajectory-inspection.d.ts +104 -0
  526. package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
  527. package/dist/server/agent-trajectory-inspection.js +168 -0
  528. package/dist/server/agent-trajectory-inspection.js.map +1 -0
  529. package/dist/server/agent-trajectory-replay.d.ts +56 -0
  530. package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
  531. package/dist/server/agent-trajectory-replay.js +214 -0
  532. package/dist/server/agent-trajectory-replay.js.map +1 -0
  533. package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
  534. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
  535. package/dist/server/agent-trajectory-scenarios.js +822 -0
  536. package/dist/server/agent-trajectory-scenarios.js.map +1 -0
  537. package/dist/server/agent-trajectory-scorers.d.ts +61 -0
  538. package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
  539. package/dist/server/agent-trajectory-scorers.js +162 -0
  540. package/dist/server/agent-trajectory-scorers.js.map +1 -0
  541. package/dist/server/agent-trajectory-validation.d.ts +7 -0
  542. package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
  543. package/dist/server/agent-trajectory-validation.js +101 -0
  544. package/dist/server/agent-trajectory-validation.js.map +1 -0
  545. package/dist/server/agent-trajectory.d.ts +50 -0
  546. package/dist/server/agent-trajectory.d.ts.map +1 -0
  547. package/dist/server/agent-trajectory.js +159 -0
  548. package/dist/server/agent-trajectory.js.map +1 -0
  549. package/dist/server/app-context.d.ts +18 -0
  550. package/dist/server/app-context.d.ts.map +1 -1
  551. package/dist/server/app-context.js.map +1 -1
  552. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  553. package/dist/server/handlers/headless-sessions.js +64 -27
  554. package/dist/server/handlers/headless-sessions.js.map +1 -1
  555. package/dist/server/handlers/health.d.ts +6 -0
  556. package/dist/server/handlers/health.d.ts.map +1 -1
  557. package/dist/server/handlers/health.js +6 -0
  558. package/dist/server/handlers/health.js.map +1 -1
  559. package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
  560. package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
  561. package/dist/server/handlers/hosted-runner-drain.js +309 -18
  562. package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
  563. package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
  564. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  565. package/dist/server/handlers/hosted-runner-identity.js +43 -0
  566. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  567. package/dist/server/handlers/mode.d.ts.map +1 -1
  568. package/dist/server/handlers/mode.js +3 -1
  569. package/dist/server/handlers/mode.js.map +1 -1
  570. package/dist/server/handlers/pending-requests.d.ts.map +1 -1
  571. package/dist/server/handlers/pending-requests.js +336 -51
  572. package/dist/server/handlers/pending-requests.js.map +1 -1
  573. package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
  574. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
  575. package/dist/server/handlers/platform-a2a-push.js +136 -0
  576. package/dist/server/handlers/platform-a2a-push.js.map +1 -0
  577. package/dist/server/handlers/sessions.d.ts.map +1 -1
  578. package/dist/server/handlers/sessions.js +21 -1
  579. package/dist/server/handlers/sessions.js.map +1 -1
  580. package/dist/server/headless-runtime-service.d.ts +9 -2
  581. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  582. package/dist/server/headless-runtime-service.js +39 -0
  583. package/dist/server/headless-runtime-service.js.map +1 -1
  584. package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
  585. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
  586. package/dist/server/hosted-agent-runtime-progress.js +1650 -0
  587. package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
  588. package/dist/server/hosted-runner-lease.d.ts +41 -0
  589. package/dist/server/hosted-runner-lease.d.ts.map +1 -0
  590. package/dist/server/hosted-runner-lease.js +140 -0
  591. package/dist/server/hosted-runner-lease.js.map +1 -0
  592. package/dist/server/hosted-session-manager.d.ts +16 -8
  593. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  594. package/dist/server/hosted-session-manager.js +98 -76
  595. package/dist/server/hosted-session-manager.js.map +1 -1
  596. package/dist/server/junit-xml.d.ts +2 -0
  597. package/dist/server/junit-xml.d.ts.map +1 -0
  598. package/dist/server/junit-xml.js +9 -0
  599. package/dist/server/junit-xml.js.map +1 -0
  600. package/dist/server/routes.d.ts.map +1 -1
  601. package/dist/server/routes.js +6 -0
  602. package/dist/server/routes.js.map +1 -1
  603. package/dist/server/scenario-recorder.d.ts +56 -0
  604. package/dist/server/scenario-recorder.d.ts.map +1 -0
  605. package/dist/server/scenario-recorder.js +109 -0
  606. package/dist/server/scenario-recorder.js.map +1 -0
  607. package/dist/server/scripted-scenario-runner.d.ts +46 -0
  608. package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
  609. package/dist/server/scripted-scenario-runner.js +190 -0
  610. package/dist/server/scripted-scenario-runner.js.map +1 -0
  611. package/dist/server/server-middlewares.d.ts +6 -2
  612. package/dist/server/server-middlewares.d.ts.map +1 -1
  613. package/dist/server/server-middlewares.js +8 -2
  614. package/dist/server/server-middlewares.js.map +1 -1
  615. package/dist/server/server-request-manager.d.ts +9 -1
  616. package/dist/server/server-request-manager.d.ts.map +1 -1
  617. package/dist/server/server-request-manager.js +49 -4
  618. package/dist/server/server-request-manager.js.map +1 -1
  619. package/dist/services/intelligent-router/service.d.ts +2 -0
  620. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  621. package/dist/services/intelligent-router/service.js +4 -0
  622. package/dist/services/intelligent-router/service.js.map +1 -1
  623. package/dist/services/service-authority.d.ts +25 -0
  624. package/dist/services/service-authority.d.ts.map +1 -0
  625. package/dist/services/service-authority.js +143 -0
  626. package/dist/services/service-authority.js.map +1 -0
  627. package/dist/services/workspace-config/service.d.ts +2 -0
  628. package/dist/services/workspace-config/service.d.ts.map +1 -1
  629. package/dist/services/workspace-config/service.js +4 -0
  630. package/dist/services/workspace-config/service.js.map +1 -1
  631. package/dist/session/manager.d.ts +8 -2
  632. package/dist/session/manager.d.ts.map +1 -1
  633. package/dist/session/manager.js +19 -4
  634. package/dist/session/manager.js.map +1 -1
  635. package/dist/session/session-branch.d.ts.map +1 -1
  636. package/dist/session/session-branch.js +5 -1
  637. package/dist/session/session-branch.js.map +1 -1
  638. package/dist/session/session-catalog.d.ts +7 -2
  639. package/dist/session/session-catalog.d.ts.map +1 -1
  640. package/dist/session/session-catalog.js +13 -2
  641. package/dist/session/session-catalog.js.map +1 -1
  642. package/dist/session/session-context.d.ts +6 -2
  643. package/dist/session/session-context.d.ts.map +1 -1
  644. package/dist/session/session-context.js +44 -4
  645. package/dist/session/session-context.js.map +1 -1
  646. package/dist/session/session-graph-projection.d.ts +32 -0
  647. package/dist/session/session-graph-projection.d.ts.map +1 -0
  648. package/dist/session/session-graph-projection.js +133 -0
  649. package/dist/session/session-graph-projection.js.map +1 -0
  650. package/dist/session/types.d.ts +18 -0
  651. package/dist/session/types.d.ts.map +1 -1
  652. package/dist/session/types.js +8 -0
  653. package/dist/session/types.js.map +1 -1
  654. package/dist/session/wire-format.generated.d.ts +3 -0
  655. package/dist/session/wire-format.generated.d.ts.map +1 -1
  656. package/dist/session/wire-format.generated.js +20 -0
  657. package/dist/session/wire-format.generated.js.map +1 -1
  658. package/dist/skills/eval-harness.d.ts +38 -0
  659. package/dist/skills/eval-harness.d.ts.map +1 -0
  660. package/dist/skills/eval-harness.js +112 -0
  661. package/dist/skills/eval-harness.js.map +1 -0
  662. package/dist/skills/index.d.ts +5 -1
  663. package/dist/skills/index.d.ts.map +1 -1
  664. package/dist/skills/index.js +5 -1
  665. package/dist/skills/index.js.map +1 -1
  666. package/dist/skills/linter.d.ts +36 -0
  667. package/dist/skills/linter.d.ts.map +1 -0
  668. package/dist/skills/linter.js +398 -0
  669. package/dist/skills/linter.js.map +1 -0
  670. package/dist/skills/loader.d.ts +36 -6
  671. package/dist/skills/loader.d.ts.map +1 -1
  672. package/dist/skills/loader.js +169 -86
  673. package/dist/skills/loader.js.map +1 -1
  674. package/dist/skills/package-contract.d.ts +45 -0
  675. package/dist/skills/package-contract.d.ts.map +1 -0
  676. package/dist/skills/package-contract.js +153 -0
  677. package/dist/skills/package-contract.js.map +1 -0
  678. package/dist/skills/runtime-activation.d.ts +68 -0
  679. package/dist/skills/runtime-activation.d.ts.map +1 -0
  680. package/dist/skills/runtime-activation.js +228 -0
  681. package/dist/skills/runtime-activation.js.map +1 -0
  682. package/dist/skills/service-client.d.ts.map +1 -1
  683. package/dist/skills/service-client.js +3 -4
  684. package/dist/skills/service-client.js.map +1 -1
  685. package/dist/skills/tool.d.ts.map +1 -1
  686. package/dist/skills/tool.js +2 -0
  687. package/dist/skills/tool.js.map +1 -1
  688. package/dist/skills/types.d.ts +14 -0
  689. package/dist/skills/types.d.ts.map +1 -1
  690. package/dist/skills/types.js.map +1 -1
  691. package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
  692. package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
  693. package/dist/telemetry/agent-operating-plane-context.js +54 -0
  694. package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
  695. package/dist/telemetry/beacon.d.ts +24 -0
  696. package/dist/telemetry/beacon.d.ts.map +1 -0
  697. package/dist/telemetry/beacon.js +115 -0
  698. package/dist/telemetry/beacon.js.map +1 -0
  699. package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
  700. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
  701. package/dist/telemetry/cli-command-aggregator.js +251 -0
  702. package/dist/telemetry/cli-command-aggregator.js.map +1 -0
  703. package/dist/telemetry/cli-startup.d.ts +21 -0
  704. package/dist/telemetry/cli-startup.d.ts.map +1 -0
  705. package/dist/telemetry/cli-startup.js +83 -0
  706. package/dist/telemetry/cli-startup.js.map +1 -0
  707. package/dist/telemetry/disablement.d.ts +13 -0
  708. package/dist/telemetry/disablement.d.ts.map +1 -0
  709. package/dist/telemetry/disablement.js +19 -0
  710. package/dist/telemetry/disablement.js.map +1 -0
  711. package/dist/telemetry/index.d.ts +6 -2
  712. package/dist/telemetry/index.d.ts.map +1 -1
  713. package/dist/telemetry/index.js +6 -2
  714. package/dist/telemetry/index.js.map +1 -1
  715. package/dist/telemetry/maestro-event-bus.d.ts +52 -0
  716. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  717. package/dist/telemetry/maestro-event-bus.js +179 -3
  718. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  719. package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
  720. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  721. package/dist/telemetry/maestro-event-catalog.js +2 -0
  722. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  723. package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
  724. package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
  725. package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
  726. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
  727. package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
  728. package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
  729. package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
  730. package/dist/telemetry/mcp-beacon.d.ts +20 -0
  731. package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
  732. package/dist/telemetry/mcp-beacon.js +54 -0
  733. package/dist/telemetry/mcp-beacon.js.map +1 -0
  734. package/dist/telemetry/metadata-normalization.d.ts +7 -0
  735. package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
  736. package/dist/telemetry/metadata-normalization.js +189 -0
  737. package/dist/telemetry/metadata-normalization.js.map +1 -0
  738. package/dist/telemetry/meter-service-client.d.ts.map +1 -1
  739. package/dist/telemetry/meter-service-client.js +5 -10
  740. package/dist/telemetry/meter-service-client.js.map +1 -1
  741. package/dist/telemetry/metrics.d.ts +123 -0
  742. package/dist/telemetry/metrics.d.ts.map +1 -0
  743. package/dist/telemetry/metrics.js +184 -0
  744. package/dist/telemetry/metrics.js.map +1 -0
  745. package/dist/telemetry/turn-tracker.d.ts +1 -0
  746. package/dist/telemetry/turn-tracker.d.ts.map +1 -1
  747. package/dist/telemetry/turn-tracker.js +22 -1
  748. package/dist/telemetry/turn-tracker.js.map +1 -1
  749. package/dist/telemetry/wide-events.d.ts +31 -1
  750. package/dist/telemetry/wide-events.d.ts.map +1 -1
  751. package/dist/telemetry/wide-events.js +229 -1
  752. package/dist/telemetry/wide-events.js.map +1 -1
  753. package/dist/telemetry.d.ts +39 -3
  754. package/dist/telemetry.d.ts.map +1 -1
  755. package/dist/telemetry.js +160 -3
  756. package/dist/telemetry.js.map +1 -1
  757. package/dist/testing/test-verification-hook.d.ts.map +1 -1
  758. package/dist/testing/test-verification-hook.js +34 -21
  759. package/dist/testing/test-verification-hook.js.map +1 -1
  760. package/dist/tools/apply-patch-parser.d.ts +26 -0
  761. package/dist/tools/apply-patch-parser.d.ts.map +1 -0
  762. package/dist/tools/apply-patch-parser.js +146 -0
  763. package/dist/tools/apply-patch-parser.js.map +1 -0
  764. package/dist/tools/apply-patch.d.ts +42 -0
  765. package/dist/tools/apply-patch.d.ts.map +1 -0
  766. package/dist/tools/apply-patch.js +648 -0
  767. package/dist/tools/apply-patch.js.map +1 -0
  768. package/dist/tools/ask-user.d.ts +1 -0
  769. package/dist/tools/ask-user.d.ts.map +1 -1
  770. package/dist/tools/background/tool-handler.d.ts +1 -0
  771. package/dist/tools/background/tool-handler.d.ts.map +1 -1
  772. package/dist/tools/bash.d.ts +1 -0
  773. package/dist/tools/bash.d.ts.map +1 -1
  774. package/dist/tools/codesearch.d.ts +1 -0
  775. package/dist/tools/codesearch.d.ts.map +1 -1
  776. package/dist/tools/conductor-client.d.ts +1 -0
  777. package/dist/tools/conductor-client.d.ts.map +1 -1
  778. package/dist/tools/conductor-client.js +63 -0
  779. package/dist/tools/conductor-client.js.map +1 -1
  780. package/dist/tools/diff.d.ts +1 -0
  781. package/dist/tools/diff.d.ts.map +1 -1
  782. package/dist/tools/edit.d.ts +1 -0
  783. package/dist/tools/edit.d.ts.map +1 -1
  784. package/dist/tools/extract-document.d.ts +1 -0
  785. package/dist/tools/extract-document.d.ts.map +1 -1
  786. package/dist/tools/find.d.ts +10 -0
  787. package/dist/tools/find.d.ts.map +1 -1
  788. package/dist/tools/find.js +236 -27
  789. package/dist/tools/find.js.map +1 -1
  790. package/dist/tools/gh.d.ts +3 -0
  791. package/dist/tools/gh.d.ts.map +1 -1
  792. package/dist/tools/index.d.ts +50 -0
  793. package/dist/tools/index.d.ts.map +1 -1
  794. package/dist/tools/index.js +4 -0
  795. package/dist/tools/index.js.map +1 -1
  796. package/dist/tools/list.d.ts +1 -0
  797. package/dist/tools/list.d.ts.map +1 -1
  798. package/dist/tools/notebook.d.ts +1 -0
  799. package/dist/tools/notebook.d.ts.map +1 -1
  800. package/dist/tools/oracle.d.ts +1 -0
  801. package/dist/tools/oracle.d.ts.map +1 -1
  802. package/dist/tools/oracle.js +17 -32
  803. package/dist/tools/oracle.js.map +1 -1
  804. package/dist/tools/parallel-execution.d.ts +13 -2
  805. package/dist/tools/parallel-execution.d.ts.map +1 -1
  806. package/dist/tools/parallel-execution.js +178 -7
  807. package/dist/tools/parallel-execution.js.map +1 -1
  808. package/dist/tools/parallel-ripgrep.d.ts +1 -0
  809. package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
  810. package/dist/tools/pipeline.d.ts +4 -0
  811. package/dist/tools/pipeline.d.ts.map +1 -1
  812. package/dist/tools/read.d.ts +1 -0
  813. package/dist/tools/read.d.ts.map +1 -1
  814. package/dist/tools/search.d.ts +1 -0
  815. package/dist/tools/search.d.ts.map +1 -1
  816. package/dist/tools/status.d.ts +1 -0
  817. package/dist/tools/status.d.ts.map +1 -1
  818. package/dist/tools/todo.d.ts +1 -0
  819. package/dist/tools/todo.d.ts.map +1 -1
  820. package/dist/tools/tool-dsl.d.ts +5 -1
  821. package/dist/tools/tool-dsl.d.ts.map +1 -1
  822. package/dist/tools/tool-dsl.js +1 -0
  823. package/dist/tools/tool-dsl.js.map +1 -1
  824. package/dist/tools/tool-result-cache.d.ts.map +1 -1
  825. package/dist/tools/tool-result-cache.js +1 -0
  826. package/dist/tools/tool-result-cache.js.map +1 -1
  827. package/dist/tools/typebox-tool.d.ts.map +1 -1
  828. package/dist/tools/typebox-tool.js +3 -0
  829. package/dist/tools/typebox-tool.js.map +1 -1
  830. package/dist/tools/webfetch.d.ts +1 -0
  831. package/dist/tools/webfetch.d.ts.map +1 -1
  832. package/dist/tools/websearch.d.ts +1 -0
  833. package/dist/tools/websearch.d.ts.map +1 -1
  834. package/dist/tools/write.d.ts +1 -0
  835. package/dist/tools/write.d.ts.map +1 -1
  836. package/dist/utils/abort-error.d.ts +2 -0
  837. package/dist/utils/abort-error.d.ts.map +1 -0
  838. package/dist/utils/abort-error.js +7 -0
  839. package/dist/utils/abort-error.js.map +1 -0
  840. package/dist/utils/downstream.d.ts.map +1 -1
  841. package/dist/utils/downstream.js +4 -0
  842. package/dist/utils/downstream.js.map +1 -1
  843. package/dist/utils/logger.d.ts +3 -0
  844. package/dist/utils/logger.d.ts.map +1 -1
  845. package/dist/utils/logger.js +14 -3
  846. package/dist/utils/logger.js.map +1 -1
  847. package/dist/utils/path-containment.d.ts +2 -0
  848. package/dist/utils/path-containment.d.ts.map +1 -0
  849. package/dist/utils/path-containment.js +14 -0
  850. package/dist/utils/path-containment.js.map +1 -0
  851. package/dist/utils/prompt-safe-text.d.ts +7 -0
  852. package/dist/utils/prompt-safe-text.d.ts.map +1 -0
  853. package/dist/utils/prompt-safe-text.js +44 -0
  854. package/dist/utils/prompt-safe-text.js.map +1 -0
  855. package/dist/version.json +2 -2
  856. package/dist/web-server.d.ts.map +1 -1
  857. package/dist/web-server.js +32 -7
  858. package/dist/web-server.js.map +1 -1
  859. package/dist/workspace/root-resolver.d.ts +4 -1
  860. package/dist/workspace/root-resolver.d.ts.map +1 -1
  861. package/dist/workspace/root-resolver.js +16 -6
  862. package/dist/workspace/root-resolver.js.map +1 -1
  863. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
  864. package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
  865. package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
  866. package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
  867. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
  868. package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
  869. package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
  870. package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
  871. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
  872. package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
  873. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
  874. package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
  875. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
  876. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
  877. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
  878. package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
  879. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
  880. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
  881. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
  882. package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
  883. package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
  884. package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
  885. package/node_modules/@evalops/contracts/dist/index.js +6 -0
  886. package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  887. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
  888. package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
  889. package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
  890. package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
  891. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
  892. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
  893. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
  894. package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
  895. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
  896. package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
  897. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
  898. package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
  899. package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
  900. package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
  901. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
  902. package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
  903. package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
  904. package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
  905. package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
  906. package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
  907. package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
  908. package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
  909. package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
  910. package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
  911. package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
  912. package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
  913. package/node_modules/@evalops/contracts/package.json +1 -1
  914. package/node_modules/@evalops/tui/package.json +1 -1
  915. package/package.json +41 -7
  916. package/skills/incident-triage/SKILL.md +40 -0
  917. package/skills/incident-triage/mcp.json +14 -0
  918. package/skills/incident-triage/reference/triage.md +20 -0
  919. package/skills/incident-triage/toolbox/incident-timeline +22 -0
  920. package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
  921. package/skills/pr-review/SKILL.md +40 -0
  922. package/skills/pr-review/mcp.json +14 -0
  923. package/skills/pr-review/reference/rubric.md +20 -0
  924. package/skills/pr-review/toolbox/review-summary +20 -0
  925. package/skills/pr-review/toolbox/review-summary.cmd +14 -0
  926. package/skills/release-verification/SKILL.md +40 -0
  927. package/skills/release-verification/mcp.json +15 -0
  928. package/skills/release-verification/reference/checklist.md +21 -0
  929. package/skills/release-verification/toolbox/release-readiness +18 -0
  930. package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-safe-text.d.ts","sourceRoot":"","sources":["../../src/utils/prompt-safe-text.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,OAAO,CAAC;AAExD;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,SAAS,SAAsC,GAC7C,MAAM,GAAG,IAAI,CA0Cf"}
@@ -0,0 +1,44 @@
1
+ export const DEFAULT_PROMPT_SAFE_TEXT_MAX_LENGTH = 1024;
2
+ /**
3
+ * Normalize externally-authored metadata before including it in prompts or
4
+ * model-facing tool output.
5
+ */
6
+ export function promptSafeText(value, maxLength = DEFAULT_PROMPT_SAFE_TEXT_MAX_LENGTH) {
7
+ if (!value || maxLength <= 0) {
8
+ return null;
9
+ }
10
+ let output = "";
11
+ let emitted = 0;
12
+ let whitespaceRun = 0;
13
+ let pendingSpace = false;
14
+ let hasText = false;
15
+ for (const char of value) {
16
+ if (/\s/u.test(char)) {
17
+ if (whitespaceRun >= maxLength) {
18
+ break;
19
+ }
20
+ whitespaceRun += 1;
21
+ if (hasText) {
22
+ pendingSpace = true;
23
+ }
24
+ continue;
25
+ }
26
+ whitespaceRun = 0;
27
+ if (pendingSpace && emitted > 0) {
28
+ if (emitted + 1 >= maxLength) {
29
+ break;
30
+ }
31
+ output += " ";
32
+ emitted += 1;
33
+ pendingSpace = false;
34
+ }
35
+ if (emitted >= maxLength) {
36
+ break;
37
+ }
38
+ output += char;
39
+ emitted += 1;
40
+ hasText = true;
41
+ }
42
+ return output || null;
43
+ }
44
+ //# sourceMappingURL=prompt-safe-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-safe-text.js","sourceRoot":"","sources":["../../src/utils/prompt-safe-text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC7B,KAAgC,EAChC,SAAS,GAAG,mCAAmC;IAE/C,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;gBAChC,MAAM;YACP,CAAC;YACD,aAAa,IAAI,CAAC,CAAC;YACnB,IAAI,OAAO,EAAE,CAAC;gBACb,YAAY,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,SAAS;QACV,CAAC;QAED,aAAa,GAAG,CAAC,CAAC;QAClB,IAAI,YAAY,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM;YACP,CAAC;YACD,MAAM,IAAI,GAAG,CAAC;YACd,OAAO,IAAI,CAAC,CAAC;YACb,YAAY,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM;QACP,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;QACf,OAAO,IAAI,CAAC,CAAC;QACb,OAAO,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,IAAI,IAAI,CAAC;AACvB,CAAC","sourcesContent":["export const DEFAULT_PROMPT_SAFE_TEXT_MAX_LENGTH = 1024;\n\n/**\n * Normalize externally-authored metadata before including it in prompts or\n * model-facing tool output.\n */\nexport function promptSafeText(\n\tvalue: string | null | undefined,\n\tmaxLength = DEFAULT_PROMPT_SAFE_TEXT_MAX_LENGTH,\n): string | null {\n\tif (!value || maxLength <= 0) {\n\t\treturn null;\n\t}\n\n\tlet output = \"\";\n\tlet emitted = 0;\n\tlet whitespaceRun = 0;\n\tlet pendingSpace = false;\n\tlet hasText = false;\n\n\tfor (const char of value) {\n\t\tif (/\\s/u.test(char)) {\n\t\t\tif (whitespaceRun >= maxLength) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhitespaceRun += 1;\n\t\t\tif (hasText) {\n\t\t\t\tpendingSpace = true;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\twhitespaceRun = 0;\n\t\tif (pendingSpace && emitted > 0) {\n\t\t\tif (emitted + 1 >= maxLength) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toutput += \" \";\n\t\t\temitted += 1;\n\t\t\tpendingSpace = false;\n\t\t}\n\n\t\tif (emitted >= maxLength) {\n\t\t\tbreak;\n\t\t}\n\t\toutput += char;\n\t\temitted += 1;\n\t\thasText = true;\n\t}\n\n\treturn output || null;\n}\n"]}
package/dist/version.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "0.10.17",
3
- "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.17 is now available."
2
+ "version": "0.10.20",
3
+ "notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.20 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;AAqCnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe5D,OAAO,KAAK,EACX,mBAAmB,EAEnB,MAAM,yBAAyB,CAAC;AAqBjC,UAAU,qBAAqB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAuFD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAiMrD,eAAO,MAAM,qBAAqB;iBACpB,eAAe;;;kBAbT,MAAM;iBAAW,MAAM;;CAgB1C,CAAC;AA6XF,wBAAsB,cAAc,CACnC,IAAI,SAAO,EACX,OAAO,GAAE,qBAA0B,iFAyRnC"}
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;AAuCnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe5D,OAAO,KAAK,EACX,mBAAmB,EAEnB,MAAM,yBAAyB,CAAC;AAqBjC,UAAU,qBAAqB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAyFD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAqMrD,eAAO,MAAM,qBAAqB;iBACpB,eAAe;;;kBAbT,MAAM;iBAAW,MAAM;;CAgB1C,CAAC;AA8YF,wBAAsB,cAAc,CACnC,IAAI,SAAO,EACX,OAAO,GAAE,qBAA0B,iFAyRnC"}
@@ -10,8 +10,10 @@ import { createBackgroundTextAgent } from "./agent/background-agent.js";
10
10
  import { BackgroundTaskContextSource, CurrentDateContextSource, FrameworkPreferenceContextSource, GitSnapshotContextSource, IDEContextSource, LspContextSource, TeamMemoryContextSource, TodoContextSource, } from "./agent/context-providers.js";
11
11
  import { Agent, ProviderTransport } from "./agent/index.js";
12
12
  import { disposeCheckpointService, initCheckpointService, } from "./checkpoints/index.js";
13
+ import { detectRuntimeConstraintContext } from "./cli/system-prompt.js";
13
14
  import { composerManager } from "./composers/index.js";
14
15
  import { resolveDefaultApprovalMode } from "./config/default-approval-mode.js";
16
+ import { loadUnifiedContextManifest } from "./context/manifest.js";
15
17
  import { initLifecycle, shutdownLifecycle } from "./lifecycle.js";
16
18
  import { loadEnv } from "./load-env.js";
17
19
  import { bootstrapLsp } from "./lsp/bootstrap.js";
@@ -62,11 +64,13 @@ const getDbModule = (() => {
62
64
  return promise;
63
65
  };
64
66
  })();
67
+ import { captureSentryException, flushSentry, initSentry } from "./sentry.js";
65
68
  import { WebActionApprovalService } from "./server/approval-service.js";
66
69
  import { checkApiAuth, getAuthSubject } from "./server/authz.js";
67
70
  import { startAutomationScheduler } from "./server/automations/scheduler.js";
68
71
  import { clientToolService } from "./server/client-tools-service.js";
69
72
  import { handleChatWebSocket } from "./server/handlers/chat-ws.js";
73
+ import { platformA2APushAuthBoundaryExemptPaths } from "./server/handlers/platform-a2a-push.js";
70
74
  import { handleRuntimeAppServerWebSocket } from "./server/handlers/runtime-app-server-ws.js";
71
75
  import { sessionIdPattern, verifySessionOwnership, } from "./server/handlers/sessions.js";
72
76
  import { HeadlessRuntimeService } from "./server/headless-runtime-service.js";
@@ -88,19 +92,23 @@ import { resolveWebRoot } from "./server/web-root.js";
88
92
  export { SseSession } from "./server/sse-session.js";
89
93
  loadEnv();
90
94
  void initOpenTelemetry("composer-web-server");
95
+ initSentry("maestro-web-server");
91
96
  // Global crash handlers
92
97
  function registerCrashHandlers() {
93
98
  process.on("uncaughtException", (error) => {
94
99
  logError(error);
100
+ captureSentryException(error);
95
101
  logger.error("FATAL: Uncaught Exception. Exiting...");
96
- process.exit(1);
102
+ void flushSentry().finally(() => process.exit(1));
97
103
  });
98
104
  process.on("unhandledRejection", (reason) => {
99
- logError(reason instanceof Error
105
+ const error = reason instanceof Error
100
106
  ? reason
101
- : new Error(`Unhandled Rejection: ${String(reason)}`));
107
+ : new Error(`Unhandled Rejection: ${String(reason)}`);
108
+ logError(error);
109
+ captureSentryException(error);
102
110
  logger.error("FATAL: Unhandled Rejection. Exiting...");
103
- process.exit(1);
111
+ void flushSentry().finally(() => process.exit(1));
104
112
  });
105
113
  }
106
114
  async function validateRuntimeSessionAccess(req, sessionId) {
@@ -141,6 +149,7 @@ const WEB_API_KEY = process.env.MAESTRO_WEB_API_KEY?.trim() || null;
141
149
  const requireKeyEnv = process.env.MAESTRO_WEB_REQUIRE_KEY;
142
150
  const requireRedisEnv = process.env.MAESTRO_WEB_REQUIRE_REDIS;
143
151
  const CSRF_TOKEN = process.env.MAESTRO_WEB_CSRF_TOKEN?.trim() || null;
152
+ const AUTH_BOUNDARY_EXEMPT_PATHS = platformA2APushAuthBoundaryExemptPaths();
144
153
  const REQUIRE_CSRF = (PROD_PROFILE && process.env.MAESTRO_WEB_REQUIRE_CSRF !== "0") ||
145
154
  Boolean(process.env.MAESTRO_WEB_CSRF_TOKEN);
146
155
  // Default: require in normal runtime, but don't break tests unless explicitly opted in.
@@ -316,7 +325,17 @@ async function createAgent(registeredModel, thinkingLevel = "off", approvalMode
316
325
  sessionTokenCounter,
317
326
  auditLogger,
318
327
  });
319
- const { systemPrompt, promptMetadata } = await resolveMaestroSystemPrompt();
328
+ const runtimeConstraints = detectRuntimeConstraintContext({
329
+ cwd,
330
+ sandboxMode: process.env.MAESTRO_SANDBOX_MODE ?? null,
331
+ });
332
+ const { systemPrompt, promptMetadata, promptContextManifest } = await resolveMaestroSystemPrompt({
333
+ cwd,
334
+ runtimeConstraints,
335
+ });
336
+ const unifiedContextManifest = loadUnifiedContextManifest(cwd, {
337
+ projectDocs: promptContextManifest,
338
+ });
320
339
  // Only include IDE client tools when a compatible client is connected.
321
340
  // Without a connected client, these tools will hang waiting for responses.
322
341
  const mcpTools = getAllMcpTools();
@@ -342,6 +361,8 @@ async function createAgent(registeredModel, thinkingLevel = "off", approvalMode
342
361
  initialState: {
343
362
  systemPrompt,
344
363
  promptMetadata,
364
+ promptContextManifest,
365
+ unifiedContextManifest,
345
366
  model: registeredModel,
346
367
  thinkingLevel,
347
368
  tools,
@@ -503,8 +524,12 @@ async function handleRequest(req, res) {
503
524
  createLoadSheddingMiddleware(CORS_HEADERS),
504
525
  createTieredRateLimitMiddleware(rateLimiter, CORS_HEADERS, TRUST_PROXY, TRUST_PROXY_HOPS),
505
526
  createCorsMiddleware(CORS_HEADERS),
506
- createAuthMiddleware(WEB_API_KEY, CORS_HEADERS, REQUIRE_WEB_API_KEY),
507
- createCsrfMiddleware(CSRF_TOKEN, CORS_HEADERS, REQUIRE_CSRF),
527
+ createAuthMiddleware(WEB_API_KEY, CORS_HEADERS, REQUIRE_WEB_API_KEY, {
528
+ exemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,
529
+ }),
530
+ createCsrfMiddleware(CSRF_TOKEN, CORS_HEADERS, REQUIRE_CSRF, {
531
+ exemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,
532
+ }),
508
533
  createWorkspaceConfigMiddleware(CORS_HEADERS),
509
534
  createRouterMiddleware(router),
510
535
  ]);
@@ -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 Composer - 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 { AgentTool, ThinkingLevel } from \"./agent/types.js\";\nimport {\n\tdisposeCheckpointService,\n\tinitCheckpointService,\n} from \"./checkpoints/index.js\";\nimport { composerManager } from \"./composers/index.js\";\nimport { resolveDefaultApprovalMode } from \"./config/default-approval-mode.js\";\nimport { initLifecycle, shutdownLifecycle } from \"./lifecycle.js\";\nimport { loadEnv } 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 { 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\";\n\nconst logger = createLogger(\"web-server\");\n\ninterface StartWebServerOptions {\n\thost?: string;\n\thostedRunner?: HostedRunnerContext;\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 { 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 { 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 { resolveWebRoot } from \"./server/web-root.js\";\n\n// Re-export for existing test imports\nexport { SseSession } from \"./server/sse-session.js\";\n\nloadEnv();\nvoid initOpenTelemetry(\"composer-web-server\");\n\n// Global crash handlers\nfunction registerCrashHandlers() {\n\tprocess.on(\"uncaughtException\", (error) => {\n\t\tlogError(error);\n\t\tlogger.error(\"FATAL: Uncaught Exception. Exiting...\");\n\t\tprocess.exit(1);\n\t});\n\n\tprocess.on(\"unhandledRejection\", (reason) => {\n\t\tlogError(\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\t);\n\t\tlogger.error(\"FATAL: Unhandled Rejection. Exiting...\");\n\t\tprocess.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 (\n\t\tnormalized === \"auto\" ||\n\t\tnormalized === \"api-key\" ||\n\t\tnormalized === \"claude\"\n\t) {\n\t\treturn normalized;\n\t}\n\treturn \"auto\";\n}\n\nconst PROFILE = (\n\tprocess.env.MAESTRO_PROFILE ||\n\tprocess.env.MAESTRO_WEB_PROFILE ||\n\t\"\"\n)\n\t.trim()\n\t.toLowerCase();\nconst PROD_PROFILE =\n\tPROFILE === \"prod\" ||\n\tPROFILE === \"production\" ||\n\tPROFILE === \"secure\" ||\n\tPROFILE === \"hardened\";\n\nconst DEFAULT_APPROVAL_MODE = resolveDefaultApprovalMode({\n\tprofile: PROFILE,\n\texplicitApprovalMode: process.env.MAESTRO_APPROVAL_MODE,\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 CSRF_TOKEN = process.env.MAESTRO_WEB_CSRF_TOKEN?.trim() || null;\nconst REQUIRE_CSRF =\n\t(PROD_PROFILE && process.env.MAESTRO_WEB_REQUIRE_CSRF !== \"0\") ||\n\tBoolean(process.env.MAESTRO_WEB_CSRF_TOKEN);\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\";\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\";\nif (PROD_PROFILE && !process.env.MAESTRO_FAIL_UNTAGGED_EGRESS) {\n\tprocess.env.MAESTRO_FAIL_UNTAGGED_EGRESS = \"1\";\n}\nif (PROD_PROFILE && !process.env.MAESTRO_BACKGROUND_SHELL_DISABLE) {\n\tprocess.env.MAESTRO_BACKGROUND_SHELL_DISABLE = \"1\";\n}\nif (REQUIRE_CSRF && !CSRF_TOKEN) {\n\tthrow new Error(\n\t\t\"MAESTRO_WEB_CSRF_TOKEN is required when CSRF enforcement is enabled (MAESTRO_PROFILE=prod or MAESTRO_WEB_REQUIRE_CSRF=1).\",\n\t);\n}\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 = \"anthropic\";\nconst DEFAULT_MODEL_ID = \"claude-sonnet-4-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(\"Run `maestro anthropic login` to provision OAuth credentials.\");\n\t} else if (provider === \"openai\") {\n\t\thints.push(\"Set OPENAI_API_KEY or run `maestro openai login`.\");\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\tawait ensureCredential(registeredModel.provider);\n\tmodelSelectionStore.set(registeredModel);\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 = DEFAULT_APPROVAL_MODE,\n\toptions?: {\n\t\tcwd?: 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},\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: error instanceof Error ? error.message : String(error),\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: error instanceof Error ? error.message : String(error),\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\tsessionTokenCounter,\n\t\tauditLogger,\n\t});\n\n\tconst { systemPrompt, promptMetadata } = await resolveMaestroSystemPrompt();\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\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 composer manager for this agent (enables sub-agents/composers)\n\tcomposerManager.initialize(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);\nconst SECURITY_HEADERS: Record<string, string> =\n\tPROD_PROFILE || process.env.MAESTRO_WEB_CSP?.trim()\n\t\t? {\n\t\t\t\t\"Content-Security-Policy\":\n\t\t\t\t\tprocess.env.MAESTRO_WEB_CSP ||\n\t\t\t\t\t[\n\t\t\t\t\t\t\"default-src 'none'\",\n\t\t\t\t\t\t`connect-src 'self' ${ALLOWED_ORIGIN}`,\n\t\t\t\t\t\t\"img-src 'self' data:\",\n\t\t\t\t\t\t\"style-src 'self' 'unsafe-inline'\",\n\t\t\t\t\t\t\"script-src 'self'\",\n\t\t\t\t\t\t\"font-src 'self' data:\",\n\t\t\t\t\t\t\"frame-ancestors 'none'\",\n\t\t\t\t\t\t\"base-uri 'self'\",\n\t\t\t\t\t\t\"form-action 'self'\",\n\t\t\t\t\t].join(\"; \"),\n\t\t\t\t\"Referrer-Policy\": \"no-referrer\",\n\t\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t\t\"Permissions-Policy\": \"geolocation=(), microphone=(self), camera=()\",\n\t\t\t}\n\t\t: {};\n\nconst headlessRuntimeService = new HeadlessRuntimeService();\n\nconst context: WebServerContext = {\n\tcorsHeaders: CORS_HEADERS,\n\tstaticMaxAge: STATIC_MAX_AGE,\n\tdefaultApprovalMode: DEFAULT_APPROVAL_MODE,\n\tdefaultProvider: DEFAULT_PROVIDER,\n\tdefaultModelId: DEFAULT_MODEL_ID,\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};\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: SECURITY_HEADERS,\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\tcreateCsrfMiddleware(CSRF_TOKEN, CORS_HEADERS, REQUIRE_CSRF),\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\tif (options.hostedRunner) {\n\t\tcontext.hostedRunner = options.hostedRunner;\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: error instanceof Error ? error.message : String(error),\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: error instanceof Error ? error.message : String(error),\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 (ALLOWED_ORIGIN !== \"*\" && req.headers.origin) {\n\t\t\tif (req.headers.origin !== ALLOWED_ORIGIN) {\n\t\t\t\tsocket.write(\"HTTP/1.1 403 Forbidden\\r\\n\\r\\n\");\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\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: error instanceof Error ? error.message : String(error),\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 Composer - 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 { AgentTool, ThinkingLevel } from \"./agent/types.js\";\nimport {\n\tdisposeCheckpointService,\n\tinitCheckpointService,\n} from \"./checkpoints/index.js\";\nimport { detectRuntimeConstraintContext } from \"./cli/system-prompt.js\";\nimport { composerManager } from \"./composers/index.js\";\nimport { resolveDefaultApprovalMode } from \"./config/default-approval-mode.js\";\nimport { loadUnifiedContextManifest } from \"./context/manifest.js\";\nimport { initLifecycle, shutdownLifecycle } from \"./lifecycle.js\";\nimport { loadEnv } 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 { 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\";\n\nconst logger = createLogger(\"web-server\");\n\ninterface StartWebServerOptions {\n\thost?: string;\n\thostedRunner?: HostedRunnerContext;\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 { resolveWebRoot } from \"./server/web-root.js\";\n\n// Re-export for existing test imports\nexport { SseSession } from \"./server/sse-session.js\";\n\nloadEnv();\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 (\n\t\tnormalized === \"auto\" ||\n\t\tnormalized === \"api-key\" ||\n\t\tnormalized === \"claude\"\n\t) {\n\t\treturn normalized;\n\t}\n\treturn \"auto\";\n}\n\nconst PROFILE = (\n\tprocess.env.MAESTRO_PROFILE ||\n\tprocess.env.MAESTRO_WEB_PROFILE ||\n\t\"\"\n)\n\t.trim()\n\t.toLowerCase();\nconst PROD_PROFILE =\n\tPROFILE === \"prod\" ||\n\tPROFILE === \"production\" ||\n\tPROFILE === \"secure\" ||\n\tPROFILE === \"hardened\";\n\nconst DEFAULT_APPROVAL_MODE = resolveDefaultApprovalMode({\n\tprofile: PROFILE,\n\texplicitApprovalMode: process.env.MAESTRO_APPROVAL_MODE,\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 CSRF_TOKEN = process.env.MAESTRO_WEB_CSRF_TOKEN?.trim() || null;\nconst AUTH_BOUNDARY_EXEMPT_PATHS = platformA2APushAuthBoundaryExemptPaths();\nconst REQUIRE_CSRF =\n\t(PROD_PROFILE && process.env.MAESTRO_WEB_REQUIRE_CSRF !== \"0\") ||\n\tBoolean(process.env.MAESTRO_WEB_CSRF_TOKEN);\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\";\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\";\nif (PROD_PROFILE && !process.env.MAESTRO_FAIL_UNTAGGED_EGRESS) {\n\tprocess.env.MAESTRO_FAIL_UNTAGGED_EGRESS = \"1\";\n}\nif (PROD_PROFILE && !process.env.MAESTRO_BACKGROUND_SHELL_DISABLE) {\n\tprocess.env.MAESTRO_BACKGROUND_SHELL_DISABLE = \"1\";\n}\nif (REQUIRE_CSRF && !CSRF_TOKEN) {\n\tthrow new Error(\n\t\t\"MAESTRO_WEB_CSRF_TOKEN is required when CSRF enforcement is enabled (MAESTRO_PROFILE=prod or MAESTRO_WEB_REQUIRE_CSRF=1).\",\n\t);\n}\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 = \"anthropic\";\nconst DEFAULT_MODEL_ID = \"claude-sonnet-4-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(\"Run `maestro anthropic login` to provision OAuth credentials.\");\n\t} else if (provider === \"openai\") {\n\t\thints.push(\"Set OPENAI_API_KEY or run `maestro openai login`.\");\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\tawait ensureCredential(registeredModel.provider);\n\tmodelSelectionStore.set(registeredModel);\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 = DEFAULT_APPROVAL_MODE,\n\toptions?: {\n\t\tcwd?: 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},\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: error instanceof Error ? error.message : String(error),\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: error instanceof Error ? error.message : String(error),\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\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 { systemPrompt, promptMetadata, promptContextManifest } =\n\t\tawait resolveMaestroSystemPrompt({\n\t\t\tcwd,\n\t\t\truntimeConstraints,\n\t\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\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 composer manager for this agent (enables sub-agents/composers)\n\tcomposerManager.initialize(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);\nconst SECURITY_HEADERS: Record<string, string> =\n\tPROD_PROFILE || process.env.MAESTRO_WEB_CSP?.trim()\n\t\t? {\n\t\t\t\t\"Content-Security-Policy\":\n\t\t\t\t\tprocess.env.MAESTRO_WEB_CSP ||\n\t\t\t\t\t[\n\t\t\t\t\t\t\"default-src 'none'\",\n\t\t\t\t\t\t`connect-src 'self' ${ALLOWED_ORIGIN}`,\n\t\t\t\t\t\t\"img-src 'self' data:\",\n\t\t\t\t\t\t\"style-src 'self' 'unsafe-inline'\",\n\t\t\t\t\t\t\"script-src 'self'\",\n\t\t\t\t\t\t\"font-src 'self' data:\",\n\t\t\t\t\t\t\"frame-ancestors 'none'\",\n\t\t\t\t\t\t\"base-uri 'self'\",\n\t\t\t\t\t\t\"form-action 'self'\",\n\t\t\t\t\t].join(\"; \"),\n\t\t\t\t\"Referrer-Policy\": \"no-referrer\",\n\t\t\t\t\"X-Content-Type-Options\": \"nosniff\",\n\t\t\t\t\"Permissions-Policy\": \"geolocation=(), microphone=(self), camera=()\",\n\t\t\t}\n\t\t: {};\n\nconst headlessRuntimeService = new HeadlessRuntimeService();\n\nconst context: WebServerContext = {\n\tcorsHeaders: CORS_HEADERS,\n\tstaticMaxAge: STATIC_MAX_AGE,\n\tdefaultApprovalMode: DEFAULT_APPROVAL_MODE,\n\tdefaultProvider: DEFAULT_PROVIDER,\n\tdefaultModelId: DEFAULT_MODEL_ID,\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};\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: SECURITY_HEADERS,\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}),\n\t\t\tcreateCsrfMiddleware(CSRF_TOKEN, CORS_HEADERS, REQUIRE_CSRF, {\n\t\t\t\texemptPaths: AUTH_BOUNDARY_EXEMPT_PATHS,\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\tif (options.hostedRunner) {\n\t\tcontext.hostedRunner = options.hostedRunner;\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: error instanceof Error ? error.message : String(error),\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: error instanceof Error ? error.message : String(error),\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 (ALLOWED_ORIGIN !== \"*\" && req.headers.origin) {\n\t\t\tif (req.headers.origin !== ALLOWED_ORIGIN) {\n\t\t\t\tsocket.write(\"HTTP/1.1 403 Forbidden\\r\\n\\r\\n\");\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\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: error instanceof Error ? error.message : String(error),\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,3 +1,6 @@
1
- export declare function resolveWorkspaceRoot(filePath: string): Promise<string | undefined>;
1
+ export type ResolveWorkspaceRootOptions = {
2
+ stopAt?: string;
3
+ };
4
+ export declare function resolveWorkspaceRoot(filePath: string, options?: ResolveWorkspaceRootOptions): Promise<string | undefined>;
2
5
  export declare function resetWorkspaceRootCacheForTests(): void;
3
6
  //# sourceMappingURL=root-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"root-resolver.d.ts","sourceRoot":"","sources":["../../src/workspace/root-resolver.ts"],"names":[],"mappings":"AAuBA,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyB7B;AAMD,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD"}
1
+ {"version":3,"file":"root-resolver.d.ts","sourceRoot":"","sources":["../../src/workspace/root-resolver.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,2BAA2B,GAAG;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,oBAAoB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,2BAAgC,GACvC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B;AAaD,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD"}
@@ -18,27 +18,34 @@ const ROOT_MARKERS = [
18
18
  ".git",
19
19
  ];
20
20
  const cache = new Map();
21
- export async function resolveWorkspaceRoot(filePath) {
21
+ export async function resolveWorkspaceRoot(filePath, options = {}) {
22
22
  const absolute = resolve(filePath);
23
23
  const startDir = dirname(absolute);
24
- const cached = cache.get(startDir);
24
+ const stopDir = options.stopAt ? resolve(options.stopAt) : undefined;
25
+ const startCacheKey = workspaceRootCacheKey(startDir, stopDir);
26
+ const cached = cache.get(startCacheKey);
25
27
  if (cached !== undefined) {
26
28
  return cached ?? undefined;
27
29
  }
28
30
  let current = startDir;
29
31
  while (true) {
30
- const cachedCandidate = cache.get(current);
32
+ const currentCacheKey = workspaceRootCacheKey(current, stopDir);
33
+ const cachedCandidate = cache.get(currentCacheKey);
31
34
  if (cachedCandidate !== undefined) {
32
- cache.set(startDir, cachedCandidate);
35
+ cache.set(startCacheKey, cachedCandidate);
33
36
  return cachedCandidate ?? undefined;
34
37
  }
35
38
  if (hasMarker(current)) {
36
- cache.set(startDir, current);
39
+ cache.set(startCacheKey, current);
37
40
  return current;
38
41
  }
42
+ if (stopDir && current === stopDir) {
43
+ cache.set(startCacheKey, null);
44
+ return undefined;
45
+ }
39
46
  const parent = dirname(current);
40
47
  if (parent === current) {
41
- cache.set(startDir, null);
48
+ cache.set(startCacheKey, null);
42
49
  return undefined;
43
50
  }
44
51
  current = parent;
@@ -47,6 +54,9 @@ export async function resolveWorkspaceRoot(filePath) {
47
54
  function hasMarker(dir) {
48
55
  return ROOT_MARKERS.some((marker) => existsSync(join(dir, marker)));
49
56
  }
57
+ function workspaceRootCacheKey(dir, stopDir) {
58
+ return stopDir ? `${dir}\0${stopDir}` : dir;
59
+ }
50
60
  export function resetWorkspaceRootCacheForTests() {
51
61
  cache.clear();
52
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"root-resolver.js","sourceRoot":"","sources":["../../src/workspace/root-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,YAAY,GAAG;IACpB,cAAc;IACd,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,MAAM;CACN,CAAC;AAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAAgB;IAEhB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,SAAS,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACrC,OAAO,eAAe,IAAI,SAAS,CAAC;QACrC,CAAC;QACD,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1B,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC9C,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nconst ROOT_MARKERS = [\n\t\"package.json\",\n\t\"pnpm-workspace.yaml\",\n\t\"pnpm-lock.yaml\",\n\t\"yarn.lock\",\n\t\"lerna.json\",\n\t\"turbo.json\",\n\t\"nx.json\",\n\t\"tsconfig.json\",\n\t\"pyproject.toml\",\n\t\"requirements.txt\",\n\t\"poetry.lock\",\n\t\"go.mod\",\n\t\"Cargo.toml\",\n\t\"composer.json\",\n\t\".git\",\n];\n\nconst cache = new Map<string, string | null>();\n\nexport async function resolveWorkspaceRoot(\n\tfilePath: string,\n): Promise<string | undefined> {\n\tconst absolute = resolve(filePath);\n\tconst startDir = dirname(absolute);\n\tconst cached = cache.get(startDir);\n\tif (cached !== undefined) {\n\t\treturn cached ?? undefined;\n\t}\n\tlet current = startDir;\n\twhile (true) {\n\t\tconst cachedCandidate = cache.get(current);\n\t\tif (cachedCandidate !== undefined) {\n\t\t\tcache.set(startDir, cachedCandidate);\n\t\t\treturn cachedCandidate ?? undefined;\n\t\t}\n\t\tif (hasMarker(current)) {\n\t\t\tcache.set(startDir, current);\n\t\t\treturn current;\n\t\t}\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) {\n\t\t\tcache.set(startDir, null);\n\t\t\treturn undefined;\n\t\t}\n\t\tcurrent = parent;\n\t}\n}\n\nfunction hasMarker(dir: string): boolean {\n\treturn ROOT_MARKERS.some((marker) => existsSync(join(dir, marker)));\n}\n\nexport function resetWorkspaceRootCacheForTests(): void {\n\tcache.clear();\n}\n"]}
1
+ {"version":3,"file":"root-resolver.js","sourceRoot":"","sources":["../../src/workspace/root-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,YAAY,GAAG;IACpB,cAAc;IACd,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,aAAa;IACb,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,MAAM;CACN,CAAC;AAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAM/C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAAgB,EAChB,UAAuC,EAAE;IAEzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,aAAa,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,IAAI,SAAS,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,eAAe,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAC1C,OAAO,eAAe,IAAI,SAAS,CAAC;QACrC,CAAC;QACD,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACpC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,qBAAqB,CAC7B,GAAW,EACX,OAA2B;IAE3B,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC9C,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nconst ROOT_MARKERS = [\n\t\"package.json\",\n\t\"pnpm-workspace.yaml\",\n\t\"pnpm-lock.yaml\",\n\t\"yarn.lock\",\n\t\"lerna.json\",\n\t\"turbo.json\",\n\t\"nx.json\",\n\t\"tsconfig.json\",\n\t\"pyproject.toml\",\n\t\"requirements.txt\",\n\t\"poetry.lock\",\n\t\"go.mod\",\n\t\"Cargo.toml\",\n\t\"composer.json\",\n\t\".git\",\n];\n\nconst cache = new Map<string, string | null>();\n\nexport type ResolveWorkspaceRootOptions = {\n\tstopAt?: string;\n};\n\nexport async function resolveWorkspaceRoot(\n\tfilePath: string,\n\toptions: ResolveWorkspaceRootOptions = {},\n): Promise<string | undefined> {\n\tconst absolute = resolve(filePath);\n\tconst startDir = dirname(absolute);\n\tconst stopDir = options.stopAt ? resolve(options.stopAt) : undefined;\n\tconst startCacheKey = workspaceRootCacheKey(startDir, stopDir);\n\tconst cached = cache.get(startCacheKey);\n\tif (cached !== undefined) {\n\t\treturn cached ?? undefined;\n\t}\n\tlet current = startDir;\n\twhile (true) {\n\t\tconst currentCacheKey = workspaceRootCacheKey(current, stopDir);\n\t\tconst cachedCandidate = cache.get(currentCacheKey);\n\t\tif (cachedCandidate !== undefined) {\n\t\t\tcache.set(startCacheKey, cachedCandidate);\n\t\t\treturn cachedCandidate ?? undefined;\n\t\t}\n\t\tif (hasMarker(current)) {\n\t\t\tcache.set(startCacheKey, current);\n\t\t\treturn current;\n\t\t}\n\t\tif (stopDir && current === stopDir) {\n\t\t\tcache.set(startCacheKey, null);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) {\n\t\t\tcache.set(startCacheKey, null);\n\t\t\treturn undefined;\n\t\t}\n\t\tcurrent = parent;\n\t}\n}\n\nfunction hasMarker(dir: string): boolean {\n\treturn ROOT_MARKERS.some((marker) => existsSync(join(dir, marker)));\n}\n\nfunction workspaceRootCacheKey(\n\tdir: string,\n\tstopDir: string | undefined,\n): string {\n\treturn stopDir ? `${dir}\\0${stopDir}` : dir;\n}\n\nexport function resetWorkspaceRootCacheForTests(): void {\n\tcache.clear();\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export type AdvisorEffortSize = "S" | "M" | "L" | "XL";
2
+ export interface AdvisorEffortSignal {
3
+ size: AdvisorEffortSize;
4
+ justification: string;
5
+ revisitIf?: string;
6
+ }
7
+ export declare function parseAdvisorEffortSignal(output: string): AdvisorEffortSignal | null;
8
+ //# sourceMappingURL=advisor-effort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisor-effort.d.ts","sourceRoot":"","sources":["../src/advisor-effort.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAeD,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,MAAM,GACZ,mBAAmB,GAAG,IAAI,CAmC5B"}