agent-tower 0.7.4 → 0.7.5-beta.5

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 (365) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +6 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/core/container.d.ts +2 -0
  5. package/dist/core/container.d.ts.map +1 -1
  6. package/dist/core/container.js +25 -0
  7. package/dist/core/container.js.map +1 -1
  8. package/dist/executors/__tests__/base.executor.test.js +19 -0
  9. package/dist/executors/__tests__/base.executor.test.js.map +1 -1
  10. package/dist/executors/__tests__/claude-code-mcp.test.d.ts +2 -0
  11. package/dist/executors/__tests__/claude-code-mcp.test.d.ts.map +1 -0
  12. package/dist/executors/__tests__/claude-code-mcp.test.js +211 -0
  13. package/dist/executors/__tests__/claude-code-mcp.test.js.map +1 -0
  14. package/dist/executors/__tests__/codex-mcp-windows.test.d.ts +2 -0
  15. package/dist/executors/__tests__/codex-mcp-windows.test.d.ts.map +1 -0
  16. package/dist/executors/__tests__/codex-mcp-windows.test.js +128 -0
  17. package/dist/executors/__tests__/codex-mcp-windows.test.js.map +1 -0
  18. package/dist/executors/__tests__/codex.executor.test.js +394 -1
  19. package/dist/executors/__tests__/codex.executor.test.js.map +1 -1
  20. package/dist/executors/base.executor.d.ts.map +1 -1
  21. package/dist/executors/base.executor.js +13 -0
  22. package/dist/executors/base.executor.js.map +1 -1
  23. package/dist/executors/claude-code.executor.d.ts +1 -0
  24. package/dist/executors/claude-code.executor.d.ts.map +1 -1
  25. package/dist/executors/claude-code.executor.js +52 -3
  26. package/dist/executors/claude-code.executor.js.map +1 -1
  27. package/dist/executors/codex.executor.d.ts +6 -6
  28. package/dist/executors/codex.executor.d.ts.map +1 -1
  29. package/dist/executors/codex.executor.js +118 -32
  30. package/dist/executors/codex.executor.js.map +1 -1
  31. package/dist/git/worktree.manager.d.ts.map +1 -1
  32. package/dist/git/worktree.manager.js +5 -2
  33. package/dist/git/worktree.manager.js.map +1 -1
  34. package/dist/mcp/http-client.d.ts +8 -1
  35. package/dist/mcp/http-client.d.ts.map +1 -1
  36. package/dist/mcp/http-client.js +6 -0
  37. package/dist/mcp/http-client.js.map +1 -1
  38. package/dist/mcp/tools/__tests__/workspace-services.test.js +34 -1
  39. package/dist/mcp/tools/__tests__/workspace-services.test.js.map +1 -1
  40. package/dist/mcp/tools/tasks.js +1 -1
  41. package/dist/mcp/tools/tasks.js.map +1 -1
  42. package/dist/mcp/tools/workspace-services.d.ts.map +1 -1
  43. package/dist/mcp/tools/workspace-services.js +39 -2
  44. package/dist/mcp/tools/workspace-services.js.map +1 -1
  45. package/dist/mcp/types.d.ts +20 -0
  46. package/dist/mcp/types.d.ts.map +1 -1
  47. package/dist/mcp/types.js +12 -0
  48. package/dist/mcp/types.js.map +1 -1
  49. package/dist/middleware/__tests__/preview-fallback.test.d.ts +2 -0
  50. package/dist/middleware/__tests__/preview-fallback.test.d.ts.map +1 -0
  51. package/dist/middleware/__tests__/preview-fallback.test.js +93 -0
  52. package/dist/middleware/__tests__/preview-fallback.test.js.map +1 -0
  53. package/dist/middleware/preview-fallback.d.ts +5 -0
  54. package/dist/middleware/preview-fallback.d.ts.map +1 -0
  55. package/dist/middleware/preview-fallback.js +91 -0
  56. package/dist/middleware/preview-fallback.js.map +1 -0
  57. package/dist/output/__tests__/claude-code-parser-continuation.test.d.ts +2 -0
  58. package/dist/output/__tests__/claude-code-parser-continuation.test.d.ts.map +1 -0
  59. package/dist/output/__tests__/claude-code-parser-continuation.test.js +89 -0
  60. package/dist/output/__tests__/claude-code-parser-continuation.test.js.map +1 -0
  61. package/dist/output/__tests__/claude-code-parser-lifecycle.test.js +4 -1
  62. package/dist/output/__tests__/claude-code-parser-lifecycle.test.js.map +1 -1
  63. package/dist/output/claude-code-parser.d.ts +36 -1
  64. package/dist/output/claude-code-parser.d.ts.map +1 -1
  65. package/dist/output/claude-code-parser.js +149 -18
  66. package/dist/output/claude-code-parser.js.map +1 -1
  67. package/dist/output/types.d.ts +2 -0
  68. package/dist/output/types.d.ts.map +1 -1
  69. package/dist/output/types.js.map +1 -1
  70. package/dist/prompts/workspace-background-service-policy.d.ts +6 -2
  71. package/dist/prompts/workspace-background-service-policy.d.ts.map +1 -1
  72. package/dist/prompts/workspace-background-service-policy.js +12 -3
  73. package/dist/prompts/workspace-background-service-policy.js.map +1 -1
  74. package/dist/prompts/workspace-background-service-policy.test.js +11 -0
  75. package/dist/prompts/workspace-background-service-policy.test.js.map +1 -1
  76. package/dist/routes/__tests__/previews.integration.test.js +117 -6
  77. package/dist/routes/__tests__/previews.integration.test.js.map +1 -1
  78. package/dist/routes/__tests__/previews.test.js +223 -194
  79. package/dist/routes/__tests__/previews.test.js.map +1 -1
  80. package/dist/routes/__tests__/task-handoff.test.js +25 -16
  81. package/dist/routes/__tests__/task-handoff.test.js.map +1 -1
  82. package/dist/routes/index.d.ts.map +1 -1
  83. package/dist/routes/index.js +3 -0
  84. package/dist/routes/index.js.map +1 -1
  85. package/dist/routes/previews.d.ts +11 -9
  86. package/dist/routes/previews.d.ts.map +1 -1
  87. package/dist/routes/previews.js +137 -516
  88. package/dist/routes/previews.js.map +1 -1
  89. package/dist/routes/session-wakeups.d.ts +7 -0
  90. package/dist/routes/session-wakeups.d.ts.map +1 -0
  91. package/dist/routes/session-wakeups.js +86 -0
  92. package/dist/routes/session-wakeups.js.map +1 -0
  93. package/dist/routes/tasks.d.ts.map +1 -1
  94. package/dist/routes/tasks.js +3 -1
  95. package/dist/routes/tasks.js.map +1 -1
  96. package/dist/runtime/__tests__/acp-process-manager.test.js +65 -0
  97. package/dist/runtime/__tests__/acp-process-manager.test.js.map +1 -1
  98. package/dist/runtime/__tests__/claude-cli-driver.test.js +96 -2
  99. package/dist/runtime/__tests__/claude-cli-driver.test.js.map +1 -1
  100. package/dist/runtime/__tests__/claude-run-lifecycle.test.d.ts +2 -0
  101. package/dist/runtime/__tests__/claude-run-lifecycle.test.d.ts.map +1 -0
  102. package/dist/runtime/__tests__/claude-run-lifecycle.test.js +88 -0
  103. package/dist/runtime/__tests__/claude-run-lifecycle.test.js.map +1 -0
  104. package/dist/runtime/__tests__/cli-driver-lifecycle.test.js +14 -7
  105. package/dist/runtime/__tests__/cli-driver-lifecycle.test.js.map +1 -1
  106. package/dist/runtime/acp/agents/pi-coding-agent.d.ts.map +1 -1
  107. package/dist/runtime/acp/agents/pi-coding-agent.js +3 -0
  108. package/dist/runtime/acp/agents/pi-coding-agent.js.map +1 -1
  109. package/dist/runtime/claude-run-lifecycle.d.ts +77 -0
  110. package/dist/runtime/claude-run-lifecycle.d.ts.map +1 -0
  111. package/dist/runtime/claude-run-lifecycle.js +147 -0
  112. package/dist/runtime/claude-run-lifecycle.js.map +1 -0
  113. package/dist/runtime/cli-driver.d.ts.map +1 -1
  114. package/dist/runtime/cli-driver.js +89 -3
  115. package/dist/runtime/cli-driver.js.map +1 -1
  116. package/dist/runtime/contracts.d.ts +6 -1
  117. package/dist/runtime/contracts.d.ts.map +1 -1
  118. package/dist/runtime/process-scope/__tests__/process-scope.test.d.ts +2 -0
  119. package/dist/runtime/process-scope/__tests__/process-scope.test.d.ts.map +1 -0
  120. package/dist/runtime/process-scope/__tests__/process-scope.test.js +156 -0
  121. package/dist/runtime/process-scope/__tests__/process-scope.test.js.map +1 -0
  122. package/dist/runtime/process-scope/process-scope.d.ts +46 -0
  123. package/dist/runtime/process-scope/process-scope.d.ts.map +1 -0
  124. package/dist/runtime/process-scope/process-scope.js +68 -0
  125. package/dist/runtime/process-scope/process-scope.js.map +1 -0
  126. package/dist/runtime/process-scope/scope-helper.d.ts +28 -0
  127. package/dist/runtime/process-scope/scope-helper.d.ts.map +1 -0
  128. package/dist/runtime/process-scope/scope-helper.js +78 -0
  129. package/dist/runtime/process-scope/scope-helper.js.map +1 -0
  130. package/dist/runtime/runtime-coordinator.d.ts.map +1 -1
  131. package/dist/runtime/runtime-coordinator.js +6 -0
  132. package/dist/runtime/runtime-coordinator.js.map +1 -1
  133. package/dist/services/__tests__/preview-runtime-manager.test.js +13 -112
  134. package/dist/services/__tests__/preview-runtime-manager.test.js.map +1 -1
  135. package/dist/services/__tests__/preview.service.test.js +13 -14
  136. package/dist/services/__tests__/preview.service.test.js.map +1 -1
  137. package/dist/services/__tests__/session-manager.lifecycle.test.js +147 -1
  138. package/dist/services/__tests__/session-manager.lifecycle.test.js.map +1 -1
  139. package/dist/services/__tests__/session-wakeup.service.test.d.ts +2 -0
  140. package/dist/services/__tests__/session-wakeup.service.test.d.ts.map +1 -0
  141. package/dist/services/__tests__/session-wakeup.service.test.js +173 -0
  142. package/dist/services/__tests__/session-wakeup.service.test.js.map +1 -0
  143. package/dist/services/__tests__/terminal-manager.test.js +129 -51
  144. package/dist/services/__tests__/terminal-manager.test.js.map +1 -1
  145. package/dist/services/__tests__/workspace.service.test.js +31 -0
  146. package/dist/services/__tests__/workspace.service.test.js.map +1 -1
  147. package/dist/services/message-delivery.service.d.ts +3 -2
  148. package/dist/services/message-delivery.service.d.ts.map +1 -1
  149. package/dist/services/message-delivery.service.js +11 -7
  150. package/dist/services/message-delivery.service.js.map +1 -1
  151. package/dist/services/preview-bridge.d.ts +50 -0
  152. package/dist/services/preview-bridge.d.ts.map +1 -0
  153. package/dist/services/preview-bridge.js +537 -0
  154. package/dist/services/preview-bridge.js.map +1 -0
  155. package/dist/services/preview-cookies.d.ts +28 -0
  156. package/dist/services/preview-cookies.d.ts.map +1 -0
  157. package/dist/services/preview-cookies.js +133 -0
  158. package/dist/services/preview-cookies.js.map +1 -0
  159. package/dist/services/preview-proxy.d.ts +71 -0
  160. package/dist/services/preview-proxy.d.ts.map +1 -0
  161. package/dist/services/preview-proxy.js +462 -0
  162. package/dist/services/preview-proxy.js.map +1 -0
  163. package/dist/services/preview-runtime-manager.d.ts +11 -25
  164. package/dist/services/preview-runtime-manager.d.ts.map +1 -1
  165. package/dist/services/preview-runtime-manager.js +46 -363
  166. package/dist/services/preview-runtime-manager.js.map +1 -1
  167. package/dist/services/preview.service.d.ts.map +1 -1
  168. package/dist/services/preview.service.js +11 -9
  169. package/dist/services/preview.service.js.map +1 -1
  170. package/dist/services/project.service.d.ts +13 -13
  171. package/dist/services/session-manager.d.ts +2 -0
  172. package/dist/services/session-manager.d.ts.map +1 -1
  173. package/dist/services/session-manager.js +4 -2
  174. package/dist/services/session-manager.js.map +1 -1
  175. package/dist/services/session-wakeup.service.d.ts +105 -0
  176. package/dist/services/session-wakeup.service.d.ts.map +1 -0
  177. package/dist/services/session-wakeup.service.js +319 -0
  178. package/dist/services/session-wakeup.service.js.map +1 -0
  179. package/dist/services/task-handoff.service.d.ts +3 -2
  180. package/dist/services/task-handoff.service.d.ts.map +1 -1
  181. package/dist/services/task-handoff.service.js +7 -6
  182. package/dist/services/task-handoff.service.js.map +1 -1
  183. package/dist/services/team-room-delivery.d.ts +4 -4
  184. package/dist/services/terminal-manager.d.ts +16 -0
  185. package/dist/services/terminal-manager.d.ts.map +1 -1
  186. package/dist/services/terminal-manager.js +64 -7
  187. package/dist/services/terminal-manager.js.map +1 -1
  188. package/dist/services/workspace-background-service.service.d.ts +15 -1
  189. package/dist/services/workspace-background-service.service.d.ts.map +1 -1
  190. package/dist/services/workspace-background-service.service.js +41 -2
  191. package/dist/services/workspace-background-service.service.js.map +1 -1
  192. package/dist/services/workspace.service.d.ts.map +1 -1
  193. package/dist/services/workspace.service.js +2 -1
  194. package/dist/services/workspace.service.js.map +1 -1
  195. package/dist/utils/database-schema.d.ts.map +1 -1
  196. package/dist/utils/database-schema.js +9 -4
  197. package/dist/utils/database-schema.js.map +1 -1
  198. package/dist/utils/database-schema.test.js +21 -0
  199. package/dist/utils/database-schema.test.js.map +1 -1
  200. package/dist/utils/owned-child-process.d.ts +32 -3
  201. package/dist/utils/owned-child-process.d.ts.map +1 -1
  202. package/dist/utils/owned-child-process.js +138 -1
  203. package/dist/utils/owned-child-process.js.map +1 -1
  204. package/dist/web/assets/{AgentDemoPage-D9bIiALx.js → AgentDemoPage-D6clLNZx.js} +1 -1
  205. package/dist/web/assets/{AgentEnvironmentSettingsPage-BE0RC6fR.js → AgentEnvironmentSettingsPage-O1hlpsgp.js} +1 -1
  206. package/dist/web/assets/AttachmentPreview-hD3g_T_y.js +2 -0
  207. package/dist/web/assets/{BranchSelect-Kv3M1YhZ.js → BranchSelect-BkuXnEG2.js} +1 -1
  208. package/dist/web/assets/{BrandLogo-fR2lCwEo.js → BrandLogo-BSwQa2SF.js} +1 -1
  209. package/dist/web/assets/{ConversationPage-BZiMHI9T.js → ConversationPage-DvWjqFF2.js} +1 -1
  210. package/dist/web/assets/CreateTaskInput-Bric0GeW.js +1 -0
  211. package/dist/web/assets/{DemoPage-DwpThe16.js → DemoPage-Cwy3EmOm.js} +1 -1
  212. package/dist/web/assets/{DesignSystemPage-DH9_cygJ.js → DesignSystemPage-C1HrGwpV.js} +1 -1
  213. package/dist/web/assets/{ExecutionPermissionSelector-C-akTOVg.js → ExecutionPermissionSelector-BgrxbvBB.js} +1 -1
  214. package/dist/web/assets/{GeneralSettingsPage-v2w1eofz.js → GeneralSettingsPage-qdeAdBkW.js} +1 -1
  215. package/dist/web/assets/{LoadingPreviewPage-pgk3PWM9.js → LoadingPreviewPage-qeZ8nuiQ.js} +1 -1
  216. package/dist/web/assets/{McpSettingsPage-w1DOlY5V.js → McpSettingsPage-Bo-auo0X.js} +1 -1
  217. package/dist/web/assets/{MemberAvatar-CJtylxwu.js → MemberAvatar-DBab_9EO.js} +1 -1
  218. package/dist/web/assets/{MobileTaskDetail-D5Czlr2O.js → MobileTaskDetail-Dm64ie99.js} +2 -2
  219. package/dist/web/assets/{NotificationSettingsPage-CkLg4WvT.js → NotificationSettingsPage-BVJpo76k.js} +1 -1
  220. package/dist/web/assets/{ProfileSettingsPage-B3yzbY1V.js → ProfileSettingsPage-CbSRYGcp.js} +1 -1
  221. package/dist/web/assets/{ProjectKanbanPage-CuGSLvrU.js → ProjectKanbanPage-Cp3rdFik.js} +6 -6
  222. package/dist/web/assets/{ProjectSettingsPage-DoklOfna.js → ProjectSettingsPage-DLs5-Gk3.js} +1 -1
  223. package/dist/web/assets/{ProviderSettingsPage-Cm0hbX5n.js → ProviderSettingsPage-BnBcgAMQ.js} +1 -1
  224. package/dist/web/assets/{SettingsMasterDetail-CGCUalkW.js → SettingsMasterDetail-fu-_yejj.js} +1 -1
  225. package/dist/web/assets/{TaskDetail-BiZbuXcE.js → TaskDetail-C2_Fg59e.js} +1 -1
  226. package/dist/web/assets/TaskHandoffPanel-3Y0gcjyN.js +70 -0
  227. package/dist/web/assets/{TeamSettingsPage-CyppRTaY.js → TeamSettingsPage-CAjitaBe.js} +1 -1
  228. package/dist/web/assets/{TranslationSettingsPage-BoQXEZmn.js → TranslationSettingsPage-DKD6Uw2F.js} +1 -1
  229. package/dist/web/assets/{arc-5NPBSbiL.js → arc-BiuUFTzU.js} +1 -1
  230. package/dist/web/assets/{architectureDiagram-3BPJPVTR-CqPT-IsX.js → architectureDiagram-3BPJPVTR-Dcwk905A.js} +1 -1
  231. package/dist/web/assets/{at-sign-Cf39WHCg.js → at-sign-CZAKOH3i.js} +1 -1
  232. package/dist/web/assets/{blockDiagram-GPEHLZMM-BN-1z9KN.js → blockDiagram-GPEHLZMM-Cfc5JDN-.js} +1 -1
  233. package/dist/web/assets/{c4Diagram-AAUBKEIU-CkeLbmQp.js → c4Diagram-AAUBKEIU-B4v5PUdt.js} +1 -1
  234. package/dist/web/assets/channel-DThSYkmR.js +1 -0
  235. package/dist/web/assets/check-C3vuSPKz.js +1 -0
  236. package/dist/web/assets/{chevron-down-Ct7FZbKm.js → chevron-down-CtAk9uZw.js} +1 -1
  237. package/dist/web/assets/{chevron-up-ARFlXMyO.js → chevron-up-DAc3NX1J.js} +1 -1
  238. package/dist/web/assets/{chip-BV_1-tIb.js → chip-CDUNxQW2.js} +1 -1
  239. package/dist/web/assets/{chunk-2J33WTMH-CWR7tRuT.js → chunk-2J33WTMH-BYRdUeyt.js} +1 -1
  240. package/dist/web/assets/{chunk-4BX2VUAB-CAulp4D5.js → chunk-4BX2VUAB-3si_kPmV.js} +1 -1
  241. package/dist/web/assets/{chunk-55IACEB6-DqkKXsbD.js → chunk-55IACEB6-JiMm9u33.js} +1 -1
  242. package/dist/web/assets/{chunk-727SXJPM-B19m45Sq.js → chunk-727SXJPM-CMCFIUyF.js} +1 -1
  243. package/dist/web/assets/{chunk-AQP2D5EJ-CuODwkza.js → chunk-AQP2D5EJ-CzvnZjH5.js} +1 -1
  244. package/dist/web/assets/{chunk-FMBD7UC4-CbUAjtCT.js → chunk-FMBD7UC4-hsabZkPl.js} +1 -1
  245. package/dist/web/assets/{chunk-ND2GUHAM-C54VxArl.js → chunk-ND2GUHAM-D2o-Reeo.js} +1 -1
  246. package/dist/web/assets/{chunk-QZHKN3VN-D54Uw5fD.js → chunk-QZHKN3VN-ASJk-E7d.js} +1 -1
  247. package/dist/web/assets/classDiagram-4FO5ZUOK-CjJqgIpK.js +1 -0
  248. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CjJqgIpK.js +1 -0
  249. package/dist/web/assets/{code-block-OCS4YCEC-CtAySD1h.js → code-block-OCS4YCEC-5bkFBowa.js} +1 -1
  250. package/dist/web/assets/{confirm-dialog-CCjHVFTv.js → confirm-dialog-Bs80kXB9.js} +1 -1
  251. package/dist/web/assets/{content-DZozZbBD.js → content-DAccroCT.js} +1 -1
  252. package/dist/web/assets/{copy-C-jvx2et.js → copy-D1XK3OqK.js} +1 -1
  253. package/dist/web/assets/{cose-bilkent-S5V4N54A-BaB2EVcU.js → cose-bilkent-S5V4N54A-C52UKnOd.js} +1 -1
  254. package/dist/web/assets/{cssMode-wd7JR1S4.js → cssMode-BFq_c5xU.js} +1 -1
  255. package/dist/web/assets/{dagre-BM42HDAG-C2j1Y8pO.js → dagre-BM42HDAG-CeEute93.js} +1 -1
  256. package/dist/web/assets/{diagram-2AECGRRQ-CF-EvpV9.js → diagram-2AECGRRQ-CEcq4W4S.js} +1 -1
  257. package/dist/web/assets/{diagram-5GNKFQAL-rBNso835.js → diagram-5GNKFQAL-DqQe7Rr7.js} +1 -1
  258. package/dist/web/assets/{diagram-KO2AKTUF-6NW-oos1.js → diagram-KO2AKTUF-C1KVZphS.js} +1 -1
  259. package/dist/web/assets/{diagram-LMA3HP47-DTfRxRLT.js → diagram-LMA3HP47-D1BL7GQh.js} +1 -1
  260. package/dist/web/assets/{diagram-OG6HWLK6-CS4Ae-hD.js → diagram-OG6HWLK6-ngyXooqC.js} +1 -1
  261. package/dist/web/assets/{dialog-DV4wfpNU.js → dialog-XkZ8wMQa.js} +1 -1
  262. package/dist/web/assets/{erDiagram-TEJ5UH35-Dw9QQctN.js → erDiagram-TEJ5UH35-D1zIFVqE.js} +1 -1
  263. package/dist/web/assets/{file-Btui_I8Z.js → file-CXCll7Pm.js} +1 -1
  264. package/dist/web/assets/{flowDiagram-I6XJVG4X-BGZ9q86S.js → flowDiagram-I6XJVG4X-BZu49qcj.js} +1 -1
  265. package/dist/web/assets/{folder-picker-DiR-8Qdl.js → folder-picker-CVkaEJEL.js} +1 -1
  266. package/dist/web/assets/{freemarker2-yVWXzD3l.js → freemarker2-CmhadAeB.js} +1 -1
  267. package/dist/web/assets/{ganttDiagram-6RSMTGT7-CkGun0no.js → ganttDiagram-6RSMTGT7-eJ8yBxfS.js} +1 -1
  268. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-Bz3oiYvi.js → gitGraphDiagram-PVQCEYII-DpeUUyH_.js} +1 -1
  269. package/dist/web/assets/{globe-DAFqpAcW.js → globe-WnxN1JzY.js} +1 -1
  270. package/dist/web/assets/{handlebars-BPf0z6eN.js → handlebars-DtjmH1qR.js} +1 -1
  271. package/dist/web/assets/{html-HCTCjfUg.js → html-DOYAlzlD.js} +1 -1
  272. package/dist/web/assets/{htmlMode-BDkbsknt.js → htmlMode-ORxd7KRN.js} +1 -1
  273. package/dist/web/assets/{index-BMcLxIvZ.js → index-6mINSZng.js} +1 -1
  274. package/dist/web/assets/{index-BPqjxXmH.js → index-BrjvxKaf.js} +1 -1
  275. package/dist/web/assets/{index-B8xoIIa6.js → index-CqIyOiVN.js} +4 -4
  276. package/dist/web/assets/{index-DgUtx9rV.js → index-D9w1zMaz.js} +1 -1
  277. package/dist/web/assets/{index-DkSPjZm4.js → index-DHDgbH3t.js} +1 -1
  278. package/dist/web/assets/{index-BszkzNS4.js → index-Dz9SKopM.js} +13 -13
  279. package/dist/web/assets/{index-GuczxPxb.js → index-eIXz5Hbk.js} +1 -1
  280. package/dist/web/assets/{index-DuM6iAxG.js → index-iOIxdF6J.js} +1 -1
  281. package/dist/web/assets/{index-lZLy5rkr.js → index-wbMiSmsY.js} +1 -1
  282. package/dist/web/assets/{infoDiagram-5YYISTIA-DYFufUYC.js → infoDiagram-5YYISTIA-BiVrC__7.js} +1 -1
  283. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-IOkrKRwu.js → ishikawaDiagram-YF4QCWOH-B1kPjO1J.js} +1 -1
  284. package/dist/web/assets/javascript-CHlWHrtz.js +1 -0
  285. package/dist/web/assets/{journeyDiagram-JHISSGLW-Btl3yxne.js → journeyDiagram-JHISSGLW-DoTAPPAQ.js} +1 -1
  286. package/dist/web/assets/{jsonMode-DJPdvFcw.js → jsonMode-BkeQ_C6g.js} +1 -1
  287. package/dist/web/assets/{kanban-definition-UN3LZRKU-CDryhPbA.js → kanban-definition-UN3LZRKU-CBRmLcce.js} +1 -1
  288. package/dist/web/assets/{kbd-8RRRm9jd.js → kbd-CTfS0G5-.js} +1 -1
  289. package/dist/web/assets/{key-round-wojrCrDP.js → key-round-B7gTfpDR.js} +1 -1
  290. package/dist/web/assets/{layers-BH_LL4b8.js → layers-DE0xXedq.js} +1 -1
  291. package/dist/web/assets/{linear-BLuwKHze.js → linear-VLiA8Vcw.js} +1 -1
  292. package/dist/web/assets/{link-jWQOSQOQ.js → link-BSE_nRDT.js} +1 -1
  293. package/dist/web/assets/{liquid-1y-xg637.js → liquid-BZeg6p1K.js} +1 -1
  294. package/dist/web/assets/{lspLanguageFeatures-cYkILdCn.js → lspLanguageFeatures-CuFQ2_f9.js} +1 -1
  295. package/dist/web/assets/{mdx-CRg4Q6aP.js → mdx-C7xLyFFX.js} +1 -1
  296. package/dist/web/assets/{menu-CMqbaDni.js → menu-Dp4RDxvP.js} +1 -1
  297. package/dist/web/assets/{mermaid-NOHMQCX5-CYeAhOl-.js → mermaid-NOHMQCX5-C2enCJxR.js} +62 -62
  298. package/dist/web/assets/{message-square-DykJ2lWP.js → message-square-4lyHjyHe.js} +1 -1
  299. package/dist/web/assets/{mindmap-definition-RKZ34NQL-B5wtw1Rv.js → mindmap-definition-RKZ34NQL-C1OOtqma.js} +1 -1
  300. package/dist/web/assets/{modal-BwOwTzij.js → modal-BGglpgrR.js} +1 -1
  301. package/dist/web/assets/{monaco-CcHqpOKe.js → monaco-B-6VmJO0.js} +3 -3
  302. package/dist/web/assets/{nav-row-BmtdNLxR.js → nav-row-DaR8yP7p.js} +1 -1
  303. package/dist/web/assets/{paperclip-C4t49vX2.js → paperclip-DORF2rEM.js} +1 -1
  304. package/dist/web/assets/{pencil-BQ5_raiB.js → pencil-BG033B74.js} +1 -1
  305. package/dist/web/assets/{people-Dr0v8HK0.js → people-1qyKeYq6.js} +1 -1
  306. package/dist/web/assets/{pieDiagram-4H26LBE5-BZ3VoaNI.js → pieDiagram-4H26LBE5-BYYFVqOS.js} +1 -1
  307. package/dist/web/assets/{popover-CTqvKqTR.js → popover-CvjMbMb4.js} +1 -1
  308. package/dist/web/assets/{python-Huq_acyd.js → python-TTfnYnjF.js} +1 -1
  309. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-C6ArHmnG.js → quadrantDiagram-W4KKPZXB-DTllM2j9.js} +1 -1
  310. package/dist/web/assets/{razor-Clc87Ivb.js → razor-BFVXAHVd.js} +1 -1
  311. package/dist/web/assets/{requirementDiagram-4Y6WPE33-DiLzBRQP.js → requirementDiagram-4Y6WPE33-DeJDRYUP.js} +1 -1
  312. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-QlYYd7IZ.js → sankeyDiagram-5OEKKPKP-DzTvEKv8.js} +1 -1
  313. package/dist/web/assets/{search-CMIAPUEt.js → search-DDRcBORc.js} +1 -1
  314. package/dist/web/assets/{select-DqB7YF38.js → select-CXC17bJx.js} +1 -1
  315. package/dist/web/assets/{select-Bg7NI8i0.js → select-CzXL3ZbG.js} +1 -1
  316. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-COKEtqc0.js → sequenceDiagram-3UESZ5HK-CIYrA1ww.js} +1 -1
  317. package/dist/web/assets/{server-D7knl8H9.js → server-KqeWHfgr.js} +1 -1
  318. package/dist/web/assets/{stateDiagram-AJRCARHV-1RZZZdOe.js → stateDiagram-AJRCARHV-Dg_UXkEq.js} +1 -1
  319. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Lc4r0bC3.js +1 -0
  320. package/dist/web/assets/{textarea-BCY2J2ca.js → textarea-Cmbv5l35.js} +1 -1
  321. package/dist/web/assets/{timeline-definition-PNZ67QCA-IJl1LY6J.js → timeline-definition-PNZ67QCA-CfSPMqxF.js} +1 -1
  322. package/dist/web/assets/{toggles-C4LmZwyo.js → toggles-t5v4QKn6.js} +1 -1
  323. package/dist/web/assets/{tooltip-Cirpotu3.js → tooltip-Cp8tovqH.js} +1 -1
  324. package/dist/web/assets/{track-Cv7h6oaE.js → track-C1rUV49K.js} +1 -1
  325. package/dist/web/assets/{trash-2-BEOQ1ICJ.js → trash-2-Ca2ken6q.js} +1 -1
  326. package/dist/web/assets/{tsMode-CHIbCBQc.js → tsMode-DBbiXlyu.js} +1 -1
  327. package/dist/web/assets/{typescript-CScj0bbb.js → typescript-jv_3P9x_.js} +1 -1
  328. package/dist/web/assets/{upload-tLVD0xMT.js → upload-CgGjN1FH.js} +1 -1
  329. package/dist/web/assets/{use-profiles-TkoP4Yw9.js → use-profiles-BdL-U8GZ.js} +1 -1
  330. package/dist/web/assets/{use-providers-Bz6YNiYj.js → use-providers-B6Mj5qeG.js} +1 -1
  331. package/dist/web/assets/{use-translation-settings-CCpQNS30.js → use-translation-settings-FIP674t9.js} +1 -1
  332. package/dist/web/assets/{useNormalizedLogs-Bstb98cF.js → useNormalizedLogs-FpVMUHeq.js} +1 -1
  333. package/dist/web/assets/useTokenUsage-Ay3Yy0_V.js +1 -0
  334. package/dist/web/assets/{vennDiagram-CIIHVFJN-DzVayy4U.js → vennDiagram-CIIHVFJN-DKREAIRT.js} +1 -1
  335. package/dist/web/assets/{wardley-L42UT6IY-CULSKh55.js → wardley-L42UT6IY-BMpDotAz.js} +1 -1
  336. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-C5_h3lAA.js → wardleyDiagram-YWT4CUSO-DAPccQsF.js} +1 -1
  337. package/dist/web/assets/{xml-XuycSwh6.js → xml-DnxIQwRS.js} +1 -1
  338. package/dist/web/assets/{xychartDiagram-2RQKCTM6-F65naXcR.js → xychartDiagram-2RQKCTM6-o06g8vo8.js} +1 -1
  339. package/dist/web/assets/{yaml-BWm159lw.js → yaml-BV5yQTRd.js} +1 -1
  340. package/dist/web/index.html +1 -1
  341. package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts +4 -0
  342. package/node_modules/@agent-tower/shared/dist/log-adapter.d.ts.map +1 -1
  343. package/node_modules/@agent-tower/shared/dist/log-adapter.js +1 -0
  344. package/node_modules/@agent-tower/shared/dist/log-adapter.js.map +1 -1
  345. package/node_modules/@agent-tower/shared/dist/translation.d.ts +4 -1
  346. package/node_modules/@agent-tower/shared/dist/translation.d.ts.map +1 -1
  347. package/node_modules/@agent-tower/shared/dist/translation.js +4 -1
  348. package/node_modules/@agent-tower/shared/dist/translation.js.map +1 -1
  349. package/node_modules/@agent-tower/shared/dist/types.d.ts +38 -2
  350. package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
  351. package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
  352. package/package.json +2 -1
  353. package/prisma/migrations/20261106000000_add_session_wakeups/migration.sql +28 -0
  354. package/prisma/schema.prisma +28 -0
  355. package/scripts/postinstall.js +23 -0
  356. package/dist/web/assets/AttachmentPreview-TPd4gdfb.js +0 -2
  357. package/dist/web/assets/CreateTaskInput-TcZpjBe-.js +0 -1
  358. package/dist/web/assets/TaskHandoffPanel-CJahUKNo.js +0 -70
  359. package/dist/web/assets/channel-CDkuQ_7m.js +0 -1
  360. package/dist/web/assets/check-yNWhPvMH.js +0 -1
  361. package/dist/web/assets/classDiagram-4FO5ZUOK-eHY73FGu.js +0 -1
  362. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-eHY73FGu.js +0 -1
  363. package/dist/web/assets/javascript-DKmxrNeR.js +0 -1
  364. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CCLmVs34.js +0 -1
  365. package/dist/web/assets/useTokenUsage-D7SEwXb0.js +0 -1
@@ -0,0 +1,462 @@
1
+ import http from 'node:http';
2
+ import https from 'node:https';
3
+ import { buildPreviewBootstrapPage, buildPreviewBridgeScript, buildPreviewServiceWorkerScript, injectPreviewBridge, PREVIEW_BASE_PATH_HEADER, PREVIEW_BOOT_PARAM, PREVIEW_DESTINATION_HEADER, PREVIEW_INTERNAL_QUERY_PARAMS, PREVIEW_MODE_PARAM, PREVIEW_SERVICE_WORKER_HEADER, PREVIEW_SERVICE_WORKER_SEGMENT, PREVIEW_TARGET_HEADER, } from './preview-bridge.js';
4
+ import { filterTargetCookieHeader, PREVIEW_CONTEXT_COOKIE_NAME, previewCookieScopeName, rewriteTargetCookie, } from './preview-cookies.js';
5
+ import { buildPreviewPathPrefix, parsePreviewPath, PREVIEW_PREFIX } from '../utils/preview-path.js';
6
+ /**
7
+ * Same-origin workspace preview proxy mounted at `/view/:workspaceId/`.
8
+ *
9
+ * The browser only ever talks to Agent Tower's own origin, so the preview is
10
+ * reachable from exactly the places Agent Tower itself is reachable from:
11
+ * localhost, the LAN, a Cloudflare tunnel, a reverse proxy, or Docker.
12
+ */
13
+ export const PREVIEW_SANDBOX_CSP = [
14
+ 'sandbox',
15
+ 'allow-scripts',
16
+ 'allow-same-origin',
17
+ 'allow-forms',
18
+ 'allow-popups',
19
+ 'allow-popups-to-escape-sandbox',
20
+ 'allow-modals',
21
+ 'allow-downloads',
22
+ 'allow-pointer-lock',
23
+ 'allow-presentation',
24
+ ].join(' ');
25
+ const PREVIEW_CONTEXT_COOKIE_MAX_AGE_SECONDS = 24 * 60 * 60;
26
+ const EMBEDDED_DESTINATIONS = new Set(['iframe', 'frame', 'embed', 'object']);
27
+ const DOCUMENT_DESTINATIONS = new Set(['document', ...EMBEDDED_DESTINATIONS]);
28
+ const STRIPPED_REQUEST_HEADERS = new Set([
29
+ 'host',
30
+ 'connection',
31
+ 'upgrade',
32
+ 'content-length',
33
+ 'accept-encoding',
34
+ 'proxy-authorization',
35
+ 'forwarded',
36
+ 'x-forwarded-for',
37
+ 'x-forwarded-host',
38
+ 'x-forwarded-proto',
39
+ 'x-real-ip',
40
+ 'sec-fetch-dest',
41
+ 'sec-fetch-mode',
42
+ 'sec-fetch-site',
43
+ 'sec-fetch-user',
44
+ PREVIEW_SERVICE_WORKER_HEADER,
45
+ PREVIEW_DESTINATION_HEADER,
46
+ ]);
47
+ export function firstHeaderValue(value) {
48
+ return Array.isArray(value) ? value[0] : value;
49
+ }
50
+ export function requestProtocol(headers) {
51
+ const forwarded = firstHeaderValue(headers['x-forwarded-proto']);
52
+ if (forwarded?.split(',')[0]?.trim().toLowerCase() === 'https')
53
+ return 'https';
54
+ const cfVisitor = firstHeaderValue(headers['cf-visitor']);
55
+ if (cfVisitor) {
56
+ try {
57
+ if (JSON.parse(cfVisitor).scheme === 'https')
58
+ return 'https';
59
+ }
60
+ catch {
61
+ // Ignore malformed Cloudflare metadata.
62
+ }
63
+ }
64
+ return 'http';
65
+ }
66
+ function isHtmlAcceptHeader(accept) {
67
+ return typeof accept === 'string' && accept.toLowerCase().includes('text/html');
68
+ }
69
+ export function classifyPreviewRequest(method, headers, search) {
70
+ const params = new URLSearchParams(search);
71
+ const swHeader = firstHeaderValue(headers[PREVIEW_SERVICE_WORKER_HEADER]);
72
+ const serviceWorker = Boolean(swHeader);
73
+ const upperMethod = method.toUpperCase();
74
+ const navigationMethod = upperMethod === 'GET' || upperMethod === 'HEAD' || upperMethod === 'POST';
75
+ if (serviceWorker) {
76
+ const destination = firstHeaderValue(headers[PREVIEW_DESTINATION_HEADER]) ?? '';
77
+ const document = swHeader === 'navigate';
78
+ return {
79
+ serviceWorker: true,
80
+ document,
81
+ embedded: document && EMBEDDED_DESTINATIONS.has(destination),
82
+ plainMode: false,
83
+ bootstrapped: params.get(PREVIEW_BOOT_PARAM) === '1',
84
+ };
85
+ }
86
+ const destination = firstHeaderValue(headers['sec-fetch-dest']);
87
+ const document = navigationMethod && (destination
88
+ ? DOCUMENT_DESTINATIONS.has(destination)
89
+ : isHtmlAcceptHeader(firstHeaderValue(headers.accept)));
90
+ return {
91
+ serviceWorker: false,
92
+ document,
93
+ embedded: document && (destination ? EMBEDDED_DESTINATIONS.has(destination) : false),
94
+ plainMode: params.get(PREVIEW_MODE_PARAM) === 'plain',
95
+ bootstrapped: params.get(PREVIEW_BOOT_PARAM) === '1',
96
+ };
97
+ }
98
+ /** Should the request be answered with the service worker bootstrap page instead of the target document? */
99
+ export function shouldServeBootstrap(context, method) {
100
+ if (method.toUpperCase() !== 'GET')
101
+ return false;
102
+ return context.document && !context.serviceWorker && !context.plainMode && !context.bootstrapped;
103
+ }
104
+ export function stripInternalQueryParams(search) {
105
+ if (!search)
106
+ return '';
107
+ const params = new URLSearchParams(search);
108
+ for (const name of PREVIEW_INTERNAL_QUERY_PARAMS)
109
+ params.delete(name);
110
+ const next = params.toString();
111
+ return next ? `?${next}` : '';
112
+ }
113
+ export function joinTargetPath(target, suffix, search) {
114
+ const normalizedSuffix = suffix.startsWith('/') ? suffix : `/${suffix}`;
115
+ const base = target.basePath || '';
116
+ const path = `${base}${normalizedSuffix}`.replace(/\/{2,}/g, '/');
117
+ return `${path || '/'}${search}`;
118
+ }
119
+ function getPathname(value) {
120
+ const end = value.search(/[?#]/);
121
+ return end === -1 ? value : value.slice(0, end);
122
+ }
123
+ function isSameOrChildPath(pathname, basePath) {
124
+ return pathname === basePath || pathname.startsWith(`${basePath}/`);
125
+ }
126
+ /** Map a browser URL on the Agent Tower origin back to the target URL it represents. */
127
+ function browserUrlToTargetUrl(value, scope) {
128
+ let url;
129
+ try {
130
+ url = new URL(value);
131
+ }
132
+ catch {
133
+ return null;
134
+ }
135
+ const parsed = parsePreviewPath(`${url.pathname}${url.search}`);
136
+ const targetUrl = new URL(scope.target.origin);
137
+ if (parsed && parsed.workspaceId === scope.workspaceId) {
138
+ targetUrl.pathname = getPathname(joinTargetPath(scope.target, parsed.suffix, ''));
139
+ targetUrl.search = stripInternalQueryParams(parsed.search);
140
+ }
141
+ else {
142
+ // Virtualized documents report target-relative paths directly.
143
+ targetUrl.pathname = getPathname(joinTargetPath(scope.target, url.pathname, ''));
144
+ targetUrl.search = stripInternalQueryParams(url.search);
145
+ }
146
+ targetUrl.hash = '';
147
+ return targetUrl.toString();
148
+ }
149
+ export function proxyRequestHeaders(headers, scope, targetPath) {
150
+ const targetUrl = new URL(scope.target.origin);
151
+ const next = {};
152
+ for (const [key, value] of Object.entries(headers)) {
153
+ const lower = key.toLowerCase();
154
+ if (STRIPPED_REQUEST_HEADERS.has(lower) || lower.startsWith('cf-'))
155
+ continue;
156
+ if (value !== undefined)
157
+ next[lower] = value;
158
+ }
159
+ const cookie = filterTargetCookieHeader(firstHeaderValue(headers.cookie), previewCookieScopeName(scope.workspaceId));
160
+ if (cookie)
161
+ next.cookie = cookie;
162
+ else
163
+ delete next.cookie;
164
+ next.host = targetUrl.host;
165
+ next['accept-encoding'] = 'identity';
166
+ next['x-forwarded-host'] = firstHeaderValue(headers.host) ?? targetUrl.host;
167
+ next['x-forwarded-proto'] = requestProtocol(headers);
168
+ if (headers.origin)
169
+ next.origin = targetUrl.origin;
170
+ const referer = firstHeaderValue(headers.referer);
171
+ if (referer) {
172
+ next.referer = browserUrlToTargetUrl(referer, scope) ?? new URL(targetPath, targetUrl).toString();
173
+ }
174
+ return next;
175
+ }
176
+ export function rewriteLocationHeader(value, scope) {
177
+ const prefix = buildPreviewPathPrefix(scope.workspaceId, scope.previewToken);
178
+ const { target } = scope;
179
+ try {
180
+ const location = new URL(value, target.origin);
181
+ if (location.origin !== target.origin)
182
+ return value;
183
+ if (isSameOrChildPath(location.pathname, prefix)) {
184
+ return `${location.pathname}${location.search}${location.hash}`;
185
+ }
186
+ const basePath = target.basePath;
187
+ const isUnderBasePath = basePath
188
+ ? location.pathname === basePath || location.pathname.startsWith(`${basePath}/`)
189
+ : true;
190
+ const path = isUnderBasePath
191
+ ? location.pathname.slice(target.basePath.length || 0) || '/'
192
+ : location.pathname;
193
+ return `${prefix}${path}${location.search}${location.hash}`;
194
+ }
195
+ catch {
196
+ if (isSameOrChildPath(getPathname(value), prefix))
197
+ return value;
198
+ if (value.startsWith('/'))
199
+ return `${prefix}${value}`;
200
+ return value;
201
+ }
202
+ }
203
+ export function serializePreviewContextCookie(workspaceId, secure) {
204
+ const parts = [
205
+ `${PREVIEW_CONTEXT_COOKIE_NAME}=${encodeURIComponent(workspaceId)}`,
206
+ 'Path=/',
207
+ 'HttpOnly',
208
+ 'SameSite=Lax',
209
+ `Max-Age=${PREVIEW_CONTEXT_COOKIE_MAX_AGE_SECONDS}`,
210
+ ];
211
+ if (secure)
212
+ parts.push('Secure');
213
+ return parts.join('; ');
214
+ }
215
+ export function proxyResponseHeaders(headers, scope, requestHeaders, options) {
216
+ const next = {};
217
+ const secure = requestProtocol(requestHeaders) === 'https';
218
+ for (const [key, value] of Object.entries(headers)) {
219
+ const lower = key.toLowerCase();
220
+ if (lower === 'connection'
221
+ || (lower === 'content-length' && (options.rewritesBody ?? options.document))
222
+ || lower === 'content-encoding'
223
+ || lower === 'transfer-encoding'
224
+ || lower === 'keep-alive'
225
+ || lower === 'x-frame-options'
226
+ || lower === 'content-security-policy'
227
+ || lower === 'content-security-policy-report-only') {
228
+ continue;
229
+ }
230
+ if (lower === 'location' && typeof value === 'string') {
231
+ next[key] = rewriteLocationHeader(value, scope);
232
+ continue;
233
+ }
234
+ if (lower === 'set-cookie') {
235
+ const cookies = Array.isArray(value) ? value : typeof value === 'string' ? [value] : [];
236
+ next[key] = cookies.map((cookie) => rewriteTargetCookie(cookie, scope.target, previewCookieScopeName(scope.workspaceId), secure, { forceRootPath: true }));
237
+ continue;
238
+ }
239
+ if (value !== undefined)
240
+ next[key] = value;
241
+ }
242
+ if (options.document) {
243
+ next[PREVIEW_TARGET_HEADER] = scope.target.origin;
244
+ next[PREVIEW_BASE_PATH_HEADER] = scope.target.basePath;
245
+ const existing = next['set-cookie'];
246
+ const cookies = Array.isArray(existing) ? existing : typeof existing === 'string' ? [existing] : [];
247
+ next['set-cookie'] = [...cookies, serializePreviewContextCookie(scope.workspaceId, secure)];
248
+ if (options.embedded)
249
+ next['content-security-policy'] = PREVIEW_SANDBOX_CSP;
250
+ next['cache-control'] = 'no-store';
251
+ }
252
+ return next;
253
+ }
254
+ function isHtmlResponse(headers) {
255
+ const contentType = firstHeaderValue(headers['content-type'])?.toLowerCase() ?? '';
256
+ return contentType.includes('text/html');
257
+ }
258
+ function isCssResponse(headers) {
259
+ const contentType = firstHeaderValue(headers['content-type'])?.toLowerCase() ?? '';
260
+ return contentType.includes('text/css');
261
+ }
262
+ /**
263
+ * Plain mode only (no service worker): rewrite static root-relative references
264
+ * in HTML/CSS so the first paint works without a redirect round trip for every
265
+ * asset. Service-worker documents are left untouched.
266
+ */
267
+ export function rewritePlainModeBody(body, prefix, kind) {
268
+ let next = body;
269
+ if (kind === 'html') {
270
+ next = next
271
+ .replace(/(\s(?:src|href|action|poster|data|formaction)=["'])\/(?!\/|view\/)([^"']*)/gi, `$1${prefix}/$2`)
272
+ .replace(/(\s(?:srcset|imagesrcset)=["'])([^"']*)(["'])/gi, (_match, before, srcset, after) => {
273
+ const rewritten = srcset.replace(/(^|,\s*)\/(?!\/|view\/)([^\s,]+)/g, `$1${prefix}/$2`);
274
+ return `${before}${rewritten}${after}`;
275
+ });
276
+ }
277
+ next = next.replace(/url\((['"]?)\/(?!\/|view\/)([^)'"]+)\1\)/g, `url($1${prefix}/$2$1)`);
278
+ return next;
279
+ }
280
+ export function buildBridgeTag(scope, serviceWorker) {
281
+ return buildPreviewBridgeScript({
282
+ mode: 'prefix',
283
+ prefix: buildPreviewPathPrefix(scope.workspaceId, scope.previewToken),
284
+ workspaceId: scope.workspaceId,
285
+ targetOrigin: scope.target.origin,
286
+ targetBasePath: scope.target.basePath,
287
+ serviceWorker,
288
+ });
289
+ }
290
+ export function previewServiceWorkerSegment(suffix) {
291
+ return suffix === `/${PREVIEW_SERVICE_WORKER_SEGMENT}`;
292
+ }
293
+ export function writeServiceWorkerScript(response) {
294
+ response.writeHead(200, {
295
+ 'content-type': 'application/javascript; charset=utf-8',
296
+ 'cache-control': 'no-cache',
297
+ 'service-worker-allowed': `${PREVIEW_PREFIX}/`,
298
+ });
299
+ response.end(buildPreviewServiceWorkerScript());
300
+ }
301
+ export function writeBootstrapPage(response, scope) {
302
+ response.writeHead(200, {
303
+ 'content-type': 'text/html; charset=utf-8',
304
+ 'cache-control': 'no-store',
305
+ });
306
+ response.end(buildPreviewBootstrapPage({
307
+ scope: `${buildPreviewPathPrefix(scope.workspaceId, scope.previewToken)}/`,
308
+ }));
309
+ }
310
+ function writeProxyError(response, message) {
311
+ if (!response.headersSent) {
312
+ response.writeHead(502, {
313
+ 'content-type': 'text/html; charset=utf-8',
314
+ 'cache-control': 'no-store',
315
+ });
316
+ }
317
+ const escaped = message.replace(/[&<>"]/g, (char) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[char] ?? char));
318
+ response.end(`<!doctype html><html><head><meta charset="utf-8"><title>Preview unavailable</title></head>`
319
+ + `<body style="font:14px system-ui,sans-serif;color:#6b7280;padding:24px">`
320
+ + `<p data-agent-tower-preview-error>Preview target unavailable: ${escaped}</p>`
321
+ + `<p>Start the preview server, then refresh.</p></body></html>`);
322
+ }
323
+ export async function proxyPreviewHttpRequest(input) {
324
+ const { request, response, scope, context } = input;
325
+ const targetUrl = new URL(scope.target.origin);
326
+ const targetPath = joinTargetPath(scope.target, input.suffix, stripInternalQueryParams(input.search));
327
+ const headers = proxyRequestHeaders(request.headers, scope, targetPath);
328
+ if (input.body)
329
+ headers['content-length'] = Buffer.byteLength(input.body);
330
+ const prefix = buildPreviewPathPrefix(scope.workspaceId, scope.previewToken);
331
+ const options = {
332
+ protocol: targetUrl.protocol,
333
+ hostname: targetUrl.hostname,
334
+ port: targetUrl.port,
335
+ method: request.method,
336
+ path: targetPath,
337
+ headers,
338
+ rejectUnauthorized: false,
339
+ };
340
+ const transport = targetUrl.protocol === 'https:' ? https : http;
341
+ await new Promise((resolve) => {
342
+ const proxyRequest = transport.request(options, (proxyResponse) => {
343
+ const statusCode = proxyResponse.statusCode ?? 502;
344
+ const hasBody = request.method !== 'HEAD' && statusCode !== 204 && statusCode !== 304;
345
+ const html = hasBody && isHtmlResponse(proxyResponse.headers);
346
+ const documentResponse = context.document && html;
347
+ const rewriteCss = hasBody && !context.serviceWorker && isCssResponse(proxyResponse.headers);
348
+ const rewriteBody = documentResponse || rewriteCss;
349
+ const responseHeaders = proxyResponseHeaders(proxyResponse.headers, scope, request.headers, {
350
+ document: documentResponse,
351
+ embedded: context.embedded,
352
+ rewritesBody: rewriteBody,
353
+ });
354
+ response.statusCode = statusCode;
355
+ for (const [key, value] of Object.entries(responseHeaders)) {
356
+ if (value !== undefined)
357
+ response.setHeader(key, value);
358
+ }
359
+ if (!rewriteBody) {
360
+ proxyResponse.pipe(response);
361
+ proxyResponse.once('end', resolve);
362
+ proxyResponse.once('error', () => {
363
+ response.destroy();
364
+ resolve();
365
+ });
366
+ return;
367
+ }
368
+ const chunks = [];
369
+ proxyResponse.on('data', (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
370
+ proxyResponse.once('end', () => {
371
+ let payload = Buffer.concat(chunks);
372
+ if (documentResponse) {
373
+ if (!context.serviceWorker) {
374
+ payload = Buffer.from(rewritePlainModeBody(payload.toString('utf8'), prefix, 'html'), 'utf8');
375
+ }
376
+ payload = injectPreviewBridge(payload, buildBridgeTag(scope, context.serviceWorker));
377
+ }
378
+ else if (rewriteCss) {
379
+ payload = Buffer.from(rewritePlainModeBody(payload.toString('utf8'), prefix, 'css'), 'utf8');
380
+ }
381
+ response.end(payload);
382
+ resolve();
383
+ });
384
+ proxyResponse.once('error', () => {
385
+ response.destroy();
386
+ resolve();
387
+ });
388
+ });
389
+ proxyRequest.once('error', (error) => {
390
+ writeProxyError(response, error.message);
391
+ resolve();
392
+ });
393
+ proxyRequest.end(input.body ?? undefined);
394
+ });
395
+ }
396
+ export function writeUpgradeError(socket, statusCode, message) {
397
+ if (socket.destroyed)
398
+ return;
399
+ socket.write(`HTTP/1.1 ${statusCode} ${message}\r\nConnection: close\r\n\r\n`);
400
+ socket.destroy();
401
+ }
402
+ export function proxyPreviewWebSocket(request, socket, head, scope, suffix, search) {
403
+ socket.on('error', () => {
404
+ if (!socket.destroyed)
405
+ socket.destroy();
406
+ });
407
+ const targetUrl = new URL(scope.target.origin);
408
+ const targetPath = joinTargetPath(scope.target, suffix, stripInternalQueryParams(search));
409
+ const headers = proxyRequestHeaders(request.headers, scope, targetPath);
410
+ headers.connection = 'Upgrade';
411
+ headers.upgrade = 'websocket';
412
+ const options = {
413
+ protocol: targetUrl.protocol,
414
+ hostname: targetUrl.hostname,
415
+ port: targetUrl.port,
416
+ method: 'GET',
417
+ path: targetPath,
418
+ headers,
419
+ rejectUnauthorized: false,
420
+ };
421
+ const transport = targetUrl.protocol === 'https:' ? https : http;
422
+ const proxyRequest = transport.request(options);
423
+ proxyRequest.once('upgrade', (proxyResponse, proxySocket, proxyHead) => {
424
+ const closeClient = () => {
425
+ if (!socket.destroyed)
426
+ socket.destroy();
427
+ };
428
+ const closeTarget = () => {
429
+ if (!proxySocket.destroyed)
430
+ proxySocket.destroy();
431
+ };
432
+ socket.once('close', closeTarget);
433
+ socket.once('error', closeTarget);
434
+ proxySocket.once('close', closeClient);
435
+ proxySocket.once('error', closeClient);
436
+ const headerLines = [
437
+ `HTTP/1.1 ${proxyResponse.statusCode} ${proxyResponse.statusMessage}`,
438
+ ...Object.entries(proxyResponse.headers).flatMap(([key, value]) => {
439
+ if (Array.isArray(value))
440
+ return value.map((item) => `${key}: ${item}`);
441
+ return value === undefined ? [] : [`${key}: ${value}`];
442
+ }),
443
+ '',
444
+ '',
445
+ ];
446
+ socket.write(headerLines.join('\r\n'));
447
+ if (proxyHead.length > 0)
448
+ socket.write(proxyHead);
449
+ if (head.length > 0)
450
+ proxySocket.write(head);
451
+ proxySocket.pipe(socket);
452
+ socket.pipe(proxySocket);
453
+ });
454
+ proxyRequest.once('response', (proxyResponse) => {
455
+ writeUpgradeError(socket, proxyResponse.statusCode ?? 502, proxyResponse.statusMessage ?? 'Bad Gateway');
456
+ });
457
+ proxyRequest.once('error', () => {
458
+ writeUpgradeError(socket, 502, 'Bad Gateway');
459
+ });
460
+ proxyRequest.end();
461
+ }
462
+ //# sourceMappingURL=preview-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-proxy.js","sourceRoot":"","sources":["../../src/services/preview-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;AAI/B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,+BAA+B,EAC/B,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEpG;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,eAAe;IACf,mBAAmB;IACnB,aAAa;IACb,cAAc;IACd,gCAAgC;IAChC,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;CACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,sCAAsC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5D,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC9E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;AAC9E,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,MAAM;IACN,YAAY;IACZ,SAAS;IACT,gBAAgB;IAChB,iBAAiB;IACjB,qBAAqB;IACrB,WAAW;IACX,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,6BAA6B;IAC7B,0BAA0B;CAC3B,CAAC,CAAC;AAuBH,MAAM,UAAU,gBAAgB,CAAC,KAAoC;IACnE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACjE,IAAI,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAE/E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1D,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAA0B,CAAC,MAAM,KAAK,OAAO;gBAAE,OAAO,OAAO,CAAC;QACzF,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA0B;IACpD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,OAA4B,EAAE,MAAc;IACjG,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,gBAAgB,GAAG,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,MAAM,CAAC;IAEnG,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,QAAQ,KAAK,UAAU,CAAC;QACzC,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,QAAQ;YACR,QAAQ,EAAE,QAAQ,IAAI,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5D,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG;SACrD,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,gBAAgB,IAAI,CACnC,WAAW;QACT,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC;QACxC,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CACzD,CAAC;IACF,OAAO;QACL,aAAa,EAAE,KAAK;QACpB,QAAQ;QACR,QAAQ,EAAE,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpF,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,OAAO;QACrD,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG;KACrD,CAAC;AACJ,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,oBAAoB,CAAC,OAA8B,EAAE,MAAc;IACjF,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,6BAA6B;QAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA+B,EAAE,MAAc,EAAE,MAAc;IAC5F,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,gBAAgB,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAClE,OAAO,GAAG,IAAI,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAC3D,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,wFAAwF;AACxF,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAwB;IACpE,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;QACvD,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAClF,SAAS,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACjF,SAAS,CAAC,MAAM,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IACD,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC;IACpB,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAA4B,EAC5B,KAAwB,EACxB,UAAkB;IAElB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,SAAS;QAC7E,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACrH,IAAI,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;IAExB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC;IACrC,IAAI,CAAC,kBAAkB,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC;IAC5E,IAAI,CAAC,mBAAmB,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAErD,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IACnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpG,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,KAAwB;IAC3E,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,eAAe,GAAG,QAAQ;YAC9B,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC;YAChF,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,IAAI,GAAG,eAAe;YAC1B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG;YAC7D,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtB,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAChE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,WAAmB,EAAE,MAAe;IAChF,MAAM,KAAK,GAAG;QACZ,GAAG,2BAA2B,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE;QACnE,QAAQ;QACR,UAAU;QACV,cAAc;QACd,WAAW,sCAAsC,EAAE;KACpD,CAAC;IACF,IAAI,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAWD,MAAM,UAAU,oBAAoB,CAClC,OAA4B,EAC5B,KAAwB,EACxB,cAAmC,EACnC,OAAmC;IAEnC,MAAM,IAAI,GAA6B,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC;IAE3D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,IACE,KAAK,KAAK,YAAY;eACnB,CAAC,KAAK,KAAK,gBAAgB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;eAC1E,KAAK,KAAK,kBAAkB;eAC5B,KAAK,KAAK,mBAAmB;eAC7B,KAAK,KAAK,YAAY;eACtB,KAAK,KAAK,iBAAiB;eAC3B,KAAK,KAAK,yBAAyB;eACnC,KAAK,KAAK,qCAAqC,EAClD,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,CACrD,MAAM,EACN,KAAK,CAAC,MAAM,EACZ,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,EACzC,MAAM,EACN,EAAE,aAAa,EAAE,IAAI,EAAE,CACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,wBAAwB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,6BAA6B,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5F,IAAI,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,yBAAyB,CAAC,GAAG,mBAAmB,CAAC;QAC5E,IAAI,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAA4B;IAClD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnF,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,OAA4B;IACjD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACnF,OAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,MAAc,EAAE,IAAoB;IACrF,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,GAAG,IAAI;aACR,OAAO,CAAC,8EAA8E,EAAE,KAAK,MAAM,KAAK,CAAC;aACzG,OAAO,CAAC,iDAAiD,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;YACpH,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,mCAAmC,EAAE,KAAK,MAAM,KAAK,CAAC,CAAC;YACxF,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,2CAA2C,EAAE,SAAS,MAAM,QAAQ,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAwB,EAAE,aAAsB;IAC7E,OAAO,wBAAwB,CAAC;QAC9B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QACrE,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QACjC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QACrC,aAAa;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,OAAO,MAAM,KAAK,IAAI,8BAA8B,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAwB;IAC/D,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;QACtB,cAAc,EAAE,uCAAuC;QACvD,eAAe,EAAE,UAAU;QAC3B,wBAAwB,EAAE,GAAG,cAAc,GAAG;KAC/C,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAwB,EAAE,KAAwB;IACnF,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;QACtB,cAAc,EAAE,0BAA0B;QAC1C,eAAe,EAAE,UAAU;KAC5B,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACrC,KAAK,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG;KAC3E,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,QAAwB,EAAE,OAAe;IAChE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;YACtB,cAAc,EAAE,0BAA0B;YAC1C,eAAe,EAAE,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CACnD,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CACxE,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,4FAA4F;UACrG,0EAA0E;UAC1E,iEAAiE,OAAO,MAAM;UAC9E,8DAA8D,CAAC,CAAC;AACtE,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAA4B;IACxE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAE7E,MAAM,OAAO,GAAwB;QACnC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,UAAU;QAChB,OAAO;QACP,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IACF,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,EAAE;YAChE,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,IAAI,GAAG,CAAC;YACnD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;YACtF,MAAM,IAAI,GAAG,OAAO,IAAI,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;YAClD,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC7F,MAAM,WAAW,GAAG,gBAAgB,IAAI,UAAU,CAAC;YACnD,MAAM,eAAe,GAAG,oBAAoB,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;gBAC1F,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;YACH,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;YACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3D,IAAI,KAAK,KAAK,SAAS;oBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7B,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACnC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC7B,IAAI,OAAO,GAAW,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,gBAAgB,EAAE,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC3B,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;oBAChG,CAAC;oBACD,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvF,CAAC;qBAAM,IAAI,UAAU,EAAE,CAAC;oBACtB,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC/F,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACnC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,UAAkB,EAAE,OAAe;IACnF,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO;IAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,IAAI,OAAO,+BAA+B,CAAC,CAAC;IAC/E,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAwB,EACxB,MAAc,EACd,IAAY,EACZ,KAAwB,EACxB,MAAc,EACd,MAAc;IAEd,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACxE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC;IAE9B,MAAM,OAAO,GAAwB;QACnC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,UAAU;QAChB,OAAO;QACP,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IAEF,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;QACrE,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,SAAS;gBAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,CAAC,WAAW,CAAC,SAAS;gBAAE,WAAW,CAAC,OAAO,EAAE,CAAC;QACpD,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEvC,MAAM,WAAW,GAAG;YAClB,YAAY,aAAa,CAAC,UAAU,IAAI,aAAa,CAAC,aAAa,EAAE;YACrE,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBAChE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;gBACxE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC,CAAC;YACF,EAAE;YACF,EAAE;SACH,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE,EAAE;QAC9C,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,IAAI,GAAG,EAAE,aAAa,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAC9B,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,GAAG,EAAE,CAAC;AACrB,CAAC"}
@@ -1,25 +1,20 @@
1
1
  import type { NormalizedPreviewTarget } from './preview.service.js';
2
- import { type ManagedCloudflaredTunnel } from './cloudflared-process.js';
2
+ export { rewriteTargetCookie } from './preview-cookies.js';
3
+ /**
4
+ * Dedicated-origin preview gateways.
5
+ *
6
+ * Each workspace preview opened from a browser that can reach extra ports on
7
+ * the Agent Tower host gets its own root-path HTTP server. The previewed app
8
+ * then owns the whole URL space (`/login`, `/assets`, SPA history, cookies)
9
+ * without any rewriting. Browsers that cannot reach those ports use the
10
+ * same-origin `/view/:workspaceId/` proxy instead (see preview-proxy.ts).
11
+ */
3
12
  export declare const PREVIEW_GATEWAY_TOKEN_PARAM = "__agent_tower_preview_token";
4
- export declare const PREVIEW_BRIDGE_PATH = "/__agent_tower_preview_bridge.js";
5
13
  export declare const PREVIEW_HEARTBEAT_PATH = "/__agent_tower_preview_heartbeat";
6
- type PreviewMode = 'local' | 'remote';
7
- interface PreviewTunnel extends ManagedCloudflaredTunnel {
8
- stop(): boolean;
9
- on(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
10
- on(event: 'error', listener: (error: Error) => void): this;
11
- once(event: 'url', listener: (url: string) => void): this;
12
- once(event: 'error', listener: (error: Error) => void): this;
13
- once(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
14
- off(event: 'url', listener: (url: string) => void): this;
15
- off(event: 'error', listener: (error: Error) => void): this;
16
- off(event: 'exit', listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
17
- }
18
14
  export interface PreviewGatewaySession {
19
15
  id: string;
20
16
  workspaceId: string;
21
17
  target: string;
22
- mode: PreviewMode;
23
18
  viewBaseUrl: string;
24
19
  expiresAt: string;
25
20
  }
@@ -29,10 +24,7 @@ export interface PreviewRuntimeManagerOptions {
29
24
  sweepIntervalMs?: number;
30
25
  listenHost?: string;
31
26
  now?: () => number;
32
- createTunnel?: (targetUrl: string) => PreviewTunnel;
33
- ensureTunnelBinary?: () => Promise<void>;
34
27
  }
35
- export declare function rewriteTargetCookie(value: string, target: NormalizedPreviewTarget, runtimeCookieName: string, secureGateway: boolean): string;
36
28
  export declare function addPreviewAccessToken(viewBaseUrl: string, token: string, suffix?: string): string;
37
29
  export declare class PreviewRuntimeManager {
38
30
  private readonly runtimes;
@@ -41,11 +33,9 @@ export declare class PreviewRuntimeManager {
41
33
  private readonly leaseTtlMs;
42
34
  private readonly listenHost;
43
35
  private readonly now;
44
- private readonly createTunnel;
45
- private readonly ensureTunnelBinary;
46
36
  private readonly sweepTimer;
47
37
  constructor(options?: PreviewRuntimeManagerOptions);
48
- acquire(workspaceId: string, target: NormalizedPreviewTarget, mode: PreviewMode, localHostname: string): Promise<PreviewGatewaySession>;
38
+ acquire(workspaceId: string, target: NormalizedPreviewTarget, localHostname: string): Promise<PreviewGatewaySession>;
49
39
  heartbeat(workspaceId: string, leaseId: string): Promise<PreviewGatewaySession | null>;
50
40
  release(workspaceId: string, leaseId: string): void;
51
41
  invalidate(workspaceId: string): Promise<void>;
@@ -60,10 +50,6 @@ export declare class PreviewRuntimeManager {
60
50
  private proxyHttpRequest;
61
51
  private handleWebSocketUpgrade;
62
52
  private assertRuntimeActive;
63
- private ensureTunnel;
64
53
  private sweep;
65
- private stopRuntime;
66
- private stopTunnel;
67
54
  }
68
- export {};
69
55
  //# sourceMappingURL=preview-runtime-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preview-runtime-manager.d.ts","sourceRoot":"","sources":["../../src/services/preview-runtime-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview-runtime-manager.d.ts","sourceRoot":"","sources":["../../src/services/preview-runtime-manager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAWpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;GAQG;AAEH,eAAO,MAAM,2BAA2B,gCAAgC,CAAC;AACzE,eAAO,MAAM,sBAAsB,qCAAqC,CAAC;AA+BzE,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAuND,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAI9F;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEhC,OAAO,GAAE,4BAAiC;IAahD,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,uBAAuB,EAC/B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,CAAC;IAc3B,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAY5F,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7C,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,OAAO,CAAC,SAAS;YAUH,aAAa;IA+D3B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,YAAY;YAIN,kBAAkB;YAyBlB,iBAAiB;YA+BjB,gBAAgB;YAwEhB,sBAAsB;IA+DpC,OAAO,CAAC,mBAAmB;YAMb,KAAK;CAqBpB"}