agent-tower 0.6.0-beta.8 → 0.6.0-beta.9

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 (126) hide show
  1. package/dist/web/assets/{AgentDemoPage-121Vdmg2.js → AgentDemoPage-aLGw8pYk.js} +1 -1
  2. package/dist/web/assets/{AgentEnvironmentSettingsPage-BLQvILTp.js → AgentEnvironmentSettingsPage-BYcH_wMz.js} +1 -1
  3. package/dist/web/assets/{AgentLogo-DKyk6Tug.js → AgentLogo-Dyqxcj5s.js} +1 -1
  4. package/dist/web/assets/{ConversationPage-KYJaRufy.js → ConversationPage-BBnK1qA_.js} +1 -1
  5. package/dist/web/assets/{CreateTaskInput-BuOrQdzX.js → CreateTaskInput-B11wGhDW.js} +1 -1
  6. package/dist/web/assets/{DemoPage-7vKmpFI2.js → DemoPage-m92AArTk.js} +1 -1
  7. package/dist/web/assets/{GeneralSettingsPage-DiCNFgoG.js → GeneralSettingsPage-P5HcwCXo.js} +1 -1
  8. package/dist/web/assets/{Icons-B4ayBr1Z.js → Icons-BFOphLw-.js} +1 -1
  9. package/dist/web/assets/{LoadingPreviewPage-BAJfvvP4.js → LoadingPreviewPage-CfT4FIyb.js} +1 -1
  10. package/dist/web/assets/{McpSettingsPage-DU-XVT-K.js → McpSettingsPage-BI_b78L_.js} +1 -1
  11. package/dist/web/assets/{MemberAvatar-BHpfGaeT.js → MemberAvatar-1UlgMZMM.js} +1 -1
  12. package/dist/web/assets/{NotificationSettingsPage-DGGn_rYx.js → NotificationSettingsPage-CQCyq9QZ.js} +1 -1
  13. package/dist/web/assets/{ProfileSettingsPage-Cx65zYgj.js → ProfileSettingsPage-ojhJXLWb.js} +1 -1
  14. package/dist/web/assets/{ProjectKanbanPage-DkNalVWe.js → ProjectKanbanPage-DK3rZJzY.js} +37 -37
  15. package/dist/web/assets/{ProjectSettingsPage-1qxW8tba.js → ProjectSettingsPage-MGB631ia.js} +1 -1
  16. package/dist/web/assets/{ProviderSettingsPage-CvYtXhzO.js → ProviderSettingsPage-CMZvEWMa.js} +1 -1
  17. package/dist/web/assets/{SettingsMasterDetail-CtmgXnjL.js → SettingsMasterDetail-9CnCBuNZ.js} +1 -1
  18. package/dist/web/assets/{TeamSettingsPage-DByUrR3L.js → TeamSettingsPage-BUXKd5UF.js} +1 -1
  19. package/dist/web/assets/{arc-C7PIksH_.js → arc-2leUEhVa.js} +1 -1
  20. package/dist/web/assets/{architectureDiagram-3BPJPVTR-gEUpxvUc.js → architectureDiagram-3BPJPVTR-CDgYR44L.js} +1 -1
  21. package/dist/web/assets/{arrow-left-DJne1iCP.js → arrow-left-Jn-v17JF.js} +1 -1
  22. package/dist/web/assets/{blockDiagram-GPEHLZMM-C56-hDft.js → blockDiagram-GPEHLZMM-CzfIh31g.js} +1 -1
  23. package/dist/web/assets/{c4Diagram-AAUBKEIU-BlrLzKR6.js → c4Diagram-AAUBKEIU-BzzBXKEF.js} +1 -1
  24. package/dist/web/assets/channel-XuYe6lH7.js +1 -0
  25. package/dist/web/assets/check-FwR4dMNY.js +1 -0
  26. package/dist/web/assets/{chevron-down-BrHeUdnT.js → chevron-down-CpKODb7Y.js} +1 -1
  27. package/dist/web/assets/{chevron-right-ClCTr1OP.js → chevron-right-CBoUSXVq.js} +1 -1
  28. package/dist/web/assets/{chevron-up-Cu1m42hx.js → chevron-up-KZ1hsL8y.js} +1 -1
  29. package/dist/web/assets/{chunk-2J33WTMH-DA9vwc1D.js → chunk-2J33WTMH-GJE6LCGS.js} +1 -1
  30. package/dist/web/assets/{chunk-4BX2VUAB-DVb7E2f3.js → chunk-4BX2VUAB-Bw_ITp1Q.js} +1 -1
  31. package/dist/web/assets/{chunk-55IACEB6-BEVmB6Bb.js → chunk-55IACEB6-DQ-XuWbD.js} +1 -1
  32. package/dist/web/assets/{chunk-727SXJPM-DeZOyHvn.js → chunk-727SXJPM-BgL49Dtw.js} +1 -1
  33. package/dist/web/assets/{chunk-AQP2D5EJ-xKSXjjJ5.js → chunk-AQP2D5EJ-dRTVohoy.js} +1 -1
  34. package/dist/web/assets/{chunk-FMBD7UC4-ciPLDbAS.js → chunk-FMBD7UC4-BZtRjoH7.js} +1 -1
  35. package/dist/web/assets/{chunk-ND2GUHAM-2ReRFo_l.js → chunk-ND2GUHAM-CN3wND6y.js} +1 -1
  36. package/dist/web/assets/{chunk-QZHKN3VN-CTYcDhch.js → chunk-QZHKN3VN-CMwbobMj.js} +1 -1
  37. package/dist/web/assets/{circle-alert-CPz_VCJC.js → circle-alert-kELlE07n.js} +1 -1
  38. package/dist/web/assets/classDiagram-4FO5ZUOK-DWSNJHiT.js +1 -0
  39. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-DWSNJHiT.js +1 -0
  40. package/dist/web/assets/{code-block-OCS4YCEC-DMWztYUo.js → code-block-OCS4YCEC-B1YC7dLa.js} +1 -1
  41. package/dist/web/assets/{confirm-dialog-BN-QsQ30.js → confirm-dialog-DDWlvtJs.js} +1 -1
  42. package/dist/web/assets/{cose-bilkent-S5V4N54A-cKGd6G-z.js → cose-bilkent-S5V4N54A-C6xD7kmY.js} +1 -1
  43. package/dist/web/assets/cssMode-lB5vNGvS.js +1 -0
  44. package/dist/web/assets/{dagre-BM42HDAG-A8nK1ze3.js → dagre-BM42HDAG-BqTCYMO6.js} +1 -1
  45. package/dist/web/assets/{diagram-2AECGRRQ-D7msfvrP.js → diagram-2AECGRRQ-BsMq3s5l.js} +1 -1
  46. package/dist/web/assets/{diagram-5GNKFQAL-BvXkL8LL.js → diagram-5GNKFQAL-l4izpv7Z.js} +1 -1
  47. package/dist/web/assets/{diagram-KO2AKTUF-BLN52R9o.js → diagram-KO2AKTUF-uWDq6Yzo.js} +1 -1
  48. package/dist/web/assets/{diagram-LMA3HP47-mtF_5aJL.js → diagram-LMA3HP47-Dbd4fnFa.js} +1 -1
  49. package/dist/web/assets/{diagram-OG6HWLK6-CZ8IjTKx.js → diagram-OG6HWLK6-BC-27mkr.js} +1 -1
  50. package/dist/web/assets/{erDiagram-TEJ5UH35-CW4gNQnJ.js → erDiagram-TEJ5UH35-DrCP0Xt8.js} +1 -1
  51. package/dist/web/assets/{flowDiagram-I6XJVG4X-BFWepqRF.js → flowDiagram-I6XJVG4X-BqNsQuUr.js} +1 -1
  52. package/dist/web/assets/{folder-picker-BsuXw4Lz.js → folder-picker-CBVEWiuS.js} +1 -1
  53. package/dist/web/assets/{freemarker2-CFCpnL6n.js → freemarker2-Bos_2jdw.js} +2 -2
  54. package/dist/web/assets/{ganttDiagram-6RSMTGT7-CPCVjLvp.js → ganttDiagram-6RSMTGT7-CZOrG-5M.js} +1 -1
  55. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-C-yjS3d_.js → gitGraphDiagram-PVQCEYII-Dp3i5ehs.js} +1 -1
  56. package/dist/web/assets/handlebars-C7Elz3nH.js +1 -0
  57. package/dist/web/assets/html-EvsHOk5n.js +1 -0
  58. package/dist/web/assets/htmlMode-CTlhNZgJ.js +1 -0
  59. package/dist/web/assets/{index-5mnxm7I2.js → index-BGajgi5H.js} +8 -8
  60. package/dist/web/assets/index-CVgeXPf_.css +1 -0
  61. package/dist/web/assets/{index-WA-EeR-W.js → index-hPp73HMS.js} +4 -4
  62. package/dist/web/assets/{infoDiagram-5YYISTIA-CyhsOl9n.js → infoDiagram-5YYISTIA-C6NnR_Zb.js} +1 -1
  63. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-DiuB4kq5.js → ishikawaDiagram-YF4QCWOH-C1SOf-Ko.js} +1 -1
  64. package/dist/web/assets/javascript-Desq1P0G.js +1 -0
  65. package/dist/web/assets/{journeyDiagram-JHISSGLW-D8hn7DGX.js → journeyDiagram-JHISSGLW--GKMSbPz.js} +1 -1
  66. package/dist/web/assets/{jsonMode-DKLNvzZk.js → jsonMode-Bbh3Gbb8.js} +4 -4
  67. package/dist/web/assets/{kanban-definition-UN3LZRKU-BojfaPhM.js → kanban-definition-UN3LZRKU-Car5iy0R.js} +1 -1
  68. package/dist/web/assets/{layers-DzEkeGQJ.js → layers-WOwm63Fo.js} +1 -1
  69. package/dist/web/assets/{linear-BH5S1_K_.js → linear-ChUj9SvT.js} +1 -1
  70. package/dist/web/assets/liquid-BXFWITFq.js +1 -0
  71. package/dist/web/assets/{lspLanguageFeatures-m1ILESjk.js → lspLanguageFeatures-DQ2CrOBI.js} +1 -1
  72. package/dist/web/assets/mdx-vHLpslzI.js +1 -0
  73. package/dist/web/assets/{mermaid-NOHMQCX5-BdwTD9oT.js → mermaid-NOHMQCX5-CzwPLFrI.js} +4 -4
  74. package/dist/web/assets/{message-square-CprUAZwY.js → message-square-DgdFa1Kc.js} +1 -1
  75. package/dist/web/assets/{mindmap-definition-RKZ34NQL-BgQiNSqF.js → mindmap-definition-RKZ34NQL-CfzbnHY_.js} +1 -1
  76. package/dist/web/assets/{modal-BqHJvAk-.js → modal-QnCJhV9P.js} +1 -1
  77. package/dist/web/assets/{monaco-Fm9Q8Oob.js → monaco-CbFQByO7.js} +3 -3
  78. package/dist/web/assets/{pencil-DtsyfpXV.js → pencil-CNVU3zfM.js} +1 -1
  79. package/dist/web/assets/{pieDiagram-4H26LBE5-C4RL8jaZ.js → pieDiagram-4H26LBE5-CDqYJneU.js} +1 -1
  80. package/dist/web/assets/python-BhFSY_J2.js +1 -0
  81. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-DbWEWLfK.js → quadrantDiagram-W4KKPZXB-B6ChDIx2.js} +1 -1
  82. package/dist/web/assets/razor-Cx_DrE-V.js +1 -0
  83. package/dist/web/assets/{requirementDiagram-4Y6WPE33-oUROuUzd.js → requirementDiagram-4Y6WPE33-DefLT9NZ.js} +1 -1
  84. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-OpKVDNcA.js → sankeyDiagram-5OEKKPKP-CQHnovPz.js} +1 -1
  85. package/dist/web/assets/{select-CB8ESe4Q.js → select-CmbeAAVh.js} +1 -1
  86. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-XHCjU2T9.js → sequenceDiagram-3UESZ5HK-DZuaKm7C.js} +1 -1
  87. package/dist/web/assets/{server-DDG7bNWF.js → server-BUivqMYo.js} +1 -1
  88. package/dist/web/assets/{stateDiagram-AJRCARHV-DECbzSmA.js → stateDiagram-AJRCARHV-DvxpChEC.js} +1 -1
  89. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-BbrRYMxK.js +1 -0
  90. package/dist/web/assets/{switch-DRLI98Hg.js → switch-CiOyM13e.js} +1 -1
  91. package/dist/web/assets/{textarea-CdNSB2r_.js → textarea-D4HkYa3u.js} +1 -1
  92. package/dist/web/assets/{timeline-definition-PNZ67QCA-CFRKRagZ.js → timeline-definition-PNZ67QCA-BRu-tS-p.js} +1 -1
  93. package/dist/web/assets/{trash-2-fcaDNTJq.js → trash-2-DPxBnxJM.js} +1 -1
  94. package/dist/web/assets/{tsMode-DSzQjJK3.js → tsMode-CHcZwUmC.js} +2 -2
  95. package/dist/web/assets/typescript-CvtjMxoq.js +1 -0
  96. package/dist/web/assets/{upload-B8oz6oGE.js → upload-YmLtnZsU.js} +1 -1
  97. package/dist/web/assets/{use-profiles-BKSY6QPb.js → use-profiles-OJAwfc90.js} +1 -1
  98. package/dist/web/assets/{use-projects-BYOiz-wd.js → use-projects-iob5C7Xk.js} +1 -1
  99. package/dist/web/assets/{use-providers-Dy7qGK5B.js → use-providers-Cj9S9_2q.js} +1 -1
  100. package/dist/web/assets/{useNormalizedLogs-DZrbmlsd.js → useNormalizedLogs-BhN4AN4f.js} +1 -1
  101. package/dist/web/assets/{vennDiagram-CIIHVFJN-D-75YMZP.js → vennDiagram-CIIHVFJN-CtZ_3Ld0.js} +1 -1
  102. package/dist/web/assets/{wardley-L42UT6IY-C61gThmp.js → wardley-L42UT6IY-h9yfTmIn.js} +1 -1
  103. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-CK097L4L.js → wardleyDiagram-YWT4CUSO-CWXtZtix.js} +1 -1
  104. package/dist/web/assets/xml-DhyGRwiG.js +1 -0
  105. package/dist/web/assets/{xychartDiagram-2RQKCTM6-L-SbiODs.js → xychartDiagram-2RQKCTM6-BLuWVWlL.js} +1 -1
  106. package/dist/web/assets/yaml-Cpi6SvoR.js +1 -0
  107. package/dist/web/index.html +2 -2
  108. package/package.json +1 -1
  109. package/dist/web/assets/channel-H8WfXT65.js +0 -1
  110. package/dist/web/assets/check-DDmXMNyc.js +0 -1
  111. package/dist/web/assets/classDiagram-4FO5ZUOK-DEwghyUA.js +0 -1
  112. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-DEwghyUA.js +0 -1
  113. package/dist/web/assets/cssMode-xnMD2U0i.js +0 -1
  114. package/dist/web/assets/handlebars-DJjXbRRE.js +0 -1
  115. package/dist/web/assets/html-y2wveTmH.js +0 -1
  116. package/dist/web/assets/htmlMode-vnWUx-PF.js +0 -1
  117. package/dist/web/assets/index-C57t30O_.css +0 -1
  118. package/dist/web/assets/javascript-Celpalfe.js +0 -1
  119. package/dist/web/assets/liquid-D2dl2VpD.js +0 -1
  120. package/dist/web/assets/mdx-FVgkhpIC.js +0 -1
  121. package/dist/web/assets/python-DJXVEHrw.js +0 -1
  122. package/dist/web/assets/razor-BzoF3oIs.js +0 -1
  123. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CnVs5X53.js +0 -1
  124. package/dist/web/assets/typescript-DUwWh7XI.js +0 -1
  125. package/dist/web/assets/xml-BpIKzb-V.js +0 -1
  126. package/dist/web/assets/yaml-DjL8Not3.js +0 -1
@@ -1 +1 @@
1
- import{k as F,m as q,o as E,n as k,q as v,p as h,u as R,r as o,j as e,S as g,a3 as B,g as W,h as j,a4 as z,I as d,B as L,P as M,a5 as A,i as K,a1 as Q}from"./index-5mnxm7I2.js";import{S as O}from"./select-CB8ESe4Q.js";import{S as _}from"./switch-DRLI98Hg.js";import{M as D}from"./message-square-CprUAZwY.js";import{C as H}from"./circle-alert-CPz_VCJC.js";import"./chevron-down-BrHeUdnT.js";import"./check-DDmXMNyc.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=F("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 ne(){const{t}=R(),{data:i,isLoading:y}=V(),l=X(),n=Y(),N=[{value:"none",label:t("关闭")},{value:"feishu",label:t("飞书 Webhook")}],[a,x]=o.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[m,p]=o.useState(!1),[f,r]=o.useState("idle"),u=o.useRef(void 0);if(o.useEffect(()=>{i&&!m&&x({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]),y)return e.jsx(g,{children:e.jsx(B,{rows:3})});const T=i?.osNotificationEnabled??!0,b=i?.thirdPartyChannel??"none",c=(s,I)=>{x(P=>({...P,[s]:I})),p(!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:()=>p(!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(W,{title:t("通知设置"),className:"mb-1"}),e.jsxs("div",{className:"divide-y divide-border/60",children:[e.jsx(j,{icon:z,label:t("桌面通知"),description:t("任务完成时弹出系统通知"),align:"center",controlWidth:"auto",children:e.jsx(_,{checked:T,onCheckedChange:S,"aria-label":t("桌面通知")})}),e.jsxs("div",{className:"py-5",children:[e.jsx(j,{icon:D,label:t("第三方通知"),description:t("推送到外部渠道(飞书群机器人等)"),align:"center",className:"py-0",children:e.jsx(O,{value:b,onChange:s=>C(s),options:N})}),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(L,{size:"sm",variant:"outline",onClick:w,disabled:!a.webhookUrl.trim()||n.isPending,className:"h-auto shrink-0",children:[n.isPending&&e.jsx(M,{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(A,{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(K,{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(Q,{saving:l.isPending,onSave:U})]})}export{ne as NotificationSettingsPage};
1
+ import{k as F,m as q,o as E,n as k,q as v,p as h,u as R,r as o,j as e,S as g,a3 as B,g as W,h as j,a4 as z,I as d,B as L,P as M,a5 as A,i as K,a1 as Q}from"./index-BGajgi5H.js";import{S as O}from"./select-CmbeAAVh.js";import{S as _}from"./switch-CiOyM13e.js";import{M as D}from"./message-square-DgdFa1Kc.js";import{C as H}from"./circle-alert-kELlE07n.js";import"./chevron-down-CpKODb7Y.js";import"./check-FwR4dMNY.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=F("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 ne(){const{t}=R(),{data:i,isLoading:y}=V(),l=X(),n=Y(),N=[{value:"none",label:t("关闭")},{value:"feishu",label:t("飞书 Webhook")}],[a,x]=o.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[m,p]=o.useState(!1),[f,r]=o.useState("idle"),u=o.useRef(void 0);if(o.useEffect(()=>{i&&!m&&x({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]),y)return e.jsx(g,{children:e.jsx(B,{rows:3})});const T=i?.osNotificationEnabled??!0,b=i?.thirdPartyChannel??"none",c=(s,I)=>{x(P=>({...P,[s]:I})),p(!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:()=>p(!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(W,{title:t("通知设置"),className:"mb-1"}),e.jsxs("div",{className:"divide-y divide-border/60",children:[e.jsx(j,{icon:z,label:t("桌面通知"),description:t("任务完成时弹出系统通知"),align:"center",controlWidth:"auto",children:e.jsx(_,{checked:T,onCheckedChange:S,"aria-label":t("桌面通知")})}),e.jsxs("div",{className:"py-5",children:[e.jsx(j,{icon:D,label:t("第三方通知"),description:t("推送到外部渠道(飞书群机器人等)"),align:"center",className:"py-0",children:e.jsx(O,{value:b,onChange:s=>C(s),options:N})}),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(L,{size:"sm",variant:"outline",onClick:w,disabled:!a.webhookUrl.trim()||n.isPending,className:"h-auto shrink-0",children:[n.isPending&&e.jsx(M,{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(A,{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(K,{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(Q,{saving:l.isPending,onSave:U})]})}export{ne as NotificationSettingsPage};
@@ -1,3 +1,3 @@
1
- import{u as T,r as g,j as e,S,g as J,s as M,v as w,I as U,B as E,w as p,l as P}from"./index-5mnxm7I2.js";import{u as _,a as z,b as B,c as F}from"./use-profiles-BKSY6QPb.js";import{M as G}from"./modal-BqHJvAk-.js";import{C as $}from"./confirm-dialog-BN-QsQ30.js";import{T as R}from"./textarea-CdNSB2r_.js";import{L as H}from"./layers-DzEkeGQJ.js";import{C as q}from"./chevron-down-BrHeUdnT.js";import{P as K,T as Q}from"./trash-2-fcaDNTJq.js";import{P as W}from"./pencil-DtsyfpXV.js";function X(t){const a=Object.entries(t);return a.length===0?"(empty)":a.map(([m,c])=>`${m}: ${JSON.stringify(c)}`).join(", ")}const y={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function Y({agentType:t,variants:a,isBuiltIn:m,onEdit:c,onNew:h,onDelete:j}){const{t:n}=T(),[r,b]=g.useState(!0),u=Object.entries(a);return e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 bg-muted/40 px-4 py-3",children:[e.jsxs("button",{type:"button",onClick:()=>b(i=>!i),"aria-expanded":r,className:"flex items-center gap-3 rounded-md transition-opacity hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-foreground",children:y[t]??t}),e.jsxs("span",{className:"text-[11px] text-muted-foreground",children:[u.length," ",n("个变体")]}),e.jsx(q,{size:14,"aria-hidden":"true",className:P("text-muted-foreground transition-transform motion-reduce:transition-none",r&&"rotate-180")})]}),e.jsxs("button",{type:"button",onClick:h,className:"flex items-center gap-1 rounded-md px-2 py-1 text-[11px] text-muted-foreground transition-colors hover:bg-background hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsx(K,{size:12,"aria-hidden":"true"}),n("新增")]})]}),r&&e.jsxs("div",{className:"divide-y divide-border/60",children:[u.map(([i,x])=>{const f=m(i);return e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-muted/40",children:[e.jsx("span",{className:P("inline-flex shrink-0 items-center rounded px-2 py-0.5 text-[11px] font-semibold tracking-wide",i==="DEFAULT"?"bg-primary/[0.06] text-primary":"bg-muted text-muted-foreground"),children:i}),e.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground",children:X(x)}),f&&e.jsx("span",{className:"shrink-0 text-[10px] font-medium text-muted-foreground/70",children:n("内置")}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx("button",{onClick:()=>c(i,x),className:"flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",title:n("编辑"),"aria-label":n("编辑"),children:e.jsx(W,{size:12})}),!f&&e.jsx("button",{onClick:()=>j(i),className:"flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",title:n("删除"),"aria-label":n("删除"),children:e.jsx(Q,{size:12})})]})]},i)}),u.length===0&&e.jsx("div",{className:"px-4 py-4 text-center text-xs text-muted-foreground",children:n("暂无变体")})]})]})}function Z(){return e.jsxs("div",{role:"status","aria-label":"Loading",children:[e.jsx(p,{className:"h-7 w-36"}),e.jsx(p,{className:"mt-2 h-3.5 w-72 max-w-full"}),e.jsx("div",{className:"mt-5 space-y-3",children:Array.from({length:2}).map((t,a)=>e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border",children:[e.jsxs("div",{className:"flex items-center gap-3 bg-muted/40 px-4 py-3",children:[e.jsx(p,{className:"h-4 w-28"}),e.jsx(p,{className:"h-3 w-14"})]}),e.jsx("div",{className:"divide-y divide-border/60",children:Array.from({length:2}).map((m,c)=>e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5",children:[e.jsx(p,{className:"h-5 w-16 rounded"}),e.jsx(p,{className:"h-3.5 flex-1"})]},c))})]},a))})]})}function de(){const{t}=T(),{data:a,isLoading:m}=_(),{data:c}=z(),h=B(),j=F(),[n,r]=g.useState(null),[b,u]=g.useState(""),[i,x]=g.useState(""),[f,v]=g.useState(""),[o,N]=g.useState(null),k=(s,l,d)=>{r({agentType:s,variant:l,config:d,isNew:!1}),x(l),u(JSON.stringify(d,null,2)),v("")},O=s=>{r({agentType:s,variant:"",config:{},isNew:!0}),x(""),u(`{
1
+ import{u as T,r as g,j as e,S,g as J,s as M,v as w,I as U,B as E,w as p,l as P}from"./index-BGajgi5H.js";import{u as _,a as z,b as B,c as F}from"./use-profiles-OJAwfc90.js";import{M as G}from"./modal-QnCJhV9P.js";import{C as $}from"./confirm-dialog-DDWlvtJs.js";import{T as R}from"./textarea-D4HkYa3u.js";import{L as H}from"./layers-WOwm63Fo.js";import{C as q}from"./chevron-down-CpKODb7Y.js";import{P as K,T as Q}from"./trash-2-DPxBnxJM.js";import{P as W}from"./pencil-CNVU3zfM.js";function X(t){const a=Object.entries(t);return a.length===0?"(empty)":a.map(([m,c])=>`${m}: ${JSON.stringify(c)}`).join(", ")}const y={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function Y({agentType:t,variants:a,isBuiltIn:m,onEdit:c,onNew:h,onDelete:j}){const{t:n}=T(),[r,b]=g.useState(!0),u=Object.entries(a);return e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 bg-muted/40 px-4 py-3",children:[e.jsxs("button",{type:"button",onClick:()=>b(i=>!i),"aria-expanded":r,className:"flex items-center gap-3 rounded-md transition-opacity hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-foreground",children:y[t]??t}),e.jsxs("span",{className:"text-[11px] text-muted-foreground",children:[u.length," ",n("个变体")]}),e.jsx(q,{size:14,"aria-hidden":"true",className:P("text-muted-foreground transition-transform motion-reduce:transition-none",r&&"rotate-180")})]}),e.jsxs("button",{type:"button",onClick:h,className:"flex items-center gap-1 rounded-md px-2 py-1 text-[11px] text-muted-foreground transition-colors hover:bg-background hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",children:[e.jsx(K,{size:12,"aria-hidden":"true"}),n("新增")]})]}),r&&e.jsxs("div",{className:"divide-y divide-border/60",children:[u.map(([i,x])=>{const f=m(i);return e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 transition-colors hover:bg-muted/40",children:[e.jsx("span",{className:P("inline-flex shrink-0 items-center rounded px-2 py-0.5 text-[11px] font-semibold tracking-wide",i==="DEFAULT"?"bg-primary/[0.06] text-primary":"bg-muted text-muted-foreground"),children:i}),e.jsx("span",{className:"min-w-0 flex-1 truncate font-mono text-xs text-muted-foreground",children:X(x)}),f&&e.jsx("span",{className:"shrink-0 text-[10px] font-medium text-muted-foreground/70",children:n("内置")}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx("button",{onClick:()=>c(i,x),className:"flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",title:n("编辑"),"aria-label":n("编辑"),children:e.jsx(W,{size:12})}),!f&&e.jsx("button",{onClick:()=>j(i),className:"flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60",title:n("删除"),"aria-label":n("删除"),children:e.jsx(Q,{size:12})})]})]},i)}),u.length===0&&e.jsx("div",{className:"px-4 py-4 text-center text-xs text-muted-foreground",children:n("暂无变体")})]})]})}function Z(){return e.jsxs("div",{role:"status","aria-label":"Loading",children:[e.jsx(p,{className:"h-7 w-36"}),e.jsx(p,{className:"mt-2 h-3.5 w-72 max-w-full"}),e.jsx("div",{className:"mt-5 space-y-3",children:Array.from({length:2}).map((t,a)=>e.jsxs("div",{className:"overflow-hidden rounded-lg border border-border",children:[e.jsxs("div",{className:"flex items-center gap-3 bg-muted/40 px-4 py-3",children:[e.jsx(p,{className:"h-4 w-28"}),e.jsx(p,{className:"h-3 w-14"})]}),e.jsx("div",{className:"divide-y divide-border/60",children:Array.from({length:2}).map((m,c)=>e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5",children:[e.jsx(p,{className:"h-5 w-16 rounded"}),e.jsx(p,{className:"h-3.5 flex-1"})]},c))})]},a))})]})}function de(){const{t}=T(),{data:a,isLoading:m}=_(),{data:c}=z(),h=B(),j=F(),[n,r]=g.useState(null),[b,u]=g.useState(""),[i,x]=g.useState(""),[f,v]=g.useState(""),[o,N]=g.useState(null),k=(s,l,d)=>{r({agentType:s,variant:l,config:d,isNew:!1}),x(l),u(JSON.stringify(d,null,2)),v("")},O=s=>{r({agentType:s,variant:"",config:{},isNew:!0}),x(""),u(`{
2
2
 
3
3
  }`),v("")},D=()=>{if(!(!n||!i.trim()))try{const s=JSON.parse(b);v(""),h.mutate({agentType:n.agentType,variant:i.trim().toUpperCase(),config:s},{onSuccess:()=>r(null)})}catch{v(t("JSON 格式错误"))}},L=(s,l)=>{N({agentType:s,variant:l})},A=()=>{o&&j.mutate({agentType:o.agentType,variant:o.variant},{onSettled:()=>N(null)})},I=(s,l)=>!!c?.executors[s]?.[l];if(m)return e.jsx(S,{children:e.jsx(Z,{})});const C=a?.executors??{};return e.jsxs(S,{children:[e.jsx(J,{title:t("Profile 配置"),description:t("管理 Agent 执行器的配置变体。每个变体定义一组运行参数。"),className:"mb-4"}),e.jsx("div",{className:"space-y-3",children:Object.entries(C).map(([s,l])=>e.jsx(Y,{agentType:s,variants:l,isBuiltIn:d=>I(s,d),onEdit:(d,V)=>k(s,d,V),onNew:()=>O(s),onDelete:d=>L(s,d)},s))}),Object.keys(C).length===0&&e.jsx(M,{icon:H,message:t("暂无 Profile 配置")}),e.jsx(G,{isOpen:!!n,onClose:()=>r(null),title:n?.isNew?t("新增 Variant — {agentType}",{agentType:y[n.agentType]??n.agentType}):t("编辑 {variant}",{variant:n?.variant??""}),action:e.jsxs(e.Fragment,{children:[e.jsx(E,{variant:"outline",onClick:()=>r(null),children:t("取消")}),e.jsx(E,{onClick:D,disabled:h.isPending,children:h.isPending?t("保存中..."):t("保存")})]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsx(w,{label:t("Variant 名称"),htmlFor:"profile-variant-name",children:e.jsx(U,{id:"profile-variant-name",value:i,onChange:s=>x(s.target.value),disabled:!n?.isNew,placeholder:t("例如: CUSTOM"),className:"font-mono"})}),e.jsxs(w,{label:t("配置 (JSON)"),htmlFor:"profile-variant-json",children:[e.jsx(R,{id:"profile-variant-json",value:b,onChange:s=>{u(s.target.value),v("")},rows:6,className:"resize-none font-mono","aria-invalid":!!f}),f&&e.jsx("p",{role:"alert",className:"mt-1 text-xs text-destructive",children:f})]})]})}),e.jsx($,{isOpen:o!==null,onClose:()=>{j.isPending||N(null)},onConfirm:A,title:t("删除 Profile Variant"),description:o?t('确定删除 "{name}"?此操作不可撤销。',{name:`${y[o.agentType]??o.agentType} / ${o.variant}`}):"",confirmText:t("删除"),cancelText:t("取消"),variant:"danger",isLoading:j.isPending})]})}export{de as ProfileSettingsPage};