agent-tower 0.7.2 → 0.7.4-beta.0

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 (339) hide show
  1. package/dist/executors/__tests__/providers.test.js +53 -0
  2. package/dist/executors/__tests__/providers.test.js.map +1 -1
  3. package/dist/executors/providers.d.ts +2 -0
  4. package/dist/executors/providers.d.ts.map +1 -1
  5. package/dist/executors/providers.js +3 -2
  6. package/dist/executors/providers.js.map +1 -1
  7. package/dist/git/base-branch.d.ts +3 -0
  8. package/dist/git/base-branch.d.ts.map +1 -0
  9. package/dist/git/base-branch.js +17 -0
  10. package/dist/git/base-branch.js.map +1 -0
  11. package/dist/git/worktree.manager.d.ts +2 -0
  12. package/dist/git/worktree.manager.d.ts.map +1 -1
  13. package/dist/git/worktree.manager.js +29 -8
  14. package/dist/git/worktree.manager.js.map +1 -1
  15. package/dist/git/worktree.manager.test.js +38 -0
  16. package/dist/git/worktree.manager.test.js.map +1 -1
  17. package/dist/mcp/http-client.d.ts +4 -6
  18. package/dist/mcp/http-client.d.ts.map +1 -1
  19. package/dist/mcp/http-client.js +6 -0
  20. package/dist/mcp/http-client.js.map +1 -1
  21. package/dist/mcp/tools/__tests__/providers.test.d.ts +2 -0
  22. package/dist/mcp/tools/__tests__/providers.test.d.ts.map +1 -0
  23. package/dist/mcp/tools/__tests__/providers.test.js +22 -0
  24. package/dist/mcp/tools/__tests__/providers.test.js.map +1 -0
  25. package/dist/mcp/tools/__tests__/tasks.test.d.ts +2 -0
  26. package/dist/mcp/tools/__tests__/tasks.test.d.ts.map +1 -0
  27. package/dist/mcp/tools/__tests__/tasks.test.js +49 -0
  28. package/dist/mcp/tools/__tests__/tasks.test.js.map +1 -0
  29. package/dist/mcp/tools/providers.d.ts.map +1 -1
  30. package/dist/mcp/tools/providers.js +3 -2
  31. package/dist/mcp/tools/providers.js.map +1 -1
  32. package/dist/mcp/tools/tasks.d.ts.map +1 -1
  33. package/dist/mcp/tools/tasks.js +31 -2
  34. package/dist/mcp/tools/tasks.js.map +1 -1
  35. package/dist/mcp/types.d.ts +27 -0
  36. package/dist/mcp/types.d.ts.map +1 -1
  37. package/dist/mcp/types.js +13 -0
  38. package/dist/mcp/types.js.map +1 -1
  39. package/dist/output/__tests__/text-block-lifecycle.test.js +37 -0
  40. package/dist/output/__tests__/text-block-lifecycle.test.js.map +1 -1
  41. package/dist/output/text-block-tracker.d.ts.map +1 -1
  42. package/dist/output/text-block-tracker.js +24 -1
  43. package/dist/output/text-block-tracker.js.map +1 -1
  44. package/dist/prompts/task-handoff.d.ts +6 -0
  45. package/dist/prompts/task-handoff.d.ts.map +1 -0
  46. package/dist/prompts/task-handoff.js +17 -0
  47. package/dist/prompts/task-handoff.js.map +1 -0
  48. package/dist/prompts/task-handoff.test.d.ts +2 -0
  49. package/dist/prompts/task-handoff.test.d.ts.map +1 -0
  50. package/dist/prompts/task-handoff.test.js +27 -0
  51. package/dist/prompts/task-handoff.test.js.map +1 -0
  52. package/dist/prompts/workspace-background-service-policy.d.ts +6 -0
  53. package/dist/prompts/workspace-background-service-policy.d.ts.map +1 -1
  54. package/dist/prompts/workspace-background-service-policy.js +2 -1
  55. package/dist/prompts/workspace-background-service-policy.js.map +1 -1
  56. package/dist/routes/__tests__/providers.test.js +67 -0
  57. package/dist/routes/__tests__/providers.test.js.map +1 -1
  58. package/dist/routes/__tests__/task-handoff.test.d.ts +2 -0
  59. package/dist/routes/__tests__/task-handoff.test.d.ts.map +1 -0
  60. package/dist/routes/__tests__/task-handoff.test.js +185 -0
  61. package/dist/routes/__tests__/task-handoff.test.js.map +1 -0
  62. package/dist/routes/__tests__/tasks.test.js +46 -0
  63. package/dist/routes/__tests__/tasks.test.js.map +1 -1
  64. package/dist/routes/providers.d.ts.map +1 -1
  65. package/dist/routes/providers.js +8 -0
  66. package/dist/routes/providers.js.map +1 -1
  67. package/dist/routes/tasks.d.ts.map +1 -1
  68. package/dist/routes/tasks.js +60 -2
  69. package/dist/routes/tasks.js.map +1 -1
  70. package/dist/runtime/acp/history-reconciler.js +1 -1
  71. package/dist/runtime/acp/history-reconciler.js.map +1 -1
  72. package/dist/services/__tests__/session-manager.lifecycle.test.js +171 -1
  73. package/dist/services/__tests__/session-manager.lifecycle.test.js.map +1 -1
  74. package/dist/services/__tests__/task.service.test.js +142 -76
  75. package/dist/services/__tests__/task.service.test.js.map +1 -1
  76. package/dist/services/__tests__/translation-protection.test.js +48 -18
  77. package/dist/services/__tests__/translation-protection.test.js.map +1 -1
  78. package/dist/services/__tests__/translation-session-blocks.test.js +66 -2
  79. package/dist/services/__tests__/translation-session-blocks.test.js.map +1 -1
  80. package/dist/services/__tests__/workspace-background-service.service.test.js +74 -26
  81. package/dist/services/__tests__/workspace-background-service.service.test.js.map +1 -1
  82. package/dist/services/__tests__/workspace.service.test.js +70 -0
  83. package/dist/services/__tests__/workspace.service.test.js.map +1 -1
  84. package/dist/services/message-delivery.service.d.ts +4 -1
  85. package/dist/services/message-delivery.service.d.ts.map +1 -1
  86. package/dist/services/project.service.d.ts +3 -0
  87. package/dist/services/project.service.d.ts.map +1 -1
  88. package/dist/services/provider-config.service.d.ts.map +1 -1
  89. package/dist/services/provider-config.service.js +1 -0
  90. package/dist/services/provider-config.service.js.map +1 -1
  91. package/dist/services/session-manager.d.ts +15 -5
  92. package/dist/services/session-manager.d.ts.map +1 -1
  93. package/dist/services/session-manager.js +19 -3
  94. package/dist/services/session-manager.js.map +1 -1
  95. package/dist/services/task-cleanup.service.d.ts +2 -0
  96. package/dist/services/task-cleanup.service.d.ts.map +1 -1
  97. package/dist/services/task-cleanup.service.js +2 -2
  98. package/dist/services/task-cleanup.service.js.map +1 -1
  99. package/dist/services/task-handoff.service.d.ts +18 -0
  100. package/dist/services/task-handoff.service.d.ts.map +1 -0
  101. package/dist/services/task-handoff.service.js +87 -0
  102. package/dist/services/task-handoff.service.js.map +1 -0
  103. package/dist/services/task.service.d.ts +45 -18
  104. package/dist/services/task.service.d.ts.map +1 -1
  105. package/dist/services/task.service.js +215 -160
  106. package/dist/services/task.service.js.map +1 -1
  107. package/dist/services/team-run.service.d.ts +3 -0
  108. package/dist/services/team-run.service.d.ts.map +1 -1
  109. package/dist/services/team-task-input.service.d.ts +3 -0
  110. package/dist/services/team-task-input.service.d.ts.map +1 -1
  111. package/dist/services/translation-protection.d.ts +3 -1
  112. package/dist/services/translation-protection.d.ts.map +1 -1
  113. package/dist/services/translation-protection.js +21 -67
  114. package/dist/services/translation-protection.js.map +1 -1
  115. package/dist/services/translation-settings.service.d.ts +4 -4
  116. package/dist/services/translation.service.d.ts.map +1 -1
  117. package/dist/services/translation.service.js +44 -20
  118. package/dist/services/translation.service.js.map +1 -1
  119. package/dist/services/workspace-background-service.service.d.ts +1 -3
  120. package/dist/services/workspace-background-service.service.d.ts.map +1 -1
  121. package/dist/services/workspace-background-service.service.js +17 -65
  122. package/dist/services/workspace-background-service.service.js.map +1 -1
  123. package/dist/services/workspace.service.d.ts +21 -6
  124. package/dist/services/workspace.service.d.ts.map +1 -1
  125. package/dist/services/workspace.service.js +56 -11
  126. package/dist/services/workspace.service.js.map +1 -1
  127. package/dist/web/assets/AgentDemoPage-JXetlNBf.js +1 -0
  128. package/dist/web/assets/{AgentEnvironmentSettingsPage-GHjKIWpb.js → AgentEnvironmentSettingsPage-CdYyUCwJ.js} +1 -1
  129. package/dist/web/assets/AttachmentPreview-DMS-PM-1.js +2 -0
  130. package/dist/web/assets/BranchSelect-BAq4L2ZS.js +1 -0
  131. package/dist/web/assets/BrandLogo--kWXXJtZ.js +1 -0
  132. package/dist/web/assets/ConversationPage-CvC4RyB5.js +1 -0
  133. package/dist/web/assets/CreateTaskInput-DjVxCAfc.js +1 -0
  134. package/dist/web/assets/{DemoPage-DK-ikg1_.js → DemoPage-cDVTGOp8.js} +3 -3
  135. package/dist/web/assets/DesignSystemPage-BI54IkKi.js +12 -0
  136. package/dist/web/assets/{ExecutionPermissionSelector-B8befbxJ.js → ExecutionPermissionSelector-f1UYIm1z.js} +1 -1
  137. package/dist/web/assets/GeneralSettingsPage-C0yto6C_.js +1 -0
  138. package/dist/web/assets/{LoadingPreviewPage-BDlf89rJ.js → LoadingPreviewPage-BiJSaHUi.js} +1 -1
  139. package/dist/web/assets/McpSettingsPage-BbHwZtyj.js +1 -0
  140. package/dist/web/assets/{MemberAvatar-YVr_erAr.js → MemberAvatar-BLezO3vS.js} +1 -1
  141. package/dist/web/assets/MobileTaskDetail-M_Kke9rL.js +3 -0
  142. package/dist/web/assets/NotificationSettingsPage-CiKoL2Kv.js +1 -0
  143. package/dist/web/assets/{ProfileSettingsPage-CHe4LlRp.js → ProfileSettingsPage-DCB48cPS.js} +2 -2
  144. package/dist/web/assets/ProjectKanbanPage-soDqevjQ.js +12 -0
  145. package/dist/web/assets/ProjectSettingsPage-COvIVq1h.js +2 -0
  146. package/dist/web/assets/ProviderSettingsPage-CPuJcZDg.js +67 -0
  147. package/dist/web/assets/{SettingsMasterDetail-DjWR9Sqk.js → SettingsMasterDetail-Cv7YaRJB.js} +1 -1
  148. package/dist/web/assets/TaskDetail-CqhPxvg3.js +1 -0
  149. package/dist/web/assets/TaskHandoffPanel-CxH3Mgyd.js +70 -0
  150. package/dist/web/assets/TeamSettingsPage-D-XDefNd.js +1 -0
  151. package/dist/web/assets/{TranslationSettingsPage-Cod9c4Ug.js → TranslationSettingsPage-BPHI-SZW.js} +1 -1
  152. package/dist/web/assets/{arc-DEy33vTc.js → arc-CC81aLuf.js} +1 -1
  153. package/dist/web/assets/{architectureDiagram-3BPJPVTR-Ky1D1LBk.js → architectureDiagram-3BPJPVTR-DL08XGaN.js} +1 -1
  154. package/dist/web/assets/{at-sign-C48_y345.js → at-sign-DYPIlD6D.js} +1 -1
  155. package/dist/web/assets/{blockDiagram-GPEHLZMM-BNgB7kNT.js → blockDiagram-GPEHLZMM-B4IW5WxI.js} +1 -1
  156. package/dist/web/assets/{c4Diagram-AAUBKEIU-4GMrPMgQ.js → c4Diagram-AAUBKEIU-Cj4d_FqK.js} +1 -1
  157. package/dist/web/assets/channel-CUa8oyzC.js +1 -0
  158. package/dist/web/assets/check-DaZqOL8l.js +1 -0
  159. package/dist/web/assets/{chevron-down-3y5Aiolp.js → chevron-down-DNhYsNAt.js} +1 -1
  160. package/dist/web/assets/{chevron-up-DqaYcjpq.js → chevron-up-CjrLieBR.js} +1 -1
  161. package/dist/web/assets/chip-Cf92J-pQ.js +1 -0
  162. package/dist/web/assets/{chunk-2J33WTMH-C439hRe_.js → chunk-2J33WTMH-DeCj8QSD.js} +1 -1
  163. package/dist/web/assets/{chunk-4BX2VUAB-D8GK3M3t.js → chunk-4BX2VUAB-k-6rzQmQ.js} +1 -1
  164. package/dist/web/assets/{chunk-55IACEB6-Dl4UhJ8X.js → chunk-55IACEB6-qMTCQ5bX.js} +1 -1
  165. package/dist/web/assets/{chunk-727SXJPM-BSEeayBq.js → chunk-727SXJPM-CMnu18d1.js} +1 -1
  166. package/dist/web/assets/{chunk-AQP2D5EJ-B6chbZfT.js → chunk-AQP2D5EJ-C0mFbUMn.js} +1 -1
  167. package/dist/web/assets/{chunk-FMBD7UC4-DaLkiLdQ.js → chunk-FMBD7UC4-u6-_M137.js} +1 -1
  168. package/dist/web/assets/{chunk-ND2GUHAM-DeQwZAAT.js → chunk-ND2GUHAM-DHrIE_8H.js} +1 -1
  169. package/dist/web/assets/{chunk-QZHKN3VN-CLRr4YRM.js → chunk-QZHKN3VN-aTyC0wZq.js} +1 -1
  170. package/dist/web/assets/classDiagram-4FO5ZUOK-BAx111NO.js +1 -0
  171. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BAx111NO.js +1 -0
  172. package/dist/web/assets/{code-block-OCS4YCEC-CnoxUpOx.js → code-block-OCS4YCEC-CBIOQOMH.js} +1 -1
  173. package/dist/web/assets/confirm-dialog-DWeBZLJW.js +1 -0
  174. package/dist/web/assets/content-JM9E1MeD.js +2 -0
  175. package/dist/web/assets/{copy-HRMhTkIG.js → copy-D0gl9kF8.js} +1 -1
  176. package/dist/web/assets/{cose-bilkent-S5V4N54A-C1UiYzfk.js → cose-bilkent-S5V4N54A-xLyliSgU.js} +1 -1
  177. package/dist/web/assets/cssMode-DO5UnQ64.js +1 -0
  178. package/dist/web/assets/{dagre-BM42HDAG-CTJpBgye.js → dagre-BM42HDAG-CbNpoO2d.js} +1 -1
  179. package/dist/web/assets/{diagram-2AECGRRQ-Dj1_TEYp.js → diagram-2AECGRRQ-CG3hKxAX.js} +1 -1
  180. package/dist/web/assets/{diagram-5GNKFQAL-V-KUpwqh.js → diagram-5GNKFQAL-mQu9M28s.js} +1 -1
  181. package/dist/web/assets/{diagram-KO2AKTUF-CXG1ZIeX.js → diagram-KO2AKTUF-BSeEp_Uw.js} +1 -1
  182. package/dist/web/assets/{diagram-LMA3HP47-BZSJUwk9.js → diagram-LMA3HP47-D6yRdao-.js} +1 -1
  183. package/dist/web/assets/{diagram-OG6HWLK6-CCr4gq4u.js → diagram-OG6HWLK6-BUBUW9wD.js} +1 -1
  184. package/dist/web/assets/dialog-D1lkhqVL.js +5 -0
  185. package/dist/web/assets/{erDiagram-TEJ5UH35-Djtyzh6z.js → erDiagram-TEJ5UH35-BQSZgRqq.js} +1 -1
  186. package/dist/web/assets/file-BijjwxRR.js +1 -0
  187. package/dist/web/assets/{flowDiagram-I6XJVG4X-BmSVSiXJ.js → flowDiagram-I6XJVG4X-D-eqyr5Y.js} +1 -1
  188. package/dist/web/assets/folder-picker-Czxm0_S9.js +1 -0
  189. package/dist/web/assets/{freemarker2-DdptX5f1.js → freemarker2-B4RvEa_U.js} +2 -2
  190. package/dist/web/assets/{ganttDiagram-6RSMTGT7-r5vQX-b5.js → ganttDiagram-6RSMTGT7-BWGkCt_x.js} +1 -1
  191. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-Zj9aloh9.js → gitGraphDiagram-PVQCEYII-DGVc49pR.js} +1 -1
  192. package/dist/web/assets/{globe-B9I-jHBB.js → globe-Ce01-45x.js} +1 -1
  193. package/dist/web/assets/handlebars-oyT7drqS.js +1 -0
  194. package/dist/web/assets/html-CxxWf2Qk.js +1 -0
  195. package/dist/web/assets/htmlMode-RfAHh5Jj.js +1 -0
  196. package/dist/web/assets/index-BMZFF1UJ.js +1 -0
  197. package/dist/web/assets/index-BN53vGxp.css +1 -0
  198. package/dist/web/assets/index-Cc3qXMhU.js +122 -0
  199. package/dist/web/assets/{index-Bhvt-E6d.js → index-DWrSDMX2.js} +2 -2
  200. package/dist/web/assets/{index-DkRy6eNX.js → index-Dh-tgeaL.js} +4 -4
  201. package/dist/web/assets/{index-B1oVmCie.js → index-Disv1kQS.js} +1 -1
  202. package/dist/web/assets/{index-DcOU2m2F.js → index-DyJfPc4O.js} +1 -1
  203. package/dist/web/assets/{index-Dk3bRQAK.js → index-Pt4TsHjm.js} +1 -1
  204. package/dist/web/assets/{index-CThFsQNP.js → index-T38iVLEb.js} +1 -1
  205. package/dist/web/assets/{index-BtUQYU5l.js → index-hpHE1jXY.js} +1 -1
  206. package/dist/web/assets/{infoDiagram-5YYISTIA-BHtVaxZx.js → infoDiagram-5YYISTIA-DLPs3dV_.js} +1 -1
  207. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BYmwjkbC.js → ishikawaDiagram-YF4QCWOH-d_OrnwDY.js} +1 -1
  208. package/dist/web/assets/javascript-BNXtViSL.js +1 -0
  209. package/dist/web/assets/{journeyDiagram-JHISSGLW-c8BBqqRS.js → journeyDiagram-JHISSGLW-EtU1st_0.js} +1 -1
  210. package/dist/web/assets/jsonMode-Bqh5vIxx.js +7 -0
  211. package/dist/web/assets/{kanban-definition-UN3LZRKU-D4Vr-oFT.js → kanban-definition-UN3LZRKU-ZWzUnsFK.js} +1 -1
  212. package/dist/web/assets/{kbd-C88ut3t9.js → kbd-IjDGsZ2B.js} +1 -1
  213. package/dist/web/assets/{key-round-Cjbj2qNa.js → key-round-CbnAuUxp.js} +1 -1
  214. package/dist/web/assets/{layers-eaHAVcc3.js → layers-Pdy9vZ6K.js} +1 -1
  215. package/dist/web/assets/{linear-opi90s0L.js → linear-D7n23wcA.js} +1 -1
  216. package/dist/web/assets/{link-BSGb85gq.js → link-Bl1ZbjFh.js} +1 -1
  217. package/dist/web/assets/liquid-Ds47iVLN.js +1 -0
  218. package/dist/web/assets/{lspLanguageFeatures-DWu2Ubf0.js → lspLanguageFeatures-Dcch3bsp.js} +1 -1
  219. package/dist/web/assets/mdx-CM7ky-2B.js +1 -0
  220. package/dist/web/assets/{menu--sjyisSg.js → menu-DubntFHq.js} +1 -1
  221. package/dist/web/assets/{mermaid-NOHMQCX5-BSNbBj78.js → mermaid-NOHMQCX5-nBsnjgeU.js} +54 -54
  222. package/dist/web/assets/{message-square-BLEJN6p7.js → message-square-BE-pW0m_.js} +1 -1
  223. package/dist/web/assets/{mindmap-definition-RKZ34NQL-BN3ZjBh-.js → mindmap-definition-RKZ34NQL-ClHORNTt.js} +1 -1
  224. package/dist/web/assets/modal-CHLtZWvx.js +1 -0
  225. package/dist/web/assets/{monaco-BkuNyOkP.js → monaco-BbAmalE2.js} +3 -3
  226. package/dist/web/assets/nav-row-DH7rNq1V.js +1 -0
  227. package/dist/web/assets/{paperclip-CTNoXpUW.js → paperclip-YP3Bk1lI.js} +1 -1
  228. package/dist/web/assets/{pencil-Cp70ZwtG.js → pencil-BFDuhbtW.js} +1 -1
  229. package/dist/web/assets/{people-DT78SebR.js → people-DEeNaaLt.js} +1 -1
  230. package/dist/web/assets/{pieDiagram-4H26LBE5-CfmFHpPI.js → pieDiagram-4H26LBE5-BUOaKIyP.js} +1 -1
  231. package/dist/web/assets/popover-CUmBEXxL.js +1 -0
  232. package/dist/web/assets/provider-selection-DSu7SCI7.js +1 -0
  233. package/dist/web/assets/python-BODTtU6m.js +1 -0
  234. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-CeaumJAa.js → quadrantDiagram-W4KKPZXB-Caezg-U2.js} +1 -1
  235. package/dist/web/assets/razor-CHm8DY1p.js +1 -0
  236. package/dist/web/assets/{requirementDiagram-4Y6WPE33-BWWCDXCE.js → requirementDiagram-4Y6WPE33-BtdP3Ka6.js} +1 -1
  237. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-DAJut743.js → sankeyDiagram-5OEKKPKP-Bv74oA-n.js} +1 -1
  238. package/dist/web/assets/{search-DniD_AGC.js → search-ClmOQd4H.js} +1 -1
  239. package/dist/web/assets/{select-BPdJrr5M.js → select-BB7QG08o.js} +1 -1
  240. package/dist/web/assets/{select-B5RYunTs.js → select-CYtYPr-c.js} +1 -1
  241. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-CynjRGW4.js → sequenceDiagram-3UESZ5HK-DuNPl-dg.js} +1 -1
  242. package/dist/web/assets/{server-xswxWpKD.js → server-bEB_DY55.js} +1 -1
  243. package/dist/web/assets/{stateDiagram-AJRCARHV-amAtpx9w.js → stateDiagram-AJRCARHV-B72HAgBJ.js} +1 -1
  244. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Bu3l_CgB.js +1 -0
  245. package/dist/web/assets/{textarea-BVyPl9rM.js → textarea-BqYPvoO-.js} +1 -1
  246. package/dist/web/assets/{timeline-definition-PNZ67QCA-DZ9W7WlP.js → timeline-definition-PNZ67QCA-DTmHUgmQ.js} +1 -1
  247. package/dist/web/assets/{toggles-QcIz43DP.js → toggles-a5fkwT_D.js} +1 -1
  248. package/dist/web/assets/tooltip-DuyJMci9.js +1 -0
  249. package/dist/web/assets/{track-Ckye0-tt.js → track-DCjyrv3n.js} +1 -1
  250. package/dist/web/assets/{trash-2-CvUJsbtT.js → trash-2-CIyBqaVy.js} +1 -1
  251. package/dist/web/assets/tsMode-C1UXAkMh.js +11 -0
  252. package/dist/web/assets/typescript-Biht2wHb.js +1 -0
  253. package/dist/web/assets/{upload-CsXAmAun.js → upload-D05XS5-G.js} +1 -1
  254. package/dist/web/assets/use-profiles-CrWTyz1G.js +1 -0
  255. package/dist/web/assets/{use-providers-Td1-gyrN.js → use-providers-Dv1Nk6s7.js} +1 -1
  256. package/dist/web/assets/{use-translation-settings-NYM0lmBx.js → use-translation-settings-CcUnipVO.js} +1 -1
  257. package/dist/web/assets/useNormalizedLogs-D9W1cT4R.js +1 -0
  258. package/dist/web/assets/useTokenUsage-CZ5mDshD.js +1 -0
  259. package/dist/web/assets/{vennDiagram-CIIHVFJN-CB2Ubvy9.js → vennDiagram-CIIHVFJN-ByoNydXe.js} +1 -1
  260. package/dist/web/assets/{wardley-L42UT6IY-BXOkk77I.js → wardley-L42UT6IY-BqdMkOLl.js} +1 -1
  261. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-VA6ywdQQ.js → wardleyDiagram-YWT4CUSO-AO22HrEF.js} +1 -1
  262. package/dist/web/assets/xml-NLGqNFDv.js +1 -0
  263. package/dist/web/assets/{xychartDiagram-2RQKCTM6-FNcvDj5G.js → xychartDiagram-2RQKCTM6-vzPgjgqW.js} +1 -1
  264. package/dist/web/assets/yaml-AWlGS_Ig.js +1 -0
  265. package/dist/web/index.html +2 -2
  266. package/node_modules/@agent-tower/shared/dist/index.d.ts +1 -0
  267. package/node_modules/@agent-tower/shared/dist/index.d.ts.map +1 -1
  268. package/node_modules/@agent-tower/shared/dist/index.js +1 -0
  269. package/node_modules/@agent-tower/shared/dist/index.js.map +1 -1
  270. package/node_modules/@agent-tower/shared/dist/task-handoff.d.ts +12 -0
  271. package/node_modules/@agent-tower/shared/dist/task-handoff.d.ts.map +1 -0
  272. package/node_modules/@agent-tower/shared/dist/task-handoff.js +2 -0
  273. package/node_modules/@agent-tower/shared/dist/task-handoff.js.map +1 -0
  274. package/node_modules/@agent-tower/shared/dist/translation.d.ts +12 -0
  275. package/node_modules/@agent-tower/shared/dist/translation.d.ts.map +1 -1
  276. package/node_modules/@agent-tower/shared/dist/translation.js +19 -0
  277. package/node_modules/@agent-tower/shared/dist/translation.js.map +1 -1
  278. package/node_modules/@agent-tower/shared/dist/types.d.ts +28 -1
  279. package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
  280. package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
  281. package/package.json +1 -1
  282. package/prisma/migrations/20261023000000_add_task_base_branch/migration.sql +2 -0
  283. package/prisma/migrations/20261023010000_add_subtasks/migration.sql +2 -0
  284. package/prisma/migrations/20261026000000_add_task_handoff/migration.sql +1 -0
  285. package/prisma/schema.prisma +6 -0
  286. package/dist/web/assets/AgentDemoPage-BfXkNCdN.js +0 -1
  287. package/dist/web/assets/AttachmentPreview-CLN1lnLe.js +0 -2
  288. package/dist/web/assets/BranchSelect-Cofp8vYf.js +0 -1
  289. package/dist/web/assets/BrandLogo-BUimEX-9.js +0 -1
  290. package/dist/web/assets/ConversationPage-R7vNaOQv.js +0 -1
  291. package/dist/web/assets/CreateTaskInput-CasITF8y.js +0 -1
  292. package/dist/web/assets/DesignSystemPage-BhjNs2vP.js +0 -12
  293. package/dist/web/assets/EditableTaskTitle-BJ9Rxggf.js +0 -70
  294. package/dist/web/assets/GeneralSettingsPage-RMN2al8I.js +0 -1
  295. package/dist/web/assets/McpSettingsPage-CPNxFF67.js +0 -1
  296. package/dist/web/assets/MobileTaskDetail-QNUHMq7u.js +0 -3
  297. package/dist/web/assets/NotificationSettingsPage-BEyuyu3Z.js +0 -1
  298. package/dist/web/assets/ProjectKanbanPage-Bt_01giW.js +0 -12
  299. package/dist/web/assets/ProjectSettingsPage-cus6Ns97.js +0 -2
  300. package/dist/web/assets/ProviderSettingsPage-DqA_B1Ey.js +0 -67
  301. package/dist/web/assets/TaskDetail-rEXNe2h3.js +0 -1
  302. package/dist/web/assets/TeamSettingsPage-DwWROtW6.js +0 -1
  303. package/dist/web/assets/channel-DTP-syjA.js +0 -1
  304. package/dist/web/assets/check-BmiJ7qMY.js +0 -1
  305. package/dist/web/assets/classDiagram-4FO5ZUOK-CUKgurLa.js +0 -1
  306. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CUKgurLa.js +0 -1
  307. package/dist/web/assets/confirm-dialog-ltNBFYCs.js +0 -1
  308. package/dist/web/assets/content-DPQMfMae.js +0 -2
  309. package/dist/web/assets/cssMode-DkuSsGeg.js +0 -1
  310. package/dist/web/assets/dialog-CuFEdqLg.js +0 -5
  311. package/dist/web/assets/handlebars-B34f-LAf.js +0 -1
  312. package/dist/web/assets/hooks-BLxb16IA.js +0 -1
  313. package/dist/web/assets/html-CnvOQ63o.js +0 -1
  314. package/dist/web/assets/htmlMode-RdxZ8Svp.js +0 -1
  315. package/dist/web/assets/icon-button-CYiKa-7C.js +0 -1
  316. package/dist/web/assets/index-0XPZayUU.css +0 -1
  317. package/dist/web/assets/index-BJObbxud.js +0 -122
  318. package/dist/web/assets/index-DZLnTISJ.js +0 -1
  319. package/dist/web/assets/javascript-BhombDEO.js +0 -1
  320. package/dist/web/assets/jsonMode-BJGOUeaV.js +0 -7
  321. package/dist/web/assets/liquid-Czy1WpPz.js +0 -1
  322. package/dist/web/assets/mdx-DhXfoSnM.js +0 -1
  323. package/dist/web/assets/modal-CSGOqphK.js +0 -1
  324. package/dist/web/assets/popover-BiVxGGgp.js +0 -1
  325. package/dist/web/assets/python-DIcQDjcf.js +0 -1
  326. package/dist/web/assets/razor-DYK6Rxer.js +0 -1
  327. package/dist/web/assets/search-field-CQLDXLeA.js +0 -1
  328. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-V-lSceg1.js +0 -1
  329. package/dist/web/assets/tooltip-CPqGK_WZ.js +0 -1
  330. package/dist/web/assets/tsMode-c5x0d47n.js +0 -11
  331. package/dist/web/assets/typescript-i7eYblLt.js +0 -1
  332. package/dist/web/assets/use-profiles-DuXaBRju.js +0 -1
  333. package/dist/web/assets/use-projects-Ddz0knyr.js +0 -1
  334. package/dist/web/assets/use-workspaces-CdJZLmGh.js +0 -1
  335. package/dist/web/assets/useNormalizedLogs--RbVywYa.js +0 -1
  336. package/dist/web/assets/useTokenUsage-DDXf7E4p.js +0 -1
  337. package/dist/web/assets/xml-D2EGActB.js +0 -1
  338. package/dist/web/assets/yaml-jeiIZSL4.js +0 -1
  339. /package/dist/web/assets/{EditableTaskTitle-DcpNTP1B.css → TaskHandoffPanel-DcpNTP1B.css} +0 -0
@@ -0,0 +1 @@
1
+ import{a as it,s as It,u as Rt,A as Ot}from"./AttachmentPreview-DMS-PM-1.js";import{c as J,o as xe,n as Ee,aL as ct,q as F,t as At,aC as Lt,p as ge,m as dt,r as l,af as Pt,ag as ce,ap as Ve,l as R,j as e,u as de,by as $e,bq as lt,aN as _t,O as Dt,Q as zt,a3 as Se,N as Ye,X as Ft,aF as $t,b4 as Ne,a5 as pe,bz as Bt,_ as Xe,as as H,aV as Ze,bo as Me,ax as Gt}from"./index-Cc3qXMhU.js";import{f as qt,B as Wt,l as Kt}from"./BranchSelect-BAq4L2ZS.js";import{M as Je}from"./MemberAvatar-BLezO3vS.js";import{t as et,T as mt}from"./tooltip-DuyJMci9.js";import{a as ut,E as Ut}from"./BrandLogo--kWXXJtZ.js";import{u as Ht}from"./use-providers-Dv1Nk6s7.js";import{C as Be}from"./check-DaZqOL8l.js";import{P as Qt}from"./trash-2-CIyBqaVy.js";import{C as Ge}from"./chevron-down-DNhYsNAt.js";import{P as ht,a as ft,b as pt,F as Vt}from"./popover-CUmBEXxL.js";import{l as tt}from"./ExecutionPermissionSelector-f1UYIm1z.js";import{M as Yt}from"./index-hpHE1jXY.js";import{P as Xt}from"./paperclip-YP3Bk1lI.js";const Zt=[["path",{d:"m7 6 5 5 5-5",key:"1lc07p"}],["path",{d:"m7 13 5 5 5-5",key:"1d48rs"}]],Jt=J("chevrons-down",Zt);const en=[["path",{d:"m17 11-5-5-5 5",key:"e8nh98"}],["path",{d:"m17 18-5-5-5 5",key:"2avn1x"}]],tn=J("chevrons-up",en);const nn=[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]],sn=J("shield-off",nn);const on=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}],["path",{d:"M12 17h.01",key:"p32p05"}]],an=J("shield-question-mark",on);const rn=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],cn=J("shield",rn);const dn=[["path",{d:"M2 20h.01",key:"4haj6o"}],["path",{d:"M7 20v-4",key:"j294jx"}],["path",{d:"M12 20v-8",key:"i3yub9"}],["path",{d:"M17 20V8",key:"1tkaf5"}]],ln=J("signal-high",dn);const mn=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],un=J("user-round",mn);const hn=[["path",{d:"M18 21a8 8 0 0 0-16 0",key:"3ypg7q"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3",key:"10s06x"}]],fn=J("users-round",hn);const pn=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],xn=J("zap",pn);function gn(t){const n=xe(),s=dt({queryKey:F.sessions.runtime(t),queryFn:()=>ge.get(`/sessions/${t}/runtime`),enabled:!!t});return l.useEffect(()=>{if(!t)return;const o=Pt.connect(),c=a=>{a.sessionId===t&&n.invalidateQueries({queryKey:F.sessions.runtime(t)})},r=a=>{a.sessionId===t&&n.setQueryData(F.sessions.runtime(t),a.state)},i=()=>{n.invalidateQueries({queryKey:F.sessions.runtime(t)})};return o.on(ce.SESSION_PERMISSION_REQUESTED,c),o.on(ce.SESSION_PERMISSION_INVALIDATED,c),o.on(ce.SESSION_RUNTIME_STATE_CHANGED,r),o.on("connect",i),()=>{o.off(ce.SESSION_PERMISSION_REQUESTED,c),o.off(ce.SESSION_PERMISSION_INVALIDATED,c),o.off(ce.SESSION_RUNTIME_STATE_CHANGED,r),o.off("connect",i)}},[t,n]),s}function vn(t){return t==="RUNNING"||t==="AWAITING_PERMISSION"||t==="CANCELLING"}function bn(t){return t===Ve.RUNNING||t===Ve.PENDING}function xs(t,n){const{data:s}=gn(t);return{runtimeState:s,isActive:bn(n)||vn(s?.turnState),isCancelling:s?.turnState==="CANCELLING"}}function gs(){const t=xe();return Ee({mutationFn:({sessionId:n,requestId:s,optionId:o})=>ge.post(`/sessions/${n}/permissions/${s}/resolve`,{optionId:o}),onSettled:(n,s,o)=>{t.invalidateQueries({queryKey:F.sessions.runtime(o.sessionId)})}})}function vs(){const t=xe();return Ee({mutationFn:n=>it(`start:${n}`,{},s=>ge.post(`/sessions/${n}/start`,s)),onSuccess:(n,s)=>{"operationId"in n&&ct(t,n.delivery),t.invalidateQueries({queryKey:F.sessions.detail(s)}),t.invalidateQueries({queryKey:F.tasks.all})}})}const yn=45e3;function bs(){const t=xe();return Ee({mutationFn:async n=>{try{return await ge.post(`/sessions/${n}/stop`,void 0,{signal:AbortSignal.timeout(yn)})}catch(s){throw s instanceof DOMException&&s.name==="TimeoutError"?new Error("Stop request timed out before the server answered. The session may still be stopping; refresh the status and retry."):s}},onError:n=>{At.error(Lt("Failed to stop session. Refreshing status; check it and try again."),{description:n instanceof Error?n.message:void 0})},onSettled:(n,s,o)=>{t.setQueryData(F.sessions.runtime(o),c=>c?.turnState==="CANCELLING"?{...c,turnState:"IDLE"}:c),Promise.allSettled([t.invalidateQueries({queryKey:F.sessions.detail(o)}),t.invalidateQueries({queryKey:F.sessions.runtime(o)}),t.invalidateQueries({queryKey:F.workspaces.all}),t.invalidateQueries({queryKey:F.tasks.all})])}})}function ys(){const t=xe();return Ee({mutationFn:({id:n,...s})=>it(`message:${n}`,s,o=>It(t,n,`/sessions/${n}/message`,o)),onSuccess:n=>{"operationId"in n&&ct(t,n.delivery),t.invalidateQueries({queryKey:F.workspaces.all}),t.invalidateQueries({queryKey:F.tasks.all})}})}const Cn="flex w-full min-w-0 items-center gap-2.5 rounded-md px-2 text-sm pointer-coarse:text-[15px] text-left transition-[background-color,box-shadow,color] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",jn="h-8 pointer-coarse:h-10";function Cs(t){return R(Cn,jn,t?"bg-background text-foreground shadow-xs ring-1 ring-border/80":"text-foreground/80 hover:bg-accent hover:text-foreground active:bg-foreground/[0.06]")}function _e({iconName:t,className:n}){switch(t){case"chevrons-up":return e.jsx(tn,{className:n,"aria-hidden":"true"});case"signal-high":return e.jsx(ln,{className:n,"aria-hidden":"true"});case"chevrons-down":return e.jsx(Jt,{className:n,"aria-hidden":"true"});default:return e.jsx(Yt,{className:n,"aria-hidden":"true"})}}function js({priority:t,className:n}){const s=$e(t);return e.jsx("span",{className:R("inline-flex shrink-0 items-center rounded px-1.5 py-0.5 text-[10px] font-semibold leading-none",s.className,n),title:`${s.code} · ${s.label}`,children:s.code})}function Ns({value:t,onChange:n,disabled:s=!1,compact:o=!1}){const{t:c}=de(),[r,i]=l.useState(!1),a=l.useRef(null),d=$e(t);return l.useEffect(()=>{if(!r)return;const u=j=>{a.current&&!a.current.contains(j.target)&&i(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[r]),e.jsxs("div",{className:"relative",ref:a,children:[e.jsxs("button",{type:"button",disabled:s||!n,onClick:()=>i(u=>!u),"aria-haspopup":"listbox","aria-expanded":r,"aria-label":c("Task priority"),className:R("inline-flex items-center gap-1.5 rounded-md text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 disabled:cursor-not-allowed disabled:opacity-50",o?"px-1.5 py-1":"px-2 py-1.5",d.className),children:[e.jsx(_e,{iconName:d.iconName,className:"size-3.5"}),e.jsx("span",{children:c(d.label)}),n?e.jsx(Ge,{className:R("size-3 transition-transform",r&&"rotate-180"),"aria-hidden":"true"}):null]}),r&&e.jsx("div",{className:"absolute right-0 top-full z-50 mt-1.5 w-36 rounded-lg border border-border bg-popover p-1 shadow-popover",role:"listbox","aria-label":c("Task priority"),children:lt.map(u=>{const j=u.value===d.value;return e.jsxs("button",{type:"button",role:"option","aria-selected":j,onClick:()=>{n?.(u.value),i(!1)},className:"flex w-full items-center gap-2 rounded-md px-2 py-2 text-left text-xs text-foreground/80 transition-colors hover:bg-accent",children:[e.jsx("span",{className:R("inline-flex size-5 items-center justify-center rounded",u.className),children:e.jsx(_e,{iconName:u.iconName,className:"size-3.5"})}),e.jsxs("span",{className:"flex-1",children:[u.code," · ",c(u.label)]}),j?e.jsx(Be,{className:"size-3.5 text-foreground","aria-hidden":"true"}):null]},u.value)})})]})}const De=60,ze=60*De,Pe=24*ze,nt=new Map;function Nn(t){let n=nt.get(t);return n||(n={monthDay:new Intl.DateTimeFormat(t,{month:"numeric",day:"numeric"}),yearMonth:new Intl.DateTimeFormat(t,{year:"numeric",month:"numeric"})},nt.set(t,n)),n}function ws(t,n,s){const o=new Date(t);if(!Number.isFinite(o.getTime()))return"—";const c=new Date,r=Math.max(0,Math.floor((c.getTime()-o.getTime())/1e3));if(r<De)return n("now");if(r<ze)return n("{count}m",{count:Math.floor(r/De)});if(r<Pe)return n("{count}h",{count:Math.floor(r/ze)});if(r<7*Pe)return n("{count}d",{count:Math.floor(r/Pe)});const i=Nn(s);return(o.getFullYear()===c.getFullYear()?i.monthDay:i.yearMonth).format(o)}let wn;function kn(t,n,s){const o=t.replace(/\s+/g," ").trim();if(s(o)<=n)return o;if(s("…")>n)return"";const c=typeof Intl.Segmenter>"u"?Array.from(o):Array.from((wn??=new Intl.Segmenter(void 0,{granularity:"grapheme"})).segment(o),a=>a.segment);let r=0,i=c.length;for(;r<i;){const a=Math.ceil((r+i)/2);s(`${c.slice(0,a).join("")}…`)<=n?r=a:i=a-1}return`${c.slice(0,r).join("")}…`}const fe=new Map,ke=new Set;let re;function st(){for(const t of ke)fe.get(t)?.(document.visibilityState!=="hidden")}function Sn(t,n){if(typeof IntersectionObserver>"u")return()=>{};if(!re){const s=new IntersectionObserver(o=>{if(re===s)for(const c of o){const r=fe.get(c.target);if(!r)continue;const i=c.isIntersecting&&c.intersectionRatio>0;i?ke.add(c.target):ke.delete(c.target),r(i&&document.visibilityState!=="hidden")}});re=s,document.addEventListener("visibilitychange",st)}return fe.set(t,n),re.observe(t),()=>{fe.delete(t),ke.delete(t),re?.unobserve(t),fe.size===0&&(re?.disconnect(),re=void 0,document.removeEventListener("visibilitychange",st))}}const Fe=4200,ot=Fe*.4,Mn=1e3/30;function En(t){try{return t?.getContext("2d")??null}catch{return null}}function Tn({hostRef:t,text:n,variant:s,animate:o}){const c=l.useRef(null);return l.useLayoutEffect(()=>{const r=t.current,i=c.current,a=En(i);if(!r||!i||!a)return;const d=r.closest(".task-row"),u=matchMedia("(prefers-reduced-motion: reduce)"),j=matchMedia("(hover: hover)");let g=0,y,k=0,h=0,f=0,x=0,N=0,S=0,b="",z="",_="",O=!1;function A(){cancelAnimationFrame(g),clearTimeout(y),g=0,y=void 0}function L(w){if(!(!a||!r)){if(a.clearRect(0,0,f,x),a.globalCompositeOperation="source-over",s==="project"){const M=a.createLinearGradient(S*.6,0,S*2.6,0);M.addColorStop(0,b),M.addColorStop(1,z),a.fillStyle=M}else a.fillStyle=b;if(a.fillText(_,0,N),s==="running"&&w<1){const M=(-1.5+1.5*w)*f,P=a.createLinearGradient(M,0,M+f*2.5,0),D=q=>`rgba(0, 0, 0, ${q})`;P.addColorStop(0,D(1)),P.addColorStop(.4,D(1)),P.addColorStop(.5,D(.4)),P.addColorStop(.6,D(1)),P.addColorStop(1,D(1)),a.globalCompositeOperation="destination-in",a.fillStyle=P,a.fillRect(0,0,f,x),a.globalCompositeOperation="source-over"}r.dataset.gradientReady="true"}}function I(w){if(O)return;const M=(w-k)%Fe;w-h>=Mn&&(L(Math.min(M/ot,1)),h=w),M>=ot?(L(1),y=setTimeout(()=>{g=requestAnimationFrame(I)},Fe-M)):g=requestAnimationFrame(I)}function C(){if(A(),!r||!i||!a||O||(delete r.dataset.gradientReady,f=r.clientWidth,x=r.clientHeight,!f||!x))return;const w=getComputedStyle(r),M=Math.min(window.devicePixelRatio||1,3);i.width=Math.ceil(f*M),i.height=Math.ceil(x*M),a.setTransform(M,0,0,M,0,0),a.font=`${w.fontStyle} ${w.fontWeight} ${w.fontSize} ${w.fontFamily}`,a.textBaseline="alphabetic",S=Number.parseFloat(w.fontSize);const P=a.measureText("Mg"),D=P.fontBoundingBoxAscent??S*.8,q=P.fontBoundingBoxDescent??S*.2;N=(x-D-q)/2+D,b=w.color,z=w.getPropertyValue("--muted-foreground").trim()||b,_=kn(n,f,v=>a.measureText(v).width);try{L(1)}catch{return}const m=u.matches||d?.matches(":focus-visible")||j.matches&&d?.matches(":hover");s==="running"&&o&&!m&&(k=performance.now(),h=0,g=requestAnimationFrame(I))}const Q=typeof ResizeObserver>"u"?void 0:new ResizeObserver(C);Q?.observe(r);const G=new MutationObserver(C);G.observe(document.documentElement,{attributes:!0,attributeFilter:["class","style"]}),G.observe(r,{attributes:!0,attributeFilter:["class","style"]});const $=()=>{A(),delete r.dataset.gradientReady};i.addEventListener("contextlost",$),i.addEventListener("contextrestored",C),u.addEventListener("change",C),j.addEventListener("change",C);for(const w of["pointerenter","pointerleave","focus","blur"])d?.addEventListener(w,C);return window.addEventListener("resize",C),document.fonts?.addEventListener("loadingdone",C),C(),()=>{O=!0,A(),Q?.disconnect(),G.disconnect(),u.removeEventListener("change",C),j.removeEventListener("change",C);for(const w of["pointerenter","pointerleave","focus","blur"])d?.removeEventListener(w,C);window.removeEventListener("resize",C),document.fonts?.removeEventListener("loadingdone",C),i.removeEventListener("contextlost",$),i.removeEventListener("contextrestored",C),delete r.dataset.gradientReady,i.width=0,i.height=0}},[t,n,s,o]),e.jsx("canvas",{ref:c,className:"task-gradient-text__canvas","aria-hidden":"true"})}function ks({text:t,variant:n,animate:s=!0,className:o}){const c=l.useRef(null),[r,i]=l.useState(!1);return l.useEffect(()=>{if(c.current)return Sn(c.current,i)},[]),e.jsxs("span",{ref:c,className:R("task-gradient-text",o),"data-text-effect":n,children:[e.jsx("span",{className:"task-gradient-text__text",children:t}),r&&e.jsx(Tn,{hostRef:c,text:t,variant:n,animate:s})]})}function at(t,n,s,o){if(s.filter(i=>i===o).length<=1)return t;const r=s.slice(0,n+1).filter(i=>i===o).length;return`${t} #${r}`}function In(t){return Object.values(t).filter(Boolean).length}function Rn({mode:t,setMode:n,selectedTemplateId:s,setSelectedTemplateId:o,selectedMemberPresetIds:c,setSelectedMemberPresetIds:r,disabled:i=!1,compact:a=!1}){const{t:d}=de(),{preserveDesktopSearch:u}=_t(),[j,g]=l.useState(!1),{data:y}=Ht(),{data:k,isError:h,isFetching:f,isLoading:x,refetch:N}=Dt(),{data:S,isError:b,isFetching:z,isLoading:_,refetch:O}=zt(),A=l.useMemo(()=>new Map((y??[]).map(({provider:m,availability:v})=>[m.id,m.name+(v.type==="NOT_FOUND"?d(" (不可用)"):"")])),[y,d]),L=l.useMemo(()=>new Map((k??[]).map(m=>[m.id,m])),[k]),I=l.useMemo(()=>new Map((S??[]).map(m=>[m.id,m])),[S]),C=l.useMemo(()=>c.map(m=>L.get(m)).filter(m=>!!m),[L,c]);l.useEffect(()=>{k!==void 0&&r(m=>{const v=m.filter(W=>L.has(W));return v.length===m.length&&v.every((W,Y)=>W===m[Y])?m:v})},[k,L,r]),l.useEffect(()=>{S!==void 0&&o(m=>!m||I.has(m)?m:null)},[o,I,S]);const Q=m=>{i||o(v=>v===m?null:m)},G=m=>{i||r(v=>[...v,m])},$=m=>{i||r(v=>v.filter((W,Y)=>Y!==m))},w=e.jsxs("section",{className:"min-w-0",children:[e.jsx("div",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:d("团队模板")}),b?e.jsxs("div",{className:"rounded-lg bg-destructive/10 px-3 py-2.5 text-xs text-destructive-ink",children:[e.jsx("span",{children:d("团队模板加载失败")}),e.jsx("button",{type:"button",onClick:()=>{O()},disabled:i||z,className:"ml-2 underline hover:no-underline",children:d("重试")})]}):_?e.jsxs("div",{className:"flex items-center gap-2 py-3 text-xs text-muted-foreground",children:[e.jsx(Se,{size:12,className:"animate-spin motion-reduce:[animation-duration:2.4s]"}),d("加载中...")]}):(S??[]).length===0?e.jsxs("div",{className:"rounded-lg border border-dashed border-border bg-background px-3 py-3 text-xs text-muted-foreground",children:[d("当前没有团队模板"),e.jsx(Ye,{to:u("/settings/team"),className:et("ml-1.5"),children:d("去创建")})]}):e.jsx("div",{className:R("space-y-1.5",a&&"sm:grid sm:grid-cols-2 sm:gap-1.5 sm:space-y-0"),children:(S??[]).map(m=>{const v=m.id===s,W=m.members?.length??0,Y=m.members?.map(ee=>ee.memberPresetId)??[],se=m.members?.slice(0,3).map((ee,ve)=>at(ee.memberPreset?.name??ee.memberPresetId,ve,Y,ee.memberPresetId)).join(", ");return e.jsx("button",{type:"button",onClick:()=>Q(m.id),disabled:i,className:R("w-full rounded-lg px-3 py-2 text-left border transition-all disabled:cursor-not-allowed disabled:opacity-60",v?"bg-background border-foreground/20 shadow-raised":"bg-background border-border/60 hover:border-border hover:bg-accent"),children:e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:R("text-xs truncate",v?"font-medium text-foreground":"text-foreground"),children:m.name}),e.jsxs("span",{className:"text-xs text-muted-foreground shrink-0",children:[W,d("人")]})]}),se&&e.jsx("div",{className:"mt-0.5 text-xs text-muted-foreground truncate",children:se})]}),v&&e.jsx(Be,{size:13,className:"shrink-0 text-foreground"})]})},m.id)})})]}),M=C.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mb-2",children:C.map((m,v)=>{const W=at(m.name,v,c,m.id);return e.jsxs("div",{className:"inline-flex items-center gap-1 pl-1 pr-0.5 py-0.5 rounded-md border border-border/60 bg-background text-xs text-foreground",children:[e.jsx(Je,{name:m.name,avatar:m.avatar,size:"xs",className:"size-3.5"}),e.jsx("span",{className:"max-w-[80px] truncate",children:W}),e.jsx("button",{type:"button",onClick:()=>$(v),disabled:i,className:"p-0.5 text-muted-foreground hover:text-destructive disabled:opacity-30 rounded transition-colors",children:e.jsx(Ft,{size:9})})]},`${m.id}-${v}`)})}),P=h?e.jsxs("div",{className:"rounded-lg bg-destructive/10 px-3 py-2.5 text-xs text-destructive-ink",children:[e.jsx("span",{children:d("成员预设加载失败")}),e.jsx("button",{type:"button",onClick:()=>{N()},disabled:i||f,className:"ml-2 underline hover:no-underline",children:d("重试")})]}):x?e.jsxs("div",{className:"flex items-center gap-2 py-3 text-xs text-muted-foreground",children:[e.jsx(Se,{size:12,className:"animate-spin motion-reduce:[animation-duration:2.4s]"}),d("加载中...")]}):(k??[]).length===0?e.jsxs("div",{className:"rounded-lg border border-dashed border-border bg-background px-3 py-3 text-xs text-muted-foreground",children:[d("当前没有成员预设"),e.jsx(Ye,{to:u("/settings/team"),className:et("ml-1.5"),children:d("去创建")})]}):e.jsx("div",{className:"space-y-1 max-h-[180px] overflow-y-auto pr-1",children:(k??[]).map(m=>{const v=c.filter(se=>se===m.id).length,W=A.get(m.providerId)??m.providerId,Y=In(m.capabilities);return e.jsxs("button",{type:"button",onClick:()=>G(m.id),disabled:i,className:R("flex items-center gap-2 w-full px-2 py-1.5 rounded-lg text-left border border-transparent transition-all",i&&"cursor-not-allowed opacity-60","bg-background hover:bg-accent hover:border-border/60"),children:[e.jsx(Je,{name:m.name,avatar:m.avatar,className:"h-6 w-6 text-[10px] shrink-0"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-xs text-foreground truncate",children:m.name}),e.jsxs("div",{className:"text-xs text-muted-foreground truncate",children:[W," · ",Y,"/10"]})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[v>0&&e.jsxs("span",{className:"text-[11px] text-foreground font-semibold",children:["×",v]}),e.jsx(Qt,{size:12,className:"text-muted-foreground"})]})]},m.id)})}),D=C.length>0&&e.jsx("span",{className:"inline-flex items-center justify-center min-w-[16px] h-4 rounded-full bg-primary text-[11px] font-semibold text-primary-foreground px-1.5",children:C.length}),q=e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground shrink-0",children:d("执行模式")}),e.jsx(ut,{size:"sm","aria-label":d("执行模式"),value:t,onValueChange:m=>n(m),options:[{value:"AUTO",label:d("自动模式"),icon:e.jsx(xn,{}),disabled:i},{value:"CONFIRM",label:d("确认模式"),icon:e.jsx(cn,{}),disabled:i}]})]});return a?e.jsxs("div",{className:"space-y-3",children:[q,w,e.jsxs("div",{className:"border-t border-border/50 pt-2.5",children:[e.jsxs("button",{type:"button",onClick:()=>!i&&g(m=>!m),disabled:i,"aria-expanded":j,className:"flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx(Ge,{size:12,className:R("transition-transform",j?"":"-rotate-90")}),d("追加独立成员"),D]}),j&&e.jsxs("div",{className:"mt-2",children:[M,P]})]})]}):e.jsxs("div",{className:"space-y-3.5",children:[q,e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[w,e.jsxs("section",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:d("追加成员")}),D]}),M,P]})]})]})}function On({commands:t,selectedIndex:n,query:s,hasCatalog:o,title:c="Slash Commands",queryPrefix:r="/",emptyCatalogMessage:i="No slash commands catalog for this agent yet.",emptyQueryMessage:a,insertionHint:d="Enter / Tab to insert",compact:u=!1,onSelect:j}){const g=u?"px-1.5 pb-1.5":"px-2 pb-2",y=u?"px-2 py-1.5":"px-2.5 py-2",k=u?"max-h-36":"max-h-48";return e.jsxs("div",{className:u?"pt-1.5":"pt-2",children:[e.jsxs("div",{className:`mb-1 flex items-center justify-between ${u?"px-2 pt-0.5":"px-3 pt-1"}`,children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:c}),e.jsx("span",{className:"text-xs text-muted-foreground",children:d})]}),t.length===0?e.jsx("div",{className:`${u?"px-2 pb-2 pt-1.5 text-xs":"px-3 pb-3 pt-2 text-xs"} text-muted-foreground`,children:o?a??`No matches for ${r}${s}`:i}):e.jsx("div",{className:`${g} ${k} overflow-y-auto`,children:t.map((h,f)=>e.jsxs("button",{type:"button",onMouseDown:x=>x.preventDefault(),onClick:()=>j(h),className:`w-full rounded-lg border text-left transition-colors ${f===n?"border-border bg-muted/50":"border-transparent hover:border-border hover:bg-accent"} ${y}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"font-mono text-[13px] text-foreground",children:h.command}),h.kind&&h.kind!=="builtin"?e.jsx("span",{className:"rounded-full border border-border px-1.5 py-0.5 text-[10px] uppercase tracking-[0.12em] text-muted-foreground",children:h.scope?`${h.scope} ${h.kind}`:h.kind}):null]}),e.jsx("div",{className:`${u?"mt-0.5 text-xs":"mt-1 text-xs"} text-muted-foreground`,children:h.description})]},h.command))})]})}const ne=12,we=8;function An({open:t,anchorRef:n,commands:s,selectedIndex:o,query:c,hasCatalog:r,title:i,queryPrefix:a,emptyCatalogMessage:d,emptyQueryMessage:u,insertionHint:j,compact:g=!1,onSelect:y}){const k=l.useRef(null),[h,f]=l.useState(null);return l.useLayoutEffect(()=>{if(!t){f(null);return}const x=n.current;if(!x)return;let N=0;const S=()=>{const _=n.current;if(!_)return;const O=_.getBoundingClientRect(),A=window.innerWidth,L=window.innerHeight,I=g?260:320,C=g?A-ne*2:560,Q=Math.min(Math.max(O.width,I),Math.max(I,C)),G=Math.min(Math.max(ne,O.left),Math.max(ne,A-ne-Q)),$=L-O.bottom-we-ne,w=O.top-we-ne,M=k.current?.offsetHeight??(g?220:280),P=g?240:320,D=$<180&&w>$,m=Math.max(120,Math.min(P,D?w:$)),v=D?Math.max(ne,O.top-we-Math.min(M,m)):Math.min(L-ne-Math.min(M,m),O.bottom+we);f({top:v,left:G,width:Q,maxHeight:m})},b=()=>{cancelAnimationFrame(N),N=requestAnimationFrame(S)};b();const z=new ResizeObserver(b);return z.observe(x),k.current&&z.observe(k.current),window.addEventListener("resize",b),window.addEventListener("scroll",b,!0),window.visualViewport?.addEventListener("resize",b),window.visualViewport?.addEventListener("scroll",b),()=>{cancelAnimationFrame(N),z.disconnect(),window.removeEventListener("resize",b),window.removeEventListener("scroll",b,!0),window.visualViewport?.removeEventListener("resize",b),window.visualViewport?.removeEventListener("scroll",b)}},[n,s.length,g,t,c,o]),!t||!h||typeof document>"u"?null:$t.createPortal(e.jsx("div",{className:"pointer-events-none fixed inset-0 z-[120]",children:e.jsx("div",{ref:k,className:"pointer-events-auto fixed overflow-hidden rounded-xl border border-border bg-background shadow-popover ",style:{top:h.top,left:h.left,width:h.width,maxHeight:h.maxHeight},children:e.jsx(On,{commands:s,selectedIndex:o,query:c,hasCatalog:r,title:i,queryPrefix:a,emptyCatalogMessage:d,emptyQueryMessage:u,insertionHint:j,compact:g,onSelect:y})})}),document.body)}function Ln({agentType:t,workingDir:n}){return dt({queryKey:F.system.slashCommandCatalog(t,n),queryFn:async()=>(await ge.get("/system/slash-command-catalog",{params:{agentType:String(t),...n?{workingDir:n}:{}}})).commands,enabled:!!t,staleTime:3e4})}function Pn(t,n){const s=new Set,o=[];for(const c of[...t,...n]){const r=c.command.trim().toLowerCase();!r||s.has(r)||(s.add(r),o.push(c.kind?c:{...c,kind:"builtin"}))}return o}function Te(t){return t.trim().toLowerCase().replace(/^[/$]/,"")}function _n(t){return Te(t.command)}function Dn(t,n){if(!n)return 1e3;const s=_n(t),o=t.aliases?.map(Te)??[],c=[s,...o];let r=0;for(const a of c)a===n?r=Math.max(r,500):a.startsWith(n)?r=Math.max(r,400-(a.length-n.length)):a.includes(n)&&(r=Math.max(r,250-a.indexOf(n)));return r>0?r:`${s} ${o.join(" ")} ${t.description}`.toLowerCase().includes(n)?100:0}function Ss(t){const n=/(^|[\s])\$([^\s]*)$/.exec(t);if(!n||n.index===void 0)return null;const s=n.index+n[1].length;return{query:Te(n[2]),replaceStart:s}}function zn(t,n){const s=Te(n);return s?t.map((o,c)=>({command:o,index:c,score:Dn(o,s)})).filter(o=>o.score>0).sort((o,c)=>c.score-o.score||o.index-c.index||o.command.command.localeCompare(c.command.command)).map(o=>o.command):t.slice()}const Fn=[{command:"/permissions",description:"Manage what Codex can do without approval"},{command:"/sandbox-add-read-dir",description:"Grant read access to another directory"},{command:"/agent",description:"Switch between built-in agent personas"},{command:"/apps",description:"Manage connected apps"},{command:"/clear",description:"Start a fresh conversation"},{command:"/compact",description:"Replace chat context with a summary"},{command:"/copy",description:"Copy the last assistant message to your clipboard"},{command:"/diff",description:"Show the current git diff"},{command:"/experimental",description:"Toggle experimental features"},{command:"/feedback",description:"Share feedback on Codex CLI"},{command:"/init",description:"Create or update AGENTS.md for the repo"},{command:"/logout",description:"Sign out of Codex"},{command:"/mcp",description:"Manage MCP servers"},{command:"/mention",description:"Add files or directories to the conversation context"},{command:"/model",description:"Change the active model"},{command:"/fast",description:"Toggle low reasoning mode"},{command:"/plan",description:"Toggle plan mode for code changes"},{command:"/personality",description:"Select how Codex communicates"},{command:"/ps",description:"List running background tasks"},{command:"/fork",description:"Fork the current conversation state"},{command:"/resume",description:"Resume a previous conversation"},{command:"/new",description:"Open a conversation picker to start or resume"},{command:"/quit",description:"Exit Codex CLI",aliases:["exit"]},{command:"/review",description:"Run a code review"},{command:"/status",description:"Show session and configuration status"},{command:"/debug-config",description:"Inspect the effective configuration"},{command:"/statusline",description:"Configure the custom status line"},{command:"/skills",description:"Browse available skills and insert a $skill mention"}],$n=[{command:"/clear",description:"Clear the conversation history"},{command:"/compact",description:"Compact the conversation context",aliases:["compact focus"]},{command:"/config",description:"Open the configuration panel"},{command:"/cost",description:"Show token usage and cost"},{command:"/doctor",description:"Check Claude Code installation health"},{command:"/help",description:"Show help and available commands"},{command:"/init",description:"Initialize project instructions"},{command:"/login",description:"Sign in to Claude Code"},{command:"/logout",description:"Sign out of Claude Code"},{command:"/mcp",description:"Manage MCP servers"},{command:"/memory",description:"Edit project memory files"},{command:"/model",description:"Change the active model"},{command:"/permissions",description:"Review or update tool permissions"},{command:"/pr_comments",description:"Read pull request review comments"},{command:"/review",description:"Run a code review"},{command:"/status",description:"Show account and system status"},{command:"/terminal-setup",description:"Configure terminal newline shortcuts"},{command:"/vim",description:"Toggle vim mode"}],Bn=[{command:"/bug",description:"File an issue about Gemini CLI"},{command:"/chat",description:"Manage chat checkpoints and exports"},{command:"/clear",description:"Clear the terminal display"},{command:"/compress",description:"Replace chat context with a summary"},{command:"/copy",description:"Copy the last Gemini CLI output"},{command:"/directory",description:"Manage additional workspace directories",aliases:["dir"]},{command:"/editor",description:"Choose the preferred editor"},{command:"/extensions",description:"List active Gemini CLI extensions"},{command:"/help",description:"Show help and command usage",aliases:["?"]},{command:"/mcp",description:"Show MCP servers and tools"},{command:"/memory",description:"Manage loaded GEMINI.md memory"},{command:"/restore",description:"Restore files from a tool checkpoint"},{command:"/settings",description:"Open the Gemini CLI settings editor"},{command:"/stats",description:"Show session statistics and token usage"},{command:"/theme",description:"Change the Gemini CLI theme"},{command:"/auth",description:"Change the authentication method"},{command:"/about",description:"Show version information"},{command:"/tools",description:"List currently available tools"},{command:"/privacy",description:"Review privacy and data collection settings"},{command:"/quit",description:"Exit Gemini CLI",aliases:["exit"]},{command:"/vim",description:"Toggle vim mode"},{command:"/init",description:"Generate a tailored GEMINI.md file"}],Gn=[{command:"/model",description:"Change the active model"},{command:"/plan",description:"Create or reopen a plan"},{command:"/ask",description:"Toggle ask mode (read-only Q&A)"},{command:"/debug",description:"Toggle debug mode"},{command:"/clear",description:"Start a new chat session",aliases:["new","new-chat","newchat"]},{command:"/compress",description:"Summarize the conversation to reduce context"},{command:"/vim",description:"Toggle vim mode"},{command:"/shell",description:"Enter shell mode"},{command:"/about",description:"Show CLI, system, and account information"},{command:"/setup-terminal",description:"Configure terminal newline shortcuts"},{command:"/feedback",description:"Share feedback with the Cursor team"},{command:"/open",description:"Open the repository git root in Cursor"},{command:"/cursor",description:"Alias for /open",aliases:["open"]},{command:"/resume-chat",description:"Resume a previous chat by folder name",aliases:["resume"]},{command:"/copy-request-id",description:"Copy the last request ID"},{command:"/copy-conversation-id",description:"Copy the current conversation ID"},{command:"/logout",description:"Sign out from Cursor"},{command:"/quit",description:"Exit Cursor Agent",aliases:["exit"]},{command:"/mcp",description:"Manage MCP servers"}],qn={[Ne.CODEX]:Fn,[Ne.CLAUDE_CODE]:$n,[Ne.GEMINI_CLI]:Bn,[Ne.CURSOR_AGENT]:Gn};function xt(t){return t.trim().toLowerCase().replace(/^\//,"")}function Wn(t){return t?(qn[t]??[]).map(n=>({...n,kind:n.kind??"builtin"})):[]}function Kn(t){const n=t.match(/^\s*\/([^\s]*)$/);return n?xt(n[1]):null}function Un(t,n){return zn(t,xt(n))}function Hn(t){const n=t.key==="Enter"&&!t.shiftKey&&!t.repeat&&!t.nativeEvent.isComposing&&t.nativeEvent.keyCode!==229,s=t.key==="Tab"&&!t.shiftKey;return n||s}function Qn({agentType:t,workingDir:n,input:s,setInput:o,textareaRef:c,minHeight:r,maxHeight:i}){const[a,d]=l.useState(0),{data:u=[]}=Ln({agentType:t,workingDir:n}),j=l.useMemo(()=>Pn(Wn(t),u),[t,u]),g=l.useMemo(()=>Kn(s),[s]),y=l.useMemo(()=>g===null?[]:Un(j,g),[j,g]),k=l.useCallback(()=>{const x=c.current;x&&(x.style.height="auto",x.style.height=`${Math.max(r,Math.min(x.scrollHeight,i))}px`)},[i,r,c]);l.useEffect(()=>{d(0)},[t,g]),l.useEffect(()=>{a<y.length||d(0)},[y.length,a]);const h=l.useCallback(x=>{const S=`${s.match(/^(\s*)\/[^\s]*$/)?.[1]??""}${x.command} `;o(S),requestAnimationFrame(()=>{const b=c.current;b&&(k(),b.focus(),b.setSelectionRange(S.length,S.length))})},[s,k,o,c]),f=l.useCallback(x=>g===null||y.length===0?!1:x.key==="ArrowDown"?(x.preventDefault(),d(N=>(N+1)%y.length),!0):x.key==="ArrowUp"?(x.preventDefault(),d(N=>(N-1+y.length)%y.length),!0):Hn(x)?(x.preventDefault(),h(y[a]??y[0]),!0):!1,[h,y,g,a]);return{allCommands:j,query:g,filteredCommands:y,selectedIndex:a,setSelectedIndex:d,applyCommand:h,handleKeyDown:f}}function Vn({items:t,fixed:n,disabled:s}){const{t:o}=de(),c=l.useRef(null),r=l.useRef(null),[i,a]=l.useState(t.length),[d,u]=l.useState(!1);l.useLayoutEffect(()=>{const f=c.current,x=r.current;if(!f||!x)return;const N=()=>{const b=f.clientWidth;if(!b)return;const z=Array.from(x.children).map(I=>I.getBoundingClientRect().width),_=z.pop()??0,O=parseFloat(getComputedStyle(f).columnGap)||0;let A=z.length,L=z.reduce((I,C)=>I+C,0)+O*Math.max(0,A-1);if(L>b)for(L+=_+O;A>1&&L>b;)L-=(z[--A]??0)+O;a(A),A===t.length&&u(!1)};if(N(),typeof ResizeObserver>"u")return;const S=new ResizeObserver(N);S.observe(f);for(const b of x.children)S.observe(b);return()=>S.disconnect()},[t]);const j=t.slice(0,i),g=t.slice(i),y=g.some(f=>f.changed),k=e.jsxs(e.Fragment,{children:[e.jsx(Ut,{size:14}),e.jsx("span",{children:o("More options")}),e.jsx("span",{"aria-hidden":"true",className:R("size-1 shrink-0 rounded-full bg-foreground",!y&&"invisible")})]}),h="h-7 shrink-0 gap-1.5 px-2 text-xs font-medium pointer-coarse:min-h-11";return e.jsxs("div",{className:"relative mt-2.5 flex min-w-0 items-center gap-3 px-0.5","data-task-options-toolbar":!0,children:[e.jsxs("div",{ref:c,className:"flex min-w-0 flex-1 items-center gap-1.5","data-task-options":!0,children:[j.map((f,x)=>e.jsx("div",{"data-task-option":f.id,className:R(x===0?"min-w-0 shrink [&_button]:max-w-full":"shrink-0"),children:f.control},f.id)),g.length>0&&e.jsxs(ht,{open:d,onOpenChange:u,children:[e.jsx(ft,{asChild:!0,children:e.jsx(pe,{variant:"ghost",size:"sm",disabled:s,className:h,"aria-label":o(y?"More task options (modified)":"More task options"),children:k})}),e.jsx(pt,{"aria-label":o("More task options"),className:"w-80 max-w-[calc(100vw-1rem)] space-y-2",children:g.map(f=>e.jsxs("div",{"data-task-option":f.id,className:"flex min-w-0 items-center justify-between gap-3",children:[e.jsx("span",{className:"shrink-0 text-xs text-muted-foreground",children:f.label}),e.jsx("div",{className:"min-w-0 [&_button]:max-w-full",children:f.control})]},f.id))})]})]}),n&&e.jsx("div",{className:"shrink-0","data-task-mode-switch":!0,children:n}),e.jsx("div",{"aria-hidden":"true",inert:!0,className:"pointer-events-none invisible absolute inset-x-0 top-0 h-0 overflow-hidden",children:e.jsxs("div",{ref:r,className:"flex w-max gap-1.5",children:[t.map(f=>e.jsx("div",{className:"shrink-0",children:f.measure},f.id)),e.jsx(pe,{asChild:!0,variant:"ghost",size:"sm",className:h,children:e.jsx("span",{children:k})})]})})]})}const gt="h-7 min-w-0 gap-1.5 rounded-md px-2 text-xs font-medium text-foreground/80 pointer-coarse:min-h-11",Yn={ASK:an,AUTO_SANDBOX:Bt,FULL_ACCESS:sn};function ue({icon:t,value:n,className:s}){return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"shrink-0 text-muted-foreground",children:t}),e.jsx("span",{className:R("min-w-0 max-w-[120px] truncate",s),children:n}),e.jsx(Ge,{size:12,className:"shrink-0 text-muted-foreground"})]})}function rt({children:t,className:n}){return e.jsx(pe,{asChild:!0,variant:"ghost",size:"sm",className:R(gt,n),children:e.jsx("span",{children:t})})}function Xn({label:t,trigger:n,disabled:s,className:o,children:c}){const[r,i]=l.useState(!1);return e.jsxs(ht,{open:r,onOpenChange:i,children:[e.jsx(mt,{content:t,children:e.jsx(ft,{asChild:!0,children:e.jsx(pe,{variant:"ghost",size:"sm",disabled:s,"aria-label":t,className:R(gt,o),children:n})})}),e.jsx(pt,{"aria-label":t,className:"max-h-[min(24rem,var(--radix-popover-content-available-height))] w-80 max-w-[calc(100vw-1rem)] overflow-y-auto p-1",onEscapeKeyDown:a=>a.stopPropagation(),children:c(()=>i(!1))})]})}function he({selected:t,disabled:n,onClick:s,children:o}){return e.jsxs("button",{type:"button",disabled:n,onClick:s,className:"flex w-full items-start gap-2 rounded-md px-2 py-2 text-left text-xs hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx(Be,{size:14,className:R("mt-0.5 shrink-0",!t&&"invisible")}),e.jsx("span",{className:"min-w-0 flex-1",children:o})]})}function Zn({projectId:t,value:n,disabled:s,onChange:o}){const{t:c}=de(),r=l.useId(),i=qt(t);return e.jsx(Wt,{id:r,label:c("Base branch"),value:n||i.data?.mainBranch||c("Project default"),compact:!0,branches:i.data?.branches??[],disabled:s,isRefreshing:i.isFetching,isLoading:i.isPending,loadError:i.isError?c("Could not load branches. Refresh to try again."):void 0,onOpen:()=>{i.refetch()},onChange:o})}function Jn(t){const{t:n}=de(),s=t.projects.find(a=>a.id===t.projectId),o=t.providers.find(a=>a.id===t.providerId),c=[],r=(a,d,u,j,g=!1,y)=>{c.push({id:a,label:d,changed:g,measure:e.jsx(rt,{className:y,children:u}),control:e.jsx(Xn,{label:d,trigger:u,disabled:t.disabled,className:y,children:j})})};t.isConversation||r("project",n("Project"),e.jsx(ue,{icon:e.jsx(Vt,{size:14,style:{color:s?.color}}),value:s?.name??n("Project")}),a=>t.projects.map(d=>e.jsx(he,{selected:d.id===t.projectId,onClick:()=>{t.onProjectChange(d.id),a()},children:d.name},d.id))),(t.isConversation||t.mode==="SOLO")&&r("provider",n("Agent"),e.jsx(ue,{icon:e.jsx(Xe,{agentType:o?.agentType,className:"size-3.5"}),value:o?.name??(t.isProvidersLoading?n("Loading..."):n("Agent"))}),a=>t.providers.map(d=>{const u=d.permissionMode?Yn[d.permissionMode]:null;return e.jsx("div",{role:d.available?void 0:"group",tabIndex:d.available?void 0:0,"aria-label":d.available?void 0:`${d.name}: ${n(d.reason||"Agent executable is unavailable.")}`,children:e.jsx(he,{selected:d.id===t.providerId,disabled:!d.available,onClick:()=>{t.onProviderChange(d.id),a()},children:e.jsxs("span",{className:"flex items-start gap-2",children:[e.jsx(Xe,{agentType:d.agentType,className:"mt-0.5 size-3.5 shrink-0"}),e.jsxs("span",{className:"min-w-0 flex-1 break-words",children:[d.name,!d.available&&n(" (unavailable)"),d.reason&&e.jsx("span",{className:"mt-0.5 block text-destructive-ink",children:n(d.reason)})]}),u&&d.permissionMode&&e.jsx("span",{role:"img",title:n("Required permission: {mode}",{mode:n(tt[d.permissionMode])}),"aria-label":n("Required permission: {mode}",{mode:n(tt[d.permissionMode])}),children:e.jsx(u,{size:14})})]})})},d.id)}),t.providerChanged);const i=t.workspaceMode===H.MAIN_DIRECTORY;if(!t.isConversation&&t.mode==="SOLO"&&r("workspace",n("Workspace mode"),e.jsx(ue,{icon:e.jsx(Ze,{size:14}),value:n(i?"本地模式":"工作树模式")}),a=>e.jsxs(e.Fragment,{children:[e.jsxs(he,{selected:!i,disabled:t.localProjectOnly,onClick:()=>{t.onWorkspaceModeChange(H.WORKTREE),a()},children:[e.jsx("span",{className:"block",children:n("工作树模式")}),e.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:n("工作树隔离改动,支持 TeamRun、Merge、Rebase 和冲突解决。")})]}),t.localProjectOnly&&e.jsxs("div",{className:"px-2 pb-2 text-xs text-muted-foreground",children:[e.jsx("p",{children:t.gitReason==="NO_HEAD"?n("已检测到 Git,但需要先提交一次才能使用工作树模式。"):n("初始化 Git 后可使用工作树模式。")}),e.jsx(pe,{variant:"ghost",size:"sm",disabled:t.refreshingGit,onClick:async()=>{await t.onRefreshGit(),a()},children:t.refreshingGit?n("检测中..."):n("重新检测 Git 状态")})]}),e.jsxs(he,{selected:i,onClick:()=>{t.onWorkspaceModeChange(H.MAIN_DIRECTORY),a()},children:[e.jsx("span",{className:"block",children:n("本地模式")}),e.jsx("span",{className:"mt-0.5 block text-muted-foreground",children:n("本地模式会直接修改项目主目录,不会自动提交,也不能使用 Merge、Rebase 或冲突解决。")})]})]}),i&&!t.localProjectOnly),!t.isConversation){const a=$e(t.priority);r("priority",n("Task priority"),e.jsx(ue,{icon:e.jsx(_e,{iconName:a.iconName,className:"size-3.5"}),value:n(a.label)}),d=>lt.map(u=>e.jsxs(he,{selected:u.value===t.priority,onClick:()=>{t.onPriorityChange(u.value),d()},children:[u.code," · ",n(u.label)]},u.value)),t.priority!==Me.NORMAL,a.value===Me.NORMAL?void 0:a.className)}if(!t.isConversation&&!t.localProjectOnly&&(t.mode==="TEAM"||!i)){const a=t.baseBranch??s?.mainBranch??"";c.push({id:"branch",label:n("Base branch"),changed:!!(a&&a!==s?.mainBranch),measure:e.jsx(rt,{children:e.jsx(ue,{icon:e.jsx(Ze,{size:14}),value:a||n("Project default")})}),control:e.jsx(Zn,{projectId:t.projectId,value:a,disabled:t.disabled,onChange:t.onBaseBranchChange})})}return e.jsx(Vn,{items:c,disabled:t.disabled,fixed:!t.isConversation&&e.jsx(mt,{content:t.localProjectOnly?n("Local projects only support local Solo tasks. Initialize Git to use worktrees and TeamRun."):n(i?"TeamRun 需要工作树模式。开启团队模式时会自动切换为工作树模式。":"Choose solo or team mode"),children:e.jsx("span",{className:"inline-flex",children:e.jsx(ut,{size:"sm","aria-label":n("Task mode"),value:t.mode,onValueChange:a=>t.onModeChange(a),className:"shrink-0 pointer-coarse:[&_button]:min-h-11 pointer-coarse:[&_button]:min-w-11",options:[{value:"SOLO",icon:e.jsx(un,{"aria-hidden":"true"}),label:e.jsx("span",{className:"sr-only",children:n("Solo mode")}),disabled:t.disabled},{value:"TEAM",icon:e.jsx(fn,{"aria-hidden":"true"}),label:e.jsx("span",{className:"sr-only",children:n("Team mode")}),disabled:t.disabled||t.localProjectOnly}]})})})})}const es={idle:"","creating-task":"Creating Task...","creating-teamrun":"Creating TeamRun...","creating-workspace":"Creating Workspace...","creating-session":"Creating Session...","starting-session":"Starting Agent..."};function Ms({parentTask:t,variant:n="task",projects:s,providers:o,isProvidersLoading:c,onSubmit:r,defaultProjectId:i="",defaultProviderId:a="",onProjectChange:d,createStep:u,placeholder:j,submitLabel:g,pendingLabel:y,submitTitle:k}){const{t:h}=de(),[f,x]=l.useState(""),[N,S]=l.useState(i),[b,z]=l.useState(a),_=o.some(p=>p.id===b)?b:o.some(p=>p.id===a)?a:"",[O,A]=l.useState("SOLO"),[L,I]=l.useState(H.WORKTREE),[C,Q]=l.useState(Me.NORMAL),[G,$]=l.useState(null),[w,M]=l.useState({}),[P,D]=l.useState("AUTO"),[q,m]=l.useState(null),[v,W]=l.useState([]),[Y,se]=l.useState(!1),ee=l.useRef(null),ve=l.useRef(null),qe=l.useRef(null),{files:be,addFiles:ie,removeFile:Ie,buildMarkdownLinks:We,getDoneAttachments:Ke,isUploading:ye}=Rt(),Ce=Kt(),E=n==="conversation",T=n==="task"||n==="conversation",vt=g??h(E?"开始":"创建");l.useEffect(()=>{S(i),$(null),d?.(i)},[i,d]);const V=l.useMemo(()=>s.find(p=>p.id===N),[s,N]),oe=l.useMemo(()=>o.find(p=>p.id===_),[o,_]),Re=G?.projectId===N?G.value:t?.baseBranch??V?.mainBranch,Oe=N?w[N]:void 0,bt=(Oe?.isGitRepo??V?.isGitRepo)!==!1,yt=(Oe?.worktreeReady??V?.worktreeReady)!==!1,U=!E&&!(bt&&yt),X=U?"SOLO":O,je=U?H.MAIN_DIRECTORY:L,Ct=Oe?.reason??V?.reason,Ue=E||X==="SOLO"?oe?.agentType:null,te=Qn({agentType:Ue,workingDir:E?void 0:V?.repoPath,input:f,setInput:x,textareaRef:ve,minHeight:76,maxHeight:220}),Z=u!=="idle",He=!!q||v.length>0,le=!Z&&!ye&&f.trim().length>0&&(E?oe?.available===!0:!!N&&(X==="SOLO"?oe?.available===!0:He));l.useEffect(()=>{U&&(A("SOLO"),I(H.MAIN_DIRECTORY),se(!1))},[U]),l.useEffect(()=>{U||E||I(H.WORKTREE)},[E,U,V?.id]);const jt=l.useCallback(async()=>{if(!V||Ce.isPending)return;const p=await Ce.mutateAsync({id:V.id});M(K=>({...K,[V.id]:p})),p.worktreeReady&&(A("SOLO"),I(H.WORKTREE))},[Ce,V]),Ae=l.useCallback(async()=>{if(!le)return;const p=T?We():"",K=T?Ke().map(ae=>ae.id):[];try{const ae=r({title:f.trim(),parentTaskId:t?.id,description:"",projectId:E?"":N,providerId:_,mode:E?"SOLO":X,workspaceMode:!E&&X==="SOLO"?je:H.WORKTREE,teamRunMode:E?"AUTO":P,teamTemplateId:E||U?null:q,memberPresetIds:E||U?[]:v,attachmentLinks:p,attachmentIds:K,priority:C,baseBranch:E?void 0:X==="TEAM"||je===H.WORKTREE?Re:null}),me=()=>{if(x(B=>B===f?"":B),Q(B=>B===C?Me.NORMAL:B),$(B=>B===G?null:B),T)for(const B of be)Ie(B.tempId)};E&&me(),await ae,E||me()}catch{}},[t,le,T,We,Ke,r,f,E,N,_,X,je,P,U,q,v,be,Ie,C,Re,G]),Nt=l.useCallback(p=>{te.handleKeyDown(p)||p.key==="Enter"&&!p.shiftKey&&!p.nativeEvent.isComposing&&p.nativeEvent.keyCode!==229&&(p.preventDefault(),Ae())},[Ae,te]),wt=l.useCallback(p=>{const K=p.target.files;K&&K.length>0&&ie(Array.from(K)),p.target.value=""},[ie]),kt=l.useCallback(p=>{S(p),$(null),d?.(p)},[d]),St=l.useCallback(p=>{if(!T)return;const K=p.clipboardData.items,ae=[];for(const me of K)if(me.kind==="file"){const B=me.getAsFile();B&&ae.push(B)}ae.length>0&&(p.preventDefault(),ie(ae))},[ie,T]),[Qe,Le]=l.useState(!1),Mt=l.useCallback(p=>{T&&(p.preventDefault(),Le(!0))},[T]),Et=l.useCallback(p=>{T&&(p.preventDefault(),Le(!1))},[T]),Tt=l.useCallback(p=>{if(!T)return;p.preventDefault(),Le(!1);const K=p.dataTransfer.files;K.length>0&&ie(Array.from(K))},[ie,T]);return e.jsxs("div",{className:"w-full",children:[t&&e.jsx("p",{className:"mb-3 truncate px-2 text-sm text-muted-foreground",title:t.title,children:h("Parent task: {title}",{title:t.title})}),e.jsxs("div",{ref:ee,className:R("relative bg-background rounded-xl border transition-colors duration-200","shadow-raised","hover:border-ring/40 focus-within:border-ring/60",Qe?"border-foreground/40 bg-foreground/[0.02]":"border-border",Z&&"opacity-80"),onDragOver:T?Mt:void 0,onDragLeave:T?Et:void 0,onDrop:T?Tt:void 0,children:[T&&be.length>0&&e.jsx("div",{className:"px-4 pt-3",children:e.jsx(Ot,{files:be,onRemove:Ie})}),e.jsx("textarea",{ref:ve,value:f,onChange:p=>x(p.target.value),onKeyDown:Nt,onPaste:T?St:void 0,placeholder:h(j||"Describe your task..."),disabled:Z,autoFocus:!0,rows:1,className:"w-full px-4 pt-4 pb-2 bg-transparent border-none focus:outline-none resize-none text-[15px] text-foreground placeholder:text-muted-foreground/80 leading-relaxed",style:{minHeight:"76px",maxHeight:"220px",fieldSizing:"content"}}),T&&Qe&&e.jsx("div",{className:"px-4 pb-2",children:e.jsx("div",{className:"flex items-center justify-center py-3 border border-dashed border-foreground/30 rounded-lg text-xs font-medium text-foreground/80",children:h("Drop files here")})}),e.jsxs("div",{className:"flex items-center justify-between px-2 pb-2 pt-1",children:[e.jsx("div",{className:"flex items-center gap-1",children:T?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",onClick:()=>qe.current?.click(),disabled:Z||ye,className:"p-2 text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg transition-colors disabled:opacity-40 disabled:cursor-not-allowed",title:h("Attach files"),children:e.jsx(Xt,{size:18})}),e.jsx("input",{ref:qe,type:"file",multiple:!0,onChange:wt,className:"hidden"})]}):null}),e.jsxs("div",{className:"flex items-center gap-2",children:[T&&ye&&e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(Se,{size:14,className:"animate-spin motion-reduce:[animation-duration:2.4s]"}),h("Uploading...")]}),Z&&e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(Se,{size:14,className:"animate-spin motion-reduce:[animation-duration:2.4s]"}),h(y??es[u])]}),!E&&!Z&&!ye&&X==="TEAM"&&!He&&f.trim().length>0&&e.jsx("span",{className:"text-xs text-warning-ink",children:h("请选择团队模板或追加成员")}),le&&e.jsxs("span",{className:"hidden sm:inline-flex items-center gap-1 text-xs text-muted-foreground select-none",children:[e.jsx("kbd",{className:"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded border border-border bg-muted/60 text-[11px] font-medium text-muted-foreground leading-none",children:"⏎"}),vt]}),e.jsx("button",{type:"button",onClick:Ae,disabled:!le,className:R("flex items-center justify-center size-8 rounded-lg transition-all duration-200",le?"bg-primary text-primary-foreground hover:bg-primary/90 shadow-raised":"bg-muted text-muted-foreground cursor-not-allowed"),title:h(k||"Create & Start"),children:e.jsx(Gt,{size:16,strokeWidth:2.5})})]})]})]}),e.jsx(An,{open:!!Ue&&te.query!==null,anchorRef:ee,commands:te.filteredCommands,selectedIndex:te.selectedIndex,query:te.query??"",hasCatalog:te.allCommands.length>0,compact:!0,onSelect:te.applyCommand}),e.jsx(Jn,{projects:s,providers:o,projectId:N,providerId:_,providerChanged:_!==a,isProvidersLoading:c,mode:X,workspaceMode:je,priority:C,baseBranch:Re,isConversation:E,localProjectOnly:U,gitReason:Ct,disabled:Z,refreshingGit:Ce.isPending,onProjectChange:kt,onProviderChange:z,onWorkspaceModeChange:I,onPriorityChange:Q,onBaseBranchChange:p=>$({projectId:N,value:p}),onRefreshGit:jt,onModeChange:p=>{Z||p==="TEAM"&&U||(A(p),se(p==="TEAM"),p==="TEAM"&&I(H.WORKTREE))}}),oe&&!oe.available?e.jsx("p",{role:"alert",className:"mt-2 break-words px-2 text-xs leading-snug text-destructive-ink",children:oe.reason?h(oe.reason):h("Agent executable is unavailable.")}):null,!E&&X==="TEAM"&&Y&&e.jsx("div",{className:"mt-2.5 rounded-xl border border-border/60 bg-muted/40 p-3 animate-[fadeInUp_0.25s_cubic-bezier(0.16,1,0.3,1)]",children:e.jsx(Rn,{mode:P,setMode:D,selectedTemplateId:q,setSelectedTemplateId:m,selectedMemberPresetIds:v,setSelectedMemberPresetIds:W,disabled:Z,compact:!0})})]})}export{Ms as C,An as S,Rn as T,xn as Z,Qn as a,ys as b,vs as c,bs as d,Ns as e,ws as f,ks as g,gn as h,gs as i,js as j,cn as k,Ss as l,zn as m,Cs as s,xs as u};
@@ -1,4 +1,4 @@
1
- import{r as a,ac as j,ad as E,ae as T,j as s,n as M,u as P,v as I,B as O}from"./index-BJObbxud.js";function U(t){const{sessionId:c,onOutput:k,onExit:x,onError:v}=t,[p,g]=a.useState(()=>j.isConnected()),[r,d]=a.useState(!1),m=a.useRef({onOutput:k,onExit:x,onError:v});m.current={onOutput:k,onExit:x,onError:v},a.useEffect(()=>{const n=j.getSocket();g(n.connected);const u=()=>g(!0),b=()=>{g(!1),d(!1)},w=l=>{l.sessionId===c&&m.current.onOutput?.(l.data)},C=l=>{l.sessionId===c&&(d(!1),m.current.onExit?.(l.exitCode))},S=l=>{l.sessionId===c&&m.current.onError?.(l.message)};return n.on("connect",u),n.on("disconnect",b),n.on(E.SESSION_STDOUT,w),n.on(E.SESSION_EXIT,C),n.on(E.SESSION_ERROR,S),g(n.connected),()=>{n.off("connect",u),n.off("disconnect",b),n.off(E.SESSION_STDOUT,w),n.off(E.SESSION_EXIT,C),n.off(E.SESSION_ERROR,S),d(!1)}},[c]);const i=a.useCallback(()=>new Promise(n=>{if(!j.getSocket().connected){n(!1);return}d(!0),n(!0)}),[]),y=a.useCallback(()=>{d(!1)},[]),N=a.useCallback(n=>{j.getSocket().emit(T.INPUT,{sessionId:c,data:n})},[c]),h=a.useCallback((n,u)=>{j.getSocket().emit(T.RESIZE,{sessionId:c,cols:n,rows:u})},[c]);return{isConnected:p,isAttached:r,attach:i,detach:y,sendInput:N,resize:h}}function $({className:t,...c}){return s.jsx("div",{"data-slot":"card",className:M("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...c})}function B(){const{t}=P(),[c,k]=a.useState([]),[x,v]=a.useState(""),[p,g]=a.useState(""),[r,d]=a.useState(null),[m,i]=a.useState([]),[y,N]=a.useState(!1),[h,n]=a.useState(""),u=a.useRef(null),b=a.useCallback(e=>{i(o=>{const f=o[o.length-1];return f&&f.role==="agent"?[...o.slice(0,-1),{...f,content:f.content+e}]:[...o,{role:"agent",content:e,timestamp:new Date}]})},[]),w=a.useCallback(e=>{i(o=>[...o,{role:"agent",content:`
1
+ import{r as a,af as j,ag as E,ah as T,j as s,l as M,u as P,p as I,B as O}from"./index-Cc3qXMhU.js";function U(t){const{sessionId:c,onOutput:k,onExit:x,onError:b}=t,[p,g]=a.useState(()=>j.isConnected()),[r,d]=a.useState(!1),m=a.useRef({onOutput:k,onExit:x,onError:b});m.current={onOutput:k,onExit:x,onError:b},a.useEffect(()=>{const n=j.getSocket();g(n.connected);const u=()=>g(!0),v=()=>{g(!1),d(!1)},w=l=>{l.sessionId===c&&m.current.onOutput?.(l.data)},C=l=>{l.sessionId===c&&(d(!1),m.current.onExit?.(l.exitCode))},S=l=>{l.sessionId===c&&m.current.onError?.(l.message)};return n.on("connect",u),n.on("disconnect",v),n.on(E.SESSION_STDOUT,w),n.on(E.SESSION_EXIT,C),n.on(E.SESSION_ERROR,S),g(n.connected),()=>{n.off("connect",u),n.off("disconnect",v),n.off(E.SESSION_STDOUT,w),n.off(E.SESSION_EXIT,C),n.off(E.SESSION_ERROR,S),d(!1)}},[c]);const i=a.useCallback(()=>new Promise(n=>{if(!j.getSocket().connected){n(!1);return}d(!0),n(!0)}),[]),y=a.useCallback(()=>{d(!1)},[]),N=a.useCallback(n=>{j.getSocket().emit(T.INPUT,{sessionId:c,data:n})},[c]),h=a.useCallback((n,u)=>{j.getSocket().emit(T.RESIZE,{sessionId:c,cols:n,rows:u})},[c]);return{isConnected:p,isAttached:r,attach:i,detach:y,sendInput:N,resize:h}}function $({className:t,...c}){return s.jsx("div",{"data-slot":"card",className:M("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",t),...c})}function B(){const{t}=P(),[c,k]=a.useState([]),[x,b]=a.useState(""),[p,g]=a.useState(""),[r,d]=a.useState(null),[m,i]=a.useState([]),[y,N]=a.useState(!1),[h,n]=a.useState(""),u=a.useRef(null),v=a.useCallback(e=>{i(o=>{const f=o[o.length-1];return f&&f.role==="agent"?[...o.slice(0,-1),{...f,content:f.content+e}]:[...o,{role:"agent",content:e,timestamp:new Date}]})},[]),w=a.useCallback(e=>{i(o=>[...o,{role:"agent",content:`
2
2
  [${t("Process exited with code {code}",{code:e})}]`,timestamp:new Date}]),d(null)},[t]),C=a.useCallback(e=>{i(o=>[...o,{role:"agent",content:`
3
- [${t("Error: {message}",{message:e})}]`,timestamp:new Date}])},[t]),{isConnected:S,isAttached:l,attach:D}=U({sessionId:r||"",onOutput:b,onExit:w,onError:C});a.useEffect(()=>{I.get("/demo/agents").then(e=>{k(e.agents);const o=e.agents.find(f=>f.available);o&&v(o.type)})},[]),a.useEffect(()=>{u.current?.scrollIntoView({behavior:"smooth"})},[m]),a.useEffect(()=>{r&&S&&!l&&D()},[r,S,l,D]);const R=async()=>{if(!(!x||!p.trim())){N(!0),i([{role:"user",content:p,timestamp:new Date}]);try{const e=await I.post("/demo/start",{agentType:x,prompt:p.trim()});d(e.sessionId),g("")}catch(e){i(o=>[...o,{role:"agent",content:t("启动失败: {message}",{message:e instanceof Error?e.message:t("未知错误")}),timestamp:new Date}])}finally{N(!1)}}},A=async()=>{if(!r||!h.trim())return;const e=h.trim();i(o=>[...o,{role:"user",content:e,timestamp:new Date}]),n("");try{await I.post(`/demo/${r}/message`,{message:e})}catch(o){i(f=>[...f,{role:"agent",content:t("发送失败: {message}",{message:o instanceof Error?o.message:t("未知错误")}),timestamp:new Date}])}},_=async()=>{if(r)try{await I.post(`/demo/${r}/stop`),i(e=>[...e,{role:"agent",content:`
4
- [${t("会话已停止")}]`,timestamp:new Date}]),d(null)}catch(e){console.error("Stop failed:",e)}};return s.jsxs("div",{className:"flex flex-col h-full max-w-4xl mx-auto p-4 gap-4",children:[s.jsx("h1",{className:"text-2xl font-bold",children:t("Agent 交互演示")}),!r&&s.jsxs($,{className:"p-4",children:[s.jsx("h2",{className:"text-lg font-semibold mb-3",children:t("选择 Agent")}),s.jsx("div",{className:"flex gap-2 flex-wrap mb-4",children:c.map(e=>s.jsxs(O,{variant:x===e.type?"default":"outline",disabled:!e.available,onClick:()=>v(e.type),children:[e.name,e.available&&e.version&&` (${e.version})`,!e.available&&t(" (不可用)")]},e.type))}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx("input",{type:"text",value:p,onChange:e=>g(e.target.value),onKeyDown:e=>e.key==="Enter"&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&R(),placeholder:t("输入你的问题或任务..."),className:"flex-1 px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),s.jsx(O,{onClick:R,disabled:y||!x||!p.trim(),children:t(y?"启动中...":"开始")})]})]}),s.jsxs($,{className:"flex-1 p-4 overflow-hidden flex flex-col",children:[s.jsxs("div",{className:"flex justify-between items-center mb-3",children:[s.jsx("h2",{className:"text-lg font-semibold",children:t("对话")}),r&&s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-sm text-gray-500",children:t(S?l?"已连接":"连接中...":"未连接")}),s.jsx(O,{variant:"outline",size:"sm",onClick:_,children:t("停止")})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto space-y-3",children:[m.length===0?s.jsx("div",{className:"text-gray-400 text-center py-8",children:t("选择 Agent 并输入问题开始对话")}):m.map((e,o)=>s.jsxs("div",{className:`p-3 rounded-lg ${e.role==="user"?"bg-blue-100 ml-8":"bg-gray-100 mr-8"}`,children:[s.jsx("div",{className:"text-xs text-gray-500 mb-1",children:e.role==="user"?t("你"):"Agent"}),s.jsx("pre",{className:"whitespace-pre-wrap font-mono text-sm",children:e.content})]},o)),s.jsx("div",{ref:u})]}),r&&s.jsxs("div",{className:"flex gap-2 mt-3 pt-3 border-t",children:[s.jsx("input",{type:"text",value:h,onChange:e=>n(e.target.value),onKeyDown:e=>e.key==="Enter"&&!e.repeat&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&A(),placeholder:t("发送后续消息..."),className:"flex-1 px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),s.jsx(O,{onClick:A,disabled:!h.trim(),children:t("发送")})]})]})]})}export{B as DemoPage};
3
+ [${t("Error: {message}",{message:e})}]`,timestamp:new Date}])},[t]),{isConnected:S,isAttached:l,attach:D}=U({sessionId:r||"",onOutput:v,onExit:w,onError:C});a.useEffect(()=>{I.get("/demo/agents").then(e=>{k(e.agents);const o=e.agents.find(f=>f.available);o&&b(o.type)})},[]),a.useEffect(()=>{u.current?.scrollIntoView({behavior:"smooth"})},[m]),a.useEffect(()=>{r&&S&&!l&&D()},[r,S,l,D]);const R=async()=>{if(!(!x||!p.trim())){N(!0),i([{role:"user",content:p,timestamp:new Date}]);try{const e=await I.post("/demo/start",{agentType:x,prompt:p.trim()});d(e.sessionId),g("")}catch(e){i(o=>[...o,{role:"agent",content:t("启动失败: {message}",{message:e instanceof Error?e.message:t("未知错误")}),timestamp:new Date}])}finally{N(!1)}}},A=async()=>{if(!r||!h.trim())return;const e=h.trim();i(o=>[...o,{role:"user",content:e,timestamp:new Date}]),n("");try{await I.post(`/demo/${r}/message`,{message:e})}catch(o){i(f=>[...f,{role:"agent",content:t("发送失败: {message}",{message:o instanceof Error?o.message:t("未知错误")}),timestamp:new Date}])}},_=async()=>{if(r)try{await I.post(`/demo/${r}/stop`),i(e=>[...e,{role:"agent",content:`
4
+ [${t("会话已停止")}]`,timestamp:new Date}]),d(null)}catch(e){console.error("Stop failed:",e)}};return s.jsxs("div",{className:"flex flex-col h-full max-w-4xl mx-auto p-4 gap-4",children:[s.jsx("h1",{className:"text-2xl font-bold",children:t("Agent 交互演示")}),!r&&s.jsxs($,{className:"p-4",children:[s.jsx("h2",{className:"text-lg font-semibold mb-3",children:t("选择 Agent")}),s.jsx("div",{className:"flex gap-2 flex-wrap mb-4",children:c.map(e=>s.jsxs(O,{variant:x===e.type?"default":"outline",disabled:!e.available,onClick:()=>b(e.type),children:[e.name,e.available&&e.version&&` (${e.version})`,!e.available&&t(" (不可用)")]},e.type))}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx("input",{type:"text",value:p,onChange:e=>g(e.target.value),onKeyDown:e=>e.key==="Enter"&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&R(),placeholder:t("输入你的问题或任务..."),className:"flex-1 px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),s.jsx(O,{onClick:R,disabled:y||!x||!p.trim(),children:t(y?"启动中...":"开始")})]})]}),s.jsxs($,{className:"flex-1 p-4 overflow-hidden flex flex-col",children:[s.jsxs("div",{className:"flex justify-between items-center mb-3",children:[s.jsx("h2",{className:"text-lg font-semibold",children:t("对话")}),r&&s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-sm text-gray-500",children:t(S?l?"已连接":"连接中...":"未连接")}),s.jsx(O,{variant:"outline",size:"sm",onClick:_,children:t("停止")})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto space-y-3",children:[m.length===0?s.jsx("div",{className:"text-gray-400 text-center py-8",children:t("选择 Agent 并输入问题开始对话")}):m.map((e,o)=>s.jsxs("div",{className:`p-3 rounded-lg ${e.role==="user"?"bg-blue-100 ml-8":"bg-gray-100 mr-8"}`,children:[s.jsx("div",{className:"text-xs text-gray-500 mb-1",children:e.role==="user"?t("你"):"Agent"}),s.jsx("pre",{className:"whitespace-pre-wrap font-mono text-sm",children:e.content})]},o)),s.jsx("div",{ref:u})]}),r&&s.jsxs("div",{className:"flex gap-2 mt-3 pt-3 border-t",children:[s.jsx("input",{type:"text",value:h,onChange:e=>n(e.target.value),onKeyDown:e=>e.key==="Enter"&&!e.repeat&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&A(),placeholder:t("发送后续消息..."),className:"flex-1 px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),s.jsx(O,{onClick:A,disabled:!h.trim(),children:t("发送")})]})]})]})}export{B as DemoPage};