agent-tower 0.5.3-beta.6 → 0.5.3-beta.8

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 (278) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +13 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/cli.js +26 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/core/container.d.ts +2 -0
  7. package/dist/core/container.d.ts.map +1 -1
  8. package/dist/core/container.js +8 -0
  9. package/dist/core/container.js.map +1 -1
  10. package/dist/executors/__tests__/base.executor.test.js +83 -10
  11. package/dist/executors/__tests__/base.executor.test.js.map +1 -1
  12. package/dist/executors/__tests__/claude-code.executor.test.d.ts +2 -0
  13. package/dist/executors/__tests__/claude-code.executor.test.d.ts.map +1 -0
  14. package/dist/executors/__tests__/claude-code.executor.test.js +72 -0
  15. package/dist/executors/__tests__/claude-code.executor.test.js.map +1 -0
  16. package/dist/executors/__tests__/providers-availability.test.d.ts +2 -0
  17. package/dist/executors/__tests__/providers-availability.test.d.ts.map +1 -0
  18. package/dist/executors/__tests__/providers-availability.test.js +92 -0
  19. package/dist/executors/__tests__/providers-availability.test.js.map +1 -0
  20. package/dist/executors/__tests__/stdin-prompt.executors.test.d.ts +2 -0
  21. package/dist/executors/__tests__/stdin-prompt.executors.test.d.ts.map +1 -0
  22. package/dist/executors/__tests__/stdin-prompt.executors.test.js +177 -0
  23. package/dist/executors/__tests__/stdin-prompt.executors.test.js.map +1 -0
  24. package/dist/executors/base.executor.d.ts.map +1 -1
  25. package/dist/executors/base.executor.js +131 -33
  26. package/dist/executors/base.executor.js.map +1 -1
  27. package/dist/executors/claude-code.executor.d.ts.map +1 -1
  28. package/dist/executors/claude-code.executor.js +22 -52
  29. package/dist/executors/claude-code.executor.js.map +1 -1
  30. package/dist/executors/codex.executor.js +4 -4
  31. package/dist/executors/codex.executor.js.map +1 -1
  32. package/dist/executors/cursor-agent.executor.d.ts.map +1 -1
  33. package/dist/executors/cursor-agent.executor.js +4 -6
  34. package/dist/executors/cursor-agent.executor.js.map +1 -1
  35. package/dist/executors/gemini-cli.executor.d.ts.map +1 -1
  36. package/dist/executors/gemini-cli.executor.js +9 -8
  37. package/dist/executors/gemini-cli.executor.js.map +1 -1
  38. package/dist/executors/image-utils.d.ts.map +1 -1
  39. package/dist/executors/image-utils.js +4 -22
  40. package/dist/executors/image-utils.js.map +1 -1
  41. package/dist/index.js +37 -2
  42. package/dist/index.js.map +1 -1
  43. package/dist/middleware/__tests__/agent-cli-local-only.test.d.ts +2 -0
  44. package/dist/middleware/__tests__/agent-cli-local-only.test.d.ts.map +1 -0
  45. package/dist/middleware/__tests__/agent-cli-local-only.test.js +119 -0
  46. package/dist/middleware/__tests__/agent-cli-local-only.test.js.map +1 -0
  47. package/dist/middleware/agent-cli-local-only.d.ts +5 -0
  48. package/dist/middleware/agent-cli-local-only.d.ts.map +1 -0
  49. package/dist/middleware/agent-cli-local-only.js +80 -0
  50. package/dist/middleware/agent-cli-local-only.js.map +1 -0
  51. package/dist/pipeline/agent-pipeline.d.ts.map +1 -1
  52. package/dist/pipeline/agent-pipeline.js +27 -2
  53. package/dist/pipeline/agent-pipeline.js.map +1 -1
  54. package/dist/routes/__tests__/agent-cli-environment.test.d.ts +2 -0
  55. package/dist/routes/__tests__/agent-cli-environment.test.d.ts.map +1 -0
  56. package/dist/routes/__tests__/agent-cli-environment.test.js +139 -0
  57. package/dist/routes/__tests__/agent-cli-environment.test.js.map +1 -0
  58. package/dist/routes/agent-cli-environment.d.ts +3 -0
  59. package/dist/routes/agent-cli-environment.d.ts.map +1 -0
  60. package/dist/routes/agent-cli-environment.js +92 -0
  61. package/dist/routes/agent-cli-environment.js.map +1 -0
  62. package/dist/routes/index.d.ts.map +1 -1
  63. package/dist/routes/index.js +3 -0
  64. package/dist/routes/index.js.map +1 -1
  65. package/dist/services/__tests__/conversation.service.test.js +63 -0
  66. package/dist/services/__tests__/conversation.service.test.js.map +1 -1
  67. package/dist/services/__tests__/team-reconciler.service.test.js +2 -2
  68. package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
  69. package/dist/services/__tests__/team-run.service.test.js +17 -16
  70. package/dist/services/__tests__/team-run.service.test.js.map +1 -1
  71. package/dist/services/agent-cli/__tests__/detection.test.d.ts +2 -0
  72. package/dist/services/agent-cli/__tests__/detection.test.d.ts.map +1 -0
  73. package/dist/services/agent-cli/__tests__/detection.test.js +77 -0
  74. package/dist/services/agent-cli/__tests__/detection.test.js.map +1 -0
  75. package/dist/services/agent-cli/__tests__/environment-task-manager.test.d.ts +2 -0
  76. package/dist/services/agent-cli/__tests__/environment-task-manager.test.d.ts.map +1 -0
  77. package/dist/services/agent-cli/__tests__/environment-task-manager.test.js +228 -0
  78. package/dist/services/agent-cli/__tests__/environment-task-manager.test.js.map +1 -0
  79. package/dist/services/agent-cli/__tests__/manifest-downloader.test.d.ts +2 -0
  80. package/dist/services/agent-cli/__tests__/manifest-downloader.test.d.ts.map +1 -0
  81. package/dist/services/agent-cli/__tests__/manifest-downloader.test.js +127 -0
  82. package/dist/services/agent-cli/__tests__/manifest-downloader.test.js.map +1 -0
  83. package/dist/services/agent-cli/detection.d.ts +27 -0
  84. package/dist/services/agent-cli/detection.d.ts.map +1 -0
  85. package/dist/services/agent-cli/detection.js +144 -0
  86. package/dist/services/agent-cli/detection.js.map +1 -0
  87. package/dist/services/agent-cli/downloader.d.ts +24 -0
  88. package/dist/services/agent-cli/downloader.d.ts.map +1 -0
  89. package/dist/services/agent-cli/downloader.js +152 -0
  90. package/dist/services/agent-cli/downloader.js.map +1 -0
  91. package/dist/services/agent-cli/environment.service.d.ts +35 -0
  92. package/dist/services/agent-cli/environment.service.d.ts.map +1 -0
  93. package/dist/services/agent-cli/environment.service.js +127 -0
  94. package/dist/services/agent-cli/environment.service.js.map +1 -0
  95. package/dist/services/agent-cli/manifest-validator.d.ts +4 -0
  96. package/dist/services/agent-cli/manifest-validator.d.ts.map +1 -0
  97. package/dist/services/agent-cli/manifest-validator.js +56 -0
  98. package/dist/services/agent-cli/manifest-validator.js.map +1 -0
  99. package/dist/services/agent-cli/manifest.d.ts +6 -0
  100. package/dist/services/agent-cli/manifest.d.ts.map +1 -0
  101. package/dist/services/agent-cli/manifest.js +180 -0
  102. package/dist/services/agent-cli/manifest.js.map +1 -0
  103. package/dist/services/agent-cli/security.d.ts +28 -0
  104. package/dist/services/agent-cli/security.d.ts.map +1 -0
  105. package/dist/services/agent-cli/security.js +148 -0
  106. package/dist/services/agent-cli/security.js.map +1 -0
  107. package/dist/services/agent-cli/task-manager.d.ts +39 -0
  108. package/dist/services/agent-cli/task-manager.d.ts.map +1 -0
  109. package/dist/services/agent-cli/task-manager.js +228 -0
  110. package/dist/services/agent-cli/task-manager.js.map +1 -0
  111. package/dist/services/conversation.service.d.ts.map +1 -1
  112. package/dist/services/conversation.service.js +17 -1
  113. package/dist/services/conversation.service.js.map +1 -1
  114. package/dist/services/mcp-config.service.js +1 -1
  115. package/dist/services/mcp-config.service.js.map +1 -1
  116. package/dist/services/mcp-config.service.test.js +19 -3
  117. package/dist/services/mcp-config.service.test.js.map +1 -1
  118. package/dist/services/session-manager.d.ts +9 -8
  119. package/dist/services/session-manager.d.ts.map +1 -1
  120. package/dist/services/session-manager.js +129 -16
  121. package/dist/services/session-manager.js.map +1 -1
  122. package/dist/services/task.service.d.ts +2 -2
  123. package/dist/services/team-run.service.d.ts.map +1 -1
  124. package/dist/services/team-run.service.js +4 -7
  125. package/dist/services/team-run.service.js.map +1 -1
  126. package/dist/services/terminal-manager.d.ts.map +1 -1
  127. package/dist/services/terminal-manager.js +39 -7
  128. package/dist/services/terminal-manager.js.map +1 -1
  129. package/dist/services/workspace.service.d.ts +7 -7
  130. package/dist/utils/error-log.d.ts +20 -0
  131. package/dist/utils/error-log.d.ts.map +1 -0
  132. package/dist/utils/error-log.js +176 -0
  133. package/dist/utils/error-log.js.map +1 -0
  134. package/dist/utils/error-log.test.d.ts +2 -0
  135. package/dist/utils/error-log.test.d.ts.map +1 -0
  136. package/dist/utils/error-log.test.js +233 -0
  137. package/dist/utils/error-log.test.js.map +1 -0
  138. package/dist/utils/prisma-cli-env.d.ts +3 -0
  139. package/dist/utils/prisma-cli-env.d.ts.map +1 -0
  140. package/dist/utils/prisma-cli-env.js +15 -0
  141. package/dist/utils/prisma-cli-env.js.map +1 -0
  142. package/dist/utils/prisma-cli-env.test.d.ts +2 -0
  143. package/dist/utils/prisma-cli-env.test.d.ts.map +1 -0
  144. package/dist/utils/prisma-cli-env.test.js +34 -0
  145. package/dist/utils/prisma-cli-env.test.js.map +1 -0
  146. package/dist/utils/process-launch.d.ts +4 -0
  147. package/dist/utils/process-launch.d.ts.map +1 -1
  148. package/dist/utils/process-launch.js +106 -16
  149. package/dist/utils/process-launch.js.map +1 -1
  150. package/dist/utils/process-launch.test.js +138 -3
  151. package/dist/utils/process-launch.test.js.map +1 -1
  152. package/dist/web/assets/{AgentDemoPage-BqUFGORQ.js → AgentDemoPage-gztcIidI.js} +1 -1
  153. package/dist/web/assets/AgentEnvironmentSettingsPage-CPNttAOj.js +1 -0
  154. package/dist/web/assets/AgentLogo-Bqjt1u2k.js +1 -0
  155. package/dist/web/assets/ConversationPage-DdfPLaBU.js +3 -0
  156. package/dist/web/assets/CreateTaskInput-DQSvlvL0.js +1 -0
  157. package/dist/web/assets/{DemoPage-DohwggTK.js → DemoPage-BHRQrxxs.js} +3 -3
  158. package/dist/web/assets/{GeneralSettingsPage-BqSO35vU.js → GeneralSettingsPage-c6tWGPk7.js} +1 -1
  159. package/dist/web/assets/{Icons-B5Qr68Dp.js → Icons-hnXjnfjL.js} +1 -1
  160. package/dist/web/assets/{LoadingPreviewPage-DBVTXpq2.js → LoadingPreviewPage-D_TI4PEx.js} +1 -1
  161. package/dist/web/assets/McpSettingsPage-D6b7ZWOS.js +1 -0
  162. package/dist/web/assets/{MemberAvatar-DmWOKCwf.js → MemberAvatar-DKsedKpu.js} +1 -1
  163. package/dist/web/assets/NotificationSettingsPage-Cv91U2pg.js +1 -0
  164. package/dist/web/assets/{ProfileSettingsPage-BcUtq3sY.js → ProfileSettingsPage-K_eadHzF.js} +1 -1
  165. package/dist/web/assets/ProjectKanbanPage-Cw4kAimX.js +89 -0
  166. package/dist/web/assets/{ProjectKanbanPage-G5OQeJvU.css → ProjectKanbanPage-DcpNTP1B.css} +1 -1
  167. package/dist/web/assets/ProjectSettingsPage-Vw4sQoAf.js +2 -0
  168. package/dist/web/assets/{ProviderSettingsPage-CX8WeQ3x.js → ProviderSettingsPage-DeNiqchP.js} +13 -13
  169. package/dist/web/assets/{SettingsMasterDetail-BtiI8TDc.js → SettingsMasterDetail-BusgjyV7.js} +1 -1
  170. package/dist/web/assets/TeamSettingsPage-DIQuN3Y5.js +1 -0
  171. package/dist/web/assets/{arc-BP5t0cJz.js → arc-cT4PVtdQ.js} +1 -1
  172. package/dist/web/assets/architectureDiagram-3BPJPVTR-DYwJxluW.js +36 -0
  173. package/dist/web/assets/{arrow-left-CH7x-bnE.js → arrow-left-DWeEJsaX.js} +1 -1
  174. package/dist/web/assets/{blockDiagram-GPEHLZMM-C0obS1hu.js → blockDiagram-GPEHLZMM-CaXsST1G.js} +1 -1
  175. package/dist/web/assets/{c4Diagram-AAUBKEIU-DLOq2msX.js → c4Diagram-AAUBKEIU-DKqAyb1m.js} +1 -1
  176. package/dist/web/assets/channel--M3xJN0e.js +1 -0
  177. package/dist/web/assets/check-CjNklwnC.js +1 -0
  178. package/dist/web/assets/{chevron-down-CBY3fFTT.js → chevron-down-o4IZE_P6.js} +1 -1
  179. package/dist/web/assets/chevron-right-DSyyoNau.js +1 -0
  180. package/dist/web/assets/{chevron-up-721LBv_e.js → chevron-up-BsLA8Xot.js} +1 -1
  181. package/dist/web/assets/{chunk-2J33WTMH-C07Su0AF.js → chunk-2J33WTMH-DoC7k16y.js} +1 -1
  182. package/dist/web/assets/{chunk-4BX2VUAB-DAdn-ED3.js → chunk-4BX2VUAB-CMKi8GO_.js} +1 -1
  183. package/dist/web/assets/{chunk-55IACEB6-BL4-BcAX.js → chunk-55IACEB6-Lyg5IKqI.js} +1 -1
  184. package/dist/web/assets/{chunk-727SXJPM-BmmMDMNV.js → chunk-727SXJPM-ColYow00.js} +1 -1
  185. package/dist/web/assets/{chunk-AQP2D5EJ-CeLsYTvJ.js → chunk-AQP2D5EJ-CoT-4pKg.js} +1 -1
  186. package/dist/web/assets/{chunk-FMBD7UC4-Bs7S01MB.js → chunk-FMBD7UC4-DVIaL62f.js} +1 -1
  187. package/dist/web/assets/{chunk-ND2GUHAM-uqytV5JO.js → chunk-ND2GUHAM-BNuafnYz.js} +1 -1
  188. package/dist/web/assets/{chunk-QZHKN3VN-DGM3LKCe.js → chunk-QZHKN3VN-mqqlxbRp.js} +1 -1
  189. package/dist/web/assets/{circle-alert-Dkp6R_Ml.js → circle-alert-FqsC_oWX.js} +1 -1
  190. package/dist/web/assets/classDiagram-4FO5ZUOK-BkKX675E.js +1 -0
  191. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BkKX675E.js +1 -0
  192. package/dist/web/assets/{code-block-OCS4YCEC-C_fs5i5h.js → code-block-OCS4YCEC-BHWPqjt4.js} +1 -1
  193. package/dist/web/assets/confirm-dialog-BRqwAzwk.js +1 -0
  194. package/dist/web/assets/copy-r1RvUhIY.js +1 -0
  195. package/dist/web/assets/cose-bilkent-S5V4N54A-Dx6hZ-zB.js +1 -0
  196. package/dist/web/assets/{dagre-BM42HDAG-D0-HOAOA.js → dagre-BM42HDAG-jCqcQJ4A.js} +1 -1
  197. package/dist/web/assets/{diagram-2AECGRRQ-Cyt7AAOQ.js → diagram-2AECGRRQ-BFaFAwAW.js} +1 -1
  198. package/dist/web/assets/{diagram-5GNKFQAL-BBv9SoKB.js → diagram-5GNKFQAL-D0VOgGBN.js} +1 -1
  199. package/dist/web/assets/{diagram-KO2AKTUF-DV5NTHkX.js → diagram-KO2AKTUF-OkBj16PX.js} +1 -1
  200. package/dist/web/assets/{diagram-LMA3HP47-eNPojcJF.js → diagram-LMA3HP47-Ca28pfZT.js} +1 -1
  201. package/dist/web/assets/{diagram-OG6HWLK6-DYNkChUG.js → diagram-OG6HWLK6-BdQf7KOI.js} +1 -1
  202. package/dist/web/assets/{erDiagram-TEJ5UH35-ZXZ2vyVY.js → erDiagram-TEJ5UH35-Bf80VYE6.js} +1 -1
  203. package/dist/web/assets/{flowDiagram-I6XJVG4X-E8oqHUJx.js → flowDiagram-I6XJVG4X-BZWZqm_C.js} +1 -1
  204. package/dist/web/assets/{folder-BxT7ExMF.js → folder-C-l50KQ-.js} +1 -1
  205. package/dist/web/assets/folder-picker-ROPpPW7C.js +1 -0
  206. package/dist/web/assets/ganttDiagram-6RSMTGT7-CWf25QDV.js +292 -0
  207. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-3dNQBESX.js → gitGraphDiagram-PVQCEYII-9cyYoW83.js} +1 -1
  208. package/dist/web/assets/index-3VWij2vw.js +122 -0
  209. package/dist/web/assets/index-C4wUDrio.css +1 -0
  210. package/dist/web/assets/{index-DhYpUXuu.js → index-Cask0_DN.js} +4 -4
  211. package/dist/web/assets/{infoDiagram-5YYISTIA-DkDDpqvX.js → infoDiagram-5YYISTIA-DWSuhoXN.js} +1 -1
  212. package/dist/web/assets/{input-CupQF5Np.js → input-Dyl1onpD.js} +1 -1
  213. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BSm79ZFA.js → ishikawaDiagram-YF4QCWOH-BfxkZcbP.js} +1 -1
  214. package/dist/web/assets/{journeyDiagram-JHISSGLW-BCP6kLky.js → journeyDiagram-JHISSGLW-keJyzDNt.js} +1 -1
  215. package/dist/web/assets/{kanban-definition-UN3LZRKU-jzLQwKw3.js → kanban-definition-UN3LZRKU-wo8SY3VQ.js} +1 -1
  216. package/dist/web/assets/{layers-CCP9NEZU.js → layers-CT4P8Wt_.js} +1 -1
  217. package/dist/web/assets/{linear-DWq5jvYH.js → linear-DXmYF97H.js} +1 -1
  218. package/dist/web/assets/mermaid-NOHMQCX5-DjJdrIaK.js +123 -0
  219. package/dist/web/assets/{message-square-tSoG7yGO.js → message-square-B0uoScMB.js} +1 -1
  220. package/dist/web/assets/{mindmap-definition-RKZ34NQL-C5FxGBPQ.js → mindmap-definition-RKZ34NQL-BR1VqGMr.js} +1 -1
  221. package/dist/web/assets/modal-CN741Elc.js +1 -0
  222. package/dist/web/assets/{pencil-BOmVWDhP.js → pencil-B05Eh9uE.js} +1 -1
  223. package/dist/web/assets/{pieDiagram-4H26LBE5-CmWVRs82.js → pieDiagram-4H26LBE5-DmIVi6kN.js} +1 -1
  224. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-B4s3NNDO.js → quadrantDiagram-W4KKPZXB-Bh1fx3P_.js} +1 -1
  225. package/dist/web/assets/{requirementDiagram-4Y6WPE33-C2KmzOV2.js → requirementDiagram-4Y6WPE33-BheNLVEb.js} +1 -1
  226. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-CJbPnzq8.js → sankeyDiagram-5OEKKPKP-CWuQByUh.js} +1 -1
  227. package/dist/web/assets/select-B2NVUyiF.js +1 -0
  228. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BFea2ow4.js → sequenceDiagram-3UESZ5HK-Blll85Hd.js} +1 -1
  229. package/dist/web/assets/{stateDiagram-AJRCARHV-osdtBRSX.js → stateDiagram-AJRCARHV-C31npQBQ.js} +1 -1
  230. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-BXcVcTJl.js +1 -0
  231. package/dist/web/assets/switch-BiB7Kgpg.js +1 -0
  232. package/dist/web/assets/{textarea-Cj61Z7ha.js → textarea-Du_ydNYw.js} +1 -1
  233. package/dist/web/assets/{timeline-definition-PNZ67QCA-BlXV0jf2.js → timeline-definition-PNZ67QCA-BXjt2YG8.js} +1 -1
  234. package/dist/web/assets/{trash-2-D2zJVeEr.js → trash-2-CWVsy23V.js} +1 -1
  235. package/dist/web/assets/upload-C-wK_vWU.js +1 -0
  236. package/dist/web/assets/{use-profiles-BSYIQUHp.js → use-profiles-DwPVupVL.js} +1 -1
  237. package/dist/web/assets/{use-providers-Ct5qGj1d.js → use-providers-C-PIoFvi.js} +1 -1
  238. package/dist/web/assets/useNormalizedLogs-CGOi3cNq.js +1 -0
  239. package/dist/web/assets/{vennDiagram-CIIHVFJN-CCuhn7zI.js → vennDiagram-CIIHVFJN-DKpjIApG.js} +1 -1
  240. package/dist/web/assets/{wardley-L42UT6IY-Xu-SY-Xt.js → wardley-L42UT6IY-DvryVGdS.js} +1 -1
  241. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-BDVBG-Eu.js → wardleyDiagram-YWT4CUSO-CtUF9zNr.js} +1 -1
  242. package/dist/web/assets/{xychartDiagram-2RQKCTM6-DC5IWyMr.js → xychartDiagram-2RQKCTM6-Qx4Q-1Xq.js} +1 -1
  243. package/dist/web/index.html +2 -2
  244. package/node_modules/@agent-tower/shared/dist/types.d.ts +123 -0
  245. package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
  246. package/node_modules/@prisma/client/.prisma/client/edge.js +2 -2
  247. package/node_modules/@prisma/client/.prisma/client/index.js +2 -2
  248. package/package.json +1 -1
  249. package/dist/web/assets/AgentLogo-O_lfAIQi.js +0 -1
  250. package/dist/web/assets/ConversationPage-t8BHC8qL.js +0 -3
  251. package/dist/web/assets/CreateTaskInput-D5aroK_o.js +0 -2
  252. package/dist/web/assets/McpSettingsPage-B4hjk8Q6.js +0 -1
  253. package/dist/web/assets/NotificationSettingsPage-DiUyq7V-.js +0 -1
  254. package/dist/web/assets/ProjectKanbanPage-klp2fAN1.js +0 -89
  255. package/dist/web/assets/ProjectSettingsPage-D2gQsbTJ.js +0 -2
  256. package/dist/web/assets/TeamSettingsPage-CZgtzFUH.js +0 -1
  257. package/dist/web/assets/architectureDiagram-3BPJPVTR-B4nGdxyB.js +0 -36
  258. package/dist/web/assets/channel-ByQ8jatA.js +0 -1
  259. package/dist/web/assets/check-EXzHBr5H.js +0 -1
  260. package/dist/web/assets/chevron-right-DZo7j27r.js +0 -1
  261. package/dist/web/assets/classDiagram-4FO5ZUOK-BTR6CDm1.js +0 -1
  262. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BTR6CDm1.js +0 -1
  263. package/dist/web/assets/confirm-dialog-IGqDL03n.js +0 -1
  264. package/dist/web/assets/cose-bilkent-S5V4N54A-2VABc7UM.js +0 -1
  265. package/dist/web/assets/folder-picker-57gIIPSi.js +0 -1
  266. package/dist/web/assets/ganttDiagram-6RSMTGT7-CEAjt7Nr.js +0 -292
  267. package/dist/web/assets/index-B2TV-FU2.js +0 -120
  268. package/dist/web/assets/index-D1vY2KQU.css +0 -1
  269. package/dist/web/assets/loader-circle-RvIxJahM.js +0 -1
  270. package/dist/web/assets/mermaid-NOHMQCX5-v8DEF9xx.js +0 -122
  271. package/dist/web/assets/modal-Dc2shjmi.js +0 -1
  272. package/dist/web/assets/rotate-ccw-BJfFrvl2.js +0 -1
  273. package/dist/web/assets/select-C_UWYFsQ.js +0 -1
  274. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-ChsboHHf.js +0 -1
  275. package/dist/web/assets/switch-C6O0UllM.js +0 -1
  276. package/dist/web/assets/terminal-BKrr_mRJ.js +0 -1
  277. package/dist/web/assets/upload-Q5mYpwnh.js +0 -1
  278. package/dist/web/assets/useNormalizedLogs-DqPhzW9t.js +0 -1
@@ -378,7 +378,7 @@ const config = {
378
378
  "value": "prisma-client-js"
379
379
  },
380
380
  "output": {
381
- "value": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/team/6b3ac1ac/main/7f074404/node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/@prisma/client",
381
+ "value": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/d55736af/node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/@prisma/client",
382
382
  "fromEnvVar": null
383
383
  },
384
384
  "config": {
@@ -396,7 +396,7 @@ const config = {
396
396
  }
397
397
  ],
398
398
  "previewFeatures": [],
399
- "sourceFilePath": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/team/6b3ac1ac/main/7f074404/packages/server/prisma/schema.prisma"
399
+ "sourceFilePath": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/d55736af/packages/server/prisma/schema.prisma"
400
400
  },
401
401
  "relativeEnvPaths": {
402
402
  "rootEnvPath": null
@@ -379,7 +379,7 @@ const config = {
379
379
  "value": "prisma-client-js"
380
380
  },
381
381
  "output": {
382
- "value": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/team/6b3ac1ac/main/7f074404/node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/@prisma/client",
382
+ "value": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/d55736af/node_modules/.pnpm/@prisma+client@5.22.0_prisma@5.22.0/node_modules/@prisma/client",
383
383
  "fromEnvVar": null
384
384
  },
385
385
  "config": {
@@ -397,7 +397,7 @@ const config = {
397
397
  }
398
398
  ],
399
399
  "previewFeatures": [],
400
- "sourceFilePath": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/team/6b3ac1ac/main/7f074404/packages/server/prisma/schema.prisma"
400
+ "sourceFilePath": "/Users/shitian/Work/shitian/agent-tower/.worktrees/at/d55736af/packages/server/prisma/schema.prisma"
401
401
  },
402
402
  "relativeEnvPaths": {
403
403
  "rootEnvPath": null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-tower",
3
- "version": "0.5.3-beta.6",
3
+ "version": "0.5.3-beta.8",
4
4
  "description": "AI Agent Task Management Dashboard",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- import{r as a,j as s,C as g,g as o}from"./index-B2TV-FU2.js";import{g as u}from"./mermaid-NOHMQCX5-v8DEF9xx.js";function d({agentType:n,className:t,fallbackClassName:i}){const e=u(n),[c,r]=a.useState(!1);return a.useEffect(()=>{r(!1)},[e?.logoSrc]),!e||c?s.jsx(g,{"aria-hidden":"true",className:o("shrink-0 text-muted-foreground",t,i)}):s.jsx("img",{src:e.logoSrc,alt:"","aria-hidden":"true",className:o("shrink-0 object-contain",t),draggable:!1,onError:()=>r(!0)})}export{d as A};
@@ -1,3 +0,0 @@
1
- import{h as Ee,u as le,r,j as e,g as b,i as ve,k as Z,l as ce,q as h,m as _,V as Ae,M as Te,W as Le,I as Pe,J as he,O as Me,Y as Re,Z as oe}from"./index-B2TV-FU2.js";import{b as qe,S as w}from"./mermaid-NOHMQCX5-v8DEF9xx.js";import{u as Oe,a as ze,T as Fe,P as Ke,S as Qe}from"./useNormalizedLogs-DqPhzW9t.js";import{u as Ue,a as Be,b as _e,A as $e,c as Ge,P as Ve,T as He,d as We,B as Je,e as Ye,S as Ze,f as ye,C as Xe}from"./CreateTaskInput-D5aroK_o.js";import{u as et}from"./use-providers-Ct5qGj1d.js";import{M as fe}from"./message-square-tSoG7yGO.js";import{A as tt}from"./arrow-left-CH7x-bnE.js";import{T as st}from"./trash-2-D2zJVeEr.js";import"./chevron-right-DZo7j27r.js";import"./chevron-down-CBY3fFTT.js";import"./check-EXzHBr5H.js";import"./AgentLogo-O_lfAIQi.js";import"./loader-circle-RvIxJahM.js";import"./MemberAvatar-DmWOKCwf.js";import"./folder-BxT7ExMF.js";const nt=[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["path",{d:"M14 4h7",key:"3xa0d5"}],["path",{d:"M14 9h7",key:"1icrd9"}],["path",{d:"M14 15h7",key:"1mj8o2"}],["path",{d:"M14 20h7",key:"11slyb"}]],rt=Ee("layout-list",nt);function at(t){return t===w.RUNNING||t===w.PENDING}function ot({sessionId:t,sessionStatus:n,agentType:o,providerId:c,providers:N,initialTokenUsage:f,onProviderChange:j,onSend:v,onStop:y,onExit:D,isSending:p=!1,isStopping:C=!1,canStop:S,className:$}){const{t:a}=le(),[m,q]=r.useState(""),[O,z]=r.useState(c??""),[k,G]=r.useState(!1),[X,ee]=r.useState(null),T=r.useRef(null),te=r.useRef(null),de=r.useRef(null),L=r.useRef(!1),{scrollRef:V,contentRef:se,isAtBottom:l,scrollToBottom:A}=Ue({initial:"instant",resize:"smooth"}),{isConnected:ne,isLoadingSnapshot:H,logs:F,entries:K,attach:Q}=Oe({sessionId:t,sessionStatus:n,onExit:D}),{todos:I}=ze(K),re=Be(F,f),{files:ue,addFiles:E,removeFile:me,clear:W,buildMarkdownLinks:ae,getDoneAttachments:J,hasFiles:P,isUploading:M}=_e(),U=at(n),Y=S??U;r.useEffect(()=>{z(c??"")},[c]),r.useEffect(()=>{t&&ne&&Q()},[t,ne,Q]);const s=r.useCallback(d=>{z(d),j?.(d)},[j]),i=r.useCallback(()=>{T.current&&(T.current.style.height="60px")},[]),u=r.useCallback(d=>{q(d.target.value);const g=d.target;g.style.height="auto",g.style.height=`${Math.max(60,Math.min(g.scrollHeight,300))}px`},[]),x=r.useCallback(async()=>{if(!m.trim()&&!P||L.current||p||M)return;L.current=!0;const d=ae(),g=J().map(R=>R.id),B=[m.trim(),d].filter(Boolean).join(`
2
-
3
- `);q(""),W(),i(),ee(null);try{await v({message:B,providerId:O||void 0,attachmentIds:g}),await Q(),requestAnimationFrame(()=>A("smooth"))}catch(R){ee(R instanceof Error?R.message:a("Send failed. Please try again.")),q(B)}finally{L.current=!1}},[m,P,p,M,ae,J,W,i,v,O,Q,A,a]),we=r.useCallback(async()=>{!Y||C||await y()},[Y,C,y]),Ce=r.useCallback(d=>{const g=d.target.files;g&&g.length>0&&E(Array.from(g)),d.target.value=""},[E]),ke=r.useCallback(d=>{const g=d.clipboardData.items,B=[];for(const R of g)if(R.kind==="file"){const xe=R.getAsFile();xe&&B.push(xe)}B.length>0&&(d.preventDefault(),E(B))},[E]),Se=r.useCallback(d=>{d.preventDefault(),G(!0)},[]),Ie=r.useCallback(d=>{d.preventDefault(),G(!1)},[]),De=r.useCallback(d=>{d.preventDefault(),G(!1);const g=d.dataTransfer.files;g.length>0&&E(Array.from(g))},[E]);return e.jsxs("div",{className:b("relative flex min-h-0 flex-1 flex-col bg-background",$),children:[e.jsxs("div",{className:"relative min-h-0 flex-1",children:[e.jsx("div",{ref:V,className:"h-full overflow-y-auto scrollbar-app-thin px-6 pb-4 pt-6",children:e.jsx("div",{ref:se,className:"mx-auto w-full min-w-0 max-w-4xl",children:H?e.jsxs("div",{className:"flex items-center justify-center gap-3 py-12 text-muted-foreground/70",children:[e.jsxs("svg",{className:"h-5 w-5 animate-spin",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),e.jsx("span",{className:"text-sm",children:a("Loading logs...")})]}):F.length===0?e.jsx("div",{className:"py-8 text-center text-muted-foreground/70",children:a(U?"Waiting for agent output...":"No logs recorded for this session.")}):e.jsx(qe,{logs:F})})}),!l&&e.jsxs("button",{type:"button",onClick:()=>A(),className:"absolute bottom-3 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1.5 rounded-full border border-border bg-background/90 px-3 py-1.5 text-xs text-muted-foreground shadow-md backdrop-blur-sm transition-all hover:bg-background hover:text-foreground","aria-label":a("Scroll to bottom"),children:[e.jsx($e,{size:14}),e.jsx("span",{children:a("Back to bottom")})]})]}),I.length>0&&e.jsx("div",{className:"shrink-0 border-t border-border/60 bg-background px-6 pb-1 pt-2",children:e.jsx("div",{className:"mx-auto max-w-4xl",children:e.jsx(Fe,{todos:I})})}),e.jsx("div",{className:"z-10 w-full shrink-0 border-t border-transparent bg-background p-6 pb-6 pt-2",onDragOver:Se,onDragLeave:Ie,onDrop:De,children:e.jsxs("div",{className:"mx-auto max-w-4xl",children:[X?e.jsx("div",{className:"mb-2 text-sm text-destructive",children:X}):null,e.jsxs("div",{ref:de,className:b("relative rounded-xl border bg-background transition-colors duration-200 hover:border-ring/40 focus-within:border-ring/60",k?"border-info bg-info/5":"border-border"),children:[e.jsx(Ge,{files:ue,onRemove:me}),e.jsx("textarea",{ref:T,value:m,onChange:u,onPaste:ke,onKeyDown:d=>{d.key==="Enter"&&!d.shiftKey&&!d.repeat&&!d.nativeEvent.isComposing&&d.nativeEvent.keyCode!==229&&(d.preventDefault(),x())},rows:1,placeholder:a(k?"Drop files here...":t&&!U?"Continue conversation...":"Message Agent..."),className:"w-full resize-none border-none bg-transparent px-4 pb-2 pt-4 text-sm leading-relaxed text-foreground placeholder-muted-foreground/70 focus:outline-none",style:{minHeight:"60px",maxHeight:"300px"}}),e.jsx("input",{ref:te,type:"file",multiple:!0,className:"hidden",onChange:Ce}),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:e.jsx("button",{type:"button",onClick:()=>te.current?.click(),disabled:M,className:"rounded-lg p-2 text-muted-foreground/70 transition-colors hover:bg-muted hover:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",title:a("Upload file"),children:e.jsx(Ke,{size:18})})}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ve,{providers:N,currentProviderId:O,agentType:o,onSelect:s}),e.jsx(He,{usage:re}),Y&&U&&!m.trim()&&!P?e.jsx("button",{type:"button",onClick:we,disabled:C,className:"rounded-lg bg-destructive p-2 text-white transition-all duration-200 hover:bg-destructive/90 disabled:opacity-50",title:a("Stop"),children:e.jsx(Qe,{size:14})}):e.jsx("button",{type:"button",onClick:x,disabled:!m.trim()&&!P||M||p,className:b("rounded-lg p-2 transition-all duration-200",(m.trim()||P)&&!M&&!p?"bg-primary text-primary-foreground hover:bg-primary/90":"cursor-not-allowed bg-transparent text-muted-foreground/50"),title:a("Send"),children:e.jsx(We,{size:18})})]})]})]})]})})]})}function it(t=50){return ve({queryKey:h.conversations.list({limit:t}),queryFn:()=>_.get("/conversations",{params:{limit:String(t)}})})}function lt(t){return ve({queryKey:h.conversations.detail(t??""),queryFn:()=>_.get(`/conversations/${t}`),enabled:!!t})}function ct(){const t=Z();return ce({mutationFn:n=>_.post("/conversations",n),onSuccess:n=>{t.setQueryData(h.conversations.detail(n.id),n),t.invalidateQueries({queryKey:h.conversations.all}),t.invalidateQueries({queryKey:h.sessions.detail(n.sessionId)})}})}function dt(){const t=Z();return ce({mutationFn:({id:n,...o})=>_.post(`/conversations/${n}/message`,o),onSuccess:n=>{t.setQueryData(h.conversations.detail(n.id),n),t.invalidateQueries({queryKey:h.conversations.all}),t.invalidateQueries({queryKey:h.sessions.detail(n.sessionId)})}})}function ut(){const t=Z();return ce({mutationFn:n=>_.post(`/conversations/${n}/stop`),onSuccess:n=>{t.setQueryData(h.conversations.detail(n.id),n),t.invalidateQueries({queryKey:h.conversations.all}),t.invalidateQueries({queryKey:h.sessions.detail(n.sessionId)})}})}function mt(){const t=Z();return ce({mutationFn:n=>_.delete(`/conversations/${n}`),onSuccess:(n,o)=>{t.removeQueries({queryKey:h.conversations.detail(o)}),t.invalidateQueries({queryKey:h.conversations.all})}})}const ft=3e4,Ne="agent-tower:conversation-read-times";function xt(){try{const t=window.localStorage.getItem(Ne);if(!t)return{};const n=JSON.parse(t);return!n||typeof n!="object"||Array.isArray(n)?{}:Object.fromEntries(Object.entries(n).map(([o,c])=>[o,typeof c=="number"?c:Number(c)]).filter(o=>Number.isFinite(o[1])))}catch{return{}}}function pe(t){try{window.localStorage.setItem(Ne,JSON.stringify(t))}catch{}}function ge(t){const n=t.lastActiveAt??t.updatedAt??t.createdAt;if(!n)return 0;const o=new Date(n).getTime();return Number.isFinite(o)?o:0}function ht(t=ft){const[,n]=r.useState(0);r.useEffect(()=>{const o=setInterval(()=>n(c=>c+1),t);return()=>clearInterval(o)},[t])}function ie(t){return t===w.RUNNING||t===w.PENDING}function je(t){if(!t)return"";const n=new Date(t);if(Number.isNaN(n.getTime()))return"";const o=Math.max(0,Math.floor((Date.now()-n.getTime())/1e3));return o<60?oe("{count}s ago",{count:o}):o<3600?oe("{count}m ago",{count:Math.floor(o/60)}):o<86400?oe("{count}h ago",{count:Math.floor(o/3600)}):oe("{count}d ago",{count:Math.floor(o/86400)})}function pt(t,n){switch(t){case w.RUNNING:return n("Running");case w.PENDING:return n("Starting");case w.COMPLETED:return n("Completed");case w.FAILED:return n("Failed");case w.CANCELLED:return n("Stopped");default:return t}}function be({className:t,pulseClassName:n}){return e.jsxs("span",{className:"relative inline-flex h-2 w-2",children:[e.jsx("span",{className:b("absolute inline-flex h-full w-full animate-ping rounded-full",n)}),e.jsx("span",{className:b("relative inline-flex h-2 w-2 rounded-full",t)})]})}function gt({status:t,unread:n}){return ie(t)?e.jsx(be,{className:"bg-success",pulseClassName:"bg-success/70"}):n?e.jsx(be,{className:"bg-warning",pulseClassName:"bg-warning/70"}):null}function bt({conversation:t,selected:n,onSelect:o,onDelete:c,disabled:N,unread:f}){const{t:j}=le(),v=je(t.lastActiveAt??t.createdAt),y=ie(t.status)||f;return e.jsxs("div",{className:b("group ml-4 mr-2 flex items-center rounded-md transition-colors",n?"bg-accent":"hover:bg-accent/50"),children:[e.jsxs("button",{type:"button",onClick:o,title:t.title,className:"flex min-w-0 flex-1 animate-task-enter items-center gap-2.5 rounded-md px-2 py-2 text-left text-sm",children:[e.jsx("span",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center",children:e.jsx(fe,{size:14,className:"text-muted-foreground"})}),e.jsx("span",{className:b("min-w-0 flex-1 truncate",n?"font-medium text-foreground":"text-foreground/90"),children:t.title}),y?e.jsx("span",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center",children:e.jsx(gt,{status:t.status,unread:f})}):e.jsx("span",{className:"flex w-14 shrink-0 items-center justify-end text-[11px] tabular-nums text-muted-foreground/50",children:e.jsx("span",{className:"truncate group-hover:hidden",children:v})})]}),e.jsx("button",{type:"button",onClick:D=>{D.stopPropagation(),c()},disabled:N,className:"mr-1 hidden shrink-0 rounded-md p-1.5 text-muted-foreground hover:bg-background hover:text-destructive disabled:opacity-50 group-hover:flex",title:j("Delete"),children:e.jsx(st,{size:14})})]})}function vt({isOpen:t,conversations:n,onClose:o,onSelectConversation:c}){const{t:N}=le(),[f,j]=r.useState(""),[v,y]=r.useState(0),D=r.useRef(null);r.useEffect(()=>{t&&(j(""),y(0))},[t]);const p=r.useMemo(()=>{const a=f.trim().toLowerCase();return a?n.filter(m=>m.title.toLowerCase().includes(a)).slice(0,50):n.slice(0,12)},[n,f]);r.useEffect(()=>{y(0)},[f]),r.useEffect(()=>{D.current?.children[v]?.scrollIntoView({block:"nearest"})},[v]);const C=r.useCallback(a=>{c(a),o()},[o,c]),S=r.useCallback(a=>{if(a.key==="Escape"){a.preventDefault(),o();return}if(a.key==="ArrowDown"){a.preventDefault(),y(m=>Math.min(m+1,p.length-1));return}if(a.key==="ArrowUp"){a.preventDefault(),y(m=>Math.max(m-1,0));return}if(a.key==="Enter"&&!a.nativeEvent.isComposing){a.preventDefault();const m=p[v];m&&C(m)}},[v,C,o,p]);if(!t)return null;const $=f.trim().length>0;return e.jsxs("div",{className:"fixed inset-0 z-90",role:"dialog","aria-modal":"true",children:[e.jsx("div",{className:"absolute inset-0 bg-black/20",onClick:o}),e.jsxs("div",{className:"absolute left-1/2 top-[18vh] w-[min(560px,calc(100vw-2rem))] -translate-x-1/2 overflow-hidden rounded-xl border border-border bg-popover shadow-lg animate-in fade-in zoom-in-95 duration-100",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/60 px-4",children:[e.jsx(ye,{size:15,className:"shrink-0 text-muted-foreground/70"}),e.jsx("input",{value:f,onChange:a=>j(a.target.value),onKeyDown:S,placeholder:N("Search conversations..."),"aria-label":N("Search conversations..."),autoFocus:!0,className:"flex-1 border-none bg-transparent py-3 text-sm text-foreground placeholder-muted-foreground/60 focus:outline-none"})]}),p.length>0?e.jsxs(e.Fragment,{children:[$?null:e.jsx("div",{className:"px-4 pb-1 pt-2.5 text-[11px] font-medium text-muted-foreground/70",children:N("Recent conversations")}),e.jsx("div",{ref:D,className:"max-h-[46vh] overflow-y-auto pb-1.5 pt-0.5 scrollbar-app-thin",children:p.map((a,m)=>e.jsxs("button",{type:"button",onClick:()=>C(a),onMouseEnter:()=>y(m),className:b("flex w-full items-center gap-2.5 px-4 py-2 text-left transition-colors",m===v&&"bg-accent"),children:[e.jsx(fe,{size:14,className:"shrink-0 text-muted-foreground"}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-sm text-foreground/90",title:a.title,children:a.title}),e.jsx("span",{className:"shrink-0 text-xs tabular-nums text-muted-foreground/60",children:je(a.lastActiveAt??a.createdAt)})]},a.id))})]}):e.jsx("div",{className:"px-4 py-8 text-center text-sm text-muted-foreground/70",children:N("No matching conversations")})]})]})}function Rt(){const{t}=le();ht();const n=Ae(),{usesIntegratedTitlebar:o}=Te(),{conversationId:c}=Le(),N=Z(),[f,j]=r.useState(""),[v,y]=r.useState("idle"),[D,p]=r.useState(null),[C,S]=r.useState(!1),[$,a]=r.useState(!1),[m,q]=r.useState(xt),[O,z]=r.useState(()=>new Set),{data:k=[],isLoading:G}=it(),{data:X,isLoading:ee}=lt(c),{data:T=[],isLoading:te}=et(),de=ct(),L=dt(),V=ut(),se=mt(),l=X??k.find(s=>s.id===c)??null,A=r.useMemo(()=>T.filter(({availability:s})=>s.type!=="NOT_FOUND"),[T]),ne=A.map(({provider:s})=>({id:s.id,name:s.name,agentType:s.agentType,available:!0})),H=!!c,F=H||C,K=r.useCallback(s=>{N.invalidateQueries({queryKey:h.conversations.all}),s&&N.invalidateQueries({queryKey:h.conversations.detail(s)})},[N]),Q=r.useCallback(()=>{K(c)},[c,K]),I=r.useCallback(s=>{if(z(u=>{if(!u.has(s.id))return u;const x=new Set(u);return x.delete(s.id),x}),s.status!==w.COMPLETED)return;const i=Math.max(Date.now(),ge(s));q(u=>{if(u[s.id]&&u[s.id]>=i)return u;const x={...u,[s.id]:i};return pe(x),x})},[]),re=r.useCallback(s=>{z(i=>{if(i.has(s))return i;const u=new Set(i);return u.add(s),u})},[]),ue=r.useCallback(s=>{z(i=>{if(!i.has(s))return i;const u=new Set(i);return u.delete(s),u}),q(i=>{if(!(s in i))return i;const u={...i};return delete u[s],pe(u),u})},[]),E=r.useMemo(()=>{const s=new Map;for(const i of k)s.set(i.sessionId,i);return l&&s.set(l.sessionId,l),s},[l,k]),me=r.useCallback(s=>s.status!==w.COMPLETED?!1:O.has(s.id)?!0:ge(s)>(m[s.id]??0),[m,O]);r.useEffect(()=>{!f&&A.length>0&&j(A[0].provider.id)},[A,f]),r.useEffect(()=>{l?.providerId&&j(l.providerId)},[l?.providerId]),r.useEffect(()=>{c&&S(!1)},[c]),r.useEffect(()=>{l&&I(l)},[l,I]),r.useEffect(()=>{const s=Pe.connect(),i=u=>{const x=E.get(u.sessionId);if(x){if(K(x.id),u.status!==w.COMPLETED){I(x);return}if(x.id===c){I(x);return}re(x.id)}};return s.on(he.SESSION_COMPLETED,i),()=>{s.off(he.SESSION_COMPLETED,i)}},[c,E,K,I,re]);const W=()=>{p(null),S(!0),n("/conversations")},ae=()=>{S(!1),n("/conversations")},J=r.useCallback(s=>{I(s),S(!1),n(`/conversations/${s.id}`)},[I,n]),P=async s=>{if(!(!s.providerId||!s.title.trim()||v!=="idle")){y("starting-session"),p(null);try{const i=await de.mutateAsync({prompt:s.title.trim(),providerId:s.providerId,attachmentIds:s.attachmentIds});j(s.providerId),S(!1),n(`/conversations/${i.id}`)}catch(i){p(i instanceof Error?i.message:t("Failed to start. Please try again."))}finally{y("idle")}}},M=async s=>{!l||!s.message.trim()||L.isPending||await L.mutateAsync({id:l.id,message:s.message,providerId:s.providerId||f||void 0,attachmentIds:s.attachmentIds})},U=async()=>{!l||!ie(l.status)||V.isPending||await V.mutateAsync(l.id)},Y=async s=>{window.confirm(t("Delete this conversation?"))&&(await se.mutateAsync(s),ue(s),c===s&&(S(!1),n("/conversations")))};return e.jsxs("div",{className:"flex h-dvh flex-col overflow-hidden bg-sidebar text-sm text-foreground",children:[e.jsxs("header",{className:b("flex h-12 shrink-0 items-center justify-between bg-sidebar px-4",o&&"app-region-drag"),children:[e.jsxs("div",{className:b("flex min-w-0 items-center gap-2",o&&"pl-[72px]"),children:[e.jsx(Je,{}),e.jsx(Ye,{}),e.jsx("span",{className:"mx-1.5 select-none text-muted-foreground/40",children:"/"}),e.jsx("span",{className:"truncate text-sm font-medium text-foreground/90",children:t("Conversation")})]}),e.jsx("button",{type:"button",onClick:()=>Re.getState().openSettings(),className:b("rounded-md p-1.5 text-muted-foreground/70 transition-colors hover:bg-accent hover:text-foreground",o&&"app-region-no-drag"),title:t("Settings"),children:e.jsx(Me,{size:16})})]}),e.jsxs("div",{className:"flex min-h-0 flex-1 overflow-hidden",children:[e.jsxs("aside",{className:b("h-full w-full shrink-0 flex-col bg-sidebar md:flex md:w-[320px]",F?"hidden md:flex":"flex"),children:[e.jsxs("div",{className:"shrink-0 px-2 pb-1 pt-2",children:[e.jsxs("button",{type:"button",onClick:W,className:b("flex w-full items-center gap-2.5 rounded-md px-2 py-2 text-sm transition-colors",C?"bg-accent text-foreground":"text-foreground/80 hover:bg-accent/50"),title:t("New Conversation"),children:[e.jsx(Ze,{size:16,className:"text-muted-foreground"}),e.jsx("span",{children:t("New Conversation")})]}),e.jsxs("button",{type:"button",onClick:()=>n("/"),className:"flex w-full items-center gap-2.5 rounded-md px-2 py-2 text-sm text-foreground/80 transition-colors hover:bg-accent/50",title:t("Tasks"),children:[e.jsx(rt,{size:16,className:"text-muted-foreground"}),e.jsx("span",{children:t("Tasks")})]}),e.jsxs("button",{type:"button",onClick:()=>a(!0),className:"flex w-full items-center gap-2.5 rounded-md px-2 py-2 text-sm text-foreground/80 transition-colors hover:bg-accent/50",title:t("Search"),children:[e.jsx(ye,{size:16,className:"text-muted-foreground"}),e.jsx("span",{children:t("Search")})]})]}),e.jsx("div",{className:"relative min-h-0 flex-1 overflow-y-auto scrollbar-app-thin pb-4 pt-3",children:G?e.jsx("div",{className:"px-4 py-4 text-sm text-muted-foreground",children:t("Loading...")}):k.length===0?e.jsxs("div",{className:"flex h-full select-none flex-col items-center justify-center px-6 text-center",children:[e.jsx(fe,{size:36,className:"mb-3 text-muted-foreground/40",strokeWidth:1.5}),e.jsx("p",{className:"mb-4 text-sm text-muted-foreground",children:t("No conversations")}),e.jsx("button",{type:"button",onClick:W,className:"rounded-md bg-brand px-3.5 py-1.5 text-xs font-medium text-brand-foreground transition-colors hover:bg-brand/90",children:t("New Conversation")})]}):e.jsxs("div",{className:"mb-2",children:[e.jsxs("div",{className:"flex w-full items-center gap-1.5 px-4 py-1.5 text-xs font-medium text-muted-foreground",children:[e.jsx("span",{className:"flex-1 text-left",children:t("History")}),e.jsx("span",{className:"text-[11px] font-normal tabular-nums text-muted-foreground/50",children:k.length})]}),e.jsx("div",{className:"mt-0.5 flex min-h-[40px] flex-col rounded-md",children:k.map(s=>e.jsx(bt,{conversation:s,selected:s.id===c,disabled:se.isPending,unread:s.id!==c&&me(s),onSelect:()=>J(s),onDelete:()=>Y(s.id)},s.id))})]})}),e.jsx("div",{className:"flex items-center justify-between border-t border-border/60 px-4 py-3 text-xs text-muted-foreground/70",children:e.jsxs("span",{children:[t("Conversations")," · ",k.length]})})]}),e.jsxs("main",{className:b("min-w-0 flex-1 flex-col bg-background md:mb-2 md:mr-2 md:overflow-hidden md:rounded-xl md:border md:border-border/50",F?"flex":"hidden md:flex"),children:[e.jsx("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border/60 px-4 md:px-5",children:e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[H||C?e.jsx("button",{type:"button",className:"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground md:hidden",onClick:ae,title:t("Back"),children:e.jsx(tt,{size:17})}):null,e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-semibold",children:l?.title??t("New Conversation")}),l?e.jsxs("div",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[pt(l.status,t),l.directoryName?` · ${l.directoryName}`:""]}):null]})]})}),!l&&H?e.jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center px-4 text-sm text-muted-foreground",children:t(ee?"Loading...":"Conversation not found")}):l?e.jsx(ot,{sessionId:l.sessionId,sessionStatus:l.status,agentType:l.agentType,providerId:f||l.providerId,providers:T,initialTokenUsage:l.tokenUsage,onProviderChange:j,onSend:M,onStop:U,onExit:Q,isSending:L.isPending,isStopping:V.isPending,canStop:ie(l.status)}):e.jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center overflow-y-auto px-4 pb-[10vh] md:px-8",children:e.jsxs("div",{className:"w-full max-w-2xl animate-[fadeInUp_0.5s_cubic-bezier(0.16,1,0.3,1)]",children:[e.jsx("h1",{className:"mb-8 max-w-full break-words text-center text-3xl leading-tight tracking-tight text-foreground",children:t("需要我帮你做点什么?")}),e.jsx(Xe,{variant:"conversation",projects:[],providers:ne,isProvidersLoading:te,defaultProviderId:f,createStep:v,placeholder:"Ask a question...",submitLabel:"Start",pendingLabel:"Starting...",submitTitle:"Start",onSubmit:async({title:s,providerId:i,attachmentIds:u})=>{await P({title:s,providerId:i,attachmentIds:u})}}),D?e.jsx("div",{className:"mt-3 rounded-lg border border-destructive/15 bg-destructive/5 px-3 py-2 text-sm text-destructive",children:D}):null]})})]})]}),e.jsx(vt,{isOpen:$,conversations:k,onClose:()=>a(!1),onSelectConversation:J})]})}export{Rt as ConversationPage};
@@ -1,2 +0,0 @@
1
- import{h as $,j as e,u as ce,r,a0 as Ce,X as ze,i as qe,m as Ke,M as He,s as Ge,v as Ye,N as Me,g as b,a1 as Ve,a2 as Xe}from"./index-B2TV-FU2.js";import{W as F}from"./mermaid-NOHMQCX5-v8DEF9xx.js";import{A as te}from"./AgentLogo-O_lfAIQi.js";import{C as se}from"./chevron-down-CBY3fFTT.js";import{C as J}from"./check-EXzHBr5H.js";import{L as re}from"./loader-circle-RvIxJahM.js";import{M as Ee}from"./MemberAvatar-DmWOKCwf.js";import{u as Ze}from"./use-providers-Ct5qGj1d.js";import{P as Je}from"./trash-2-D2zJVeEr.js";import{P as Qe}from"./useNormalizedLogs-DqPhzW9t.js";import{F as et}from"./folder-BxT7ExMF.js";const tt=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Ht=$("arrow-down",tt);const st=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],rt=$("arrow-up",st);const nt=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],at=$("file-text",nt);const ot=[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]],it=$("gauge",ot);const lt=[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]],ct=$("git-branch",lt);const dt=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],ut=$("image",dt);const mt=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Gt=$("search",mt);const ft=[["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"}]],xt=$("shield",ft);const pt=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],Yt=$("square-pen",pt);const gt=[["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"}]],ht=$("zap",gt);function bt({content:s,children:i,className:l="",side:d="top"}){const g=d==="bottom"?"top-full mt-2":"bottom-full mb-2",v=d==="bottom"?"bottom-full border-b-neutral-900":"top-full border-t-neutral-900";return e.jsxs("div",{className:`group/tooltip relative ${l}`,children:[i,e.jsxs("div",{className:`absolute ${g} left-1/2 -translate-x-1/2 px-3 py-2 bg-neutral-900 text-white text-xs rounded-lg opacity-0 group-hover/tooltip:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-[100] shadow-lg`,children:[s,e.jsx("div",{className:`absolute ${v} left-1/2 -translate-x-1/2 border-4 border-transparent`})]})]})}function le(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:s.toString()}function vt(s){return s>=.9?"text-red-500":s>=.7?"text-amber-500":"text-neutral-400"}function Vt({usage:s,tooltipSide:i="top"}){const{t:l}=ce();if(!s)return null;const d=s.modelContextWindow,g=d?s.totalTokens/d:0,v=d?Math.min(Math.round(g*100),100):null,m=d?vt(g):"text-neutral-400",y=d?e.jsx("span",{children:l("上下文: {used} / {max} tokens",{used:le(s.totalTokens),max:le(d)})}):e.jsx("span",{children:l("已使用: {used} tokens",{used:le(s.totalTokens)})});return e.jsx(bt,{content:y,side:i,children:e.jsxs("div",{className:"flex items-center gap-1.5 px-2 py-1.5 text-xs rounded-lg hover:bg-neutral-100 transition-colors cursor-default select-none",children:[e.jsx(it,{size:14,className:m}),e.jsxs("span",{className:`tabular-nums ${m}`,children:[le(s.totalTokens),v!==null&&e.jsxs("span",{className:"text-neutral-300 ml-0.5",children:["/ ",v,"%"]})]})]})})}const jt={damping:.7,stiffness:.05,mass:1.25},Nt=70,yt=1e3/60,kt=350;let de=!1;globalThis.document?.addEventListener("mousedown",()=>{de=!0});globalThis.document?.addEventListener("mouseup",()=>{de=!1});globalThis.document?.addEventListener("click",()=>{de=!1});const Xt=(s={})=>{const[i,l]=r.useState(!1),[d,g]=r.useState(s.initial!==!1),[v,m]=r.useState(!1),y=r.useRef(null);y.current=s;const f=r.useCallback(()=>{if(!de)return!1;const o=window.getSelection();if(!o||!o.rangeCount)return!1;const p=o.getRangeAt(0);return p.commonAncestorContainer.contains(u.current)||u.current?.contains(p.commonAncestorContainer)},[]),j=r.useCallback(o=>{t.isAtBottom=o,g(o)},[]),x=r.useCallback(o=>{t.escapedFromLock=o,l(o)},[]),t=r.useMemo(()=>{let o;return{escapedFromLock:i,isAtBottom:d,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return u.current?.scrollTop??0},set scrollTop(p){u.current&&(u.current.scrollTop=p,t.ignoreScrollToTop=u.current.scrollTop)},get targetScrollTop(){return!u.current||!B.current?0:u.current.scrollHeight-1-u.current.clientHeight},get calculatedTargetScrollTop(){if(!u.current||!B.current)return 0;const{targetScrollTop:p}=this;if(!s.targetScrollTop)return p;if(o?.targetScrollTop===p)return o.calculatedScrollTop;const h=Math.max(Math.min(s.targetScrollTop(p,{scrollElement:u.current,contentElement:B.current}),p),0);return o={targetScrollTop:p,calculatedScrollTop:h},requestAnimationFrame(()=>{o=void 0}),h},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=Nt}}},[]),k=r.useCallback((o={})=>{typeof o=="string"&&(o={animation:o}),o.preserveScrollPosition||j(!0);const p=Date.now()+(Number(o.wait)||0),h=he(y.current,o.animation),{ignoreEscapes:M=!1}=o;let S,L=t.calculatedTargetScrollTop;o.duration instanceof Promise?o.duration.finally(()=>{S=Date.now()}):S=p+(o.duration??0);const z=async()=>{const K=new Promise(requestAnimationFrame).then(()=>{if(!t.isAtBottom)return t.animation=void 0,!1;const{scrollTop:_}=t,H=performance.now(),W=(H-(t.lastTick??H))/yt;if(t.animation||(t.animation={behavior:h,promise:K,ignoreEscapes:M}),t.animation.behavior===h&&(t.lastTick=H),f()||p>Date.now())return z();if(_<Math.min(L,t.calculatedTargetScrollTop)){if(t.animation?.behavior===h){if(h==="instant")return t.scrollTop=t.calculatedTargetScrollTop,z();t.velocity=(h.damping*t.velocity+h.stiffness*t.scrollDifference)/h.mass,t.accumulated+=t.velocity*W,t.scrollTop+=t.accumulated,t.scrollTop!==_&&(t.accumulated=0)}return z()}return S>Date.now()?(L=t.calculatedTargetScrollTop,z()):(t.animation=void 0,t.scrollTop<t.calculatedTargetScrollTop?k({animation:he(y.current,y.current.resize),ignoreEscapes:M,duration:Math.max(0,S-Date.now())||void 0}):t.isAtBottom)});return K.then(_=>(requestAnimationFrame(()=>{t.animation||(t.lastTick=void 0,t.velocity=0)}),_))};return o.wait!==!0&&(t.animation=void 0),t.animation?.behavior===h?t.animation.promise:z()},[j,f,t]),c=r.useCallback(()=>{x(!0),j(!1)},[x,j]),T=r.useCallback(({target:o})=>{if(o!==u.current)return;const{scrollTop:p,ignoreScrollToTop:h}=t;let{lastScrollTop:M=p}=t;t.lastScrollTop=p,t.ignoreScrollToTop=void 0,h&&h>p&&(M=h),m(t.isNearBottom),setTimeout(()=>{if(t.resizeDifference||p===h)return;if(f()){x(!0),j(!1);return}const S=p>M,L=p<M;if(t.animation?.ignoreEscapes){t.scrollTop=M;return}L&&(x(!0),j(!1)),S&&x(!1),!t.escapedFromLock&&t.isNearBottom&&j(!0)},1)},[x,j,f,t]),C=r.useCallback(({target:o,deltaY:p})=>{let h=o;for(;!["scroll","auto"].includes(getComputedStyle(h).overflow);){if(!h.parentElement)return;h=h.parentElement}h===u.current&&p<0&&u.current.scrollHeight>u.current.clientHeight&&!t.animation?.ignoreEscapes&&(x(!0),j(!1))},[x,j,t]),u=Ae(o=>{u.current?.removeEventListener("scroll",T),u.current?.removeEventListener("wheel",C),o?.addEventListener("scroll",T,{passive:!0}),o?.addEventListener("wheel",C,{passive:!0})},[]),B=Ae(o=>{if(t.resizeObserver?.disconnect(),!o)return;let p;t.resizeObserver=new ResizeObserver(([h])=>{const{height:M}=h.contentRect,S=M-(p??M);if(t.resizeDifference=S,t.scrollTop>t.targetScrollTop&&(t.scrollTop=t.targetScrollTop),m(t.isNearBottom),S>=0){const L=he(y.current,p?y.current.resize:y.current.initial);k({animation:L,wait:!0,preserveScrollPosition:!0,duration:L==="instant"?void 0:kt})}else t.isNearBottom&&(x(!1),j(!0));p=M,requestAnimationFrame(()=>{setTimeout(()=>{t.resizeDifference===S&&(t.resizeDifference=0)},1)})}),t.resizeObserver?.observe(o)},[]);return{contentRef:B,scrollRef:u,scrollToBottom:k,stopScroll:c,isAtBottom:d||v,isNearBottom:v,escapedFromLock:i,state:t}};function Ae(s,i){const l=r.useCallback(d=>(l.current=d,s(d)),i);return l}const ge=new Map;function he(...s){const i={...jt};let l=!1;for(const g of s){if(g==="instant"){l=!0;continue}typeof g=="object"&&(l=!1,i.damping=g.damping??i.damping,i.stiffness=g.stiffness??i.stiffness,i.mass=g.mass??i.mass)}const d=JSON.stringify(i);return ge.has(d)||ge.set(d,Object.freeze(i)),l?"instant":ge.get(d)}function Zt({providers:s,currentProviderId:i,agentType:l,onSelect:d}){const{t:g}=ce(),[v,m]=r.useState(!1),y=r.useRef(null),f=s.filter(x=>String(x.provider.agentType)===l),j=s.find(x=>x.provider.id===i);return r.useEffect(()=>{function x(t){y.current&&!y.current.contains(t.target)&&m(!1)}if(v)return document.addEventListener("mousedown",x),()=>document.removeEventListener("mousedown",x)},[v]),f.length<=1?e.jsxs("div",{className:"flex items-center gap-1 text-xs text-neutral-400 px-2 py-1.5 select-none cursor-default",children:[e.jsx(te,{agentType:j?.provider.agentType??l,className:"size-3.5"}),e.jsx("span",{className:"min-w-0 truncate",children:j?.provider.name?Ce(j.provider.name,12):l})]}):e.jsxs("div",{className:"relative",ref:y,children:[e.jsxs("button",{onClick:()=>m(!v),className:"flex items-center gap-1 text-xs px-2 py-1.5 rounded-lg transition-colors cursor-pointer hover:bg-neutral-100 text-neutral-400 hover:text-neutral-600",title:`Provider: ${j?.provider.name??l} (click to change)`,children:[e.jsx(te,{agentType:j?.provider.agentType??l,className:"size-3.5"}),e.jsx("span",{className:"min-w-0 truncate",children:j?.provider.name?Ce(j.provider.name,12):l}),e.jsx(se,{size:12,className:`shrink-0 transition-transform ${v?"rotate-180":""}`})]}),v&&e.jsxs("div",{className:"absolute bottom-full right-0 mb-1 bg-white rounded-lg border border-neutral-200 shadow-lg py-1 min-w-[160px] z-50",children:[e.jsx("div",{className:"px-2 py-1 text-xs text-neutral-400 border-b border-neutral-100",children:g("切换渠道")}),f.map(x=>e.jsxs("button",{onClick:()=>{d(x.provider.id),m(!1)},className:`w-full flex items-center justify-between px-3 py-2 text-sm text-left hover:bg-neutral-50 transition-colors ${x.provider.id===i?"bg-blue-50 text-blue-600":"text-neutral-700"}`,children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[e.jsx(te,{agentType:x.provider.agentType,className:"size-4"}),e.jsx("span",{className:"truncate max-w-[120px]",children:x.provider.name}),x.provider.isDefault&&e.jsx("span",{className:"text-xs text-neutral-400",children:g("(默认)")})]}),x.provider.id===i&&e.jsx(J,{size:14,className:"shrink-0"})]},x.provider.id))]})]})}const wt="/api";function Tt(s){return s<1024?`${s}B`:s<1024*1024?`${(s/1024).toFixed(1)}KB`:`${(s/(1024*1024)).toFixed(1)}MB`}function St({files:s,onRemove:i}){return s.length===0?null:e.jsx("div",{"aria-label":"Attachments",className:"flex flex-wrap gap-2 px-4 pt-3 pb-1",children:s.map(l=>e.jsx(Ct,{item:l,onRemove:i},l.tempId))})}function Ct({item:s,onRemove:i}){const l=s.file.type.startsWith("image/"),d=s.status==="error",g=s.status==="uploading";return e.jsxs("div",{className:`relative group flex items-center gap-2 px-3 py-2 rounded-lg border text-xs max-w-[200px] ${d?"border-red-200 bg-red-50 text-red-600":"border-neutral-200 bg-neutral-50 text-neutral-700"}`,children:[l&&s.status==="done"&&s.attachment?e.jsx("img",{src:`${wt}${s.attachment.url}`,alt:s.file.name,className:"w-8 h-8 rounded object-cover flex-shrink-0"}):e.jsx("span",{className:"flex-shrink-0",children:g?e.jsx(re,{size:16,className:"animate-spin text-neutral-400"}):l?e.jsx(ut,{size:16,className:"text-neutral-400"}):e.jsx(at,{size:16,className:"text-neutral-400"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate font-medium",children:s.file.name}),d?e.jsx("div",{className:"truncate text-red-500",children:s.error}):e.jsx("div",{className:"text-neutral-400",children:Tt(s.file.size)})]}),e.jsx("button",{onClick:()=>i(s.tempId),className:"absolute -top-1.5 -right-1.5 hidden group-hover:flex items-center justify-center w-5 h-5 rounded-full bg-neutral-700 text-white hover:bg-neutral-900 transition-colors",children:e.jsx(ze,{size:10})})]})}const Mt="/api";async function Et(s){const i=new FormData;i.append("file",s);const l=await fetch(`${Mt}/attachments/upload`,{method:"POST",body:i});if(!l.ok){const d=await l.json().catch(()=>({}));throw new Error(d.error||`Upload failed (${l.status})`)}return l.json()}let At=0;function It(){const[s,i]=r.useState([]),l=r.useRef(s);l.current=s;const d=r.useCallback(async t=>{const k=t.map(c=>({tempId:`tmp-${++At}`,file:c,progress:0,status:"uploading"}));i(c=>[...c,...k]),await Promise.allSettled(k.map(async c=>{try{const T=await Et(c.file);i(C=>C.map(u=>u.tempId===c.tempId?{...u,status:"done",progress:100,attachment:T}:u))}catch(T){i(C=>C.map(u=>u.tempId===c.tempId?{...u,status:"error",error:T instanceof Error?T.message:"Upload failed"}:u))}}))},[]),g=r.useCallback(()=>l.current.filter(t=>t.status==="done"&&t.attachment).map(t=>t.attachment),[]),v=r.useCallback(t=>{i(k=>k.filter(c=>c.tempId!==t))},[]),m=r.useCallback(()=>{i([])},[]),y=r.useCallback(t=>{t.length!==0&&i(k=>{const c=new Set(k.map(C=>C.attachment?.id??C.tempId)),T=t.filter(C=>{const u=C.attachment?.id??C.tempId;return c.has(u)?!1:(c.add(u),!0)});return T.length>0?[...k,...T]:k})},[]),f=r.useCallback(()=>{const t=g();return t.length===0?"":t.map(k=>`${k.mimeType.startsWith("image/")?"!":""}[${k.originalName}](${k.storagePath})`).join(`
2
- `)},[g]),j=s.length>0,x=s.some(t=>t.status==="uploading");return{files:s,addFiles:d,removeFile:v,clear:m,restoreFiles:y,buildMarkdownLinks:f,getDoneAttachments:g,hasFiles:j,isUploading:x}}function Jt(s){const i=r.useMemo(()=>Array.from(new Set(s.filter(Boolean))),[s]);return qe({queryKey:["attachments","metadata",i],queryFn:()=>Ke.get("/attachments/metadata",{params:{ids:i.join(",")}}),enabled:i.length>0,staleTime:300*1e3})}function Qt(s,i){return r.useMemo(()=>{for(let l=s.length-1;l>=0;l--){const d=s[l];if(d.tokenUsage&&typeof d.tokenUsage.totalTokens=="number"&&d.tokenUsage.totalTokens>0)return{totalTokens:d.tokenUsage.totalTokens,modelContextWindow:d.tokenUsage.modelContextWindow}}return i??null},[s,i])}function Ie(s,i,l,d){if(l.filter(m=>m===d).length<=1)return s;const v=l.slice(0,i+1).filter(m=>m===d).length;return`${s} #${v}`}function zt(s){return Object.values(s).filter(Boolean).length}function Rt({mode:s,setMode:i,selectedTemplateId:l,setSelectedTemplateId:d,selectedMemberPresetIds:g,setSelectedMemberPresetIds:v,disabled:m=!1,compact:y=!1}){const{t:f}=ce(),{preserveDesktopSearch:j}=He(),[x,t]=r.useState(!1),{data:k}=Ze(),{data:c,isError:T,isFetching:C,isLoading:u,refetch:B}=Ge(),{data:o,isError:p,isFetching:h,isLoading:M,refetch:S}=Ye(),L=r.useMemo(()=>new Map((k??[]).map(({provider:a,availability:N})=>[a.id,a.name+(N.type==="NOT_FOUND"?f(" (不可用)"):"")])),[k,f]),z=r.useMemo(()=>new Map((c??[]).map(a=>[a.id,a])),[c]),K=r.useMemo(()=>new Map((o??[]).map(a=>[a.id,a])),[o]),_=r.useMemo(()=>g.map(a=>z.get(a)).filter(a=>!!a),[z,g]);r.useEffect(()=>{c!==void 0&&v(a=>{const N=a.filter(E=>z.has(E));return N.length===a.length&&N.every((E,P)=>E===a[P])?a:N})},[c,z,v]),r.useEffect(()=>{o!==void 0&&d(a=>!a||K.has(a)?a:null)},[d,K,o]);const H=a=>{m||d(N=>N===a?null:a)},W=a=>{m||v(N=>[...N,a])},ue=a=>{m||v(N=>N.filter((E,P)=>P!==a))},ne=e.jsxs("section",{className:"min-w-0",children:[e.jsx("div",{className:"text-[11px] font-medium text-muted-foreground mb-1.5",children:f("团队模板")}),p?e.jsxs("div",{className:"rounded-lg bg-destructive/10 px-3 py-2.5 text-xs text-destructive",children:[e.jsx("span",{children:f("团队模板加载失败")}),e.jsx("button",{type:"button",onClick:()=>{S()},disabled:m||h,className:"ml-2 underline hover:no-underline",children:f("重试")})]}):M?e.jsxs("div",{className:"flex items-center gap-2 py-3 text-xs text-muted-foreground",children:[e.jsx(re,{size:12,className:"animate-spin"}),f("加载中...")]}):(o??[]).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:[f("当前没有团队模板"),e.jsx(Me,{to:j("/settings/team"),className:"ml-1.5 text-info hover:underline",children:f("去创建")})]}):e.jsx("div",{className:b("space-y-1.5",y&&"sm:grid sm:grid-cols-2 sm:gap-1.5 sm:space-y-0"),children:(o??[]).map(a=>{const N=a.id===l,E=a.members?.length??0,P=a.members?.map(U=>U.memberPresetId)??[],q=a.members?.slice(0,3).map((U,me)=>Ie(U.memberPreset?.name??U.memberPresetId,me,P,U.memberPresetId)).join(", ");return e.jsx("button",{type:"button",onClick:()=>H(a.id),disabled:m,className:b("w-full rounded-lg px-3 py-2 text-left border transition-all disabled:cursor-not-allowed disabled:opacity-60",N?"bg-background border-foreground/20 shadow-sm":"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:b("text-xs truncate",N?"font-medium text-foreground":"text-foreground"),children:a.name}),e.jsxs("span",{className:"text-[10px] text-muted-foreground shrink-0",children:[E,f("人")]})]}),q&&e.jsx("div",{className:"mt-0.5 text-[10px] text-muted-foreground truncate",children:q})]}),N&&e.jsx(J,{size:13,className:"shrink-0 text-foreground"})]})},a.id)})})]}),V=_.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mb-2",children:_.map((a,N)=>{const E=Ie(a.name,N,g,a.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-[10px] text-foreground",children:[e.jsx(Ee,{name:a.name,avatar:a.avatar,className:"h-3.5 w-3.5 text-[7px]"}),e.jsx("span",{className:"max-w-[80px] truncate",children:E}),e.jsx("button",{type:"button",onClick:()=>ue(N),disabled:m,className:"p-0.5 text-muted-foreground hover:text-destructive disabled:opacity-30 rounded transition-colors",children:e.jsx(ze,{size:9})})]},`${a.id}-${N}`)})}),G=T?e.jsxs("div",{className:"rounded-lg bg-destructive/10 px-3 py-2.5 text-xs text-destructive",children:[e.jsx("span",{children:f("成员预设加载失败")}),e.jsx("button",{type:"button",onClick:()=>{B()},disabled:m||C,className:"ml-2 underline hover:no-underline",children:f("重试")})]}):u?e.jsxs("div",{className:"flex items-center gap-2 py-3 text-xs text-muted-foreground",children:[e.jsx(re,{size:12,className:"animate-spin"}),f("加载中...")]}):(c??[]).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:[f("当前没有成员预设"),e.jsx(Me,{to:j("/settings/team"),className:"ml-1.5 text-info hover:underline",children:f("去创建")})]}):e.jsx("div",{className:"space-y-1 max-h-[180px] overflow-y-auto pr-1",children:(c??[]).map(a=>{const N=g.filter(q=>q===a.id).length,E=L.get(a.providerId)??a.providerId,P=zt(a.capabilities);return e.jsxs("button",{type:"button",onClick:()=>W(a.id),disabled:m,className:b("flex items-center gap-2 w-full px-2 py-1.5 rounded-lg text-left border border-transparent transition-all",m&&"cursor-not-allowed opacity-60","bg-background hover:bg-accent hover:border-border/60"),children:[e.jsx(Ee,{name:a.name,avatar:a.avatar,className:"h-6 w-6 text-[9px] shrink-0"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-xs text-foreground truncate",children:a.name}),e.jsxs("div",{className:"text-[10px] text-muted-foreground truncate",children:[E," · ",P,"/10"]})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[N>0&&e.jsxs("span",{className:"text-[10px] text-foreground font-semibold",children:["×",N]}),e.jsx(Je,{size:12,className:"text-muted-foreground"})]})]},a.id)})}),X=_.length>0&&e.jsx("span",{className:"inline-flex items-center justify-center min-w-[16px] h-4 rounded-full bg-primary text-[10px] font-semibold text-primary-foreground px-1.5",children:_.length}),Y=e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-[11px] font-medium text-muted-foreground shrink-0",children:f("执行模式")}),e.jsxs("div",{className:"inline-flex items-center h-7 rounded-md border border-border/70 bg-background p-0.5",children:[e.jsxs("button",{type:"button",onClick:()=>!m&&i("AUTO"),disabled:m,className:b("flex items-center gap-1.5 rounded h-full px-2.5 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",s==="AUTO"?"bg-primary text-primary-foreground font-medium shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(ht,{size:11}),f("自动模式")]}),e.jsxs("button",{type:"button",onClick:()=>!m&&i("CONFIRM"),disabled:m,className:b("flex items-center gap-1.5 rounded h-full px-2.5 text-xs transition-all disabled:cursor-not-allowed disabled:opacity-50",s==="CONFIRM"?"bg-primary text-primary-foreground font-medium shadow-sm":"text-muted-foreground hover:text-foreground"),children:[e.jsx(xt,{size:11}),f("确认模式")]})]})]});return y?e.jsxs("div",{className:"space-y-3",children:[Y,ne,e.jsxs("div",{className:"border-t border-border/50 pt-2.5",children:[e.jsxs("button",{type:"button",onClick:()=>!m&&t(a=>!a),disabled:m,"aria-expanded":x,className:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground hover:text-foreground transition-colors disabled:cursor-not-allowed disabled:opacity-50",children:[e.jsx(se,{size:12,className:b("transition-transform",x?"":"-rotate-90")}),f("追加独立成员"),X]}),x&&e.jsxs("div",{className:"mt-2",children:[V,G]})]})]}):e.jsxs("div",{className:"space-y-3.5",children:[Y,e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[ne,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-[11px] font-medium text-muted-foreground",children:f("追加成员")}),X]}),V,G]})]})]})}function es({className:s="h-7 w-7"}){return e.jsx("img",{src:Ve,alt:"Agent Tower",className:`block shrink-0 object-contain ${s}`})}function ts({className:s=""}){return e.jsx("span",{className:`font-semibold text-foreground tracking-tight text-base ${s}`,children:"Agent Tower"})}const Lt={idle:"","creating-task":"Creating Task...","creating-teamrun":"Creating TeamRun...","creating-workspace":"Creating Workspace...","creating-session":"Creating Session...","starting-session":"Starting Agent..."};function ss({variant:s="task",projects:i,providers:l,isProvidersLoading:d,onSubmit:g,defaultProjectId:v="",defaultProviderId:m="",onProjectChange:y,createStep:f,placeholder:j,submitLabel:x,pendingLabel:t,submitTitle:k}){const{t:c}=ce(),[T,C]=r.useState(""),[u,B]=r.useState(v),[o,p]=r.useState(m),[h,M]=r.useState("SOLO"),[S,L]=r.useState(F.WORKTREE),[z,K]=r.useState("AUTO"),[_,H]=r.useState(null),[W,ue]=r.useState([]),[ne,V]=r.useState(!1),[G,X]=r.useState(!1),[Y,a]=r.useState(!1),[N,E]=r.useState(!1),P=r.useRef(null),q=r.useRef(null),U=r.useRef(null),me=r.useRef(null),be=r.useRef(null),{files:ve,addFiles:Z,removeFile:Re,clear:je,buildMarkdownLinks:Ne,getDoneAttachments:ye,isUploading:ae}=It(),A=s==="conversation",w=s==="task"||s==="conversation",Le=x??c(A?"开始":"创建");r.useEffect(()=>{B(v),y?.(v)},[v,y]),r.useEffect(()=>{p(m)},[m]),r.useEffect(()=>{if(!G)return;const n=I=>{P.current&&!P.current.contains(I.target)&&X(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[G]),r.useEffect(()=>{if(!Y)return;const n=I=>{q.current&&!q.current.contains(I.target)&&a(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[Y]),r.useEffect(()=>{if(!N)return;const n=I=>{U.current&&!U.current.contains(I.target)&&E(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[N]);const oe=r.useMemo(()=>i.find(n=>n.id===u),[i,u]),fe=r.useMemo(()=>l.find(n=>n.id===o),[l,o]),_e=oe?.isGitRepo!==!1,O=!A&&!_e,D=O?"SOLO":h,ie=O?F.MAIN_DIRECTORY:S,De=ie===F.MAIN_DIRECTORY?c("本地模式"):c("工作树模式"),R=f!=="idle",ke=!!_||W.length>0,Q=!R&&!ae&&T.trim().length>0&&(A?!!o:!!u&&(D==="SOLO"?!!o:ke));r.useEffect(()=>{O&&(M("SOLO"),L(F.MAIN_DIRECTORY),V(!1),E(!1))},[O]);const xe=r.useCallback(async()=>{if(!Q)return;const n=w?Ne():"",I=w?ye().map(ee=>ee.id):[];try{await g({title:T.trim(),description:"",projectId:A?"":u,providerId:o,mode:A?"SOLO":D,workspaceMode:!A&&D==="SOLO"?ie:F.WORKTREE,teamRunMode:A?"AUTO":z,teamTemplateId:A||O?null:_,memberPresetIds:A||O?[]:W,attachmentLinks:n,attachmentIds:I}),C(""),w&&je()}catch{}},[Q,w,Ne,ye,g,T,A,u,o,D,ie,z,O,_,W,je]),Oe=r.useCallback(n=>{n.key==="Enter"&&!n.shiftKey&&!n.nativeEvent.isComposing&&n.nativeEvent.keyCode!==229&&(n.preventDefault(),xe())},[xe]),Fe=r.useCallback(n=>{const I=n.target.files;I&&I.length>0&&Z(Array.from(I)),n.target.value=""},[Z]),Pe=r.useCallback(n=>{B(n),y?.(n),X(!1)},[y]),$e=r.useCallback(n=>{if(!w)return;const I=n.clipboardData.items,ee=[];for(const Te of I)if(Te.kind==="file"){const Se=Te.getAsFile();Se&&ee.push(Se)}ee.length>0&&(n.preventDefault(),Z(ee))},[Z,w]),[we,pe]=r.useState(!1),Be=r.useCallback(n=>{w&&(n.preventDefault(),pe(!0))},[w]),Ue=r.useCallback(n=>{w&&(n.preventDefault(),pe(!1))},[w]),We=r.useCallback(n=>{if(!w)return;n.preventDefault(),pe(!1);const I=n.dataTransfer.files;I.length>0&&Z(Array.from(I))},[Z,w]);return e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:b("relative bg-background rounded-xl border transition-colors duration-200","shadow-[0_1px_2px_rgba(0,0,0,0.05)]","hover:border-ring/40 focus-within:border-ring/60",we?"border-info bg-info/5":"border-border",R&&"opacity-80"),onDragOver:w?Be:void 0,onDragLeave:w?Ue:void 0,onDrop:w?We:void 0,children:[w&&ve.length>0&&e.jsx("div",{className:"px-4 pt-3",children:e.jsx(St,{files:ve,onRemove:Re})}),e.jsx("textarea",{ref:me,value:T,onChange:n=>C(n.target.value),onKeyDown:Oe,onPaste:w?$e:void 0,placeholder:c(j||"Describe your task..."),disabled:R,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"}}),w&&we&&e.jsx("div",{className:"px-4 pb-2",children:e.jsx("div",{className:"flex items-center justify-center py-3 border border-dashed border-info/40 rounded-lg text-xs font-medium text-info",children:c("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:w?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",onClick:()=>be.current?.click(),disabled:R||ae,className:"p-2 text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg transition-colors disabled:opacity-40 disabled:cursor-not-allowed",title:c("Attach files"),children:e.jsx(Qe,{size:18})}),e.jsx("input",{ref:be,type:"file",multiple:!0,onChange:Fe,className:"hidden"})]}):null}),e.jsxs("div",{className:"flex items-center gap-2",children:[w&&ae&&e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(re,{size:14,className:"animate-spin"}),c("Uploading...")]}),R&&e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(re,{size:14,className:"animate-spin"}),c(t??Lt[f])]}),!A&&!R&&!ae&&D==="TEAM"&&!ke&&T.trim().length>0&&e.jsx("span",{className:"text-[11px] text-warning",children:c("请选择团队模板或追加成员")}),Q&&e.jsxs("span",{className:"hidden sm:inline-flex items-center gap-1 text-[11px] text-muted-foreground/80 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-[10px] font-medium text-muted-foreground leading-none",children:"⏎"}),Le]}),e.jsx("button",{type:"button",onClick:xe,disabled:!Q,className:b("flex items-center justify-center size-8 rounded-lg transition-all duration-200",Q?"bg-primary text-primary-foreground hover:bg-primary/90 shadow-sm":"bg-muted text-muted-foreground/40 cursor-not-allowed"),title:c(k||"Create & Start"),children:e.jsx(rt,{size:16,strokeWidth:2.5})})]})]})]}),e.jsxs("div",{className:"flex items-center flex-wrap gap-1.5 mt-2.5 px-0.5",children:[!A&&e.jsxs("div",{className:"relative",ref:P,children:[e.jsxs("button",{type:"button",onClick:()=>{R||X(n=>!n)},disabled:R,className:b("flex items-center gap-1.5 px-2 h-7 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed",oe?"text-foreground/80":"text-muted-foreground"),children:[e.jsx(et,{size:14,className:"shrink-0",style:{color:oe?.color??"var(--muted-foreground)"}}),e.jsx("span",{className:"max-w-[120px] truncate",children:oe?.name??c("Project")}),e.jsx(se,{size:12,className:b("text-muted-foreground transition-transform",G&&"rotate-180")})]}),G&&e.jsx("div",{className:"absolute top-full left-0 mt-1.5 w-56 bg-popover border border-border rounded-lg shadow-[0_4px_12px_rgba(0,0,0,0.06)] py-1 max-h-[240px] overflow-y-auto z-50",children:i.map(n=>e.jsxs("button",{type:"button",onClick:()=>Pe(n.id),className:"flex items-center w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",children:[e.jsx("span",{className:"size-2 rounded-full shrink-0 mr-2",style:{backgroundColor:n.color??"var(--muted-foreground)"}}),e.jsx("span",{className:b("truncate flex-1",n.id===u?"text-foreground font-medium":"text-muted-foreground"),children:n.name}),e.jsx(J,{size:14,className:b("ml-2 shrink-0 text-foreground",n.id===u?"opacity-100":"opacity-0")})]},n.id))})]}),(A||D==="SOLO")&&e.jsxs("div",{className:"relative",ref:q,children:[e.jsxs("button",{type:"button",onClick:()=>{R||a(n=>!n)},disabled:R,className:b("flex items-center gap-1.5 px-2 h-7 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed",fe?"text-foreground/80":"text-muted-foreground"),children:[e.jsx(te,{agentType:fe?.agentType,className:"size-3.5"}),e.jsx("span",{className:"max-w-[120px] truncate",children:fe?.name??c(d?"Loading...":"Agent")}),e.jsx(se,{size:12,className:b("text-muted-foreground transition-transform",Y&&"rotate-180")})]}),Y&&e.jsx("div",{className:"absolute top-full left-0 mt-1.5 w-56 bg-popover border border-border rounded-lg shadow-[0_4px_12px_rgba(0,0,0,0.06)] py-1 max-h-[240px] overflow-y-auto z-50",children:l.map(n=>e.jsxs("button",{type:"button",disabled:!n.available,onClick:()=>{p(n.id),a(!1)},className:b("flex items-center w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",!n.available&&"opacity-40 cursor-not-allowed"),children:[e.jsx(J,{size:14,className:b("mr-2 shrink-0 text-foreground",n.id===o?"opacity-100":"opacity-0")}),e.jsx(te,{agentType:n.agentType,className:"mr-2 size-3.5"}),e.jsxs("span",{className:b("min-w-0 truncate",n.id===o?"text-foreground font-medium":"text-muted-foreground"),children:[n.name,n.available?"":c(" (unavailable)")]})]},n.id))})]}),!A&&D==="SOLO"&&e.jsxs("div",{className:"relative",ref:U,children:[e.jsxs("button",{type:"button",onClick:()=>{R||E(n=>!n)},disabled:R,className:b("flex items-center gap-1.5 px-2 h-7 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed text-foreground/80"),children:[e.jsx(ct,{size:14,className:"text-muted-foreground"}),e.jsx("span",{className:"max-w-[96px] truncate",children:De}),e.jsx(se,{size:12,className:b("text-muted-foreground transition-transform",N&&"rotate-180")})]}),N&&e.jsxs("div",{className:"absolute top-full left-0 mt-1.5 w-44 bg-popover border border-border rounded-lg shadow-[0_4px_12px_rgba(0,0,0,0.06)] py-1 z-50",children:[e.jsxs("button",{type:"button",onClick:()=>{L(F.WORKTREE),E(!1)},disabled:O,className:b("flex items-center w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",O&&"opacity-40 cursor-not-allowed"),children:[e.jsx(J,{size:14,className:b("mr-2 shrink-0 text-foreground",S===F.WORKTREE?"opacity-100":"opacity-0")}),e.jsx("span",{className:b("truncate",S===F.WORKTREE?"text-foreground font-medium":"text-muted-foreground"),children:c("工作树模式")})]}),e.jsxs("button",{type:"button",onClick:()=>{L(F.MAIN_DIRECTORY),E(!1)},className:"flex items-center w-full px-3 py-2 text-xs text-left hover:bg-accent transition-colors",children:[e.jsx(J,{size:14,className:b("mr-2 shrink-0 text-foreground",S===F.MAIN_DIRECTORY?"opacity-100":"opacity-0")}),e.jsx("span",{className:b("truncate",S===F.MAIN_DIRECTORY?"text-foreground font-medium":"text-muted-foreground"),children:c("本地模式")})]})]})]}),!A&&e.jsxs("button",{type:"button",role:"switch","aria-checked":D==="TEAM",onClick:()=>{R||O||(h==="TEAM"?(M("SOLO"),V(!1)):(M("TEAM"),E(!1),L(F.WORKTREE),V(!0)))},disabled:R||O,className:b("ml-auto flex items-center gap-2 h-7 pl-2 pr-2 rounded-md text-xs font-medium transition-colors","hover:bg-accent disabled:opacity-40 disabled:cursor-not-allowed","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",D==="TEAM"?"text-foreground/80":"text-muted-foreground"),title:c(O?"Local projects only support local Solo tasks. Initialize Git to use worktrees and TeamRun.":"启用团队模式"),children:[e.jsx(Xe,{size:14,className:D==="TEAM"?"text-foreground/80":"text-muted-foreground"}),e.jsx("span",{children:c("团队模式")}),e.jsx("span",{className:b("relative inline-flex h-4 w-7 shrink-0 items-center rounded-full transition-colors",D==="TEAM"?"bg-primary":"bg-border"),children:e.jsx("span",{className:b("inline-block size-3 rounded-full bg-background shadow-sm transition-transform",D==="TEAM"?"translate-x-3.5":"translate-x-0.5")})})]})]}),O&&e.jsx("div",{className:"mt-2.5",children:e.jsx("div",{className:"rounded-lg border border-info/25 bg-info/8 px-3 py-2 text-xs leading-relaxed text-info/90",children:c("Local projects only support local Solo tasks. Initialize Git to use worktrees and TeamRun.")})}),!A&&D==="SOLO"&&ie===F.MAIN_DIRECTORY&&e.jsx("div",{className:"mt-2.5",children:e.jsx("div",{className:"rounded-lg border border-warning/25 bg-warning/8 px-3 py-2 text-xs leading-relaxed text-warning/90",children:c("Agent 将直接修改项目主目录;不会自动提交,也不能使用 Merge、Rebase 或冲突解决流程。")})}),!A&&D==="TEAM"&&ne&&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(Rt,{mode:z,setMode:K,selectedTemplateId:_,setSelectedTemplateId:H,selectedMemberPresetIds:W,setSelectedMemberPresetIds:ue,disabled:R,compact:!0})})]})}export{Ht as A,es as B,ss as C,at as F,ct as G,ut as I,Zt as P,Yt as S,Vt as T,ht as Z,Qt as a,It as b,St as c,rt as d,ts as e,Gt as f,Jt as g,Rt as h,xt as i,Xt as u};
@@ -1 +0,0 @@
1
- import{h as x,i as m,q as o,m as u,u as p,r as g,t as n,j as e,S as a,B as i}from"./index-B2TV-FU2.js";import{L as f}from"./loader-circle-RvIxJahM.js";import{C as h,T as j}from"./terminal-BKrr_mRJ.js";import{C as b}from"./check-EXzHBr5H.js";const y=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],N=x("server",y);function C(){return m({queryKey:o.system.mcpConfig,queryFn:()=>u.get("/system/mcp-config")})}function v({mode:s,label:t}){const r=s==="desktop-packaged";return e.jsx("span",{className:`inline-flex items-center rounded-md px-2 py-1 text-[11px] font-medium ${r?"bg-emerald-50 text-emerald-700":"bg-amber-50 text-amber-700"}`,children:t})}function P(){const{t:s}=p(),{data:t,isLoading:r,isError:l,refetch:d}=C(),c=g.useCallback(async()=>{if(t?.configJson)try{await navigator.clipboard.writeText(t.configJson),n.success(s("MCP 配置已复制"))}catch{n.error(s("复制 MCP 配置失败"))}},[t?.configJson,s]);return r?e.jsx(a,{children:e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(f,{className:"h-5 w-5 animate-spin text-neutral-500"})})}):l||!t?e.jsxs(a,{children:[e.jsx("h2",{className:"mb-1 text-base font-semibold text-neutral-900",children:s("MCP 配置")}),e.jsx("div",{className:"mt-5 rounded-lg border border-red-100 bg-red-50 px-4 py-3 text-sm text-red-700",children:s("MCP 配置加载失败")}),e.jsx(i,{className:"mt-4",size:"sm",variant:"outline",onClick:()=>{d()},children:s("重试")})]}):e.jsxs(a,{children:[e.jsxs("div",{className:"mb-5 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-neutral-900",children:s("MCP 配置")}),e.jsx("p",{className:"mt-1 text-[12px] leading-relaxed text-neutral-500",children:s("复制下面的 JSON 到支持 MCP 的客户端配置中。桌面打包版使用 App 内置 runtime,不需要全局安装 agent-tower。")})]}),e.jsxs(i,{size:"sm",onClick:c,children:[e.jsx(h,{size:14}),s("复制配置")]})]}),e.jsxs("div",{className:"space-y-3 border-b border-neutral-100 pb-5",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(v,{mode:t.runtimeMode,label:t.runtimeMode==="desktop-packaged"?s("桌面打包 runtime"):s("工作区 runtime")}),e.jsx("span",{className:"text-[12px] text-neutral-400",children:t.serverName})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{className:"rounded-lg border border-neutral-100 bg-neutral-50/70 p-3",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-1.5 text-[11px] font-medium uppercase text-neutral-400",children:[e.jsx(j,{size:12}),"Command"]}),e.jsx("div",{className:"break-all font-mono text-[12px] leading-relaxed text-neutral-800",children:t.command})]}),e.jsxs("div",{className:"rounded-lg border border-neutral-100 bg-neutral-50/70 p-3",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-1.5 text-[11px] font-medium uppercase text-neutral-400",children:[e.jsx(N,{size:12}),"Entry"]}),e.jsx("div",{className:"break-all font-mono text-[12px] leading-relaxed text-neutral-800",children:t.args[0]??""})]})]})]}),e.jsxs("div",{className:"pt-5",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("label",{className:"text-[12px] font-medium text-neutral-600",children:"mcpServers JSON"}),t.runtimeMode==="desktop-packaged"&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] text-emerald-600",children:[e.jsx(b,{size:12}),s("无需全局 CLI")]})]}),e.jsx("textarea",{readOnly:!0,value:t.configJson,rows:14,className:"w-full resize-y rounded-lg border border-neutral-200 bg-neutral-950 px-3 py-3 font-mono text-[12px] leading-relaxed text-neutral-100 outline-none"}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-neutral-400",children:s("当前版本只生成通用 MCP 配置,不会自动修改 Claude、Codex 或其他第三方客户端配置文件。")})]})]})}export{P as McpSettingsPage};
@@ -1 +0,0 @@
1
- import{h as P,i as q,k as E,l as k,q as v,m as h,u as R,r as o,j as e,S as g,T as B,d as L,e as j,U as W,B as z,f as M,Q as A}from"./index-B2TV-FU2.js";import{S as Q}from"./select-C_UWYFsQ.js";import{I as d}from"./input-CupQF5Np.js";import{S as K,C as O}from"./switch-C6O0UllM.js";import{M as _}from"./message-square-tSoG7yGO.js";import{L as D}from"./loader-circle-RvIxJahM.js";import{C as H}from"./circle-alert-Dkp6R_Ml.js";import"./chevron-down-CBY3fFTT.js";import"./check-EXzHBr5H.js";const G=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],J=P("link",G);function V(){return q({queryKey:v.notifications.settings,queryFn:()=>h.get("/notifications/settings")})}function X(){const t=E();return k({mutationFn:i=>h.put("/notifications/settings",i),onSuccess:()=>{t.invalidateQueries({queryKey:v.notifications.settings})}})}function Y(){return k({mutationFn:t=>h.post("/notifications/test",t)})}function le(){const{t}=R(),{data:i,isLoading:T}=V(),l=X(),n=Y(),y=[{value:"none",label:t("关闭")},{value:"feishu",label:t("飞书 Webhook")}],[a,p]=o.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[m,x]=o.useState(!1),[f,r]=o.useState("idle"),u=o.useRef(void 0);if(o.useEffect(()=>{i&&!m&&p({webhookUrl:i.feishuWebhookUrl??"",baseUrl:i.thirdPartyBaseUrl??"",titleTemplate:i.taskInReviewTitleTemplate??"",bodyTemplate:i.taskInReviewBodyTemplate??""})},[i,m]),o.useEffect(()=>(n.isSuccess?(r("success"),u.current=setTimeout(()=>r("idle"),3e3)):n.isError&&(r("error"),u.current=setTimeout(()=>r("idle"),5e3)),()=>clearTimeout(u.current)),[n.isSuccess,n.isError]),T)return e.jsx(g,{children:e.jsx(B,{rows:3})});const N=i?.osNotificationEnabled??!0,b=i?.thirdPartyChannel??"none",c=(s,I)=>{p(F=>({...F,[s]:I})),x(!0)},S=s=>{l.mutate({osNotificationEnabled:s})},C=s=>{l.mutate({thirdPartyChannel:s})},U=()=>{l.mutate({feishuWebhookUrl:a.webhookUrl.trim()||null,thirdPartyBaseUrl:a.baseUrl.trim()||null,taskInReviewTitleTemplate:a.titleTemplate.trim()||"Agent Tower",taskInReviewBodyTemplate:a.bodyTemplate.trim()||t('✅ "{taskTitle}" 已完成,等待审查')},{onSuccess:()=>x(!1)})},w=()=>{a.webhookUrl.trim()&&n.mutate({channel:"feishu",webhookUrl:a.webhookUrl.trim(),baseUrl:a.baseUrl.trim()||void 0})};return e.jsxs(g,{children:[e.jsx(L,{title:t("通知设置"),className:"mb-1"}),e.jsxs("div",{className:"divide-y divide-border/60",children:[e.jsx(j,{icon:W,label:t("桌面通知"),description:t("任务完成时弹出系统通知"),align:"center",controlWidth:"auto",children:e.jsx(K,{checked:N,onCheckedChange:S,"aria-label":t("桌面通知")})}),e.jsxs("div",{className:"py-5",children:[e.jsx(j,{icon:_,label:t("第三方通知"),description:t("推送到外部渠道(飞书群机器人等)"),align:"center",className:"py-0",children:e.jsx(Q,{value:b,onChange:s=>C(s),options:y})}),b==="feishu"&&e.jsxs("div",{className:"mt-4 space-y-4 sm:pl-11",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"feishu-webhook-url",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:"Webhook URL"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(d,{id:"feishu-webhook-url",value:a.webhookUrl,onChange:s=>c("webhookUrl",s.target.value),placeholder:"https://open.feishu.cn/open-apis/bot/v2/hook/...",className:"min-w-0 flex-1 font-mono"}),e.jsxs(z,{size:"sm",variant:"outline",onClick:w,disabled:!a.webhookUrl.trim()||n.isPending,className:"h-auto shrink-0",children:[n.isPending&&e.jsx(D,{size:12,className:"mr-1 animate-spin motion-reduce:animate-none"}),t("测试")]})]}),f==="success"&&e.jsxs("div",{role:"status",className:"mt-2 flex items-center gap-1.5 text-xs text-success",children:[e.jsx(O,{size:12,"aria-hidden":"true"}),t("测试消息发送成功")]}),f==="error"&&e.jsxs("div",{role:"alert",className:"mt-2 flex items-center gap-1.5 text-xs text-destructive",children:[e.jsx(H,{size:12,"aria-hidden":"true"}),t("发送失败,请检查 Webhook 地址")]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"feishu-base-url",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(J,{size:11,"aria-hidden":"true"}),t("跳转地址")]})}),e.jsx(d,{id:"feishu-base-url",value:a.baseUrl,onChange:s=>c("baseUrl",s.target.value),placeholder:"http://localhost:5173",className:"font-mono"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t('通知卡片中的"查看任务"按钮跳转地址前缀')})]})]})]}),e.jsxs("div",{className:"py-5",children:[e.jsxs("div",{className:"mb-4",children:[e.jsx(M,{children:t("通知模板")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t("支持变量: {taskTitle}, {taskId}, {projectId}, {projectName}, {status}",{taskTitle:"{taskTitle}",taskId:"{taskId}",projectId:"{projectId}",projectName:"{projectName}",status:"{status}"})})]}),e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"notification-title-template",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:t("标题")}),e.jsx(d,{id:"notification-title-template",value:a.titleTemplate,onChange:s=>c("titleTemplate",s.target.value),placeholder:"Agent Tower"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"notification-body-template",className:"mb-1.5 block text-xs font-medium text-muted-foreground",children:t("内容")}),e.jsx(d,{id:"notification-body-template",value:a.bodyTemplate,onChange:s=>c("bodyTemplate",s.target.value),placeholder:t('✅ "{taskTitle}" 已完成,等待审查')})]})]})]})]}),m&&e.jsx(A,{saving:l.isPending,onSave:U})]})}export{le as NotificationSettingsPage};