agent-tower 0.5.4-beta.0 → 0.5.4-beta.1

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 (281) hide show
  1. package/README.md +6 -1
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +15 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/app.test.js +12 -0
  6. package/dist/app.test.js.map +1 -1
  7. package/dist/cli.js +18 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/core/event-bus.d.ts +3 -0
  10. package/dist/core/event-bus.d.ts.map +1 -1
  11. package/dist/core/event-bus.js.map +1 -1
  12. package/dist/executors/__tests__/base.executor.test.js +29 -1
  13. package/dist/executors/__tests__/base.executor.test.js.map +1 -1
  14. package/dist/executors/__tests__/codex.executor.test.js +13 -0
  15. package/dist/executors/__tests__/codex.executor.test.js.map +1 -1
  16. package/dist/executors/base.executor.d.ts.map +1 -1
  17. package/dist/executors/base.executor.js +4 -0
  18. package/dist/executors/base.executor.js.map +1 -1
  19. package/dist/executors/execution-env.d.ts +1 -1
  20. package/dist/executors/execution-env.d.ts.map +1 -1
  21. package/dist/executors/execution-env.js +7 -0
  22. package/dist/executors/execution-env.js.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/mcp/http-client.d.ts +2 -0
  26. package/dist/mcp/http-client.d.ts.map +1 -1
  27. package/dist/mcp/http-client.js +7 -0
  28. package/dist/mcp/http-client.js.map +1 -1
  29. package/dist/mcp/index.js +4 -1
  30. package/dist/mcp/index.js.map +1 -1
  31. package/dist/mcp/server.d.ts +3 -1
  32. package/dist/mcp/server.d.ts.map +1 -1
  33. package/dist/mcp/server.js +2 -1
  34. package/dist/mcp/server.js.map +1 -1
  35. package/dist/middleware/__tests__/access-auth.test.d.ts +2 -0
  36. package/dist/middleware/__tests__/access-auth.test.d.ts.map +1 -0
  37. package/dist/middleware/__tests__/access-auth.test.js +249 -0
  38. package/dist/middleware/__tests__/access-auth.test.js.map +1 -0
  39. package/dist/middleware/access-auth.d.ts +3 -0
  40. package/dist/middleware/access-auth.d.ts.map +1 -0
  41. package/dist/middleware/access-auth.js +110 -0
  42. package/dist/middleware/access-auth.js.map +1 -0
  43. package/dist/routes/__tests__/files.test.d.ts +2 -0
  44. package/dist/routes/__tests__/files.test.d.ts.map +1 -0
  45. package/dist/routes/__tests__/files.test.js +101 -0
  46. package/dist/routes/__tests__/files.test.js.map +1 -0
  47. package/dist/routes/__tests__/previews.integration.test.d.ts +2 -0
  48. package/dist/routes/__tests__/previews.integration.test.d.ts.map +1 -0
  49. package/dist/routes/__tests__/previews.integration.test.js +269 -0
  50. package/dist/routes/__tests__/previews.integration.test.js.map +1 -0
  51. package/dist/routes/__tests__/previews.test.js +103 -1
  52. package/dist/routes/__tests__/previews.test.js.map +1 -1
  53. package/dist/routes/access-auth.d.ts +3 -0
  54. package/dist/routes/access-auth.d.ts.map +1 -0
  55. package/dist/routes/access-auth.js +89 -0
  56. package/dist/routes/access-auth.js.map +1 -0
  57. package/dist/routes/files.d.ts.map +1 -1
  58. package/dist/routes/files.js +46 -0
  59. package/dist/routes/files.js.map +1 -1
  60. package/dist/routes/index.d.ts.map +1 -1
  61. package/dist/routes/index.js +3 -0
  62. package/dist/routes/index.js.map +1 -1
  63. package/dist/routes/previews.d.ts +7 -2
  64. package/dist/routes/previews.d.ts.map +1 -1
  65. package/dist/routes/previews.js +106 -32
  66. package/dist/routes/previews.js.map +1 -1
  67. package/dist/routes/projects.d.ts.map +1 -1
  68. package/dist/routes/projects.js +9 -0
  69. package/dist/routes/projects.js.map +1 -1
  70. package/dist/services/__tests__/access-auth.service.test.d.ts +2 -0
  71. package/dist/services/__tests__/access-auth.service.test.d.ts.map +1 -0
  72. package/dist/services/__tests__/access-auth.service.test.js +316 -0
  73. package/dist/services/__tests__/access-auth.service.test.js.map +1 -0
  74. package/dist/services/__tests__/member-heartbeat.test.d.ts +2 -0
  75. package/dist/services/__tests__/member-heartbeat.test.d.ts.map +1 -0
  76. package/dist/services/__tests__/member-heartbeat.test.js +344 -0
  77. package/dist/services/__tests__/member-heartbeat.test.js.map +1 -0
  78. package/dist/services/__tests__/project.service.test.js +29 -0
  79. package/dist/services/__tests__/project.service.test.js.map +1 -1
  80. package/dist/services/__tests__/session-manager.team-run.test.js +69 -0
  81. package/dist/services/__tests__/session-manager.team-run.test.js.map +1 -1
  82. package/dist/services/__tests__/task.service.test.js +34 -0
  83. package/dist/services/__tests__/task.service.test.js.map +1 -1
  84. package/dist/services/__tests__/team-reconciler.service.test.js +180 -3
  85. package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
  86. package/dist/services/__tests__/team-run.service.test.js +196 -2
  87. package/dist/services/__tests__/team-run.service.test.js.map +1 -1
  88. package/dist/services/__tests__/team-scheduler.service.test.js +12 -5
  89. package/dist/services/__tests__/team-scheduler.service.test.js.map +1 -1
  90. package/dist/services/__tests__/workspace.service.test.js +32 -0
  91. package/dist/services/__tests__/workspace.service.test.js.map +1 -1
  92. package/dist/services/access-auth.service.d.ts +82 -0
  93. package/dist/services/access-auth.service.d.ts.map +1 -0
  94. package/dist/services/access-auth.service.js +385 -0
  95. package/dist/services/access-auth.service.js.map +1 -0
  96. package/dist/services/mcp-config.service.d.ts.map +1 -1
  97. package/dist/services/mcp-config.service.js +8 -2
  98. package/dist/services/mcp-config.service.js.map +1 -1
  99. package/dist/services/mcp-config.service.test.js +18 -3
  100. package/dist/services/mcp-config.service.test.js.map +1 -1
  101. package/dist/services/member-heartbeat-scheduler.d.ts +33 -0
  102. package/dist/services/member-heartbeat-scheduler.d.ts.map +1 -0
  103. package/dist/services/member-heartbeat-scheduler.js +83 -0
  104. package/dist/services/member-heartbeat-scheduler.js.map +1 -0
  105. package/dist/services/project-guards.d.ts +5 -0
  106. package/dist/services/project-guards.d.ts.map +1 -1
  107. package/dist/services/project-guards.js +47 -0
  108. package/dist/services/project-guards.js.map +1 -1
  109. package/dist/services/project.service.d.ts +6 -4
  110. package/dist/services/project.service.d.ts.map +1 -1
  111. package/dist/services/project.service.js +16 -7
  112. package/dist/services/project.service.js.map +1 -1
  113. package/dist/services/session-manager.d.ts +11 -0
  114. package/dist/services/session-manager.d.ts.map +1 -1
  115. package/dist/services/session-manager.js +60 -0
  116. package/dist/services/session-manager.js.map +1 -1
  117. package/dist/services/task.service.d.ts +11 -9
  118. package/dist/services/task.service.d.ts.map +1 -1
  119. package/dist/services/task.service.js +17 -12
  120. package/dist/services/task.service.js.map +1 -1
  121. package/dist/services/team-reconciler.service.d.ts +39 -0
  122. package/dist/services/team-reconciler.service.d.ts.map +1 -1
  123. package/dist/services/team-reconciler.service.js +234 -3
  124. package/dist/services/team-reconciler.service.js.map +1 -1
  125. package/dist/services/team-run.service.d.ts +2 -0
  126. package/dist/services/team-run.service.d.ts.map +1 -1
  127. package/dist/services/team-run.service.js +35 -7
  128. package/dist/services/team-run.service.js.map +1 -1
  129. package/dist/services/team-scheduler.service.d.ts.map +1 -1
  130. package/dist/services/team-scheduler.service.js +22 -7
  131. package/dist/services/team-scheduler.service.js.map +1 -1
  132. package/dist/services/terminal-manager.d.ts.map +1 -1
  133. package/dist/services/terminal-manager.js +1 -0
  134. package/dist/services/terminal-manager.js.map +1 -1
  135. package/dist/services/workspace.service.d.ts.map +1 -1
  136. package/dist/services/workspace.service.js +5 -5
  137. package/dist/services/workspace.service.js.map +1 -1
  138. package/dist/socket/__tests__/socket-gateway.test.d.ts +2 -0
  139. package/dist/socket/__tests__/socket-gateway.test.d.ts.map +1 -0
  140. package/dist/socket/__tests__/socket-gateway.test.js +119 -0
  141. package/dist/socket/__tests__/socket-gateway.test.js.map +1 -0
  142. package/dist/socket/middleware/__tests__/auth.test.js +102 -2
  143. package/dist/socket/middleware/__tests__/auth.test.js.map +1 -1
  144. package/dist/socket/middleware/auth.d.ts +1 -0
  145. package/dist/socket/middleware/auth.d.ts.map +1 -1
  146. package/dist/socket/middleware/auth.js +22 -2
  147. package/dist/socket/middleware/auth.js.map +1 -1
  148. package/dist/socket/socket-gateway.d.ts +6 -2
  149. package/dist/socket/socket-gateway.d.ts.map +1 -1
  150. package/dist/socket/socket-gateway.js +78 -15
  151. package/dist/socket/socket-gateway.js.map +1 -1
  152. package/dist/utils/internal-api-token.d.ts +9 -0
  153. package/dist/utils/internal-api-token.d.ts.map +1 -0
  154. package/dist/utils/internal-api-token.js +74 -0
  155. package/dist/utils/internal-api-token.js.map +1 -0
  156. package/dist/utils/preview-path.d.ts +11 -0
  157. package/dist/utils/preview-path.d.ts.map +1 -0
  158. package/dist/utils/preview-path.js +46 -0
  159. package/dist/utils/preview-path.js.map +1 -0
  160. package/dist/utils/process-launch.test.js +14 -0
  161. package/dist/utils/process-launch.test.js.map +1 -1
  162. package/dist/web/assets/{AgentDemoPage-DMLw4xpg.js → AgentDemoPage-UmBBXiZq.js} +1 -1
  163. package/dist/web/assets/{AgentEnvironmentSettingsPage-NgRdouLu.js → AgentEnvironmentSettingsPage-DeMVC_O2.js} +1 -1
  164. package/dist/web/assets/{AgentLogo-ThhvSi7G.js → AgentLogo-sxp-yGLB.js} +1 -1
  165. package/dist/web/assets/{ConversationPage-B1ZcyF_h.js → ConversationPage-ykUuKcMG.js} +2 -2
  166. package/dist/web/assets/CreateTaskInput-WmNhRnVp.js +1 -0
  167. package/dist/web/assets/{DemoPage-CN2OBKzu.js → DemoPage-Cx-F46PV.js} +3 -3
  168. package/dist/web/assets/GeneralSettingsPage-DM4iy6dp.js +1 -0
  169. package/dist/web/assets/{Icons-DIZBOtuC.js → Icons-CO02_BMI.js} +1 -1
  170. package/dist/web/assets/{LoadingPreviewPage-CRBcypeY.js → LoadingPreviewPage-C58uR8H7.js} +1 -1
  171. package/dist/web/assets/McpSettingsPage-CTe-SNfY.js +1 -0
  172. package/dist/web/assets/{MemberAvatar-Y_pJlw-N.js → MemberAvatar-CZegYpYl.js} +1 -1
  173. package/dist/web/assets/NotificationSettingsPage-D17SAmMK.js +1 -0
  174. package/dist/web/assets/ProfileSettingsPage-B2rHV2eU.js +3 -0
  175. package/dist/web/assets/{ProjectKanbanPage-CBfocvKp.js → ProjectKanbanPage-SpCqpcZ0.js} +31 -32
  176. package/dist/web/assets/ProjectSettingsPage-2dD_ahm-.js +2 -0
  177. package/dist/web/assets/{ProviderSettingsPage-D-1Fyh5B.js → ProviderSettingsPage-D9vu3rO0.js} +6 -6
  178. package/dist/web/assets/{SettingsMasterDetail-CZfVaFo2.js → SettingsMasterDetail-CwRB1WBt.js} +1 -1
  179. package/dist/web/assets/{TeamSettingsPage-DysTmOGE.js → TeamSettingsPage-QXwc1AJE.js} +1 -1
  180. package/dist/web/assets/{arc-CgLBAHTH.js → arc-BRCC5BeU.js} +1 -1
  181. package/dist/web/assets/{architectureDiagram-3BPJPVTR-CP9eQfdk.js → architectureDiagram-3BPJPVTR-7lTGsSu5.js} +1 -1
  182. package/dist/web/assets/{arrow-left-y1LwO7sB.js → arrow-left-CNgpy5r6.js} +1 -1
  183. package/dist/web/assets/{blockDiagram-GPEHLZMM-BURZnUwn.js → blockDiagram-GPEHLZMM-CnscyQkX.js} +1 -1
  184. package/dist/web/assets/{c4Diagram-AAUBKEIU-Dzgp3z3S.js → c4Diagram-AAUBKEIU-DDhuPTLZ.js} +1 -1
  185. package/dist/web/assets/channel-S-3oxkZZ.js +1 -0
  186. package/dist/web/assets/check-DRdZLPss.js +1 -0
  187. package/dist/web/assets/{chevron-down--B7iZqBL.js → chevron-down-CqZBsPeR.js} +1 -1
  188. package/dist/web/assets/{chevron-right-7PShDIwg.js → chevron-right-YWciNkox.js} +1 -1
  189. package/dist/web/assets/{chevron-up-3n_vHdrD.js → chevron-up-BJ4i5iAn.js} +1 -1
  190. package/dist/web/assets/{chunk-2J33WTMH-CIpasa01.js → chunk-2J33WTMH-B96XJhZG.js} +1 -1
  191. package/dist/web/assets/{chunk-4BX2VUAB-DeSe2m1y.js → chunk-4BX2VUAB-IUZUHtbw.js} +1 -1
  192. package/dist/web/assets/{chunk-55IACEB6-BkJ6ogdn.js → chunk-55IACEB6-DcO4xSOO.js} +1 -1
  193. package/dist/web/assets/{chunk-727SXJPM-Bkbv-knP.js → chunk-727SXJPM-DuQwKkk-.js} +1 -1
  194. package/dist/web/assets/{chunk-AQP2D5EJ-BG9wGFIo.js → chunk-AQP2D5EJ-QotCqjAo.js} +1 -1
  195. package/dist/web/assets/{chunk-FMBD7UC4-Cvl_2za9.js → chunk-FMBD7UC4-C7hUbfZh.js} +1 -1
  196. package/dist/web/assets/{chunk-ND2GUHAM-B_zdzkWX.js → chunk-ND2GUHAM-B_C5eChQ.js} +1 -1
  197. package/dist/web/assets/{chunk-QZHKN3VN-Ch6dvKNw.js → chunk-QZHKN3VN-DRgZY4LJ.js} +1 -1
  198. package/dist/web/assets/{circle-alert-W13JkYj3.js → circle-alert-Ch4pQ3zT.js} +1 -1
  199. package/dist/web/assets/classDiagram-4FO5ZUOK-C00aPgpD.js +1 -0
  200. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-C00aPgpD.js +1 -0
  201. package/dist/web/assets/{code-block-OCS4YCEC-CYhJ9OPu.js → code-block-OCS4YCEC-h5zD4EvJ.js} +1 -1
  202. package/dist/web/assets/confirm-dialog-DG0L1v-9.js +1 -0
  203. package/dist/web/assets/{copy-bJ2sut_L.js → copy-JHS-5tjr.js} +1 -1
  204. package/dist/web/assets/{cose-bilkent-S5V4N54A-DWlnxyfH.js → cose-bilkent-S5V4N54A-6Gv8U8Cj.js} +1 -1
  205. package/dist/web/assets/{dagre-BM42HDAG-Bt3QI02a.js → dagre-BM42HDAG-Cf4rsmyS.js} +1 -1
  206. package/dist/web/assets/{diagram-2AECGRRQ-EaJBYSnS.js → diagram-2AECGRRQ-DW3DQ8NA.js} +1 -1
  207. package/dist/web/assets/{diagram-5GNKFQAL-BGyRb-_h.js → diagram-5GNKFQAL-C5cQ_MTX.js} +1 -1
  208. package/dist/web/assets/{diagram-KO2AKTUF-CZhDTMfm.js → diagram-KO2AKTUF-Dcs4NTfn.js} +1 -1
  209. package/dist/web/assets/{diagram-LMA3HP47-Be8BAxmL.js → diagram-LMA3HP47-lLI-OolH.js} +1 -1
  210. package/dist/web/assets/{diagram-OG6HWLK6-DEdQ7Cml.js → diagram-OG6HWLK6-BTdMG1u6.js} +1 -1
  211. package/dist/web/assets/{erDiagram-TEJ5UH35-CG9SNlbz.js → erDiagram-TEJ5UH35-BrKfSMWb.js} +1 -1
  212. package/dist/web/assets/{flowDiagram-I6XJVG4X-BUpx5PVX.js → flowDiagram-I6XJVG4X-BFT9EHqo.js} +1 -1
  213. package/dist/web/assets/folder-picker--V79noua.js +1 -0
  214. package/dist/web/assets/{ganttDiagram-6RSMTGT7-D7vRxMpE.js → ganttDiagram-6RSMTGT7-D_44EJ_y.js} +1 -1
  215. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-3lhH-RcD.js → gitGraphDiagram-PVQCEYII-COrCr27e.js} +1 -1
  216. package/dist/web/assets/index-BC5stA77.js +122 -0
  217. package/dist/web/assets/{index-CGMjRoF7.js → index-Cjaho2ST.js} +4 -4
  218. package/dist/web/assets/index-DRJLGAPR.css +1 -0
  219. package/dist/web/assets/{infoDiagram-5YYISTIA-C5SNbJpO.js → infoDiagram-5YYISTIA-Derwhgw-.js} +1 -1
  220. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-Ca7tX9_0.js → ishikawaDiagram-YF4QCWOH-Dv_SKfKy.js} +1 -1
  221. package/dist/web/assets/{journeyDiagram-JHISSGLW-B2oo6nxY.js → journeyDiagram-JHISSGLW-BvL0Myto.js} +1 -1
  222. package/dist/web/assets/{kanban-definition-UN3LZRKU-D1CzIzX9.js → kanban-definition-UN3LZRKU-D9iCCF7g.js} +1 -1
  223. package/dist/web/assets/{layers-BbLzQqyy.js → layers-D-OLv40U.js} +1 -1
  224. package/dist/web/assets/{linear-BWowtcGw.js → linear-DLebIyPZ.js} +1 -1
  225. package/dist/web/assets/{mermaid-NOHMQCX5-B42ziicV.js → mermaid-NOHMQCX5-CyA4Kmm7.js} +40 -40
  226. package/dist/web/assets/{message-square-Bd_m34OX.js → message-square-ByVmnBN0.js} +1 -1
  227. package/dist/web/assets/{mindmap-definition-RKZ34NQL-CYbO6QCk.js → mindmap-definition-RKZ34NQL-CJXkujXD.js} +1 -1
  228. package/dist/web/assets/{modal-CxOKWOjZ.js → modal-KKPLseLk.js} +1 -1
  229. package/dist/web/assets/{pencil-h5kxwbcu.js → pencil-B7ylaB7k.js} +1 -1
  230. package/dist/web/assets/{pieDiagram-4H26LBE5-DXQghKRy.js → pieDiagram-4H26LBE5-C8DfXjYu.js} +1 -1
  231. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-C6lAMMQB.js → quadrantDiagram-W4KKPZXB-BxaUhA-J.js} +1 -1
  232. package/dist/web/assets/{requirementDiagram-4Y6WPE33-Di9Le7Wy.js → requirementDiagram-4Y6WPE33-CkP381y3.js} +1 -1
  233. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-BGpnptvR.js → sankeyDiagram-5OEKKPKP-Ciot-1f1.js} +1 -1
  234. package/dist/web/assets/{select-DFuN9DX8.js → select-CLvHC1t4.js} +1 -1
  235. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-DjfkfaQL.js → sequenceDiagram-3UESZ5HK-ZrO6aulq.js} +1 -1
  236. package/dist/web/assets/{stateDiagram-AJRCARHV-DsELotm9.js → stateDiagram-AJRCARHV-BDC3J_xT.js} +1 -1
  237. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-C_4zupNH.js +1 -0
  238. package/dist/web/assets/{switch-gL7lBFj6.js → switch-DqXAu8pW.js} +1 -1
  239. package/dist/web/assets/{textarea-Lr4GZaYW.js → textarea-ByV2n54w.js} +1 -1
  240. package/dist/web/assets/{timeline-definition-PNZ67QCA-Cq1BWC0T.js → timeline-definition-PNZ67QCA-CG898aCW.js} +1 -1
  241. package/dist/web/assets/{trash-2-B7GFt5Wl.js → trash-2-D-MBxpK4.js} +1 -1
  242. package/dist/web/assets/{upload-L8hpDFoO.js → upload-CkkorsYk.js} +1 -1
  243. package/dist/web/assets/{use-profiles-zIsoigD8.js → use-profiles-B62R9Kbn.js} +1 -1
  244. package/dist/web/assets/use-projects-JMhtZFd6.js +1 -0
  245. package/dist/web/assets/{use-providers-erJ2iHLz.js → use-providers-Cg1RDnUJ.js} +1 -1
  246. package/dist/web/assets/{useNormalizedLogs-CXAn7xj_.js → useNormalizedLogs-BMa5-cCl.js} +1 -1
  247. package/dist/web/assets/{vennDiagram-CIIHVFJN-DdOfNtRo.js → vennDiagram-CIIHVFJN-CNRNbGoo.js} +1 -1
  248. package/dist/web/assets/{wardley-L42UT6IY-BeKcEIgK.js → wardley-L42UT6IY-Fm0b_w6O.js} +1 -1
  249. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DPKOxABd.js → wardleyDiagram-YWT4CUSO-C_xf1EWg.js} +1 -1
  250. package/dist/web/assets/{xychartDiagram-2RQKCTM6-olIy_aaY.js → xychartDiagram-2RQKCTM6-D9yke6dF.js} +1 -1
  251. package/dist/web/index.html +2 -2
  252. package/node_modules/@agent-tower/shared/dist/types.d.ts +30 -1
  253. package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
  254. package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
  255. package/node_modules/@prisma/client/.prisma/client/edge.js +18 -5
  256. package/node_modules/@prisma/client/.prisma/client/index-browser.js +13 -0
  257. package/node_modules/@prisma/client/.prisma/client/index.d.ts +1450 -215
  258. package/node_modules/@prisma/client/.prisma/client/index.js +18 -5
  259. package/node_modules/@prisma/client/.prisma/client/package.json +1 -1
  260. package/node_modules/@prisma/client/.prisma/client/schema.prisma +13 -0
  261. package/node_modules/@prisma/client/.prisma/client/wasm.js +13 -0
  262. package/package.json +1 -1
  263. package/prisma/migrations/20260701000000_add_access_auth_settings/migration.sql +9 -0
  264. package/prisma/schema.prisma +13 -0
  265. package/dist/web/assets/CreateTaskInput-Cb3aRHr3.js +0 -1
  266. package/dist/web/assets/GeneralSettingsPage-CE7P3t_v.js +0 -1
  267. package/dist/web/assets/McpSettingsPage-gp1XDMUd.js +0 -1
  268. package/dist/web/assets/NotificationSettingsPage-BhZeHEef.js +0 -1
  269. package/dist/web/assets/ProfileSettingsPage-D_y3ePFs.js +0 -3
  270. package/dist/web/assets/ProjectSettingsPage-V38j8T61.js +0 -2
  271. package/dist/web/assets/channel-CWEYGfCJ.js +0 -1
  272. package/dist/web/assets/check-D2WWIhwV.js +0 -1
  273. package/dist/web/assets/classDiagram-4FO5ZUOK-CcU8zfK8.js +0 -1
  274. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CcU8zfK8.js +0 -1
  275. package/dist/web/assets/confirm-dialog-BAqfLDT8.js +0 -1
  276. package/dist/web/assets/folder-picker-DFB9_pv4.js +0 -1
  277. package/dist/web/assets/folder-u7fKAtz_.js +0 -1
  278. package/dist/web/assets/index-7nw4fV42.js +0 -122
  279. package/dist/web/assets/index-YCjjSSLC.css +0 -1
  280. package/dist/web/assets/input-CKwRYuUJ.js +0 -1
  281. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CudtEyHd.js +0 -1
@@ -1,6 +1,20 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  import { TunnelService } from '../../../services/tunnel.service.js';
3
+ import { INTERNAL_API_TOKEN_ENV, INTERNAL_API_TOKEN_HEADER, } from '../../../utils/internal-api-token.js';
3
4
  import { authMiddleware } from '../auth.js';
5
+ const accessAuthMock = vi.hoisted(() => ({
6
+ extractCookieFromHeader: vi.fn(() => null),
7
+ validateSessionTokenWithGeneration: vi.fn(async () => ({ valid: true, generation: 0 })),
8
+ getSessionSecretGeneration: vi.fn(() => 0),
9
+ }));
10
+ vi.mock('../../../services/access-auth.service.js', () => ({
11
+ AccessAuthService: {
12
+ cookieName: 'agent-tower-access',
13
+ extractCookieFromHeader: accessAuthMock.extractCookieFromHeader,
14
+ validateSessionTokenWithGeneration: accessAuthMock.validateSessionTokenWithGeneration,
15
+ getSessionSecretGeneration: accessAuthMock.getSessionSecretGeneration,
16
+ },
17
+ }));
4
18
  function makeSocket({ headers, auth, }) {
5
19
  return {
6
20
  id: 'socket-12345678',
@@ -15,13 +29,21 @@ function makeSocket({ headers, auth, }) {
15
29
  }
16
30
  describe('socket authMiddleware', () => {
17
31
  beforeEach(() => {
32
+ delete process.env[INTERNAL_API_TOKEN_ENV];
33
+ accessAuthMock.extractCookieFromHeader.mockReset();
34
+ accessAuthMock.validateSessionTokenWithGeneration.mockReset();
35
+ accessAuthMock.getSessionSecretGeneration.mockReset();
18
36
  vi.spyOn(TunnelService, 'isRunning').mockReturnValue(true);
19
37
  vi.spyOn(TunnelService, 'validateToken').mockImplementation((token) => token === 'good-token');
38
+ accessAuthMock.extractCookieFromHeader.mockReturnValue(null);
39
+ accessAuthMock.validateSessionTokenWithGeneration.mockResolvedValue({ valid: true, generation: 0 });
40
+ accessAuthMock.getSessionSecretGeneration.mockReturnValue(0);
20
41
  });
21
42
  afterEach(() => {
43
+ delete process.env[INTERNAL_API_TOKEN_ENV];
22
44
  vi.restoreAllMocks();
23
45
  });
24
- it('accepts tunnel websocket connections with a valid tunnel session cookie', () => {
46
+ it('accepts tunnel websocket connections with a valid tunnel session cookie', async () => {
25
47
  const socket = makeSocket({
26
48
  headers: {
27
49
  'cf-ray': 'abc123',
@@ -30,10 +52,12 @@ describe('socket authMiddleware', () => {
30
52
  });
31
53
  const next = vi.fn();
32
54
  authMiddleware(socket, next);
55
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
33
56
  expect(next).toHaveBeenCalledWith();
34
57
  expect(socket.userId).toBe('good-token');
58
+ expect(socket.accessAuthSessionSecretGeneration).toBe(0);
35
59
  });
36
- it('rejects tunnel websocket connections that only send auth.token', () => {
60
+ it('rejects tunnel websocket connections that only send auth.token', async () => {
37
61
  const socket = makeSocket({
38
62
  headers: {
39
63
  'cf-ray': 'abc123',
@@ -44,7 +68,83 @@ describe('socket authMiddleware', () => {
44
68
  });
45
69
  const next = vi.fn();
46
70
  authMiddleware(socket, next);
71
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
47
72
  expect(next.mock.calls[0][0]).toBeInstanceOf(Error);
48
73
  });
74
+ it('rejects websocket connections without an access auth session when enabled', async () => {
75
+ accessAuthMock.validateSessionTokenWithGeneration.mockResolvedValueOnce({ valid: false, generation: 0 });
76
+ const socket = makeSocket({
77
+ headers: {},
78
+ });
79
+ const next = vi.fn();
80
+ authMiddleware(socket, next);
81
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
82
+ expect(next.mock.calls[0][0]).toBeInstanceOf(Error);
83
+ expect(String(next.mock.calls[0][0].message)).toContain('access password');
84
+ });
85
+ it('accepts websocket connections with a valid internal token', async () => {
86
+ process.env[INTERNAL_API_TOKEN_ENV] = 'expected-internal-token';
87
+ accessAuthMock.getSessionSecretGeneration.mockReturnValueOnce(3);
88
+ accessAuthMock.validateSessionTokenWithGeneration.mockResolvedValueOnce({ valid: false, generation: 0 });
89
+ const socket = makeSocket({
90
+ headers: {
91
+ [INTERNAL_API_TOKEN_HEADER]: 'expected-internal-token',
92
+ },
93
+ });
94
+ const next = vi.fn();
95
+ authMiddleware(socket, next);
96
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
97
+ expect(next).toHaveBeenCalledWith();
98
+ expect(accessAuthMock.validateSessionTokenWithGeneration).not.toHaveBeenCalled();
99
+ expect(socket.accessAuthSessionSecretGeneration).toBe(3);
100
+ });
101
+ it('rejects invalid internal token even when an access auth session cookie is valid', async () => {
102
+ process.env[INTERNAL_API_TOKEN_ENV] = 'expected-internal-token';
103
+ accessAuthMock.extractCookieFromHeader.mockReturnValueOnce('valid-access-token');
104
+ accessAuthMock.validateSessionTokenWithGeneration.mockResolvedValueOnce({ valid: true, generation: 2 });
105
+ const socket = makeSocket({
106
+ headers: {
107
+ [INTERNAL_API_TOKEN_HEADER]: 'wrong-internal-token',
108
+ cookie: 'agent-tower-access=valid-access-token',
109
+ },
110
+ });
111
+ const next = vi.fn();
112
+ authMiddleware(socket, next);
113
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
114
+ expect(next.mock.calls[0][0]).toBeInstanceOf(Error);
115
+ expect(String(next.mock.calls[0][0].message)).toContain('invalid internal token');
116
+ expect(accessAuthMock.validateSessionTokenWithGeneration).not.toHaveBeenCalled();
117
+ expect(socket.accessAuthSessionSecretGeneration).toBeUndefined();
118
+ });
119
+ it('uses access auth session cookie when internal token is missing', async () => {
120
+ accessAuthMock.extractCookieFromHeader.mockReturnValueOnce('valid-access-token');
121
+ accessAuthMock.validateSessionTokenWithGeneration.mockResolvedValueOnce({ valid: true, generation: 2 });
122
+ const socket = makeSocket({
123
+ headers: {
124
+ cookie: 'agent-tower-access=valid-access-token',
125
+ },
126
+ });
127
+ const next = vi.fn();
128
+ authMiddleware(socket, next);
129
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
130
+ expect(next).toHaveBeenCalledWith();
131
+ expect(accessAuthMock.validateSessionTokenWithGeneration).toHaveBeenCalledWith('valid-access-token');
132
+ expect(socket.accessAuthSessionSecretGeneration).toBe(2);
133
+ });
134
+ it('rejects websocket connections when access auth generation changes during validation', async () => {
135
+ accessAuthMock.extractCookieFromHeader.mockReturnValueOnce('old-token');
136
+ accessAuthMock.validateSessionTokenWithGeneration.mockResolvedValueOnce({ valid: false, generation: 1 });
137
+ const socket = makeSocket({
138
+ headers: {
139
+ cookie: 'agent-tower-access=old-token',
140
+ },
141
+ });
142
+ const next = vi.fn();
143
+ authMiddleware(socket, next);
144
+ await vi.waitFor(() => expect(next).toHaveBeenCalled());
145
+ expect(accessAuthMock.validateSessionTokenWithGeneration).toHaveBeenCalledWith('old-token');
146
+ expect(next.mock.calls[0][0]).toBeInstanceOf(Error);
147
+ expect(socket.accessAuthSessionSecretGeneration).toBeUndefined();
148
+ });
49
149
  });
50
150
  //# sourceMappingURL=auth.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../../src/socket/middleware/__tests__/auth.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,cAAc,EAA4B,MAAM,YAAY,CAAC;AAEtE,SAAS,UAAU,CAAC,EAClB,OAAO,EACP,IAAI,GAIL;IACC,OAAO;QACL,EAAE,EAAE,iBAAiB;QACrB,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,IAAI,EAAE;SACvB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,IAAI,IAAI,EAAE;YAChB,KAAK,EAAE,EAAE;SACV;KACqB,CAAC;AAC3B,CAAC;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3D,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,OAAO,EAAE;gBACP,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,sCAAsC;aAC/C;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACrB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE7B,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,OAAO,EAAE;gBACP,QAAQ,EAAE,QAAQ;aACnB;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,YAAY;aACpB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACrB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../../src/socket/middleware/__tests__/auth.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ type NextFunction = (err?: Error) => void;
3
3
  export interface AuthenticatedSocket extends Socket {
4
4
  userId?: string;
5
5
  username?: string;
6
+ accessAuthSessionSecretGeneration?: number;
6
7
  }
7
8
  /**
8
9
  * Socket 认证中间件
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/socket/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIvC,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;AAEzC,MAAM,WAAW,mBAAoB,SAAQ,MAAM;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,YAAY,QAuBnB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/socket/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AASvC,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;AAEzC,MAAM,WAAW,mBAAoB,SAAQ,MAAM;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iCAAiC,CAAC,EAAE,MAAM,CAAA;CAC3C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,YAAY,QAGnB"}
@@ -1,19 +1,39 @@
1
1
  import { TunnelService } from '../../services/tunnel.service.js';
2
2
  import { extractTunnelSessionTokenFromCookieHeader } from '../../utils/tunnel-cookie.js';
3
+ import { AccessAuthService } from '../../services/access-auth.service.js';
4
+ import { INTERNAL_API_TOKEN_HEADER, validateInternalApiToken, } from '../../utils/internal-api-token.js';
3
5
  /**
4
6
  * Socket 认证中间件
5
7
  * 隧道请求(带 CF 头)必须携带有效 token,本地请求放行
6
8
  */
7
9
  export function authMiddleware(socket, next) {
8
- // 检查是否为隧道请求
10
+ void authenticateSocket(socket, next);
11
+ }
12
+ async function authenticateSocket(socket, next) {
9
13
  const headers = socket.request.headers;
10
14
  const isTunnel = !!(headers['cf-connecting-ip'] || headers['cf-ray']);
11
- const cookieToken = extractTunnelSessionTokenFromCookieHeader(socket.request.headers.cookie);
15
+ const cookieToken = extractTunnelSessionTokenFromCookieHeader(headers.cookie);
12
16
  if (isTunnel && TunnelService.isRunning()) {
13
17
  if (!cookieToken || !TunnelService.validateToken(cookieToken)) {
14
18
  return next(new Error('Unauthorized: valid tunnel session cookie required'));
15
19
  }
16
20
  }
21
+ const internalToken = headers[INTERNAL_API_TOKEN_HEADER];
22
+ const normalizedInternalToken = Array.isArray(internalToken) ? internalToken[0] : internalToken;
23
+ if (internalToken !== undefined) {
24
+ if (!validateInternalApiToken(normalizedInternalToken)) {
25
+ return next(new Error('Unauthorized: invalid internal token'));
26
+ }
27
+ socket.accessAuthSessionSecretGeneration = AccessAuthService.getSessionSecretGeneration();
28
+ }
29
+ else {
30
+ const accessToken = AccessAuthService.extractCookieFromHeader(headers.cookie);
31
+ const accessAuthResult = await AccessAuthService.validateSessionTokenWithGeneration(accessToken);
32
+ if (!accessAuthResult.valid) {
33
+ return next(new Error('Unauthorized: access password required'));
34
+ }
35
+ socket.accessAuthSessionSecretGeneration = accessAuthResult.generation;
36
+ }
17
37
  // 设置用户标识
18
38
  if (cookieToken) {
19
39
  socket.userId = cookieToken;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/socket/middleware/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,EAAE,yCAAyC,EAAE,MAAM,8BAA8B,CAAA;AASxF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA2B,EAC3B,IAAkB;IAElB,YAAY;IACZ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAA;IACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrE,MAAM,WAAW,GAAG,yCAAyC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAE5F,IAAI,QAAQ,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED,SAAS;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,MAAM,GAAG,WAAW,CAAA;QAC3B,MAAM,CAAC,QAAQ,GAAG,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,MAAM,GAAG,aAAa,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QACpD,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAA;IAC/B,CAAC;IAED,IAAI,EAAE,CAAA;AACR,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/socket/middleware/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,EAAE,yCAAyC,EAAE,MAAM,8BAA8B,CAAA;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AACzE,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,mCAAmC,CAAA;AAU1C;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA2B,EAC3B,IAAkB;IAElB,KAAK,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAA2B,EAC3B,IAAkB;IAElB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAA;IACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrE,MAAM,WAAW,GAAG,yCAAyC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAE7E,IAAI,QAAQ,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACxD,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IAC/F,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAA;QAChE,CAAC;QACD,MAAM,CAAC,iCAAiC,GAAG,iBAAiB,CAAC,0BAA0B,EAAE,CAAA;IAC3F,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7E,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,kCAAkC,CAAC,WAAW,CAAC,CAAA;QAChG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,CAAC,iCAAiC,GAAG,gBAAgB,CAAC,UAAU,CAAA;IACxE,CAAC;IAED,SAAS;IACT,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,MAAM,GAAG,WAAW,CAAA;QAC3B,MAAM,CAAC,QAAQ,GAAG,QAAQ,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,MAAM,GAAG,aAAa,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QACpD,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAA;IAC/B,CAAC;IAED,IAAI,EAAE,CAAA;AACR,CAAC"}
@@ -1,7 +1,8 @@
1
- import type { Namespace, Socket } from 'socket.io';
1
+ import type { Namespace } from 'socket.io';
2
2
  import type { EventBus } from '../core/event-bus.js';
3
3
  import type { SessionManager } from '../services/session-manager.js';
4
4
  import type { TerminalManager } from '../services/terminal-manager.js';
5
+ import type { AuthenticatedSocket } from './middleware/index.js';
5
6
  export declare class SocketGateway {
6
7
  private readonly nsp;
7
8
  private readonly eventBus;
@@ -10,8 +11,11 @@ export declare class SocketGateway {
10
11
  private cleanups;
11
12
  constructor(nsp: Namespace, eventBus: EventBus, sessionManager: SessionManager, terminalManager: TerminalManager);
12
13
  destroy(): void;
13
- register(socket: Socket): void;
14
+ register(socket: AuthenticatedSocket): void;
14
15
  private registerEventBusForwarders;
16
+ private isSocketAuthCurrent;
17
+ private ensureSocketAuthIsCurrent;
18
+ private disconnectStaleSockets;
15
19
  private handleSubscribe;
16
20
  private handleUnsubscribe;
17
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"socket-gateway.d.ts","sourceRoot":"","sources":["../../src/socket/socket-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAevE,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC,OAAO,CAAC,QAAQ,CAAyB;gBAGtB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe;IAKnD,OAAO,IAAI,IAAI;IAOf,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAsD9B,OAAO,CAAC,0BAA0B;IA2GlC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,iBAAiB;CAO1B"}
1
+ {"version":3,"file":"socket-gateway.d.ts","sourceRoot":"","sources":["../../src/socket/socket-gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAU,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAejE,qBAAa,aAAa;IAItB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC,OAAO,CAAC,QAAQ,CAAyB;gBAGtB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe;IAKnD,OAAO,IAAI,IAAI;IAOf,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IA4D3C,OAAO,CAAC,0BAA0B;IAuIlC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,iBAAiB;CAO1B"}
@@ -1,3 +1,4 @@
1
+ import { AccessAuthService } from '../services/access-auth.service.js';
1
2
  import { ClientEvents, ServerEvents, } from './events.js';
2
3
  export class SocketGateway {
3
4
  nsp;
@@ -21,13 +22,19 @@ export class SocketGateway {
21
22
  register(socket) {
22
23
  // --- Subscribe / Unsubscribe ---
23
24
  socket.on(ClientEvents.SUBSCRIBE, (payload, ack) => {
25
+ if (!this.ensureSocketAuthIsCurrent(socket, ack))
26
+ return;
24
27
  this.handleSubscribe(socket, payload, ack);
25
28
  });
26
29
  socket.on(ClientEvents.UNSUBSCRIBE, (payload, ack) => {
30
+ if (!this.ensureSocketAuthIsCurrent(socket, ack))
31
+ return;
27
32
  this.handleUnsubscribe(socket, payload, ack);
28
33
  });
29
34
  // --- Agent session I/O ---
30
35
  socket.on(ClientEvents.INPUT, (payload) => {
36
+ if (!this.ensureSocketAuthIsCurrent(socket))
37
+ return;
31
38
  if (!payload?.sessionId || typeof payload.data !== 'string')
32
39
  return;
33
40
  try {
@@ -38,6 +45,8 @@ export class SocketGateway {
38
45
  }
39
46
  });
40
47
  socket.on(ClientEvents.RESIZE, (payload) => {
48
+ if (!this.ensureSocketAuthIsCurrent(socket))
49
+ return;
41
50
  if (!payload?.sessionId || typeof payload.cols !== 'number' || typeof payload.rows !== 'number')
42
51
  return;
43
52
  try {
@@ -49,6 +58,8 @@ export class SocketGateway {
49
58
  });
50
59
  // --- Standalone terminal I/O ---
51
60
  socket.on(ClientEvents.TERMINAL_INPUT, (payload) => {
61
+ if (!this.ensureSocketAuthIsCurrent(socket))
62
+ return;
52
63
  if (!payload?.terminalId || typeof payload.data !== 'string')
53
64
  return;
54
65
  try {
@@ -59,6 +70,8 @@ export class SocketGateway {
59
70
  }
60
71
  });
61
72
  socket.on(ClientEvents.TERMINAL_RESIZE, (payload) => {
73
+ if (!this.ensureSocketAuthIsCurrent(socket))
74
+ return;
62
75
  if (!payload?.terminalId || typeof payload.cols !== 'number' || typeof payload.rows !== 'number')
63
76
  return;
64
77
  try {
@@ -74,56 +87,82 @@ export class SocketGateway {
74
87
  });
75
88
  }
76
89
  registerEventBusForwarders() {
90
+ const emitToCurrentSockets = (event, payload) => {
91
+ for (const socket of this.nsp.sockets.values()) {
92
+ if (this.isSocketAuthCurrent(socket)) {
93
+ socket.emit(event, payload);
94
+ }
95
+ else {
96
+ socket.disconnect(true);
97
+ }
98
+ }
99
+ };
100
+ const emitToCurrentTerminalRoom = (terminalId, event, payload) => {
101
+ for (const socketId of this.nsp.adapter.rooms.get(`terminal:${terminalId}`) ?? []) {
102
+ const socket = this.nsp.sockets.get(socketId);
103
+ if (!socket)
104
+ continue;
105
+ if (this.isSocketAuthCurrent(socket)) {
106
+ socket.emit(event, payload);
107
+ }
108
+ else {
109
+ socket.disconnect(true);
110
+ }
111
+ }
112
+ };
77
113
  // --- Session events: broadcast to entire namespace (no room filtering) ---
78
114
  const onStdout = ({ sessionId, data }) => {
79
- this.nsp.emit(ServerEvents.SESSION_STDOUT, { sessionId, data });
115
+ emitToCurrentSockets(ServerEvents.SESSION_STDOUT, { sessionId, data });
80
116
  };
81
117
  const onPatch = ({ sessionId, patch, seq }) => {
82
- this.nsp.emit(ServerEvents.SESSION_PATCH, { sessionId, patch, seq });
118
+ emitToCurrentSockets(ServerEvents.SESSION_PATCH, { sessionId, patch, seq });
83
119
  };
84
120
  const onSessionId = ({ sessionId, agentSessionId }) => {
85
- this.nsp.emit(ServerEvents.SESSION_ID, { sessionId, agentSessionId });
121
+ emitToCurrentSockets(ServerEvents.SESSION_ID, { sessionId, agentSessionId });
86
122
  };
87
123
  const onExit = ({ sessionId, exitCode }) => {
88
- this.nsp.emit(ServerEvents.SESSION_EXIT, {
124
+ emitToCurrentSockets(ServerEvents.SESSION_EXIT, {
89
125
  sessionId,
90
126
  exitCode: typeof exitCode === 'number' ? exitCode : 0,
91
127
  });
92
128
  };
93
129
  const onSessionCompleted = ({ sessionId, status }) => {
94
- this.nsp.emit(ServerEvents.SESSION_COMPLETED, { sessionId, status });
130
+ emitToCurrentSockets(ServerEvents.SESSION_COMPLETED, { sessionId, status });
95
131
  };
96
132
  const onTask = ({ taskId, projectId, status }) => {
97
- this.nsp.emit(ServerEvents.TASK_UPDATED, { taskId, projectId, status });
133
+ emitToCurrentSockets(ServerEvents.TASK_UPDATED, { taskId, projectId, status });
98
134
  };
99
135
  const onTaskDeleted = ({ taskId, projectId }) => {
100
- this.nsp.emit(ServerEvents.TASK_DELETED, { taskId, projectId });
136
+ emitToCurrentSockets(ServerEvents.TASK_DELETED, { taskId, projectId });
101
137
  };
102
138
  const onWorkspaceCommitMessageUpdated = (payload) => {
103
- this.nsp.emit(ServerEvents.WORKSPACE_COMMIT_MESSAGE_UPDATED, payload);
139
+ emitToCurrentSockets(ServerEvents.WORKSPACE_COMMIT_MESSAGE_UPDATED, payload);
104
140
  };
105
141
  // --- Terminal events: keep room-based dispatch (lifecycle tied to socket) ---
106
142
  const onTerminalStdout = ({ terminalId, data }) => {
107
- this.nsp.to(`terminal:${terminalId}`).emit(ServerEvents.TERMINAL_STDOUT, { terminalId, data });
143
+ emitToCurrentTerminalRoom(terminalId, ServerEvents.TERMINAL_STDOUT, { terminalId, data });
108
144
  };
109
145
  const onTerminalExit = ({ terminalId, exitCode }) => {
110
- this.nsp.to(`terminal:${terminalId}`).emit(ServerEvents.TERMINAL_EXIT, {
146
+ emitToCurrentTerminalRoom(terminalId, ServerEvents.TERMINAL_EXIT, {
111
147
  terminalId,
112
148
  exitCode: typeof exitCode === 'number' ? exitCode : 0,
113
149
  });
114
150
  };
115
151
  // --- Workspace events: broadcast to entire namespace ---
116
152
  const onWorkspaceSetupProgress = (payload) => {
117
- this.nsp.emit(ServerEvents.WORKSPACE_SETUP_PROGRESS, payload);
153
+ emitToCurrentSockets(ServerEvents.WORKSPACE_SETUP_PROGRESS, payload);
118
154
  };
119
155
  const onWorkspaceHibernated = (payload) => {
120
- this.nsp.emit(ServerEvents.WORKSPACE_HIBERNATED, payload);
156
+ emitToCurrentSockets(ServerEvents.WORKSPACE_HIBERNATED, payload);
121
157
  };
122
158
  const onWorkspaceGitChanged = (payload) => {
123
- this.nsp.emit(ServerEvents.WORKSPACE_GIT_CHANGED, payload);
159
+ emitToCurrentSockets(ServerEvents.WORKSPACE_GIT_CHANGED, payload);
124
160
  };
125
161
  const onTeamRunInvalidated = (payload) => {
126
- this.nsp.emit(ServerEvents.TEAM_RUN_INVALIDATED, payload);
162
+ emitToCurrentSockets(ServerEvents.TEAM_RUN_INVALIDATED, payload);
163
+ };
164
+ const onAccessAuthSessionSecretRotated = () => {
165
+ this.disconnectStaleSockets();
127
166
  };
128
167
  this.eventBus.on('session:stdout', onStdout);
129
168
  this.eventBus.on('session:patch', onPatch);
@@ -139,7 +178,31 @@ export class SocketGateway {
139
178
  this.eventBus.on('workspace:hibernated', onWorkspaceHibernated);
140
179
  this.eventBus.on('workspace:git_changed', onWorkspaceGitChanged);
141
180
  this.eventBus.on('team-run:invalidated', onTeamRunInvalidated);
142
- this.cleanups.push(() => this.eventBus.off('session:stdout', onStdout), () => this.eventBus.off('session:patch', onPatch), () => this.eventBus.off('session:sessionId', onSessionId), () => this.eventBus.off('session:exit', onExit), () => this.eventBus.off('session:completed', onSessionCompleted), () => this.eventBus.off('task:updated', onTask), () => this.eventBus.off('task:deleted', onTaskDeleted), () => this.eventBus.off('workspace:commit_message_updated', onWorkspaceCommitMessageUpdated), () => this.eventBus.off('terminal:stdout', onTerminalStdout), () => this.eventBus.off('terminal:exit', onTerminalExit), () => this.eventBus.off('workspace:setup_progress', onWorkspaceSetupProgress), () => this.eventBus.off('workspace:hibernated', onWorkspaceHibernated), () => this.eventBus.off('workspace:git_changed', onWorkspaceGitChanged), () => this.eventBus.off('team-run:invalidated', onTeamRunInvalidated));
181
+ this.eventBus.on('access-auth:session-secret-rotated', onAccessAuthSessionSecretRotated);
182
+ this.cleanups.push(() => this.eventBus.off('session:stdout', onStdout), () => this.eventBus.off('session:patch', onPatch), () => this.eventBus.off('session:sessionId', onSessionId), () => this.eventBus.off('session:exit', onExit), () => this.eventBus.off('session:completed', onSessionCompleted), () => this.eventBus.off('task:updated', onTask), () => this.eventBus.off('task:deleted', onTaskDeleted), () => this.eventBus.off('workspace:commit_message_updated', onWorkspaceCommitMessageUpdated), () => this.eventBus.off('terminal:stdout', onTerminalStdout), () => this.eventBus.off('terminal:exit', onTerminalExit), () => this.eventBus.off('workspace:setup_progress', onWorkspaceSetupProgress), () => this.eventBus.off('workspace:hibernated', onWorkspaceHibernated), () => this.eventBus.off('workspace:git_changed', onWorkspaceGitChanged), () => this.eventBus.off('team-run:invalidated', onTeamRunInvalidated), () => this.eventBus.off('access-auth:session-secret-rotated', onAccessAuthSessionSecretRotated));
183
+ }
184
+ isSocketAuthCurrent(socket) {
185
+ return socket.accessAuthSessionSecretGeneration === AccessAuthService.getSessionSecretGeneration();
186
+ }
187
+ ensureSocketAuthIsCurrent(socket, ack) {
188
+ if (this.isSocketAuthCurrent(socket))
189
+ return true;
190
+ ack?.({
191
+ success: false,
192
+ error: {
193
+ code: 'ACCESS_AUTH_STALE_SESSION',
194
+ message: 'Socket authentication is no longer current',
195
+ },
196
+ });
197
+ socket.disconnect(true);
198
+ return false;
199
+ }
200
+ disconnectStaleSockets() {
201
+ for (const socket of this.nsp.sockets.values()) {
202
+ if (!this.isSocketAuthCurrent(socket)) {
203
+ socket.disconnect(true);
204
+ }
205
+ }
143
206
  }
144
207
  handleSubscribe(socket, payload, ack) {
145
208
  if (payload.topic === 'terminal' && payload.id) {
@@ -1 +1 @@
1
- {"version":3,"file":"socket-gateway.js","sourceRoot":"","sources":["../../src/socket/socket-gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-gateway.js","sourceRoot":"","sources":["../../src/socket/socket-gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const INTERNAL_API_TOKEN_HEADER = "x-agent-tower-internal-token";
2
+ export declare const INTERNAL_API_TOKEN_ENV = "AGENT_TOWER_INTERNAL_TOKEN";
3
+ export declare function getInternalApiTokenPath(dataDir?: string): string;
4
+ export declare function readInternalApiToken(dataDir?: string): string | null;
5
+ export declare function readInternalApiTokenFromEnv(env?: NodeJS.ProcessEnv): string | null;
6
+ export declare function requireInternalApiTokenFromEnv(env?: NodeJS.ProcessEnv): string;
7
+ export declare function getOrCreateInternalApiToken(dataDir?: string): string;
8
+ export declare function validateInternalApiToken(value: string | null | undefined): boolean;
9
+ //# sourceMappingURL=internal-api-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-api-token.d.ts","sourceRoot":"","sources":["../../src/utils/internal-api-token.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AACxE,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAGnE,wBAAgB,uBAAuB,CAAC,OAAO,SAAmB,GAAG,MAAM,CAE1E;AAOD,wBAAgB,oBAAoB,CAAC,OAAO,SAAmB,GAAG,MAAM,GAAG,IAAI,CAS9E;AAED,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED,wBAAgB,8BAA8B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAM3F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,SAAmB,GAAG,MAAM,CAuB9E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAUlF"}
@@ -0,0 +1,74 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { randomBytes, timingSafeEqual } from 'node:crypto';
4
+ import { resolveDataDir } from './data-dir.js';
5
+ export const INTERNAL_API_TOKEN_HEADER = 'x-agent-tower-internal-token';
6
+ export const INTERNAL_API_TOKEN_ENV = 'AGENT_TOWER_INTERNAL_TOKEN';
7
+ const INTERNAL_API_TOKEN_FILE = 'internal-api-token';
8
+ export function getInternalApiTokenPath(dataDir = resolveDataDir()) {
9
+ return path.join(dataDir, INTERNAL_API_TOKEN_FILE);
10
+ }
11
+ function normalizeToken(value) {
12
+ const token = value.trim();
13
+ return token.length > 0 ? token : null;
14
+ }
15
+ export function readInternalApiToken(dataDir = resolveDataDir()) {
16
+ const tokenPath = getInternalApiTokenPath(dataDir);
17
+ if (!existsSync(tokenPath))
18
+ return null;
19
+ try {
20
+ return normalizeToken(readFileSync(tokenPath, 'utf-8')) ?? null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ export function readInternalApiTokenFromEnv(env = process.env) {
27
+ const value = env[INTERNAL_API_TOKEN_ENV];
28
+ return typeof value === 'string' ? normalizeToken(value) : null;
29
+ }
30
+ export function requireInternalApiTokenFromEnv(env = process.env) {
31
+ const token = readInternalApiTokenFromEnv(env);
32
+ if (!token) {
33
+ throw new Error(`${INTERNAL_API_TOKEN_ENV} is required for Agent Tower internal API access`);
34
+ }
35
+ return token;
36
+ }
37
+ export function getOrCreateInternalApiToken(dataDir = resolveDataDir()) {
38
+ const existing = readInternalApiToken(dataDir);
39
+ if (existing)
40
+ return existing;
41
+ mkdirSync(dataDir, { recursive: true });
42
+ const token = randomBytes(32).toString('base64url');
43
+ const tokenPath = getInternalApiTokenPath(dataDir);
44
+ try {
45
+ writeFileSync(tokenPath, `${token}\n`, {
46
+ encoding: 'utf-8',
47
+ mode: 0o600,
48
+ flag: 'wx',
49
+ });
50
+ return token;
51
+ }
52
+ catch (err) {
53
+ const code = err.code;
54
+ if (code === 'EEXIST') {
55
+ const raced = readInternalApiToken(dataDir);
56
+ if (raced)
57
+ return raced;
58
+ }
59
+ throw err;
60
+ }
61
+ }
62
+ export function validateInternalApiToken(value) {
63
+ if (!value)
64
+ return false;
65
+ const expected = readInternalApiTokenFromEnv();
66
+ if (!expected)
67
+ return false;
68
+ const actualBuffer = Buffer.from(value);
69
+ const expectedBuffer = Buffer.from(expected);
70
+ if (actualBuffer.length !== expectedBuffer.length)
71
+ return false;
72
+ return timingSafeEqual(actualBuffer, expectedBuffer);
73
+ }
74
+ //# sourceMappingURL=internal-api-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-api-token.js","sourceRoot":"","sources":["../../src/utils/internal-api-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const PREVIEW_PREFIX = "/view";
2
+ export declare const PREVIEW_ACCESS_TOKEN_VERSION = "pv1";
3
+ export interface ParsedPreviewPath {
4
+ workspaceId: string;
5
+ previewToken: string | null;
6
+ suffix: string;
7
+ search: string;
8
+ }
9
+ export declare function buildPreviewPathPrefix(workspaceId: string, previewToken?: string | null): string;
10
+ export declare function parsePreviewPath(url: string): ParsedPreviewPath | null;
11
+ //# sourceMappingURL=preview-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-path.d.ts","sourceRoot":"","sources":["../../src/utils/preview-path.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAGlD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAIhG;AAMD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAkCtE"}