@getpaseo/server 0.1.62 → 0.1.65

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 (590) hide show
  1. package/README.md +4 -0
  2. package/dist/server/client/daemon-client-runtime-metrics.d.ts +6 -6
  3. package/dist/server/client/daemon-client-runtime-metrics.d.ts.map +1 -1
  4. package/dist/server/client/daemon-client-transport-types.d.ts +15 -13
  5. package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -1
  6. package/dist/server/client/daemon-client-websocket-transport.d.ts +3 -2
  7. package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -1
  8. package/dist/server/client/daemon-client-websocket-transport.js +9 -8
  9. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -1
  10. package/dist/server/client/daemon-client.d.ts +88 -56
  11. package/dist/server/client/daemon-client.d.ts.map +1 -1
  12. package/dist/server/client/daemon-client.js +264 -111
  13. package/dist/server/client/daemon-client.js.map +1 -1
  14. package/dist/server/client/terminal-stream-router.d.ts +24 -0
  15. package/dist/server/client/terminal-stream-router.d.ts.map +1 -0
  16. package/dist/server/client/terminal-stream-router.js +100 -0
  17. package/dist/server/client/terminal-stream-router.js.map +1 -0
  18. package/dist/server/server/agent/activity-curator.d.ts +6 -3
  19. package/dist/server/server/agent/activity-curator.d.ts.map +1 -1
  20. package/dist/server/server/agent/activity-curator.js +45 -138
  21. package/dist/server/server/agent/activity-curator.js.map +1 -1
  22. package/dist/server/server/agent/agent-loading.d.ts.map +1 -1
  23. package/dist/server/server/agent/agent-loading.js +5 -3
  24. package/dist/server/server/agent/agent-loading.js.map +1 -1
  25. package/dist/server/server/agent/agent-manager.d.ts +46 -31
  26. package/dist/server/server/agent/agent-manager.d.ts.map +1 -1
  27. package/dist/server/server/agent/agent-manager.js +457 -419
  28. package/dist/server/server/agent/agent-manager.js.map +1 -1
  29. package/dist/server/server/agent/agent-metadata-generator.d.ts +6 -11
  30. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -1
  31. package/dist/server/server/agent/agent-metadata-generator.js +3 -85
  32. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -1
  33. package/dist/server/server/agent/agent-projections.d.ts +4 -6
  34. package/dist/server/server/agent/agent-projections.d.ts.map +1 -1
  35. package/dist/server/server/agent/agent-projections.js +59 -65
  36. package/dist/server/server/agent/agent-projections.js.map +1 -1
  37. package/dist/server/server/agent/agent-response-loop.d.ts +4 -4
  38. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  39. package/dist/server/server/agent/agent-response-loop.js +58 -45
  40. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  41. package/dist/server/server/agent/agent-sdk-types.d.ts +58 -41
  42. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -1
  43. package/dist/server/server/agent/agent-sdk-types.js.map +1 -1
  44. package/dist/server/server/agent/agent-storage.d.ts +2 -2
  45. package/dist/server/server/agent/agent-storage.d.ts.map +1 -1
  46. package/dist/server/server/agent/agent-storage.js +29 -36
  47. package/dist/server/server/agent/agent-storage.js.map +1 -1
  48. package/dist/server/server/agent/agent-stream-coalescer.d.ts +7 -7
  49. package/dist/server/server/agent/agent-stream-coalescer.d.ts.map +1 -1
  50. package/dist/server/server/agent/agent-stream-coalescer.js +1 -1
  51. package/dist/server/server/agent/agent-stream-coalescer.js.map +1 -1
  52. package/dist/server/server/agent/agent-timeline-store-types.d.ts +10 -10
  53. package/dist/server/server/agent/agent-timeline-store-types.d.ts.map +1 -1
  54. package/dist/server/server/agent/agent-timeline-store.d.ts +2 -2
  55. package/dist/server/server/agent/agent-timeline-store.d.ts.map +1 -1
  56. package/dist/server/server/agent/agent-timeline-store.js +103 -85
  57. package/dist/server/server/agent/agent-timeline-store.js.map +1 -1
  58. package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
  59. package/dist/server/server/agent/foreground-run-state.d.ts.map +1 -0
  60. package/dist/server/server/agent/foreground-run-state.js +162 -0
  61. package/dist/server/server/agent/foreground-run-state.js.map +1 -0
  62. package/dist/server/server/agent/mcp-server.d.ts +5 -3
  63. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  64. package/dist/server/server/agent/mcp-server.js +282 -234
  65. package/dist/server/server/agent/mcp-server.js.map +1 -1
  66. package/dist/server/server/agent/mcp-shared.d.ts +9 -2
  67. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -1
  68. package/dist/server/server/agent/mcp-shared.js +9 -1
  69. package/dist/server/server/agent/mcp-shared.js.map +1 -1
  70. package/dist/server/server/agent/model-resolver.d.ts +2 -2
  71. package/dist/server/server/agent/model-resolver.d.ts.map +1 -1
  72. package/dist/server/server/agent/model-resolver.js +9 -5
  73. package/dist/server/server/agent/model-resolver.js.map +1 -1
  74. package/dist/server/server/agent/prompt-attachments.d.ts +4 -3
  75. package/dist/server/server/agent/prompt-attachments.d.ts.map +1 -1
  76. package/dist/server/server/agent/prompt-attachments.js +43 -4
  77. package/dist/server/server/agent/prompt-attachments.js.map +1 -1
  78. package/dist/server/server/agent/provider-launch-config.d.ts +28 -17
  79. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -1
  80. package/dist/server/server/agent/provider-launch-config.js +20 -9
  81. package/dist/server/server/agent/provider-launch-config.js.map +1 -1
  82. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  83. package/dist/server/server/agent/provider-manifest.js +7 -0
  84. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  85. package/dist/server/server/agent/provider-registry.d.ts +4 -2
  86. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  87. package/dist/server/server/agent/provider-registry.js +24 -21
  88. package/dist/server/server/agent/provider-registry.js.map +1 -1
  89. package/dist/server/server/agent/provider-snapshot-manager.d.ts +6 -5
  90. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -1
  91. package/dist/server/server/agent/provider-snapshot-manager.js +40 -31
  92. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -1
  93. package/dist/server/server/agent/providers/acp-agent.d.ts +49 -13
  94. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -1
  95. package/dist/server/server/agent/providers/acp-agent.js +404 -261
  96. package/dist/server/server/agent/providers/acp-agent.js.map +1 -1
  97. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +2 -0
  98. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts.map +1 -1
  99. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +47 -45
  100. package/dist/server/server/agent/providers/claude/sidechain-tracker.js.map +1 -1
  101. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  102. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts.map +1 -1
  103. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +10 -5
  104. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js.map +1 -1
  105. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -1
  106. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +11 -2
  107. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -1
  108. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +2 -2
  109. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -1
  110. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +83 -206
  111. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -1
  112. package/dist/server/server/agent/providers/claude-agent.d.ts +20 -8
  113. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  114. package/dist/server/server/agent/providers/claude-agent.js +654 -554
  115. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  116. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +2 -2
  117. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -1
  118. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +2 -2
  119. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -1
  120. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +174 -185
  121. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -1
  122. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +62 -13
  123. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  124. package/dist/server/server/agent/providers/codex-app-server-agent.js +873 -646
  125. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  126. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +2 -2
  127. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
  128. package/dist/server/server/agent/providers/codex-rollout-timeline.js +58 -47
  129. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
  130. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +2 -2
  131. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -1
  132. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +3 -3
  133. package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -1
  134. package/dist/server/server/agent/providers/diagnostic-utils.js +82 -9
  135. package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -1
  136. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +2 -2
  137. package/dist/server/server/agent/providers/generic-acp-agent.d.ts.map +1 -1
  138. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +6 -2
  139. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts.map +1 -1
  140. package/dist/server/server/agent/providers/mock-load-test-agent.js +294 -113
  141. package/dist/server/server/agent/providers/mock-load-test-agent.js.map +1 -1
  142. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +1 -1
  143. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -1
  144. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +94 -2
  145. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -1
  146. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +2 -2
  147. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -1
  148. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +24 -115
  149. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -1
  150. package/dist/server/server/agent/providers/opencode-agent.d.ts +104 -3
  151. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  152. package/dist/server/server/agent/providers/opencode-agent.js +786 -503
  153. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  154. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +1 -0
  155. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
  156. package/dist/server/server/agent/providers/pi-direct-agent.js +109 -140
  157. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
  158. package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
  159. package/dist/server/server/agent/providers/provider-runner.d.ts.map +1 -0
  160. package/dist/server/server/agent/providers/provider-runner.js +80 -0
  161. package/dist/server/server/agent/providers/provider-runner.js.map +1 -0
  162. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -1
  163. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +3 -1
  164. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -1
  165. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +9 -6
  166. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -1
  167. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +102 -73
  168. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -1
  169. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +4 -2
  170. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -1
  171. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +31 -0
  172. package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -1
  173. package/dist/server/server/agent/stt-manager.d.ts.map +1 -1
  174. package/dist/server/server/agent/stt-manager.js +63 -53
  175. package/dist/server/server/agent/stt-manager.js.map +1 -1
  176. package/dist/server/server/agent/timeline-projection.d.ts +27 -11
  177. package/dist/server/server/agent/timeline-projection.d.ts.map +1 -1
  178. package/dist/server/server/agent/timeline-projection.js +70 -15
  179. package/dist/server/server/agent/timeline-projection.js.map +1 -1
  180. package/dist/server/server/agent/tts-manager.d.ts.map +1 -1
  181. package/dist/server/server/agent/tts-manager.js +1 -0
  182. package/dist/server/server/agent/tts-manager.js.map +1 -1
  183. package/dist/server/server/agent-attention-policy.d.ts +2 -2
  184. package/dist/server/server/agent-attention-policy.d.ts.map +1 -1
  185. package/dist/server/server/auth.d.ts +25 -0
  186. package/dist/server/server/auth.d.ts.map +1 -0
  187. package/dist/server/server/auth.js +93 -0
  188. package/dist/server/server/auth.js.map +1 -0
  189. package/dist/server/server/bootstrap.d.ts +7 -5
  190. package/dist/server/server/bootstrap.d.ts.map +1 -1
  191. package/dist/server/server/bootstrap.js +550 -485
  192. package/dist/server/server/bootstrap.js.map +1 -1
  193. package/dist/server/server/chat/chat-service.d.ts +1 -1
  194. package/dist/server/server/chat/chat-service.d.ts.map +1 -1
  195. package/dist/server/server/chat/chat-service.js +3 -3
  196. package/dist/server/server/chat/chat-service.js.map +1 -1
  197. package/dist/server/server/checkout-diff-manager.d.ts +2 -2
  198. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -1
  199. package/dist/server/server/checkout-git-utils.d.ts +5 -3
  200. package/dist/server/server/checkout-git-utils.d.ts.map +1 -1
  201. package/dist/server/server/checkout-git-utils.js +1 -2
  202. package/dist/server/server/checkout-git-utils.js.map +1 -1
  203. package/dist/server/server/config.d.ts.map +1 -1
  204. package/dist/server/server/config.js +79 -39
  205. package/dist/server/server/config.js.map +1 -1
  206. package/dist/server/server/connection-offer.d.ts +2 -2
  207. package/dist/server/server/connection-offer.d.ts.map +1 -1
  208. package/dist/server/server/daemon-config-store.d.ts +5 -3
  209. package/dist/server/server/daemon-config-store.d.ts.map +1 -1
  210. package/dist/server/server/daemon-config-store.js +26 -0
  211. package/dist/server/server/daemon-config-store.js.map +1 -1
  212. package/dist/server/server/daemon-keypair.d.ts +2 -2
  213. package/dist/server/server/daemon-keypair.d.ts.map +1 -1
  214. package/dist/server/server/editor-targets.d.ts +4 -4
  215. package/dist/server/server/editor-targets.d.ts.map +1 -1
  216. package/dist/server/server/editor-targets.js +11 -15
  217. package/dist/server/server/editor-targets.js.map +1 -1
  218. package/dist/server/server/exports.d.ts +10 -4
  219. package/dist/server/server/exports.d.ts.map +1 -1
  220. package/dist/server/server/exports.js +7 -4
  221. package/dist/server/server/exports.js.map +1 -1
  222. package/dist/server/server/file-download/token-store.d.ts +4 -4
  223. package/dist/server/server/file-download/token-store.d.ts.map +1 -1
  224. package/dist/server/server/file-explorer/service.d.ts +10 -0
  225. package/dist/server/server/file-explorer/service.d.ts.map +1 -1
  226. package/dist/server/server/file-explorer/service.js +38 -4
  227. package/dist/server/server/file-explorer/service.js.map +1 -1
  228. package/dist/server/server/index.js +25 -18
  229. package/dist/server/server/index.js.map +1 -1
  230. package/dist/server/server/logger.d.ts +4 -4
  231. package/dist/server/server/logger.d.ts.map +1 -1
  232. package/dist/server/server/logger.js +41 -21
  233. package/dist/server/server/logger.js.map +1 -1
  234. package/dist/server/server/loop/rpc-schemas.d.ts +52 -52
  235. package/dist/server/server/loop-service.d.ts +13 -12
  236. package/dist/server/server/loop-service.d.ts.map +1 -1
  237. package/dist/server/server/loop-service.js +22 -18
  238. package/dist/server/server/loop-service.js.map +1 -1
  239. package/dist/server/server/package-version.d.ts +2 -2
  240. package/dist/server/server/package-version.d.ts.map +1 -1
  241. package/dist/server/server/package-version.js +19 -17
  242. package/dist/server/server/package-version.js.map +1 -1
  243. package/dist/server/server/pagination/cursor.d.ts +16 -0
  244. package/dist/server/server/pagination/cursor.d.ts.map +1 -0
  245. package/dist/server/server/pagination/cursor.js +62 -0
  246. package/dist/server/server/pagination/cursor.js.map +1 -0
  247. package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
  248. package/dist/server/server/pagination/sortable-pager.d.ts.map +1 -0
  249. package/dist/server/server/pagination/sortable-pager.js +68 -0
  250. package/dist/server/server/pagination/sortable-pager.js.map +1 -0
  251. package/dist/server/server/pairing-offer.d.ts +2 -2
  252. package/dist/server/server/pairing-offer.d.ts.map +1 -1
  253. package/dist/server/server/paseo-env.d.ts +9 -0
  254. package/dist/server/server/paseo-env.d.ts.map +1 -0
  255. package/dist/server/server/paseo-env.js +70 -0
  256. package/dist/server/server/paseo-env.js.map +1 -0
  257. package/dist/server/server/paseo-worktree-archive-service.d.ts +7 -5
  258. package/dist/server/server/paseo-worktree-archive-service.d.ts.map +1 -1
  259. package/dist/server/server/paseo-worktree-archive-service.js +70 -62
  260. package/dist/server/server/paseo-worktree-archive-service.js.map +1 -1
  261. package/dist/server/server/paseo-worktree-service.d.ts +13 -0
  262. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
  263. package/dist/server/server/paseo-worktree-service.js +72 -3
  264. package/dist/server/server/paseo-worktree-service.js.map +1 -1
  265. package/dist/server/server/persisted-config.d.ts +87 -62
  266. package/dist/server/server/persisted-config.d.ts.map +1 -1
  267. package/dist/server/server/persisted-config.js +13 -4
  268. package/dist/server/server/persisted-config.js.map +1 -1
  269. package/dist/server/server/persistence-hooks.d.ts +8 -9
  270. package/dist/server/server/persistence-hooks.d.ts.map +1 -1
  271. package/dist/server/server/persistence-hooks.js +4 -12
  272. package/dist/server/server/persistence-hooks.js.map +1 -1
  273. package/dist/server/server/pid-lock.js.map +1 -1
  274. package/dist/server/server/push/push-service.d.ts.map +1 -1
  275. package/dist/server/server/push/push-service.js +1 -3
  276. package/dist/server/server/push/push-service.js.map +1 -1
  277. package/dist/server/server/relay-transport.d.ts +8 -8
  278. package/dist/server/server/relay-transport.d.ts.map +1 -1
  279. package/dist/server/server/relay-transport.js +43 -20
  280. package/dist/server/server/relay-transport.js.map +1 -1
  281. package/dist/server/server/resolve-worktree-creation-intent.d.ts +0 -10
  282. package/dist/server/server/resolve-worktree-creation-intent.d.ts.map +1 -1
  283. package/dist/server/server/resolve-worktree-creation-intent.js +1 -45
  284. package/dist/server/server/resolve-worktree-creation-intent.js.map +1 -1
  285. package/dist/server/server/schedule/service.d.ts.map +1 -1
  286. package/dist/server/server/schedule/service.js +2 -2
  287. package/dist/server/server/schedule/service.js.map +1 -1
  288. package/dist/server/server/script-health-monitor.d.ts.map +1 -1
  289. package/dist/server/server/script-health-monitor.js +7 -6
  290. package/dist/server/server/script-health-monitor.js.map +1 -1
  291. package/dist/server/server/script-proxy.js +1 -1
  292. package/dist/server/server/script-proxy.js.map +1 -1
  293. package/dist/server/server/script-status-projection.d.ts +10 -5
  294. package/dist/server/server/script-status-projection.d.ts.map +1 -1
  295. package/dist/server/server/script-status-projection.js +66 -47
  296. package/dist/server/server/script-status-projection.js.map +1 -1
  297. package/dist/server/server/server-id.d.ts +4 -4
  298. package/dist/server/server/server-id.d.ts.map +1 -1
  299. package/dist/server/server/session.d.ts +64 -65
  300. package/dist/server/server/session.d.ts.map +1 -1
  301. package/dist/server/server/session.js +1356 -1734
  302. package/dist/server/server/session.js.map +1 -1
  303. package/dist/server/server/speech/audio.js +1 -1
  304. package/dist/server/server/speech/audio.js.map +1 -1
  305. package/dist/server/server/speech/providers/local/config.d.ts +6 -6
  306. package/dist/server/server/speech/providers/local/config.d.ts.map +1 -1
  307. package/dist/server/server/speech/providers/local/config.js +41 -16
  308. package/dist/server/server/speech/providers/local/config.js.map +1 -1
  309. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +2 -2
  310. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -1
  311. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +42 -19
  312. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -1
  313. package/dist/server/server/speech/providers/local/runtime.d.ts +4 -4
  314. package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -1
  315. package/dist/server/server/speech/providers/local/runtime.js +108 -77
  316. package/dist/server/server/speech/providers/local/runtime.js.map +1 -1
  317. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +2 -2
  318. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -1
  319. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +1 -4
  320. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -1
  321. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +2 -2
  322. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -1
  323. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +19 -19
  324. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -1
  325. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -7
  326. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -1
  327. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -1
  328. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +23 -4
  329. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -1
  330. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +35 -28
  331. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -1
  332. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +5 -5
  333. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -1
  334. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +7 -7
  335. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -1
  336. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +5 -0
  337. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -1
  338. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -1
  339. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +3 -1
  340. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -1
  341. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +2 -2
  342. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -1
  343. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +3 -1
  344. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -1
  345. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -1
  346. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +10 -4
  347. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -1
  348. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +2 -2
  349. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -1
  350. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +2 -2
  351. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -1
  352. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +4 -1
  353. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -1
  354. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +2 -2
  355. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -1
  356. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +18 -11
  357. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -1
  358. package/dist/server/server/speech/providers/openai/config.d.ts +2 -2
  359. package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -1
  360. package/dist/server/server/speech/providers/openai/config.js +58 -31
  361. package/dist/server/server/speech/providers/openai/config.js.map +1 -1
  362. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -1
  363. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +2 -2
  364. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -1
  365. package/dist/server/server/speech/providers/openai/runtime.d.ts +4 -4
  366. package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -1
  367. package/dist/server/server/speech/providers/openai/runtime.js +37 -32
  368. package/dist/server/server/speech/providers/openai/runtime.js.map +1 -1
  369. package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -1
  370. package/dist/server/server/speech/providers/openai/stt.js +4 -3
  371. package/dist/server/server/speech/providers/openai/stt.js.map +1 -1
  372. package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -1
  373. package/dist/server/server/speech/providers/openai/tts.js +3 -2
  374. package/dist/server/server/speech/providers/openai/tts.js.map +1 -1
  375. package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -1
  376. package/dist/server/server/speech/speech-config-resolver.js +46 -17
  377. package/dist/server/server/speech/speech-config-resolver.js.map +1 -1
  378. package/dist/server/server/speech/speech-provider.d.ts +2 -2
  379. package/dist/server/server/speech/speech-provider.d.ts.map +1 -1
  380. package/dist/server/server/speech/speech-runtime.d.ts +6 -6
  381. package/dist/server/server/speech/speech-runtime.d.ts.map +1 -1
  382. package/dist/server/server/speech/speech-runtime.js +17 -17
  383. package/dist/server/server/speech/speech-runtime.js.map +1 -1
  384. package/dist/server/server/speech/speech-types.d.ts +2 -2
  385. package/dist/server/server/speech/speech-types.d.ts.map +1 -1
  386. package/dist/server/server/speech/turn-detection-provider.d.ts +2 -2
  387. package/dist/server/server/speech/turn-detection-provider.d.ts.map +1 -1
  388. package/dist/server/server/utils/diff-highlighter.d.ts +0 -3
  389. package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -1
  390. package/dist/server/server/utils/diff-highlighter.js +67 -66
  391. package/dist/server/server/utils/diff-highlighter.js.map +1 -1
  392. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -1
  393. package/dist/server/server/voice/voice-turn-controller.js +1 -0
  394. package/dist/server/server/voice/voice-turn-controller.js.map +1 -1
  395. package/dist/server/server/voice-types.d.ts +2 -2
  396. package/dist/server/server/voice-types.d.ts.map +1 -1
  397. package/dist/server/server/websocket-server.d.ts +34 -22
  398. package/dist/server/server/websocket-server.d.ts.map +1 -1
  399. package/dist/server/server/websocket-server.js +360 -205
  400. package/dist/server/server/websocket-server.js.map +1 -1
  401. package/dist/server/server/workspace-directory.d.ts +69 -0
  402. package/dist/server/server/workspace-directory.d.ts.map +1 -0
  403. package/dist/server/server/workspace-directory.js +229 -0
  404. package/dist/server/server/workspace-directory.js.map +1 -0
  405. package/dist/server/server/workspace-git-metadata.d.ts +2 -2
  406. package/dist/server/server/workspace-git-metadata.d.ts.map +1 -1
  407. package/dist/server/server/workspace-git-metadata.js +2 -32
  408. package/dist/server/server/workspace-git-metadata.js.map +1 -1
  409. package/dist/server/server/workspace-git-service.d.ts +8 -4
  410. package/dist/server/server/workspace-git-service.d.ts.map +1 -1
  411. package/dist/server/server/workspace-git-service.js +163 -115
  412. package/dist/server/server/workspace-git-service.js.map +1 -1
  413. package/dist/server/server/workspace-reconciliation-service.d.ts +5 -4
  414. package/dist/server/server/workspace-reconciliation-service.d.ts.map +1 -1
  415. package/dist/server/server/workspace-reconciliation-service.js +82 -82
  416. package/dist/server/server/workspace-reconciliation-service.js.map +1 -1
  417. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -1
  418. package/dist/server/server/workspace-registry-bootstrap.js +40 -33
  419. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -1
  420. package/dist/server/server/workspace-registry-model.d.ts +19 -6
  421. package/dist/server/server/workspace-registry-model.d.ts.map +1 -1
  422. package/dist/server/server/workspace-registry-model.js +35 -21
  423. package/dist/server/server/workspace-registry-model.js.map +1 -1
  424. package/dist/server/server/workspace-registry.d.ts +2 -2
  425. package/dist/server/server/workspace-script-runtime-store.d.ts +2 -2
  426. package/dist/server/server/workspace-script-runtime-store.d.ts.map +1 -1
  427. package/dist/server/server/workspace-service-env.js +3 -3
  428. package/dist/server/server/workspace-service-env.js.map +1 -1
  429. package/dist/server/server/worktree-bootstrap.d.ts +4 -4
  430. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -1
  431. package/dist/server/server/worktree-bootstrap.js +101 -69
  432. package/dist/server/server/worktree-bootstrap.js.map +1 -1
  433. package/dist/server/server/worktree-core.d.ts +2 -0
  434. package/dist/server/server/worktree-core.d.ts.map +1 -1
  435. package/dist/server/server/worktree-core.js.map +1 -1
  436. package/dist/server/server/worktree-errors.d.ts +1 -1
  437. package/dist/server/server/worktree-errors.d.ts.map +1 -1
  438. package/dist/server/server/worktree-errors.js +1 -4
  439. package/dist/server/server/worktree-errors.js.map +1 -1
  440. package/dist/server/server/worktree-session.d.ts +54 -27
  441. package/dist/server/server/worktree-session.d.ts.map +1 -1
  442. package/dist/server/server/worktree-session.js +95 -44
  443. package/dist/server/server/worktree-session.js.map +1 -1
  444. package/dist/server/services/github-service.d.ts +1 -7
  445. package/dist/server/services/github-service.d.ts.map +1 -1
  446. package/dist/server/services/github-service.js +123 -143
  447. package/dist/server/services/github-service.js.map +1 -1
  448. package/dist/server/shared/agent-attention-notification.d.ts +9 -8
  449. package/dist/server/shared/agent-attention-notification.d.ts.map +1 -1
  450. package/dist/server/shared/agent-attention-notification.js +27 -17
  451. package/dist/server/shared/agent-attention-notification.js.map +1 -1
  452. package/dist/server/shared/binary-frames/file-transfer.d.ts +56 -0
  453. package/dist/server/shared/binary-frames/file-transfer.d.ts.map +1 -0
  454. package/dist/server/shared/binary-frames/file-transfer.js +108 -0
  455. package/dist/server/shared/binary-frames/file-transfer.js.map +1 -0
  456. package/dist/server/shared/binary-frames/index.d.ts +3 -0
  457. package/dist/server/shared/binary-frames/index.d.ts.map +1 -0
  458. package/dist/server/shared/binary-frames/index.js +3 -0
  459. package/dist/server/shared/binary-frames/index.js.map +1 -0
  460. package/dist/server/shared/{terminal-stream-protocol.d.ts → binary-frames/terminal.d.ts} +4 -4
  461. package/dist/server/shared/binary-frames/terminal.d.ts.map +1 -0
  462. package/dist/server/shared/{terminal-stream-protocol.js → binary-frames/terminal.js} +2 -2
  463. package/dist/server/shared/binary-frames/terminal.js.map +1 -0
  464. package/dist/server/shared/client-capabilities.d.ts +5 -0
  465. package/dist/server/shared/client-capabilities.d.ts.map +1 -0
  466. package/dist/server/shared/client-capabilities.js +4 -0
  467. package/dist/server/shared/client-capabilities.js.map +1 -0
  468. package/dist/server/shared/connection-offer.d.ts +8 -0
  469. package/dist/server/shared/connection-offer.d.ts.map +1 -1
  470. package/dist/server/shared/connection-offer.js +35 -0
  471. package/dist/server/shared/connection-offer.js.map +1 -1
  472. package/dist/server/shared/daemon-endpoints.d.ts +18 -3
  473. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -1
  474. package/dist/server/shared/daemon-endpoints.js +82 -8
  475. package/dist/server/shared/daemon-endpoints.js.map +1 -1
  476. package/dist/server/shared/host-connection-schema.d.ts +23 -0
  477. package/dist/server/shared/host-connection-schema.d.ts.map +1 -0
  478. package/dist/server/shared/host-connection-schema.js +9 -0
  479. package/dist/server/shared/host-connection-schema.js.map +1 -0
  480. package/dist/server/shared/messages.d.ts +25073 -3453
  481. package/dist/server/shared/messages.d.ts.map +1 -1
  482. package/dist/server/shared/messages.js +152 -36
  483. package/dist/server/shared/messages.js.map +1 -1
  484. package/dist/server/shared/tool-call-display.d.ts +2 -2
  485. package/dist/server/shared/tool-call-display.d.ts.map +1 -1
  486. package/dist/server/terminal/terminal-manager-factory.d.ts +7 -0
  487. package/dist/server/terminal/terminal-manager-factory.d.ts.map +1 -0
  488. package/dist/server/terminal/terminal-manager-factory.js +13 -0
  489. package/dist/server/terminal/terminal-manager-factory.js.map +1 -0
  490. package/dist/server/terminal/terminal-manager.d.ts +7 -1
  491. package/dist/server/terminal/terminal-manager.d.ts.map +1 -1
  492. package/dist/server/terminal/terminal-manager.js +15 -4
  493. package/dist/server/terminal/terminal-manager.js.map +1 -1
  494. package/dist/server/terminal/terminal-output-coalescer.d.ts +6 -6
  495. package/dist/server/terminal/terminal-output-coalescer.d.ts.map +1 -1
  496. package/dist/server/terminal/terminal-session-controller.d.ts +63 -0
  497. package/dist/server/terminal/terminal-session-controller.d.ts.map +1 -0
  498. package/dist/server/terminal/terminal-session-controller.js +615 -0
  499. package/dist/server/terminal/terminal-session-controller.js.map +1 -0
  500. package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
  501. package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
  502. package/dist/server/terminal/terminal-worker-process.d.ts.map +1 -0
  503. package/dist/server/terminal/terminal-worker-process.js +221 -0
  504. package/dist/server/terminal/terminal-worker-process.js.map +1 -0
  505. package/dist/server/terminal/terminal-worker-protocol.d.ts +113 -0
  506. package/dist/server/terminal/terminal-worker-protocol.d.ts.map +1 -0
  507. package/dist/server/terminal/terminal-worker-protocol.js +2 -0
  508. package/dist/server/terminal/terminal-worker-protocol.js.map +1 -0
  509. package/dist/server/terminal/terminal.d.ts +10 -2
  510. package/dist/server/terminal/terminal.d.ts.map +1 -1
  511. package/dist/server/terminal/terminal.js +79 -28
  512. package/dist/server/terminal/terminal.js.map +1 -1
  513. package/dist/server/terminal/worker-terminal-manager.d.ts +19 -0
  514. package/dist/server/terminal/worker-terminal-manager.d.ts.map +1 -0
  515. package/dist/server/terminal/worker-terminal-manager.js +466 -0
  516. package/dist/server/terminal/worker-terminal-manager.js.map +1 -0
  517. package/dist/server/utils/checkout-git.d.ts +13 -12
  518. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  519. package/dist/server/utils/checkout-git.js +351 -281
  520. package/dist/server/utils/checkout-git.js.map +1 -1
  521. package/dist/server/utils/directory-suggestions.d.ts.map +1 -1
  522. package/dist/server/utils/directory-suggestions.js +22 -34
  523. package/dist/server/utils/directory-suggestions.js.map +1 -1
  524. package/dist/server/utils/executable.d.ts +1 -14
  525. package/dist/server/utils/executable.d.ts.map +1 -1
  526. package/dist/server/utils/executable.js +13 -49
  527. package/dist/server/utils/executable.js.map +1 -1
  528. package/dist/server/utils/github-remote.d.ts +13 -0
  529. package/dist/server/utils/github-remote.d.ts.map +1 -0
  530. package/dist/server/utils/github-remote.js +128 -0
  531. package/dist/server/utils/github-remote.js.map +1 -0
  532. package/dist/server/utils/paseo-config-file.d.ts +30 -0
  533. package/dist/server/utils/paseo-config-file.d.ts.map +1 -0
  534. package/dist/server/utils/paseo-config-file.js +90 -0
  535. package/dist/server/utils/paseo-config-file.js.map +1 -0
  536. package/dist/server/utils/paseo-config-schema.d.ts +290 -0
  537. package/dist/server/utils/paseo-config-schema.d.ts.map +1 -0
  538. package/dist/server/utils/paseo-config-schema.js +60 -0
  539. package/dist/server/utils/paseo-config-schema.js.map +1 -0
  540. package/dist/server/utils/process-tree.d.ts +25 -0
  541. package/dist/server/utils/process-tree.d.ts.map +1 -0
  542. package/dist/server/utils/process-tree.js +96 -0
  543. package/dist/server/utils/process-tree.js.map +1 -0
  544. package/dist/server/utils/project-icon.d.ts.map +1 -1
  545. package/dist/server/utils/project-icon.js +84 -109
  546. package/dist/server/utils/project-icon.js.map +1 -1
  547. package/dist/server/utils/promise-timeout.d.ts +2 -2
  548. package/dist/server/utils/promise-timeout.d.ts.map +1 -1
  549. package/dist/server/utils/run-git-command.d.ts +3 -1
  550. package/dist/server/utils/run-git-command.d.ts.map +1 -1
  551. package/dist/server/utils/run-git-command.js +10 -1
  552. package/dist/server/utils/run-git-command.js.map +1 -1
  553. package/dist/server/utils/script-hostname.d.ts +2 -2
  554. package/dist/server/utils/script-hostname.d.ts.map +1 -1
  555. package/dist/server/utils/spawn.d.ts +10 -3
  556. package/dist/server/utils/spawn.d.ts.map +1 -1
  557. package/dist/server/utils/spawn.js +30 -5
  558. package/dist/server/utils/spawn.js.map +1 -1
  559. package/dist/server/utils/windows-command.d.ts +15 -0
  560. package/dist/server/utils/windows-command.d.ts.map +1 -0
  561. package/dist/server/utils/windows-command.js +41 -0
  562. package/dist/server/utils/windows-command.js.map +1 -0
  563. package/dist/server/utils/worktree-metadata.d.ts +44 -0
  564. package/dist/server/utils/worktree-metadata.d.ts.map +1 -1
  565. package/dist/server/utils/worktree-metadata.js +58 -0
  566. package/dist/server/utils/worktree-metadata.js.map +1 -1
  567. package/dist/server/utils/worktree.d.ts +23 -8
  568. package/dist/server/utils/worktree.d.ts.map +1 -1
  569. package/dist/server/utils/worktree.js +81 -63
  570. package/dist/server/utils/worktree.js.map +1 -1
  571. package/dist/src/server/pid-lock.js.map +1 -1
  572. package/package.json +17 -21
  573. package/dist/server/server/agent/llm-openai.d.ts +0 -7
  574. package/dist/server/server/agent/llm-openai.d.ts.map +0 -1
  575. package/dist/server/server/agent/llm-openai.js +0 -8
  576. package/dist/server/server/agent/llm-openai.js.map +0 -1
  577. package/dist/server/server/agent/orchestrator.d.ts +0 -12
  578. package/dist/server/server/agent/orchestrator.d.ts.map +0 -1
  579. package/dist/server/server/agent/orchestrator.js +0 -12
  580. package/dist/server/server/agent/orchestrator.js.map +0 -1
  581. package/dist/server/server/types.d.ts +0 -5
  582. package/dist/server/server/types.d.ts.map +0 -1
  583. package/dist/server/server/types.js +0 -3
  584. package/dist/server/server/types.js.map +0 -1
  585. package/dist/server/server/workspace-registry.test-helpers.d.ts +0 -37
  586. package/dist/server/server/workspace-registry.test-helpers.d.ts.map +0 -1
  587. package/dist/server/server/workspace-registry.test-helpers.js +0 -121
  588. package/dist/server/server/workspace-registry.test-helpers.js.map +0 -1
  589. package/dist/server/shared/terminal-stream-protocol.d.ts.map +0 -1
  590. package/dist/server/shared/terminal-stream-protocol.js.map +0 -1
@@ -72,7 +72,8 @@ function formatListenTarget(listenTarget) {
72
72
  }
73
73
  import { VoiceAssistantWebSocketServer } from "./websocket-server.js";
74
74
  import { createGitHubService } from "../services/github-service.js";
75
- import { createPaseoWorktree } from "./paseo-worktree-service.js";
75
+ import { createPaseoWorktree as createRegisteredPaseoWorktree } from "./paseo-worktree-service.js";
76
+ import { createPaseoWorktreeWorkflow } from "./worktree-session.js";
76
77
  import { createWorktreeCoreDeps } from "./worktree-core.js";
77
78
  import { DownloadTokenStore } from "./file-download/token-store.js";
78
79
  import { createSpeechService } from "./speech/speech-runtime.js";
@@ -80,7 +81,7 @@ import { AgentManager } from "./agent/agent-manager.js";
80
81
  import { AgentStorage } from "./agent/agent-storage.js";
81
82
  import { attachAgentStoragePersistence } from "./persistence-hooks.js";
82
83
  import { createAgentMcpServer } from "./agent/mcp-server.js";
83
- import { buildProviderRegistry, createAllClients, shutdownProviders, } from "./agent/provider-registry.js";
84
+ import { buildProviderRegistry, createClientsFromRegistry, shutdownProviders, } from "./agent/provider-registry.js";
84
85
  import { bootstrapWorkspaceRegistries } from "./workspace-registry-bootstrap.js";
85
86
  import { FileBackedProjectRegistry, FileBackedWorkspaceRegistry } from "./workspace-registry.js";
86
87
  import { FileBackedChatService } from "./chat/chat-service.js";
@@ -91,7 +92,7 @@ import { DaemonConfigStore } from "./daemon-config-store.js";
91
92
  import { WorkspaceGitServiceImpl } from "./workspace-git-service.js";
92
93
  import { archivePersistedWorkspaceRecord } from "./workspace-archive-service.js";
93
94
  import { wrapSessionMessage } from "./messages.js";
94
- import { createTerminalManager } from "../terminal/terminal-manager.js";
95
+ import { createConfiguredTerminalManager } from "../terminal/terminal-manager-factory.js";
95
96
  import { createConnectionOfferV2, encodeOfferToFragmentUrl } from "./connection-offer.js";
96
97
  import { loadOrCreateDaemonKeyPair } from "./daemon-keypair.js";
97
98
  import { startRelayTransport } from "./relay-transport.js";
@@ -102,6 +103,7 @@ import { ScriptHealthMonitor } from "./script-health-monitor.js";
102
103
  import { createScriptStatusEmitter } from "./script-status-projection.js";
103
104
  import { WorkspaceScriptRuntimeStore } from "./workspace-script-runtime-store.js";
104
105
  import { isHostnameAllowed } from "./hostnames.js";
106
+ import { createRequireBearerMiddleware } from "./auth.js";
105
107
  function formatHostForHttpUrl(host) {
106
108
  return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
107
109
  }
@@ -118,531 +120,594 @@ export async function createPaseoDaemon(config, rootLogger) {
118
120
  const daemonVersion = resolveDaemonVersion(import.meta.url);
119
121
  const daemonConfigStore = new DaemonConfigStore(config.paseoHome, {
120
122
  mcp: { injectIntoAgents: config.mcpInjectIntoAgents ?? true },
123
+ providers: Object.fromEntries(Object.entries(config.providerOverrides ?? {}).map(([providerId, override]) => [
124
+ providerId,
125
+ {
126
+ ...(override.enabled !== undefined ? { enabled: override.enabled } : {}),
127
+ ...(override.additionalModels ? { additionalModels: override.additionalModels } : {}),
128
+ },
129
+ ])),
121
130
  }, logger);
122
- try {
123
- const serverId = getOrCreateServerId(config.paseoHome, { logger });
124
- const daemonKeyPair = await loadOrCreateDaemonKeyPair(config.paseoHome, logger);
125
- let relayTransport = null;
126
- const staticDir = config.staticDir;
127
- const downloadTokenTtlMs = config.downloadTokenTtlMs ?? 60000;
128
- const downloadTokenStore = new DownloadTokenStore({ ttlMs: downloadTokenTtlMs });
129
- const listenTarget = parseListenString(config.listen);
130
- const app = express();
131
- let boundListenTarget = null;
132
- let workspaceRegistry = null;
133
- const scriptRouteStore = new ScriptRouteStore();
134
- const scriptRuntimeStore = new WorkspaceScriptRuntimeStore();
135
- const configuredHostnames = config.hostnames ?? config.allowedHosts;
136
- let wsServer = null;
137
- const scriptHealthMonitor = new ScriptHealthMonitor({
138
- routeStore: scriptRouteStore,
139
- onChange: createScriptStatusEmitter({
140
- sessions: () => wsServer?.listActiveSessions().map((session) => ({
141
- emit: (message) => session.emitServerMessage(message),
142
- })) ?? [],
143
- routeStore: scriptRouteStore,
144
- runtimeStore: scriptRuntimeStore,
145
- daemonPort: () => (boundListenTarget?.type === "tcp" ? boundListenTarget.port : null),
146
- resolveWorkspaceDirectory: async (workspaceId) => (await workspaceRegistry?.get(workspaceId))?.cwd ?? null,
147
- }),
148
- });
149
- const handleBranchChange = createBranchChangeRouteHandler({
131
+ const serverId = getOrCreateServerId(config.paseoHome, { logger });
132
+ const daemonKeyPair = await loadOrCreateDaemonKeyPair(config.paseoHome, logger);
133
+ let relayTransport = null;
134
+ const staticDir = config.staticDir;
135
+ const downloadTokenTtlMs = config.downloadTokenTtlMs ?? 60000;
136
+ const downloadTokenStore = new DownloadTokenStore({ ttlMs: downloadTokenTtlMs });
137
+ const listenTarget = parseListenString(config.listen);
138
+ const app = express();
139
+ let boundListenTarget = null;
140
+ let workspaceRegistry = null;
141
+ const scriptRouteStore = new ScriptRouteStore();
142
+ const scriptRuntimeStore = new WorkspaceScriptRuntimeStore();
143
+ const configuredHostnames = config.hostnames ?? config.allowedHosts;
144
+ let wsServer = null;
145
+ const scriptHealthMonitor = new ScriptHealthMonitor({
146
+ routeStore: scriptRouteStore,
147
+ onChange: createScriptStatusEmitter({
148
+ sessions: () => wsServer?.listActiveSessions().map((session) => ({
149
+ emit: (message) => session.emitServerMessage(message),
150
+ })) ?? [],
150
151
  routeStore: scriptRouteStore,
151
- onRoutesChanged: (workspaceId) => {
152
- scriptHealthMonitor.invalidateWorkspace(workspaceId);
153
- },
152
+ runtimeStore: scriptRuntimeStore,
153
+ daemonPort: () => (boundListenTarget?.type === "tcp" ? boundListenTarget.port : null),
154
+ resolveWorkspaceDirectory: async (workspaceId) => (await workspaceRegistry?.get(workspaceId))?.cwd ?? null,
154
155
  logger,
155
- });
156
- // Host allowlist / DNS rebinding protection (vite-like semantics).
157
- // For non-TCP (unix sockets), skip host validation.
158
- if (listenTarget.type === "tcp") {
159
- app.use((req, res, next) => {
160
- const hostHeader = typeof req.headers.host === "string" ? req.headers.host : undefined;
161
- if (!isHostnameAllowed(hostHeader, configuredHostnames)) {
162
- res.status(403).json({ error: "Invalid Host header" });
163
- return;
164
- }
165
- next();
166
- });
167
- }
168
- // Script proxy — intercepts requests for registered *.localhost hostnames
169
- // and forwards them to the corresponding local script port. Placed after
170
- // the host allowlist (*.localhost is already allowed) but before CORS and
171
- // the rest of the routes so proxied requests skip unnecessary middleware.
172
- app.use(createScriptProxyMiddleware({ routeStore: scriptRouteStore, logger }));
173
- // CORS - allow same-origin + configured origins
174
- const allowedOrigins = new Set([
175
- ...config.corsAllowedOrigins,
176
- // Packaged desktop renderers use the custom paseo:// protocol scheme.
177
- "paseo://app",
178
- // For TCP, add localhost variants
179
- ...(listenTarget.type === "tcp"
180
- ? [
181
- `http://${listenTarget.host}:${listenTarget.port}`,
182
- `http://localhost:${listenTarget.port}`,
183
- `http://127.0.0.1:${listenTarget.port}`,
184
- ]
185
- : []),
186
- ]);
156
+ }),
157
+ });
158
+ const handleBranchChange = createBranchChangeRouteHandler({
159
+ routeStore: scriptRouteStore,
160
+ onRoutesChanged: (workspaceId) => {
161
+ scriptHealthMonitor.invalidateWorkspace(workspaceId);
162
+ },
163
+ logger,
164
+ });
165
+ // Host allowlist / DNS rebinding protection (vite-like semantics).
166
+ // For non-TCP (unix sockets), skip host validation.
167
+ if (listenTarget.type === "tcp") {
187
168
  app.use((req, res, next) => {
188
- const origin = req.headers.origin;
189
- if (origin && (allowedOrigins.has("*") || allowedOrigins.has(origin))) {
190
- res.setHeader("Access-Control-Allow-Origin", origin);
191
- res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
192
- res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
193
- res.setHeader("Access-Control-Allow-Credentials", "true");
194
- }
195
- if (req.method === "OPTIONS") {
196
- res.status(204).end();
169
+ const hostHeader = typeof req.headers.host === "string" ? req.headers.host : undefined;
170
+ if (!isHostnameAllowed(hostHeader, configuredHostnames)) {
171
+ res.status(403).json({ error: "Invalid Host header" });
197
172
  return;
198
173
  }
199
174
  next();
200
175
  });
201
- // Serve static files from public directory
202
- app.use("/public", express.static(staticDir));
203
- // Middleware
204
- app.use(express.json());
205
- // Health check endpoint
206
- app.get("/api/health", (_req, res) => {
207
- res.json({ status: "ok", timestamp: new Date().toISOString() });
208
- });
209
- app.get("/api/status", (_req, res) => {
210
- res.json({
211
- status: "server_info",
212
- serverId,
213
- hostname: getHostname(),
214
- version: daemonVersion,
215
- listen: formatListenTarget(boundListenTarget ?? listenTarget),
216
- });
176
+ }
177
+ // CORS - allow same-origin + configured origins
178
+ const allowedOrigins = new Set([
179
+ ...config.corsAllowedOrigins,
180
+ // Packaged desktop renderers use the custom paseo:// protocol scheme.
181
+ "paseo://app",
182
+ // For TCP, add localhost variants
183
+ ...(listenTarget.type === "tcp"
184
+ ? [
185
+ `http://${listenTarget.host}:${listenTarget.port}`,
186
+ `http://localhost:${listenTarget.port}`,
187
+ `http://127.0.0.1:${listenTarget.port}`,
188
+ ]
189
+ : []),
190
+ ]);
191
+ app.use((req, res, next) => {
192
+ const origin = req.headers.origin;
193
+ if (origin && (allowedOrigins.has("*") || allowedOrigins.has(origin))) {
194
+ res.setHeader("Access-Control-Allow-Origin", origin);
195
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
196
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
197
+ res.setHeader("Access-Control-Allow-Credentials", "true");
198
+ }
199
+ if (req.method === "OPTIONS") {
200
+ res.status(204).end();
201
+ return;
202
+ }
203
+ next();
204
+ });
205
+ app.use(createRequireBearerMiddleware(config.auth, (context) => {
206
+ logger.warn(context, "Rejected HTTP request with invalid daemon password");
207
+ }));
208
+ // Script proxy — intercepts requests for registered *.localhost hostnames
209
+ // and forwards them to the corresponding local script port. Placed after
210
+ // host/CORS/auth checks but before the rest of the routes.
211
+ app.use(createScriptProxyMiddleware({ routeStore: scriptRouteStore, logger }));
212
+ // Serve static files from public directory
213
+ app.use("/public", express.static(staticDir));
214
+ // Middleware
215
+ app.use(express.json());
216
+ // Health check endpoint
217
+ app.get("/api/health", (_req, res) => {
218
+ res.json({ status: "ok", timestamp: new Date().toISOString() });
219
+ });
220
+ app.get("/api/status", (_req, res) => {
221
+ res.json({
222
+ status: "server_info",
223
+ serverId,
224
+ hostname: getHostname(),
225
+ version: daemonVersion,
226
+ listen: formatListenTarget(boundListenTarget ?? listenTarget),
217
227
  });
218
- app.get("/api/files/download", async (req, res) => {
219
- const token = typeof req.query.token === "string" && req.query.token.trim().length > 0
220
- ? req.query.token.trim()
221
- : null;
222
- if (!token) {
223
- res.status(400).json({ error: "Missing download token" });
228
+ });
229
+ const handleFileDownload = async (req, res) => {
230
+ const token = typeof req.query.token === "string" && req.query.token.trim().length > 0
231
+ ? req.query.token.trim()
232
+ : null;
233
+ if (!token) {
234
+ res.status(400).json({ error: "Missing download token" });
235
+ return;
236
+ }
237
+ const entry = downloadTokenStore.consumeToken(token);
238
+ if (!entry) {
239
+ res.status(403).json({ error: "Invalid or expired token" });
240
+ return;
241
+ }
242
+ try {
243
+ const fileStats = await stat(entry.absolutePath);
244
+ if (!fileStats.isFile()) {
245
+ res.status(404).json({ error: "File not found" });
224
246
  return;
225
247
  }
226
- const entry = downloadTokenStore.consumeToken(token);
227
- if (!entry) {
228
- res.status(403).json({ error: "Invalid or expired token" });
248
+ const safeFileName = entry.fileName.replace(/["\r\n]/g, "_");
249
+ res.setHeader("Content-Type", entry.mimeType);
250
+ res.setHeader("Content-Disposition", `attachment; filename="${safeFileName}"`);
251
+ res.setHeader("Content-Length", entry.size.toString());
252
+ const stream = createReadStream(entry.absolutePath);
253
+ stream.on("error", (err) => {
254
+ logger.error({ err }, "Failed to stream download");
255
+ if (!res.headersSent) {
256
+ res.status(500).json({ error: "Failed to read file" });
257
+ }
258
+ else {
259
+ res.end();
260
+ }
261
+ });
262
+ stream.pipe(res);
263
+ }
264
+ catch (err) {
265
+ logger.error({ err }, "Failed to download file");
266
+ if (!res.headersSent) {
267
+ res.status(404).json({ error: "File not found" });
268
+ }
269
+ }
270
+ };
271
+ app.get("/api/files/download", (req, res) => {
272
+ void handleFileDownload(req, res);
273
+ });
274
+ const httpServer = createHTTPServer(app);
275
+ // Script proxy WebSocket upgrade handler — must be registered before the
276
+ // VoiceAssistantWebSocketServer attaches its own "upgrade" listener so that
277
+ // script-bound upgrades are forwarded first. The handler is a no-op for
278
+ // requests that don't match a registered script route.
279
+ const scriptProxyUpgradeHandler = createScriptProxyUpgradeHandler({
280
+ routeStore: scriptRouteStore,
281
+ logger,
282
+ });
283
+ httpServer.on("upgrade", scriptProxyUpgradeHandler);
284
+ const agentStorage = new AgentStorage(config.agentStoragePath, logger);
285
+ const projectRegistry = new FileBackedProjectRegistry(path.join(config.paseoHome, "projects", "projects.json"), logger);
286
+ workspaceRegistry = new FileBackedWorkspaceRegistry(path.join(config.paseoHome, "projects", "workspaces.json"), logger);
287
+ const chatService = new FileBackedChatService({
288
+ paseoHome: config.paseoHome,
289
+ logger,
290
+ });
291
+ const terminalManager = createConfiguredTerminalManager();
292
+ const github = createGitHubService();
293
+ const workspaceGitService = new WorkspaceGitServiceImpl({
294
+ logger,
295
+ paseoHome: config.paseoHome,
296
+ deps: {
297
+ github,
298
+ },
299
+ });
300
+ const providerRegistry = buildProviderRegistry(logger, {
301
+ runtimeSettings: config.agentProviderSettings,
302
+ providerOverrides: config.providerOverrides,
303
+ workspaceGitService,
304
+ isDev: config.isDev === true,
305
+ });
306
+ const agentManager = new AgentManager({
307
+ clients: {
308
+ ...createClientsFromRegistry(providerRegistry, logger),
309
+ ...config.agentClients,
310
+ },
311
+ providerDefinitions: providerRegistry,
312
+ registry: agentStorage,
313
+ logger,
314
+ });
315
+ const detachAgentStoragePersistence = attachAgentStoragePersistence(logger, agentManager, agentStorage);
316
+ await agentStorage.initialize();
317
+ logger.info({ elapsed: elapsed() }, "Agent storage initialized");
318
+ await bootstrapWorkspaceRegistries({
319
+ paseoHome: config.paseoHome,
320
+ agentStorage,
321
+ projectRegistry,
322
+ workspaceRegistry,
323
+ workspaceGitService,
324
+ logger,
325
+ });
326
+ logger.info({ elapsed: elapsed() }, "Workspace registries bootstrapped");
327
+ await chatService.initialize();
328
+ logger.info({ elapsed: elapsed() }, "Chat service initialized");
329
+ const checkoutDiffManager = new CheckoutDiffManager({
330
+ logger,
331
+ paseoHome: config.paseoHome,
332
+ workspaceGitService,
333
+ });
334
+ const loopService = new LoopService({
335
+ paseoHome: config.paseoHome,
336
+ logger,
337
+ agentManager,
338
+ });
339
+ await loopService.initialize();
340
+ logger.info({ elapsed: elapsed() }, "Loop service initialized");
341
+ const scheduleService = new ScheduleService({
342
+ paseoHome: config.paseoHome,
343
+ logger,
344
+ agentManager,
345
+ agentStorage,
346
+ });
347
+ await scheduleService.start();
348
+ logger.info({ elapsed: elapsed() }, "Schedule service initialized");
349
+ logger.info({ elapsed: elapsed() }, "Loading persisted agent registry");
350
+ const persistedRecords = await agentStorage.list();
351
+ logger.info({ elapsed: elapsed() }, `Agent registry loaded (${persistedRecords.length} record${persistedRecords.length === 1 ? "" : "s"}); agents will initialize on demand`);
352
+ logger.info("Voice mode configured for agent-scoped resume flow (no dedicated voice assistant provider)");
353
+ logger.info({ elapsed: elapsed() }, "Preparing voice and MCP runtime");
354
+ const mcpEnabled = config.mcpEnabled ?? true;
355
+ let agentMcpBaseUrl = null;
356
+ if (mcpEnabled) {
357
+ const agentMcpRoute = "/mcp/agents";
358
+ const agentMcpTransports = new Map();
359
+ const archiveWorkspaceRecordForMcp = async (workspaceId) => {
360
+ const sessions = wsServer?.listActiveSessions() ?? [];
361
+ if (sessions.length > 0) {
362
+ await Promise.all(sessions.map((session) => session.archiveWorkspaceRecordForExternalMutation(workspaceId)));
229
363
  return;
230
364
  }
231
- try {
232
- const fileStats = await stat(entry.absolutePath);
233
- if (!fileStats.isFile()) {
234
- res.status(404).json({ error: "File not found" });
235
- return;
236
- }
237
- const safeFileName = entry.fileName.replace(/["\r\n]/g, "_");
238
- res.setHeader("Content-Type", entry.mimeType);
239
- res.setHeader("Content-Disposition", `attachment; filename="${safeFileName}"`);
240
- res.setHeader("Content-Length", entry.size.toString());
241
- const stream = createReadStream(entry.absolutePath);
242
- stream.on("error", (err) => {
243
- logger.error({ err }, "Failed to stream download");
244
- if (!res.headersSent) {
245
- res.status(500).json({ error: "Failed to read file" });
246
- }
247
- else {
248
- res.end();
249
- }
250
- });
251
- stream.pipe(res);
365
+ await archivePersistedWorkspaceRecord({
366
+ workspaceId,
367
+ workspaceRegistry,
368
+ projectRegistry,
369
+ });
370
+ };
371
+ const markWorkspaceArchivingForMcpArchive = (workspaceIds, archivingAt) => {
372
+ const workspaceIdList = Array.from(workspaceIds);
373
+ for (const session of wsServer?.listActiveSessions() ?? []) {
374
+ session.markWorkspaceArchivingForExternalMutation(workspaceIdList, archivingAt);
252
375
  }
253
- catch (err) {
254
- logger.error({ err }, "Failed to download file");
255
- if (!res.headersSent) {
256
- res.status(404).json({ error: "File not found" });
257
- }
376
+ };
377
+ const clearWorkspaceArchivingForMcpArchive = (workspaceIds) => {
378
+ const workspaceIdList = Array.from(workspaceIds);
379
+ for (const session of wsServer?.listActiveSessions() ?? []) {
380
+ session.clearWorkspaceArchivingForExternalMutation(workspaceIdList);
258
381
  }
259
- });
260
- const httpServer = createHTTPServer(app);
261
- // Script proxy WebSocket upgrade handler — must be registered before the
262
- // VoiceAssistantWebSocketServer attaches its own "upgrade" listener so that
263
- // script-bound upgrades are forwarded first. The handler is a no-op for
264
- // requests that don't match a registered script route.
265
- const scriptProxyUpgradeHandler = createScriptProxyUpgradeHandler({
266
- routeStore: scriptRouteStore,
267
- logger,
268
- });
269
- httpServer.on("upgrade", scriptProxyUpgradeHandler);
270
- const agentStorage = new AgentStorage(config.agentStoragePath, logger);
271
- const projectRegistry = new FileBackedProjectRegistry(path.join(config.paseoHome, "projects", "projects.json"), logger);
272
- workspaceRegistry = new FileBackedWorkspaceRegistry(path.join(config.paseoHome, "projects", "workspaces.json"), logger);
273
- const chatService = new FileBackedChatService({
274
- paseoHome: config.paseoHome,
275
- logger,
276
- });
277
- const terminalManager = createTerminalManager();
278
- const github = createGitHubService();
279
- const workspaceGitService = new WorkspaceGitServiceImpl({
280
- logger,
281
- paseoHome: config.paseoHome,
282
- deps: {
382
+ };
383
+ const emitWorkspaceUpdatesForMcpArchive = async (workspaceIds) => {
384
+ const workspaceIdList = Array.from(workspaceIds);
385
+ await Promise.all((wsServer?.listActiveSessions() ?? []).map((session) => session.emitWorkspaceUpdatesForExternalWorkspaceIds(workspaceIdList)));
386
+ };
387
+ const emitMcpArchiveSessionMessage = (message) => {
388
+ wsServer?.broadcast(wrapSessionMessage(message));
389
+ };
390
+ const createAgentMcpTransport = async (callerAgentId) => {
391
+ const agentMcpServer = await createAgentMcpServer({
392
+ agentManager,
393
+ agentStorage,
394
+ terminalManager,
395
+ getDaemonTcpPort: () => (boundListenTarget?.type === "tcp" ? boundListenTarget.port : null),
396
+ scheduleService,
397
+ providerRegistry,
283
398
  github,
284
- },
285
- });
286
- const agentManager = new AgentManager({
287
- clients: {
288
- ...createAllClients(logger, {
289
- runtimeSettings: config.agentProviderSettings,
290
- providerOverrides: config.providerOverrides,
291
- workspaceGitService,
292
- isDev: config.isDev === true,
293
- }),
294
- ...config.agentClients,
295
- },
296
- registry: agentStorage,
297
- logger,
298
- });
299
- const providerRegistry = buildProviderRegistry(logger, {
300
- runtimeSettings: config.agentProviderSettings,
301
- providerOverrides: config.providerOverrides,
302
- workspaceGitService,
303
- isDev: config.isDev === true,
304
- });
305
- const detachAgentStoragePersistence = attachAgentStoragePersistence(logger, agentManager, agentStorage);
306
- await agentStorage.initialize();
307
- logger.info({ elapsed: elapsed() }, "Agent storage initialized");
308
- await bootstrapWorkspaceRegistries({
309
- paseoHome: config.paseoHome,
310
- agentStorage,
311
- projectRegistry,
312
- workspaceRegistry,
313
- workspaceGitService,
314
- logger,
315
- });
316
- logger.info({ elapsed: elapsed() }, "Workspace registries bootstrapped");
317
- await chatService.initialize();
318
- logger.info({ elapsed: elapsed() }, "Chat service initialized");
319
- const checkoutDiffManager = new CheckoutDiffManager({
320
- logger,
321
- paseoHome: config.paseoHome,
322
- workspaceGitService,
323
- });
324
- const loopService = new LoopService({
325
- paseoHome: config.paseoHome,
326
- logger,
327
- agentManager,
328
- });
329
- await loopService.initialize();
330
- logger.info({ elapsed: elapsed() }, "Loop service initialized");
331
- const scheduleService = new ScheduleService({
332
- paseoHome: config.paseoHome,
333
- logger,
334
- agentManager,
335
- agentStorage,
336
- });
337
- await scheduleService.start();
338
- logger.info({ elapsed: elapsed() }, "Schedule service initialized");
339
- logger.info({ elapsed: elapsed() }, "Loading persisted agent registry");
340
- const persistedRecords = await agentStorage.list();
341
- logger.info({ elapsed: elapsed() }, `Agent registry loaded (${persistedRecords.length} record${persistedRecords.length === 1 ? "" : "s"}); agents will initialize on demand`);
342
- logger.info("Voice mode configured for agent-scoped resume flow (no dedicated voice assistant provider)");
343
- logger.info({ elapsed: elapsed() }, "Preparing voice and MCP runtime");
344
- const mcpEnabled = config.mcpEnabled ?? true;
345
- let agentMcpBaseUrl = null;
346
- if (mcpEnabled) {
347
- const agentMcpRoute = "/mcp/agents";
348
- const agentMcpTransports = new Map();
349
- const archiveWorkspaceRecordForMcp = async (workspaceId) => {
350
- const sessions = wsServer?.listActiveSessions() ?? [];
351
- if (sessions.length > 0) {
352
- await Promise.all(sessions.map((session) => session.archiveWorkspaceRecordForExternalMutation(workspaceId)));
353
- return;
354
- }
355
- await archivePersistedWorkspaceRecord({
356
- workspaceId,
357
- workspaceRegistry,
358
- projectRegistry,
359
- });
360
- };
361
- const emitWorkspaceUpdatesForMcpArchive = async (cwds) => {
362
- const cwdList = Array.from(cwds);
363
- await Promise.all((wsServer?.listActiveSessions() ?? []).map((session) => session.emitWorkspaceUpdatesForExternalCwds(cwdList)));
364
- };
365
- const emitMcpArchiveSessionMessage = (message) => {
366
- wsServer?.broadcast(wrapSessionMessage(message));
367
- };
368
- const createAgentMcpTransport = async (callerAgentId) => {
369
- const agentMcpServer = await createAgentMcpServer({
370
- agentManager,
371
- agentStorage,
372
- terminalManager,
373
- getDaemonTcpPort: () => boundListenTarget?.type === "tcp" ? boundListenTarget.port : null,
374
- scheduleService,
375
- providerRegistry,
376
- github,
377
- workspaceGitService,
378
- archiveWorkspaceRecord: archiveWorkspaceRecordForMcp,
379
- emitWorkspaceUpdatesForCwds: emitWorkspaceUpdatesForMcpArchive,
380
- emitSessionMessage: emitMcpArchiveSessionMessage,
381
- createPaseoWorktree: async (input, serviceOptions) => {
382
- const coreDeps = createWorktreeCoreDeps(github);
383
- const result = await createPaseoWorktree(input, {
384
- ...coreDeps,
385
- ...(serviceOptions?.resolveDefaultBranch
386
- ? {
387
- resolveDefaultBranch: serviceOptions.resolveDefaultBranch,
388
- }
389
- : {}),
390
- projectRegistry,
391
- workspaceRegistry,
392
- workspaceGitService,
393
- });
394
- await Promise.all(wsServer
395
- ?.listActiveSessions()
396
- .map((session) => session.warmWorkspaceGitDataForWorkspace(result.workspace)) ?? []);
397
- return result;
398
- },
399
- paseoHome: config.paseoHome,
400
- callerAgentId,
401
- enableVoiceTools: false,
402
- resolveSpeakHandler: (agentId) => wsServer?.resolveVoiceSpeakHandler(agentId) ?? null,
403
- resolveCallerContext: (agentId) => wsServer?.resolveVoiceCallerContext(agentId) ?? null,
404
- logger,
405
- });
406
- const transport = new StreamableHTTPServerTransport({
407
- sessionIdGenerator: () => randomUUID(),
408
- onsessioninitialized: (sessionId) => {
409
- agentMcpTransports.set(sessionId, transport);
410
- logger.debug({ sessionId }, "Agent MCP session initialized");
411
- },
412
- onsessionclosed: (sessionId) => {
413
- agentMcpTransports.delete(sessionId);
414
- logger.debug({ sessionId }, "Agent MCP session closed");
415
- },
416
- // NOTE: We enforce a Vite-like host allowlist at the app/websocket layer.
417
- // StreamableHTTPServerTransport's built-in check requires exact Host header matches.
418
- enableDnsRebindingProtection: false,
419
- });
420
- transport.onclose = () => {
399
+ workspaceGitService,
400
+ archiveWorkspaceRecord: archiveWorkspaceRecordForMcp,
401
+ emitWorkspaceUpdatesForWorkspaceIds: emitWorkspaceUpdatesForMcpArchive,
402
+ markWorkspaceArchiving: markWorkspaceArchivingForMcpArchive,
403
+ clearWorkspaceArchiving: clearWorkspaceArchivingForMcpArchive,
404
+ emitSessionMessage: emitMcpArchiveSessionMessage,
405
+ createPaseoWorktree: async (input, serviceOptions) => {
406
+ return createPaseoWorktreeWorkflow({
407
+ paseoHome: config.paseoHome,
408
+ createPaseoWorktree: async (workflowInput, workflowOptions) => {
409
+ const coreDeps = createWorktreeCoreDeps(github);
410
+ return createRegisteredPaseoWorktree(workflowInput, {
411
+ ...coreDeps,
412
+ ...(workflowOptions?.resolveDefaultBranch
413
+ ? {
414
+ resolveDefaultBranch: workflowOptions.resolveDefaultBranch,
415
+ }
416
+ : {}),
417
+ projectRegistry,
418
+ workspaceRegistry,
419
+ workspaceGitService,
420
+ });
421
+ },
422
+ warmWorkspaceGitData: async (workspace) => {
423
+ await Promise.all(wsServer
424
+ ?.listActiveSessions()
425
+ .map((session) => session.warmWorkspaceGitDataForWorkspace(workspace)) ?? []);
426
+ },
427
+ emitWorkspaceUpdateForCwd: async (cwd, emitOptions) => {
428
+ await Promise.all(wsServer
429
+ ?.listActiveSessions()
430
+ .map((session) => session.emitWorkspaceUpdatesForExternalCwds([cwd])) ?? []);
431
+ void emitOptions;
432
+ },
433
+ cacheWorkspaceSetupSnapshot: () => { },
434
+ emit: emitMcpArchiveSessionMessage,
435
+ sessionLogger: logger,
436
+ terminalManager,
437
+ archiveWorkspaceRecord: archiveWorkspaceRecordForMcp,
438
+ scriptRouteStore,
439
+ scriptRuntimeStore,
440
+ getDaemonTcpPort: () => boundListenTarget?.type === "tcp" ? boundListenTarget.port : null,
441
+ getDaemonTcpHost: () => boundListenTarget?.type === "tcp" ? boundListenTarget.host : null,
442
+ onScriptsChanged: null,
443
+ }, input, serviceOptions);
444
+ },
445
+ paseoHome: config.paseoHome,
446
+ callerAgentId,
447
+ enableVoiceTools: false,
448
+ resolveSpeakHandler: (agentId) => wsServer?.resolveVoiceSpeakHandler(agentId) ?? null,
449
+ resolveCallerContext: (agentId) => wsServer?.resolveVoiceCallerContext(agentId) ?? null,
450
+ logger,
451
+ });
452
+ const transport = new StreamableHTTPServerTransport({
453
+ sessionIdGenerator: () => randomUUID(),
454
+ onsessioninitialized: (sessionId) => {
455
+ agentMcpTransports.set(sessionId, transport);
456
+ logger.debug({ sessionId }, "Agent MCP session initialized");
457
+ },
458
+ onsessionclosed: (sessionId) => {
459
+ agentMcpTransports.delete(sessionId);
460
+ logger.debug({ sessionId }, "Agent MCP session closed");
461
+ },
462
+ // NOTE: We enforce a Vite-like host allowlist at the app/websocket layer.
463
+ // StreamableHTTPServerTransport's built-in check requires exact Host header matches.
464
+ enableDnsRebindingProtection: false,
465
+ });
466
+ Object.assign(transport, {
467
+ onclose: () => {
421
468
  if (transport.sessionId) {
422
469
  agentMcpTransports.delete(transport.sessionId);
423
470
  }
424
- };
425
- transport.onerror = (err) => {
471
+ },
472
+ onerror: (err) => {
426
473
  logger.error({ err }, "Agent MCP transport error");
427
- };
428
- await agentMcpServer.connect(transport);
429
- return transport;
430
- };
431
- const handleAgentMcpRequest = async (req, res) => {
432
- if (config.mcpDebug) {
433
- logger.debug({
434
- method: req.method,
435
- url: req.originalUrl,
436
- sessionId: req.header("mcp-session-id"),
437
- authorization: req.header("authorization"),
438
- body: req.body,
439
- }, "Agent MCP request");
440
- }
441
- try {
442
- const sessionId = req.header("mcp-session-id");
443
- let transport = sessionId ? agentMcpTransports.get(sessionId) : undefined;
444
- if (!transport) {
445
- if (req.method !== "POST") {
446
- res.status(400).json({
447
- jsonrpc: "2.0",
448
- error: {
449
- code: -32000,
450
- message: "Missing or invalid MCP session",
451
- },
452
- id: null,
453
- });
454
- return;
455
- }
456
- if (!isInitializeRequest(req.body)) {
457
- res.status(400).json({
458
- jsonrpc: "2.0",
459
- error: {
460
- code: -32000,
461
- message: "Initialization request expected",
462
- },
463
- id: null,
464
- });
465
- return;
466
- }
467
- const callerAgentIdRaw = req.query.callerAgentId;
468
- const callerAgentId = typeof callerAgentIdRaw === "string"
469
- ? callerAgentIdRaw
470
- : Array.isArray(callerAgentIdRaw) && typeof callerAgentIdRaw[0] === "string"
471
- ? callerAgentIdRaw[0]
472
- : undefined;
473
- transport = await createAgentMcpTransport(callerAgentId);
474
- }
475
- await transport.handleRequest(req, res, req.body);
476
- }
477
- catch (err) {
478
- logger.error({ err }, "Failed to handle Agent MCP request");
479
- if (!res.headersSent) {
480
- res.status(500).json({
474
+ },
475
+ });
476
+ await agentMcpServer.connect(transport);
477
+ return transport;
478
+ };
479
+ const runAgentMcpRequest = async (req, res) => {
480
+ if (config.mcpDebug) {
481
+ logger.debug({
482
+ method: req.method,
483
+ url: req.originalUrl,
484
+ sessionId: req.header("mcp-session-id"),
485
+ authorization: req.header("authorization"),
486
+ body: req.body,
487
+ }, "Agent MCP request");
488
+ }
489
+ try {
490
+ const sessionId = req.header("mcp-session-id");
491
+ let transport = sessionId ? agentMcpTransports.get(sessionId) : undefined;
492
+ if (!transport) {
493
+ if (req.method !== "POST") {
494
+ res.status(400).json({
481
495
  jsonrpc: "2.0",
482
496
  error: {
483
- code: -32603,
484
- message: "Internal MCP server error",
497
+ code: -32000,
498
+ message: "Missing or invalid MCP session",
485
499
  },
486
500
  id: null,
487
501
  });
502
+ return;
488
503
  }
489
- }
490
- };
491
- app.post(agentMcpRoute, handleAgentMcpRequest);
492
- app.get(agentMcpRoute, handleAgentMcpRequest);
493
- app.delete(agentMcpRoute, handleAgentMcpRequest);
494
- logger.info({ route: agentMcpRoute }, "Agent MCP server mounted on main app");
495
- }
496
- else {
497
- logger.info("Agent MCP HTTP endpoint disabled");
498
- }
499
- const speechService = createSpeechService({
500
- logger,
501
- openaiConfig: config.openai,
502
- speechConfig: config.speech,
503
- });
504
- logger.info({ elapsed: elapsed() }, "Speech service created");
505
- logger.info({ elapsed: elapsed() }, "Bootstrap complete, ready to start listening");
506
- const start = async () => {
507
- // Start main HTTP server
508
- await new Promise((resolve, reject) => {
509
- const onError = (err) => {
510
- httpServer.off("listening", onListening);
511
- reject(err);
512
- };
513
- const onListening = () => {
514
- httpServer.off("error", onError);
515
- const logAndResolve = async () => {
516
- boundListenTarget = resolveBoundListenTarget(listenTarget, httpServer);
517
- const mcpBaseUrl = mcpEnabled ? createAgentMcpBaseUrl(boundListenTarget) : null;
518
- agentMcpBaseUrl = config.mcpInjectIntoAgents === false ? null : mcpBaseUrl;
519
- agentManager.setMcpBaseUrl(agentMcpBaseUrl);
520
- daemonConfigStore.onFieldChange("mcp.injectIntoAgents", (value) => {
521
- agentManager.setMcpBaseUrl(value ? mcpBaseUrl : null);
504
+ if (!isInitializeRequest(req.body)) {
505
+ res.status(400).json({
506
+ jsonrpc: "2.0",
507
+ error: {
508
+ code: -32000,
509
+ message: "Initialization request expected",
510
+ },
511
+ id: null,
522
512
  });
523
- const relayEnabled = config.relayEnabled ?? true;
524
- const relayEndpoint = config.relayEndpoint ?? "relay.paseo.sh:443";
525
- const relayPublicEndpoint = config.relayPublicEndpoint ?? relayEndpoint;
526
- const appBaseUrl = config.appBaseUrl ?? "https://app.paseo.sh";
527
- if (boundListenTarget.type === "tcp") {
528
- logger.info({
529
- host: boundListenTarget.host,
530
- port: boundListenTarget.port,
531
- elapsed: elapsed(),
532
- }, `Server listening on http://${boundListenTarget.host}:${boundListenTarget.port}`);
533
- }
534
- else {
535
- logger.info({ path: boundListenTarget.path, elapsed: elapsed() }, `Server listening on ${boundListenTarget.path}`);
536
- }
537
- wsServer = new VoiceAssistantWebSocketServer(httpServer, logger, serverId, agentManager, agentStorage, downloadTokenStore, config.paseoHome, daemonConfigStore, mcpBaseUrl, { allowedOrigins, hostnames: configuredHostnames }, speechService, terminalManager, {
538
- finalTimeoutMs: config.dictationFinalTimeoutMs,
539
- }, config.agentProviderSettings, config.providerOverrides, config.isDev === true, daemonVersion, (intent) => {
540
- try {
541
- config.onLifecycleIntent?.(intent);
542
- }
543
- catch (error) {
544
- logger.error({ err: error, intent }, "Failed to handle daemon lifecycle intent");
545
- }
546
- }, projectRegistry, workspaceRegistry, chatService, loopService, scheduleService, checkoutDiffManager, scriptRouteStore, scriptRuntimeStore, handleBranchChange, () => (boundListenTarget?.type === "tcp" ? boundListenTarget.port : null), () => (boundListenTarget?.type === "tcp" ? boundListenTarget.host : null), (hostname) => scriptHealthMonitor.getHealthForHostname(hostname), workspaceGitService, github);
547
- if (typeof process.send === "function" && process.env.PASEO_SUPERVISED === "1") {
548
- process.send({
549
- type: "paseo:ready",
550
- listen: boundListenTarget.type === "tcp"
551
- ? `${boundListenTarget.host}:${boundListenTarget.port}`
552
- : boundListenTarget.path,
553
- });
554
- }
555
- if (relayEnabled) {
556
- const offer = await createConnectionOfferV2({
557
- serverId,
558
- daemonPublicKeyB64: daemonKeyPair.publicKeyB64,
559
- relay: { endpoint: relayPublicEndpoint },
560
- });
561
- encodeOfferToFragmentUrl({ offer, appBaseUrl });
562
- relayTransport?.stop().catch(() => undefined);
563
- relayTransport = startRelayTransport({
564
- logger,
565
- attachSocket: (ws, metadata) => {
566
- if (!wsServer) {
567
- throw new Error("WebSocket server not initialized");
568
- }
569
- return wsServer.attachExternalSocket(ws, metadata);
570
- },
571
- relayEndpoint,
572
- serverId,
573
- daemonKeyPair: daemonKeyPair.keyPair,
574
- });
575
- }
576
- };
577
- logAndResolve().then(resolve, reject);
578
- };
579
- httpServer.once("error", onError);
580
- httpServer.once("listening", onListening);
581
- if (listenTarget.type === "tcp") {
582
- httpServer.listen(listenTarget.port, listenTarget.host);
583
- }
584
- else {
585
- if (listenTarget.type === "socket" && existsSync(listenTarget.path)) {
586
- unlinkSync(listenTarget.path);
513
+ return;
514
+ }
515
+ const callerAgentIdRaw = req.query.callerAgentId;
516
+ let callerAgentId;
517
+ if (typeof callerAgentIdRaw === "string") {
518
+ callerAgentId = callerAgentIdRaw;
587
519
  }
588
- httpServer.listen(listenTarget.path);
520
+ else if (Array.isArray(callerAgentIdRaw) && typeof callerAgentIdRaw[0] === "string") {
521
+ callerAgentId = callerAgentIdRaw[0];
522
+ }
523
+ transport = await createAgentMcpTransport(callerAgentId);
589
524
  }
590
- });
591
- // Start speech service after listening so synchronous Sherpa native
592
- // model loading doesn't block the server from accepting connections.
593
- speechService.start();
594
- scriptHealthMonitor.start();
595
- };
596
- const stop = async () => {
597
- scriptHealthMonitor.stop();
598
- await closeAllAgents(logger, agentManager);
599
- await agentManager.flush().catch(() => undefined);
600
- detachAgentStoragePersistence();
601
- await agentStorage.flush().catch(() => undefined);
602
- await shutdownProviders(logger, {
603
- runtimeSettings: config.agentProviderSettings,
604
- providerOverrides: config.providerOverrides,
605
- });
606
- terminalManager.killAll();
607
- speechService.stop();
608
- await scheduleService.stop().catch(() => undefined);
609
- await relayTransport?.stop().catch(() => undefined);
610
- if (wsServer) {
611
- await wsServer.close();
525
+ await transport.handleRequest(req, res, req.body);
612
526
  }
613
- await new Promise((resolve) => {
614
- httpServer.close(() => resolve());
615
- });
616
- // Clean up socket files
617
- if (listenTarget.type === "socket" && existsSync(listenTarget.path)) {
618
- unlinkSync(listenTarget.path);
527
+ catch (err) {
528
+ logger.error({ err }, "Failed to handle Agent MCP request");
529
+ if (!res.headersSent) {
530
+ res.status(500).json({
531
+ jsonrpc: "2.0",
532
+ error: {
533
+ code: -32603,
534
+ message: "Internal MCP server error",
535
+ },
536
+ id: null,
537
+ });
538
+ }
619
539
  }
620
540
  };
621
- return {
622
- config,
623
- agentManager,
624
- agentStorage,
625
- terminalManager,
626
- scriptRouteStore,
627
- scriptRuntimeStore,
628
- start,
629
- stop,
630
- getListenTarget: () => boundListenTarget,
541
+ const handleAgentMcpRequest = (req, res) => {
542
+ void runAgentMcpRequest(req, res);
631
543
  };
544
+ app.post(agentMcpRoute, handleAgentMcpRequest);
545
+ app.get(agentMcpRoute, handleAgentMcpRequest);
546
+ app.delete(agentMcpRoute, handleAgentMcpRequest);
547
+ logger.info({ route: agentMcpRoute }, "Agent MCP server mounted on main app");
632
548
  }
633
- catch (err) {
634
- throw err;
549
+ else {
550
+ logger.info("Agent MCP HTTP endpoint disabled");
635
551
  }
552
+ const speechService = createSpeechService({
553
+ logger,
554
+ openaiConfig: config.openai,
555
+ speechConfig: config.speech,
556
+ });
557
+ logger.info({ elapsed: elapsed() }, "Speech service created");
558
+ logger.info({ elapsed: elapsed() }, "Bootstrap complete, ready to start listening");
559
+ const start = async () => {
560
+ // Start main HTTP server
561
+ await new Promise((resolve, reject) => {
562
+ const onError = (err) => {
563
+ httpServer.off("listening", onListening);
564
+ reject(err);
565
+ };
566
+ const onListening = () => {
567
+ httpServer.off("error", onError);
568
+ const logAndResolve = async () => {
569
+ boundListenTarget = resolveBoundListenTarget(listenTarget, httpServer);
570
+ const mcpBaseUrl = mcpEnabled ? createAgentMcpBaseUrl(boundListenTarget) : null;
571
+ agentMcpBaseUrl = config.mcpInjectIntoAgents === false ? null : mcpBaseUrl;
572
+ agentManager.setMcpBaseUrl(agentMcpBaseUrl);
573
+ daemonConfigStore.onFieldChange("mcp.injectIntoAgents", (value) => {
574
+ agentManager.setMcpBaseUrl(value ? mcpBaseUrl : null);
575
+ });
576
+ const relayEnabled = config.relayEnabled ?? true;
577
+ const relayEndpoint = config.relayEndpoint ?? "relay.paseo.sh:443";
578
+ const relayPublicEndpoint = config.relayPublicEndpoint ?? relayEndpoint;
579
+ const appBaseUrl = config.appBaseUrl ?? "https://app.paseo.sh";
580
+ if (boundListenTarget.type === "tcp") {
581
+ logger.info({
582
+ host: boundListenTarget.host,
583
+ port: boundListenTarget.port,
584
+ authRequired: !!config.auth?.password,
585
+ elapsed: elapsed(),
586
+ }, `Server listening on http://${boundListenTarget.host}:${boundListenTarget.port}`);
587
+ }
588
+ else {
589
+ logger.info({
590
+ path: boundListenTarget.path,
591
+ authRequired: !!config.auth?.password,
592
+ elapsed: elapsed(),
593
+ }, `Server listening on ${boundListenTarget.path}`);
594
+ }
595
+ if (config.auth?.password) {
596
+ logger.info("Daemon password authentication enabled");
597
+ }
598
+ wsServer = new VoiceAssistantWebSocketServer(httpServer, logger, serverId, agentManager, agentStorage, downloadTokenStore, config.paseoHome, daemonConfigStore, mcpBaseUrl, { allowedOrigins, hostnames: configuredHostnames }, config.auth, speechService, terminalManager, {
599
+ finalTimeoutMs: config.dictationFinalTimeoutMs,
600
+ }, config.agentProviderSettings, config.providerOverrides, config.isDev === true, daemonVersion, (intent) => {
601
+ try {
602
+ config.onLifecycleIntent?.(intent);
603
+ }
604
+ catch (error) {
605
+ logger.error({ err: error, intent }, "Failed to handle daemon lifecycle intent");
606
+ }
607
+ }, projectRegistry, workspaceRegistry, chatService, loopService, scheduleService, checkoutDiffManager, scriptRouteStore, scriptRuntimeStore, handleBranchChange, () => (boundListenTarget?.type === "tcp" ? boundListenTarget.port : null), () => (boundListenTarget?.type === "tcp" ? boundListenTarget.host : null), (hostname) => scriptHealthMonitor.getHealthForHostname(hostname), workspaceGitService, github);
608
+ if (typeof process.send === "function" && process.env.PASEO_SUPERVISED === "1") {
609
+ process.send({
610
+ type: "paseo:ready",
611
+ listen: boundListenTarget.type === "tcp"
612
+ ? `${boundListenTarget.host}:${boundListenTarget.port}`
613
+ : boundListenTarget.path,
614
+ });
615
+ }
616
+ if (relayEnabled) {
617
+ const offer = await createConnectionOfferV2({
618
+ serverId,
619
+ daemonPublicKeyB64: daemonKeyPair.publicKeyB64,
620
+ relay: { endpoint: relayPublicEndpoint },
621
+ });
622
+ encodeOfferToFragmentUrl({ offer, appBaseUrl });
623
+ relayTransport?.stop().catch(() => undefined);
624
+ relayTransport = startRelayTransport({
625
+ logger,
626
+ attachSocket: (ws, metadata) => {
627
+ if (!wsServer) {
628
+ throw new Error("WebSocket server not initialized");
629
+ }
630
+ return wsServer.attachExternalSocket(ws, metadata);
631
+ },
632
+ relayEndpoint,
633
+ serverId,
634
+ daemonKeyPair: daemonKeyPair.keyPair,
635
+ });
636
+ }
637
+ };
638
+ logAndResolve().then(resolve, reject);
639
+ };
640
+ httpServer.once("error", onError);
641
+ httpServer.once("listening", onListening);
642
+ if (listenTarget.type === "tcp") {
643
+ httpServer.listen(listenTarget.port, listenTarget.host);
644
+ }
645
+ else {
646
+ if (listenTarget.type === "socket" && existsSync(listenTarget.path)) {
647
+ unlinkSync(listenTarget.path);
648
+ }
649
+ httpServer.listen(listenTarget.path);
650
+ }
651
+ });
652
+ // Start speech service after listening so synchronous Sherpa native
653
+ // model loading doesn't block the server from accepting connections.
654
+ speechService.start();
655
+ scriptHealthMonitor.start();
656
+ };
657
+ const stop = async () => {
658
+ scriptHealthMonitor.stop();
659
+ await closeAllAgents(logger, agentManager);
660
+ await agentManager.flush().catch(() => undefined);
661
+ detachAgentStoragePersistence();
662
+ await agentStorage.flush().catch(() => undefined);
663
+ await shutdownProviders(logger, {
664
+ runtimeSettings: config.agentProviderSettings,
665
+ providerOverrides: config.providerOverrides,
666
+ });
667
+ terminalManager.killAll();
668
+ speechService.stop();
669
+ await scheduleService.stop().catch(() => undefined);
670
+ await relayTransport?.stop().catch(() => undefined);
671
+ if (wsServer) {
672
+ await wsServer.close();
673
+ }
674
+ // Force-drop remaining sockets so httpServer.close() resolves promptly.
675
+ // We've already closed wsServer (which sent ws-layer close frames) and
676
+ // stopped every other service, so anything still attached is a TCP
677
+ // socket whose higher-level shutdown hasn't fully released it (e.g.
678
+ // upgraded WS sockets in the closing handshake, or HTTP keep-alive
679
+ // sockets in CLOSE_WAIT). closeIdleConnections() does not catch
680
+ // upgraded sockets, so we use closeAllConnections() here.
681
+ httpServer.closeAllConnections();
682
+ await new Promise((resolve) => {
683
+ httpServer.close(() => resolve());
684
+ });
685
+ // Clean up socket files
686
+ if (listenTarget.type === "socket" && existsSync(listenTarget.path)) {
687
+ unlinkSync(listenTarget.path);
688
+ }
689
+ };
690
+ return {
691
+ config,
692
+ agentManager,
693
+ agentStorage,
694
+ terminalManager,
695
+ scriptRouteStore,
696
+ scriptRuntimeStore,
697
+ start,
698
+ stop,
699
+ getListenTarget: () => boundListenTarget,
700
+ };
636
701
  }
637
702
  async function closeAllAgents(logger, agentManager) {
638
703
  const agents = agentManager.listAgents();
639
- for (const agent of agents) {
704
+ await Promise.all(agents.map(async (agent) => {
640
705
  try {
641
706
  await agentManager.closeAgent(agent.id);
642
707
  }
643
708
  catch (err) {
644
709
  logger.error({ err, agentId: agent.id }, "Failed to close agent");
645
710
  }
646
- }
711
+ }));
647
712
  }
648
713
  //# sourceMappingURL=bootstrap.js.map