agent-tower 0.5.2-beta.1 → 0.5.2-beta.2

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 (84) hide show
  1. package/dist/mcp/http-client.d.ts +8 -2
  2. package/dist/mcp/http-client.d.ts.map +1 -1
  3. package/dist/mcp/http-client.js +4 -4
  4. package/dist/mcp/http-client.js.map +1 -1
  5. package/dist/mcp/server.d.ts.map +1 -1
  6. package/dist/mcp/server.js +48 -5
  7. package/dist/mcp/server.js.map +1 -1
  8. package/dist/routes/team-runs.d.ts.map +1 -1
  9. package/dist/routes/team-runs.js +92 -2
  10. package/dist/routes/team-runs.js.map +1 -1
  11. package/dist/services/__tests__/team-reconciler.service.test.js +171 -3
  12. package/dist/services/__tests__/team-reconciler.service.test.js.map +1 -1
  13. package/dist/services/__tests__/team-run.service.test.js +87 -0
  14. package/dist/services/__tests__/team-run.service.test.js.map +1 -1
  15. package/dist/services/__tests__/team-scheduler.service.test.js +131 -0
  16. package/dist/services/__tests__/team-scheduler.service.test.js.map +1 -1
  17. package/dist/services/session-manager.d.ts.map +1 -1
  18. package/dist/services/session-manager.js +11 -0
  19. package/dist/services/session-manager.js.map +1 -1
  20. package/dist/services/team-run.service.d.ts +16 -0
  21. package/dist/services/team-run.service.d.ts.map +1 -1
  22. package/dist/services/team-run.service.js +196 -4
  23. package/dist/services/team-run.service.js.map +1 -1
  24. package/dist/services/team-scheduler.service.d.ts +8 -4
  25. package/dist/services/team-scheduler.service.d.ts.map +1 -1
  26. package/dist/services/team-scheduler.service.js +26 -9
  27. package/dist/services/team-scheduler.service.js.map +1 -1
  28. package/dist/utils/process-launch.d.ts.map +1 -1
  29. package/dist/utils/process-launch.js +52 -9
  30. package/dist/utils/process-launch.js.map +1 -1
  31. package/dist/utils/process-launch.test.js +65 -1
  32. package/dist/utils/process-launch.test.js.map +1 -1
  33. package/dist/web/assets/{AgentDemoPage-CkhVcgZo.js → AgentDemoPage-Co63rtls.js} +1 -1
  34. package/dist/web/assets/{DemoPage-dkmp8Vvn.js → DemoPage-PD8AX5pI.js} +1 -1
  35. package/dist/web/assets/{GeneralSettingsPage-B4DH6g3D.js → GeneralSettingsPage-C5eiEeTZ.js} +1 -1
  36. package/dist/web/assets/{MemberAvatar-pwugXGL4.js → MemberAvatar-BDXmryjB.js} +1 -1
  37. package/dist/web/assets/{NotificationSettingsPage-C-bPU_ZE.js → NotificationSettingsPage-BjjPan2M.js} +1 -1
  38. package/dist/web/assets/{ProfileSettingsPage-Dlr6BmHb.js → ProfileSettingsPage-BRpeNq6u.js} +1 -1
  39. package/dist/web/assets/ProjectKanbanPage-DUUu2EYy.js +89 -0
  40. package/dist/web/assets/{ProjectSettingsPage-DZZksq5G.js → ProjectSettingsPage-avctMKfk.js} +1 -1
  41. package/dist/web/assets/{ProviderSettingsPage-BWN7CEG6.js → ProviderSettingsPage-BIUYN2e0.js} +1 -1
  42. package/dist/web/assets/{SettingsSection-C-sMhXpf.js → SettingsSection-pLJ3msrT.js} +1 -1
  43. package/dist/web/assets/{TeamSettingsPage-924xpocx.js → TeamSettingsPage-BjKW9nT8.js} +1 -1
  44. package/dist/web/assets/{arrow-left-UHjQiY5K.js → arrow-left-lFz8nyZM.js} +1 -1
  45. package/dist/web/assets/{button-CUTjpRqw.js → button-BUA8P726.js} +1 -1
  46. package/dist/web/assets/check-BYuuXc71.js +1 -0
  47. package/dist/web/assets/{chevron-down-Bby7sJEv.js → chevron-down-B931AgE2.js} +1 -1
  48. package/dist/web/assets/{chevron-right-DCC0lyoB.js → chevron-right-F9i4wey6.js} +1 -1
  49. package/dist/web/assets/{chevron-up-BnCoaejn.js → chevron-up-BEHjZ-SB.js} +1 -1
  50. package/dist/web/assets/{circle-check-BscClK07.js → circle-check-C7xXtl8B.js} +1 -1
  51. package/dist/web/assets/{code-block-OCS4YCEC-DkMlYSza.js → code-block-OCS4YCEC-6FHTyCN2.js} +1 -1
  52. package/dist/web/assets/{confirm-dialog-wsb35VpE.js → confirm-dialog-B_wk_zqm.js} +1 -1
  53. package/dist/web/assets/{folder-picker-B-X_nrS1.js → folder-picker-BEHS3b2Q.js} +1 -1
  54. package/dist/web/assets/index-DEQhT5sD.css +1 -0
  55. package/dist/web/assets/{index-CUJoWIuo.js → index-RxbHMWXV.js} +7 -7
  56. package/dist/web/assets/{loader-circle-Cul4BuAa.js → loader-circle-stJcjnm-.js} +1 -1
  57. package/dist/web/assets/{mermaid-NOHMQCX5-DoPzf-UA.js → mermaid-NOHMQCX5-fubZbKyF.js} +3 -3
  58. package/dist/web/assets/{message-square-C7Q71jFj.js → message-square-C8lb-TDo.js} +1 -1
  59. package/dist/web/assets/{modal-25-qs8P5.js → modal-UGrjU63G.js} +1 -1
  60. package/dist/web/assets/{pencil-CaJR6Dqm.js → pencil-uRBgB4qA.js} +1 -1
  61. package/dist/web/assets/{rotate-ccw-Bvz7590n.js → rotate-ccw-CWaMrTz4.js} +1 -1
  62. package/dist/web/assets/{select-CzeTYLO4.js → select-BMlH2AuL.js} +1 -1
  63. package/dist/web/assets/{upload-_2T21rVP.js → upload-B-Mpvu9j.js} +1 -1
  64. package/dist/web/assets/{use-profiles-BaCwGP06.js → use-profiles-D6cZwU1R.js} +1 -1
  65. package/dist/web/assets/{use-providers-Bwl7R5Ql.js → use-providers-DVP6emIi.js} +1 -1
  66. package/dist/web/index.html +2 -2
  67. package/node_modules/@agent-tower/shared/dist/socket/events.d.ts +1 -1
  68. package/node_modules/@agent-tower/shared/dist/socket/events.d.ts.map +1 -1
  69. package/node_modules/@agent-tower/shared/dist/types.d.ts +4 -1
  70. package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
  71. package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
  72. package/node_modules/@prisma/client/.prisma/client/edge.js +6 -5
  73. package/node_modules/@prisma/client/.prisma/client/index-browser.js +1 -0
  74. package/node_modules/@prisma/client/.prisma/client/index.d.ts +43 -0
  75. package/node_modules/@prisma/client/.prisma/client/index.js +6 -5
  76. package/node_modules/@prisma/client/.prisma/client/package.json +1 -1
  77. package/node_modules/@prisma/client/.prisma/client/schema.prisma +2 -0
  78. package/node_modules/@prisma/client/.prisma/client/wasm.js +1 -0
  79. package/package.json +1 -1
  80. package/prisma/migrations/20260609000000_add_team_member_membership_status/migration.sql +3 -0
  81. package/prisma/schema.prisma +2 -0
  82. package/dist/web/assets/ProjectKanbanPage-7oEfjjWV.js +0 -89
  83. package/dist/web/assets/check-CPkZgPjx.js +0 -1
  84. package/dist/web/assets/index-4hNWw0yi.css +0 -1
@@ -1 +1 @@
1
- import{e as q,f as E,g as z,h as v,q as k,i as x,u as B,r as i,j as e,B as R,d as j}from"./index-CUJoWIuo.js";import{B as g}from"./button-CUTjpRqw.js";import{S as L}from"./select-CzeTYLO4.js";import{S as N}from"./SettingsSection-C-sMhXpf.js";import{M as F}from"./message-square-C7Q71jFj.js";import{L as M,C as W}from"./loader-circle-Cul4BuAa.js";import{C as A}from"./circle-check-BscClK07.js";import"./chevron-down-Bby7sJEv.js";import"./check-CPkZgPjx.js";const K=[["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"}]],Q=q("link",K);function O(){return E({queryKey:k.notifications.settings,queryFn:()=>x.get("/notifications/settings")})}function _(){const t=z();return v({mutationFn:n=>x.put("/notifications/settings",n),onSuccess:()=>{t.invalidateQueries({queryKey:k.notifications.settings})}})}function D(){return v({mutationFn:t=>x.post("/notifications/test",t)})}function te(){const{t}=B(),{data:n,isLoading:y}=O(),r=_(),l=D(),w=[{value:"none",label:t("关闭")},{value:"feishu",label:t("飞书 Webhook")}],[a,h]=i.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[d,p]=i.useState(!1),[b,o]=i.useState("idle"),u=i.useRef(void 0);if(i.useEffect(()=>{n&&!d&&h({webhookUrl:n.feishuWebhookUrl??"",baseUrl:n.thirdPartyBaseUrl??"",titleTemplate:n.taskInReviewTitleTemplate??"",bodyTemplate:n.taskInReviewBodyTemplate??""})},[n,d]),i.useEffect(()=>(l.isSuccess?(o("success"),u.current=setTimeout(()=>o("idle"),3e3)):l.isError&&(o("error"),u.current=setTimeout(()=>o("idle"),5e3)),()=>clearTimeout(u.current)),[l.isSuccess,l.isError]),y)return e.jsx(N,{children:e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-neutral-200 border-t-neutral-600"})})});const m=n?.osNotificationEnabled??!0,f=n?.thirdPartyChannel??"none",c=(s,I)=>{h(P=>({...P,[s]:I})),p(!0)},T=()=>{r.mutate({osNotificationEnabled:!m})},C=s=>{r.mutate({thirdPartyChannel:s})},U=()=>{r.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)})},S=()=>{a.webhookUrl.trim()&&l.mutate({channel:"feishu",webhookUrl:a.webhookUrl.trim(),baseUrl:a.baseUrl.trim()||void 0})};return e.jsxs(N,{children:[e.jsx("h2",{className:"text-base font-semibold text-neutral-900 mb-1",children:t("通知设置")}),e.jsxs("div",{className:"flex items-center justify-between py-5 border-b border-neutral-100",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-neutral-100 text-neutral-600",children:e.jsx(R,{size:15})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[13px] font-medium text-neutral-900",children:t("桌面通知")}),e.jsx("div",{className:"text-[12px] text-neutral-500",children:t("任务完成时弹出系统通知")})]})]}),e.jsx("button",{onClick:T,className:j("relative inline-flex h-5 w-9 items-center rounded-full transition-colors",m?"bg-neutral-900":"bg-neutral-200"),children:e.jsx("span",{className:j("inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",m?"translate-x-[18px]":"translate-x-[3px]")})})]}),e.jsxs("div",{className:"py-5 border-b border-neutral-100",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-neutral-100 text-neutral-600",children:e.jsx(F,{size:15})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[13px] font-medium text-neutral-900",children:t("第三方通知")}),e.jsx("div",{className:"text-[12px] text-neutral-500",children:t("推送到外部渠道(飞书群机器人等)")})]}),e.jsx("div",{className:"shrink-0 w-[160px]",children:e.jsx(L,{value:f,onChange:s=>C(s),options:w})})]}),f==="feishu"&&e.jsxs("div",{className:"ml-11 space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:"Webhook URL"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:a.webhookUrl,onChange:s=>c("webhookUrl",s.target.value),placeholder:"https://open.feishu.cn/open-apis/bot/v2/hook/...",className:"flex-1 min-w-0 rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm font-mono transition-colors focus:border-neutral-400 focus:outline-none"}),e.jsxs(g,{size:"sm",variant:"outline",onClick:S,disabled:!a.webhookUrl.trim()||l.isPending,className:"shrink-0",children:[l.isPending&&e.jsx(M,{size:12,className:"animate-spin mr-1"}),t("测试")]})]}),b==="success"&&e.jsxs("div",{className:"flex items-center gap-1.5 mt-2 text-xs text-emerald-600",children:[e.jsx(A,{size:12}),t("测试消息发送成功")]}),b==="error"&&e.jsxs("div",{className:"flex items-center gap-1.5 mt-2 text-xs text-red-500",children:[e.jsx(W,{size:12}),t("发送失败,请检查 Webhook 地址")]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(Q,{size:11,className:"text-neutral-400"}),t("跳转地址")]})}),e.jsx("input",{type:"text",value:a.baseUrl,onChange:s=>c("baseUrl",s.target.value),placeholder:"http://localhost:5173",className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm font-mono transition-colors focus:border-neutral-400 focus:outline-none"}),e.jsx("p",{className:"mt-1 text-[11px] text-neutral-400",children:t('通知卡片中的"查看任务"按钮跳转地址前缀')})]})]})]}),e.jsxs("div",{className:"py-5",children:[e.jsxs("div",{className:"mb-4",children:[e.jsx("h3",{className:"text-[12px] font-semibold uppercase tracking-wide text-neutral-400",children:t("通知模板")}),e.jsx("p",{className:"mt-1 text-[11px] text-neutral-400",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",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:t("标题")}),e.jsx("input",{type:"text",value:a.titleTemplate,onChange:s=>c("titleTemplate",s.target.value),placeholder:"Agent Tower",className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm transition-colors focus:border-neutral-400 focus:outline-none"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:t("内容")}),e.jsx("input",{type:"text",value:a.bodyTemplate,onChange:s=>c("bodyTemplate",s.target.value),placeholder:t('✅ "{taskTitle}" 已完成,等待审查'),className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm transition-colors focus:border-neutral-400 focus:outline-none"})]})]})]}),d&&e.jsx("div",{className:"sticky bottom-0 -mx-5 sm:-mx-8 px-5 sm:px-8 py-3 bg-white/90 backdrop-blur border-t border-neutral-100",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-neutral-500",children:t("有未保存的更改")}),e.jsx(g,{size:"sm",onClick:U,disabled:r.isPending,children:r.isPending?t("保存中..."):t("保存")})]})})]})}export{te as NotificationSettingsPage};
1
+ import{e as q,f as E,g as z,h as v,q as k,i as x,u as B,r as i,j as e,B as R,d as j}from"./index-RxbHMWXV.js";import{B as g}from"./button-BUA8P726.js";import{S as L}from"./select-BMlH2AuL.js";import{S as N}from"./SettingsSection-pLJ3msrT.js";import{M as F}from"./message-square-C8lb-TDo.js";import{L as M,C as W}from"./loader-circle-stJcjnm-.js";import{C as A}from"./circle-check-C7xXtl8B.js";import"./chevron-down-B931AgE2.js";import"./check-BYuuXc71.js";const K=[["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"}]],Q=q("link",K);function O(){return E({queryKey:k.notifications.settings,queryFn:()=>x.get("/notifications/settings")})}function _(){const t=z();return v({mutationFn:n=>x.put("/notifications/settings",n),onSuccess:()=>{t.invalidateQueries({queryKey:k.notifications.settings})}})}function D(){return v({mutationFn:t=>x.post("/notifications/test",t)})}function te(){const{t}=B(),{data:n,isLoading:y}=O(),r=_(),l=D(),w=[{value:"none",label:t("关闭")},{value:"feishu",label:t("飞书 Webhook")}],[a,h]=i.useState({webhookUrl:"",baseUrl:"",titleTemplate:"",bodyTemplate:""}),[d,p]=i.useState(!1),[b,o]=i.useState("idle"),u=i.useRef(void 0);if(i.useEffect(()=>{n&&!d&&h({webhookUrl:n.feishuWebhookUrl??"",baseUrl:n.thirdPartyBaseUrl??"",titleTemplate:n.taskInReviewTitleTemplate??"",bodyTemplate:n.taskInReviewBodyTemplate??""})},[n,d]),i.useEffect(()=>(l.isSuccess?(o("success"),u.current=setTimeout(()=>o("idle"),3e3)):l.isError&&(o("error"),u.current=setTimeout(()=>o("idle"),5e3)),()=>clearTimeout(u.current)),[l.isSuccess,l.isError]),y)return e.jsx(N,{children:e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-neutral-200 border-t-neutral-600"})})});const m=n?.osNotificationEnabled??!0,f=n?.thirdPartyChannel??"none",c=(s,I)=>{h(P=>({...P,[s]:I})),p(!0)},T=()=>{r.mutate({osNotificationEnabled:!m})},C=s=>{r.mutate({thirdPartyChannel:s})},U=()=>{r.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)})},S=()=>{a.webhookUrl.trim()&&l.mutate({channel:"feishu",webhookUrl:a.webhookUrl.trim(),baseUrl:a.baseUrl.trim()||void 0})};return e.jsxs(N,{children:[e.jsx("h2",{className:"text-base font-semibold text-neutral-900 mb-1",children:t("通知设置")}),e.jsxs("div",{className:"flex items-center justify-between py-5 border-b border-neutral-100",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-neutral-100 text-neutral-600",children:e.jsx(R,{size:15})}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[13px] font-medium text-neutral-900",children:t("桌面通知")}),e.jsx("div",{className:"text-[12px] text-neutral-500",children:t("任务完成时弹出系统通知")})]})]}),e.jsx("button",{onClick:T,className:j("relative inline-flex h-5 w-9 items-center rounded-full transition-colors",m?"bg-neutral-900":"bg-neutral-200"),children:e.jsx("span",{className:j("inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",m?"translate-x-[18px]":"translate-x-[3px]")})})]}),e.jsxs("div",{className:"py-5 border-b border-neutral-100",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-neutral-100 text-neutral-600",children:e.jsx(F,{size:15})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-[13px] font-medium text-neutral-900",children:t("第三方通知")}),e.jsx("div",{className:"text-[12px] text-neutral-500",children:t("推送到外部渠道(飞书群机器人等)")})]}),e.jsx("div",{className:"shrink-0 w-[160px]",children:e.jsx(L,{value:f,onChange:s=>C(s),options:w})})]}),f==="feishu"&&e.jsxs("div",{className:"ml-11 space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:"Webhook URL"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:a.webhookUrl,onChange:s=>c("webhookUrl",s.target.value),placeholder:"https://open.feishu.cn/open-apis/bot/v2/hook/...",className:"flex-1 min-w-0 rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm font-mono transition-colors focus:border-neutral-400 focus:outline-none"}),e.jsxs(g,{size:"sm",variant:"outline",onClick:S,disabled:!a.webhookUrl.trim()||l.isPending,className:"shrink-0",children:[l.isPending&&e.jsx(M,{size:12,className:"animate-spin mr-1"}),t("测试")]})]}),b==="success"&&e.jsxs("div",{className:"flex items-center gap-1.5 mt-2 text-xs text-emerald-600",children:[e.jsx(A,{size:12}),t("测试消息发送成功")]}),b==="error"&&e.jsxs("div",{className:"flex items-center gap-1.5 mt-2 text-xs text-red-500",children:[e.jsx(W,{size:12}),t("发送失败,请检查 Webhook 地址")]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(Q,{size:11,className:"text-neutral-400"}),t("跳转地址")]})}),e.jsx("input",{type:"text",value:a.baseUrl,onChange:s=>c("baseUrl",s.target.value),placeholder:"http://localhost:5173",className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm font-mono transition-colors focus:border-neutral-400 focus:outline-none"}),e.jsx("p",{className:"mt-1 text-[11px] text-neutral-400",children:t('通知卡片中的"查看任务"按钮跳转地址前缀')})]})]})]}),e.jsxs("div",{className:"py-5",children:[e.jsxs("div",{className:"mb-4",children:[e.jsx("h3",{className:"text-[12px] font-semibold uppercase tracking-wide text-neutral-400",children:t("通知模板")}),e.jsx("p",{className:"mt-1 text-[11px] text-neutral-400",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",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:t("标题")}),e.jsx("input",{type:"text",value:a.titleTemplate,onChange:s=>c("titleTemplate",s.target.value),placeholder:"Agent Tower",className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm transition-colors focus:border-neutral-400 focus:outline-none"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[12px] font-medium text-neutral-600 mb-1.5",children:t("内容")}),e.jsx("input",{type:"text",value:a.bodyTemplate,onChange:s=>c("bodyTemplate",s.target.value),placeholder:t('✅ "{taskTitle}" 已完成,等待审查'),className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm transition-colors focus:border-neutral-400 focus:outline-none"})]})]})]}),d&&e.jsx("div",{className:"sticky bottom-0 -mx-5 sm:-mx-8 px-5 sm:px-8 py-3 bg-white/90 backdrop-blur border-t border-neutral-100",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-neutral-500",children:t("有未保存的更改")}),e.jsx(g,{size:"sm",onClick:U,disabled:r.isPending,children:r.isPending?t("保存中..."):t("保存")})]})})]})}export{te as NotificationSettingsPage};
@@ -1,3 +1,3 @@
1
- import{u as E,r as x,j as e,d as C}from"./index-CUJoWIuo.js";import{u as I,a as J,b as L,c as M}from"./use-profiles-BaCwGP06.js";import{B as S}from"./button-CUTjpRqw.js";import{M as U,P as z,T as B}from"./modal-25-qs8P5.js";import{C as G}from"./confirm-dialog-wsb35VpE.js";import{S as w}from"./SettingsSection-C-sMhXpf.js";import{C as _}from"./chevron-down-Bby7sJEv.js";import{P as $}from"./pencil-CaJR6Dqm.js";function R(t){const d=Object.entries(t);return d.length===0?"(empty)":d.map(([m,p])=>`${m}: ${JSON.stringify(p)}`).join(", ")}const v={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function F({agentType:t,variants:d,isBuiltIn:m,onEdit:p,onNew:h,onDelete:f}){const{t:s}=E(),[a,g]=x.useState(!0),c=Object.entries(d);return e.jsxs("div",{className:"rounded-lg border border-neutral-200 overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 px-4 py-3 bg-neutral-50/60",children:[e.jsxs("button",{type:"button",onClick:()=>g(r=>!r),className:"flex items-center gap-3 hover:opacity-80 transition-opacity",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900",children:v[t]??t}),e.jsxs("span",{className:"text-[11px] text-neutral-400",children:[c.length," ",s("个变体")]}),e.jsx(_,{size:14,className:C("text-neutral-400 transition-transform",a&&"rotate-180")})]}),e.jsxs("button",{type:"button",onClick:h,className:"flex items-center gap-1 rounded-md px-2 py-1 text-[11px] text-neutral-500 hover:text-neutral-900 hover:bg-white transition-colors",children:[e.jsx(z,{size:12}),s("新增")]})]}),a&&e.jsxs("div",{className:"divide-y divide-neutral-100",children:[c.map(([r,u])=>{const b=m(r);return e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 hover:bg-neutral-50/50 transition-colors",children:[e.jsx("span",{className:C("inline-flex items-center px-2 py-0.5 rounded text-[11px] font-semibold tracking-wide shrink-0",r==="DEFAULT"?"bg-blue-50 text-blue-600":"bg-neutral-100 text-neutral-600"),children:r}),e.jsx("span",{className:"flex-1 min-w-0 text-[12px] text-neutral-400 font-mono truncate",children:R(u)}),b&&e.jsx("span",{className:"shrink-0 text-[10px] text-neutral-300 font-medium",children:s("内置")}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx("button",{onClick:()=>p(r,u),className:"flex h-6 w-6 items-center justify-center rounded text-neutral-400 hover:text-neutral-700 hover:bg-neutral-100 transition-colors",title:s("编辑"),children:e.jsx($,{size:12})}),!b&&e.jsx("button",{onClick:()=>f(r),className:"flex h-6 w-6 items-center justify-center rounded text-neutral-400 hover:text-red-500 hover:bg-red-50 transition-colors",title:s("删除"),children:e.jsx(B,{size:12})})]})]},r)}),c.length===0&&e.jsx("div",{className:"px-4 py-4 text-center text-[12px] text-neutral-400",children:s("暂无变体")})]})]})}function ee(){const{t}=E(),{data:d,isLoading:m}=I(),{data:p}=J(),h=L(),f=M(),[s,a]=x.useState(null),[g,c]=x.useState(""),[r,u]=x.useState(""),[b,j]=x.useState(""),[i,N]=x.useState(null),P=(n,l,o)=>{a({agentType:n,variant:l,config:o,isNew:!1}),u(l),c(JSON.stringify(o,null,2)),j("")},T=n=>{a({agentType:n,variant:"",config:{},isNew:!0}),u(""),c(`{
1
+ import{u as E,r as x,j as e,d as C}from"./index-RxbHMWXV.js";import{u as I,a as J,b as L,c as M}from"./use-profiles-D6cZwU1R.js";import{B as S}from"./button-BUA8P726.js";import{M as U,P as z,T as B}from"./modal-UGrjU63G.js";import{C as G}from"./confirm-dialog-B_wk_zqm.js";import{S as w}from"./SettingsSection-pLJ3msrT.js";import{C as _}from"./chevron-down-B931AgE2.js";import{P as $}from"./pencil-uRBgB4qA.js";function R(t){const d=Object.entries(t);return d.length===0?"(empty)":d.map(([m,p])=>`${m}: ${JSON.stringify(p)}`).join(", ")}const v={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent"};function F({agentType:t,variants:d,isBuiltIn:m,onEdit:p,onNew:h,onDelete:f}){const{t:s}=E(),[a,g]=x.useState(!0),c=Object.entries(d);return e.jsxs("div",{className:"rounded-lg border border-neutral-200 overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 px-4 py-3 bg-neutral-50/60",children:[e.jsxs("button",{type:"button",onClick:()=>g(r=>!r),className:"flex items-center gap-3 hover:opacity-80 transition-opacity",children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900",children:v[t]??t}),e.jsxs("span",{className:"text-[11px] text-neutral-400",children:[c.length," ",s("个变体")]}),e.jsx(_,{size:14,className:C("text-neutral-400 transition-transform",a&&"rotate-180")})]}),e.jsxs("button",{type:"button",onClick:h,className:"flex items-center gap-1 rounded-md px-2 py-1 text-[11px] text-neutral-500 hover:text-neutral-900 hover:bg-white transition-colors",children:[e.jsx(z,{size:12}),s("新增")]})]}),a&&e.jsxs("div",{className:"divide-y divide-neutral-100",children:[c.map(([r,u])=>{const b=m(r);return e.jsxs("div",{className:"flex items-center gap-3 px-4 py-2.5 hover:bg-neutral-50/50 transition-colors",children:[e.jsx("span",{className:C("inline-flex items-center px-2 py-0.5 rounded text-[11px] font-semibold tracking-wide shrink-0",r==="DEFAULT"?"bg-blue-50 text-blue-600":"bg-neutral-100 text-neutral-600"),children:r}),e.jsx("span",{className:"flex-1 min-w-0 text-[12px] text-neutral-400 font-mono truncate",children:R(u)}),b&&e.jsx("span",{className:"shrink-0 text-[10px] text-neutral-300 font-medium",children:s("内置")}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx("button",{onClick:()=>p(r,u),className:"flex h-6 w-6 items-center justify-center rounded text-neutral-400 hover:text-neutral-700 hover:bg-neutral-100 transition-colors",title:s("编辑"),children:e.jsx($,{size:12})}),!b&&e.jsx("button",{onClick:()=>f(r),className:"flex h-6 w-6 items-center justify-center rounded text-neutral-400 hover:text-red-500 hover:bg-red-50 transition-colors",title:s("删除"),children:e.jsx(B,{size:12})})]})]},r)}),c.length===0&&e.jsx("div",{className:"px-4 py-4 text-center text-[12px] text-neutral-400",children:s("暂无变体")})]})]})}function ee(){const{t}=E(),{data:d,isLoading:m}=I(),{data:p}=J(),h=L(),f=M(),[s,a]=x.useState(null),[g,c]=x.useState(""),[r,u]=x.useState(""),[b,j]=x.useState(""),[i,N]=x.useState(null),P=(n,l,o)=>{a({agentType:n,variant:l,config:o,isNew:!1}),u(l),c(JSON.stringify(o,null,2)),j("")},T=n=>{a({agentType:n,variant:"",config:{},isNew:!0}),u(""),c(`{
2
2
 
3
3
  }`),j("")},O=()=>{if(!(!s||!r.trim()))try{const n=JSON.parse(g);j(""),h.mutate({agentType:s.agentType,variant:r.trim().toUpperCase(),config:n},{onSuccess:()=>a(null)})}catch{j(t("JSON 格式错误"))}},k=(n,l)=>{N({agentType:n,variant:l})},D=()=>{i&&f.mutate({agentType:i.agentType,variant:i.variant},{onSettled:()=>N(null)})},V=(n,l)=>!!p?.executors[n]?.[l];if(m)return e.jsx(w,{children:e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx("div",{className:"h-5 w-5 animate-spin rounded-full border-2 border-neutral-200 border-t-neutral-600"})})});const y=d?.executors??{};return e.jsxs(w,{children:[e.jsxs("div",{className:"mb-4",children:[e.jsx("h2",{className:"text-base font-semibold text-neutral-900",children:t("Profile 配置")}),e.jsx("p",{className:"mt-0.5 text-[12px] text-neutral-500",children:t("管理 Agent 执行器的配置变体。每个变体定义一组运行参数。")})]}),e.jsx("div",{className:"space-y-3",children:Object.entries(y).map(([n,l])=>e.jsx(F,{agentType:n,variants:l,isBuiltIn:o=>V(n,o),onEdit:(o,A)=>P(n,o,A),onNew:()=>T(n),onDelete:o=>k(n,o)},n))}),Object.keys(y).length===0&&e.jsx("div",{className:"rounded-xl border border-dashed border-neutral-200 bg-neutral-50/50 py-12 text-center",children:e.jsx("p",{className:"text-sm text-neutral-400",children:t("暂无 Profile 配置")})}),e.jsx(U,{isOpen:!!s,onClose:()=>a(null),title:s?.isNew?t("新增 Variant — {agentType}",{agentType:v[s.agentType]??s.agentType}):t("编辑 {variant}",{variant:s?.variant??""}),action:e.jsxs(e.Fragment,{children:[e.jsx(S,{variant:"outline",onClick:()=>a(null),children:t("取消")}),e.jsx(S,{onClick:O,disabled:h.isPending,children:h.isPending?t("保存中..."):t("保存")})]}),children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:t("Variant 名称")}),e.jsx("input",{type:"text",value:r,onChange:n=>u(n.target.value),disabled:!s?.isNew,placeholder:t("例如: CUSTOM"),className:"w-full rounded-lg border border-neutral-200 bg-white px-3 py-2 text-sm font-mono transition-colors focus:border-neutral-400 focus:outline-none disabled:bg-neutral-50 disabled:text-neutral-500"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[13px] font-medium text-neutral-700 mb-1",children:t("配置 (JSON)")}),e.jsx("textarea",{value:g,onChange:n=>{c(n.target.value),j("")},rows:6,className:"w-full rounded-lg border border-neutral-200 bg-neutral-50/50 px-3 py-2 text-sm font-mono transition-colors focus:border-neutral-400 focus:bg-white focus:outline-none resize-none"}),b&&e.jsx("p",{className:"mt-1 text-xs text-red-500",children:b})]})]})}),e.jsx(G,{isOpen:i!==null,onClose:()=>{f.isPending||N(null)},onConfirm:D,title:t("删除 Profile Variant"),description:i?t('确定删除 "{name}"?此操作不可撤销。',{name:`${v[i.agentType]??i.agentType} / ${i.variant}`}):"",confirmText:t("删除"),cancelText:t("取消"),variant:"danger",isLoading:f.isPending})]})}export{ee as ProfileSettingsPage};