@runfusion/fusion 0.58.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +2 -3
  2. package/dist/bin.js +16034 -13546
  3. package/dist/client/.vite/manifest.json +251 -248
  4. package/dist/client/assets/AgentDetailView-BBjuuYbU.js +18 -0
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-3x5cc2cp.js → AgentPermissionPolicyEditor-DOdy1ln0.js} +1 -1
  6. package/dist/client/assets/{AgentsView-B77vHi_7.js → AgentsView-DlyT08sc.js} +4 -4
  7. package/dist/client/assets/ChatView-CJBnc6rJ.js +6 -0
  8. package/dist/client/assets/CommandCenter-BhRLZmOH.js +99 -0
  9. package/dist/client/assets/CommandCenter-DSrIaOro.css +1 -0
  10. package/dist/client/assets/{DevServerView-BXmkO05R.js → DevServerView-DRpi8Xqz.js} +1 -1
  11. package/dist/client/assets/{DirectoryPicker-CZ3EXSE5.js → DirectoryPicker-Bw_A-64N.js} +1 -1
  12. package/dist/client/assets/{DocumentsView-BSWFgTsC.css → DocumentsView-BSC7wh2B.css} +1 -1
  13. package/dist/client/assets/{DocumentsView-GlAyW64J.js → DocumentsView-w0eDbpbG.js} +2 -2
  14. package/dist/client/assets/{EvalsView-BLmcsNNf.js → EvalsView-DxQALLwD.js} +1 -1
  15. package/dist/client/assets/ExperimentalAgentOnboardingModal-BuEWZrjl.js +1 -0
  16. package/dist/client/assets/{GoalsView-BRfZ4qGe.js → GoalsView-C3MGEtSt.js} +1 -1
  17. package/dist/client/assets/InsightsView-C0-BkE8_.js +11 -0
  18. package/dist/client/assets/{MemoryView-ChkuBpUf.js → MemoryView-Dd8uiLHH.js} +2 -2
  19. package/dist/client/assets/{PiExtensionsManager-DXwQdB7b.js → PiExtensionsManager-DlsEVOjG.js} +1 -1
  20. package/dist/client/assets/{PluginManager-B8zAjhqf.js → PluginManager-Cf9AOCcC.js} +1 -1
  21. package/dist/client/assets/{PullRequestView-DL1E1ixh.js → PullRequestView-hm77QtHV.js} +2 -2
  22. package/dist/client/assets/{ResearchView-BCYCHiyQ.js → ResearchView-BMQEnYH6.js} +1 -1
  23. package/dist/client/assets/SecretsView-Dc3sWf40.js +1 -0
  24. package/dist/client/assets/{SessionTerminal-BvK8A98c.css → SessionTerminal-CDTiqrd7.css} +1 -1
  25. package/dist/client/assets/SessionTerminal-CEv1G-9-.js +2 -0
  26. package/dist/client/assets/SettingsModal-DFrTDsBm.js +21 -0
  27. package/dist/client/assets/{SettingsModal-U7ma-5OU.js → SettingsModal-TuphE_CP.js} +1 -1
  28. package/dist/client/assets/{SetupWizardModal-BCDoA33s.js → SetupWizardModal-CNGogJJp.js} +2 -2
  29. package/dist/client/assets/{ShadcnColorPicker-EVU2cXpo.js → ShadcnColorPicker-1Z7JIWTE.js} +2 -2
  30. package/dist/client/assets/{SkillsView-V48VsthB.js → SkillsView-CjPvmnz6.js} +1 -1
  31. package/dist/client/assets/TodoView-CUD4xw3T.css +1 -0
  32. package/dist/client/assets/TodoView-DmJPSWOu.js +6 -0
  33. package/dist/client/assets/WorkflowNodeEditor-BqO2yRXe.js +8 -0
  34. package/dist/client/assets/{agentSkills-B-QDeW2q.js → agentSkills-BNahUMFe.js} +1 -1
  35. package/dist/client/assets/app-BzgEwAOr.js +13 -0
  36. package/dist/client/assets/{app-RIK4I745.js → app-C7eDKtXM.js} +3 -3
  37. package/dist/client/assets/{app-SHNioZxk.js → app-CL1Ik1qS.js} +3 -3
  38. package/dist/client/assets/{app-De_pkbYi.js → app-Ckb9wA3K.js} +3 -3
  39. package/dist/client/assets/{app-cZgmPvs6.js → app-Den3D7oy.js} +3 -3
  40. package/dist/client/assets/{app--U62_ZWS.js → app-nAsTBQMW.js} +3 -3
  41. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DvR35aCH.js → architectureDiagram-3BPJPVTR-Bb_ZGdtz.js} +1 -1
  42. package/dist/client/assets/{blockDiagram-GPEHLZMM-ciQdpSqc.js → blockDiagram-GPEHLZMM-CWfWJnIM.js} +1 -1
  43. package/dist/client/assets/{c4Diagram-AAUBKEIU-CV0Z6UEL.js → c4Diagram-AAUBKEIU-Dufe_2hy.js} +1 -1
  44. package/dist/client/assets/channel-BYHFEnHT.js +1 -0
  45. package/dist/client/assets/{chunk-2J33WTMH-CkAQRX3g.js → chunk-2J33WTMH-BdKWX3Y7.js} +1 -1
  46. package/dist/client/assets/{chunk-4BX2VUAB-CJXvYVcN.js → chunk-4BX2VUAB-CQ9_zgu6.js} +1 -1
  47. package/dist/client/assets/{chunk-55IACEB6-DOv0lN1u.js → chunk-55IACEB6-DEFTCISD.js} +1 -1
  48. package/dist/client/assets/{chunk-727SXJPM-tRsHXz7i.js → chunk-727SXJPM-8RnJp1fx.js} +1 -1
  49. package/dist/client/assets/{chunk-AQP2D5EJ-CfzOMXn9.js → chunk-AQP2D5EJ-DJg6awe1.js} +1 -1
  50. package/dist/client/assets/{chunk-FMBD7UC4-BKvUZ2cn.js → chunk-FMBD7UC4-Bw-OImRT.js} +1 -1
  51. package/dist/client/assets/{chunk-ND2GUHAM-FqiVnW7u.js → chunk-ND2GUHAM-BSx9p0RO.js} +1 -1
  52. package/dist/client/assets/{chunk-QZHKN3VN-BAJDyCpZ.js → chunk-QZHKN3VN-Dbdv72P6.js} +1 -1
  53. package/dist/client/assets/classDiagram-4FO5ZUOK-BLstvJ1W.js +1 -0
  54. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BLstvJ1W.js +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-DYizdcNp.js → cose-bilkent-S5V4N54A-CXtcC6U2.js} +1 -1
  56. package/dist/client/assets/{dagre-BM42HDAG-BDWwvXJx.js → dagre-BM42HDAG-BO0r4g14.js} +1 -1
  57. package/dist/client/assets/{dashboard-view-DmfIFCV-.js → dashboard-view-BTnVGch5.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-BYn_jRw9.js → dashboard-view-CoDeYJbQ.js} +1 -1
  59. package/dist/client/assets/{diagram-2AECGRRQ-C8ic2E9q.js → diagram-2AECGRRQ-CLmeU2g6.js} +1 -1
  60. package/dist/client/assets/{diagram-5GNKFQAL-H5IDcv9E.js → diagram-5GNKFQAL-CKyM23Jy.js} +1 -1
  61. package/dist/client/assets/{diagram-KO2AKTUF-DkczJXd6.js → diagram-KO2AKTUF-ByeVRDs_.js} +1 -1
  62. package/dist/client/assets/{diagram-LMA3HP47-P1vh7RIU.js → diagram-LMA3HP47-r8qKTJDn.js} +1 -1
  63. package/dist/client/assets/{diagram-OG6HWLK6-CgeybA5t.js → diagram-OG6HWLK6-D2ugPdm7.js} +1 -1
  64. package/dist/client/assets/{erDiagram-TEJ5UH35-DSJa4zRQ.js → erDiagram-TEJ5UH35-dLzbDn0G.js} +1 -1
  65. package/dist/client/assets/{flowDiagram-I6XJVG4X-DG91ZWS9.js → flowDiagram-I6XJVG4X-et7EENd6.js} +1 -1
  66. package/dist/client/assets/{folder-open-iGyAYoN-.js → folder-open-BVtcjVIK.js} +1 -1
  67. package/dist/client/assets/{ganttDiagram-6RSMTGT7-dkOQjOK8.js → ganttDiagram-6RSMTGT7-DmiabChP.js} +1 -1
  68. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-GqrJtmDT.js → gitGraphDiagram-PVQCEYII-I1vbhqer.js} +1 -1
  69. package/dist/client/assets/index-C2HFa2A-.css +1 -0
  70. package/dist/client/assets/index-inWk2g6R.js +2540 -0
  71. package/dist/client/assets/{infoDiagram-5YYISTIA-BfFhhqbU.js → infoDiagram-5YYISTIA-xd6L9Gq3.js} +1 -1
  72. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DBBV-PIS.js → ishikawaDiagram-YF4QCWOH-fUeEYBvD.js} +1 -1
  73. package/dist/client/assets/{journeyDiagram-JHISSGLW-xZisXOgZ.js → journeyDiagram-JHISSGLW-B7xjU8Oh.js} +1 -1
  74. package/dist/client/assets/{kanban-definition-UN3LZRKU-CbOJloOw.js → kanban-definition-UN3LZRKU-CJ8oRjFI.js} +1 -1
  75. package/dist/client/assets/{mermaid.core-DKBiVV3q.js → mermaid.core-2udKsaH3.js} +4 -4
  76. package/dist/client/assets/{mindmap-definition-RKZ34NQL-Bf9V63ac.js → mindmap-definition-RKZ34NQL-CVywzN7Q.js} +1 -1
  77. package/dist/client/assets/{pieDiagram-4H26LBE5-0ukMaTVl.js → pieDiagram-4H26LBE5-8vzzC4Mg.js} +1 -1
  78. package/dist/client/assets/{puzzle-BvEf9PLH.js → puzzle-D60d3Nv1.js} +1 -1
  79. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CwXZAtYI.js → quadrantDiagram-W4KKPZXB-Cxyb4Mom.js} +1 -1
  80. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DVsu9t-w.js → requirementDiagram-4Y6WPE33-Bs5RaG7r.js} +1 -1
  81. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DOJUnv7J.js → sankeyDiagram-5OEKKPKP-Jf7Zq43D.js} +1 -1
  82. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B67g0g9m.js → sequenceDiagram-3UESZ5HK-CG0I780H.js} +1 -1
  83. package/dist/client/assets/{shield-alert-4FPCIFZ2.js → shield-alert-B7JyuWPR.js} +1 -1
  84. package/dist/client/assets/{stateDiagram-AJRCARHV-CPPa0bHh.js → stateDiagram-AJRCARHV-C1c5XtKG.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Dyj14elw.js → stateDiagram-v2-BHNVJYJU-Cv7_pOt_.js} +1 -1
  86. package/dist/client/assets/{timeline-definition-PNZ67QCA-UVWf2E8M.js → timeline-definition-PNZ67QCA-BWg-lsI0.js} +1 -1
  87. package/dist/client/assets/{upload-BkgVjwwc.js → upload-Dxv5FPaS.js} +1 -1
  88. package/dist/client/assets/{users-9nCT4liw.js → users-DvKg3opr.js} +1 -1
  89. package/dist/client/assets/{vennDiagram-CIIHVFJN-CqGrv1wQ.js → vennDiagram-CIIHVFJN-gFjFmLlv.js} +1 -1
  90. package/dist/client/assets/{wardley-L42UT6IY-aA0pos_F.js → wardley-L42UT6IY-BaCNX8ou.js} +1 -1
  91. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-C-O5tD1L.js → wardleyDiagram-YWT4CUSO-BRR6aw0q.js} +1 -1
  92. package/dist/client/assets/{xychartDiagram-2RQKCTM6-qoIF674C.js → xychartDiagram-2RQKCTM6-D6Gwn1XW.js} +1 -1
  93. package/dist/client/index.html +2 -2
  94. package/dist/client/version.json +1 -1
  95. package/dist/droid-cli/package.json +1 -1
  96. package/dist/extension.js +14159 -12709
  97. package/dist/pi-claude-cli/package.json +1 -1
  98. package/dist/plugin-sdk/index.d.ts +27 -1
  99. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +4 -7
  100. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  101. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  102. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +0 -5
  103. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  104. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +0 -5
  105. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  106. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +0 -5
  107. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +0 -5
  109. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +4 -7
  111. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +0 -5
  113. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  114. package/dist/plugins/fusion-plugin-linear-import/bundled.js +0 -5
  115. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +0 -5
  117. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  118. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +0 -5
  119. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  120. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-reports/src/dashboard/components/ShareBlocksPanel.tsx +4 -1
  122. package/dist/plugins/fusion-plugin-reports/src/dashboard/components/__tests__/ShareBlocksPanel.test.tsx +41 -2
  123. package/dist/plugins/fusion-plugin-roadmap/bundled.js +0 -5
  124. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  126. package/package.json +1 -1
  127. package/skill/fusion/SKILL.md +1 -1
  128. package/skill/fusion/references/engine-tools.md +1 -0
  129. package/skill/fusion/references/extension-tools.md +10 -0
  130. package/skill/fusion/references/fusion-capabilities.md +1 -0
  131. package/dist/client/assets/AgentDetailView-whCXABbu.js +0 -18
  132. package/dist/client/assets/ChatView-CninsTIm.js +0 -6
  133. package/dist/client/assets/CommandCenter-B9q-zM9p.css +0 -1
  134. package/dist/client/assets/CommandCenter-C6LmdUin.js +0 -71
  135. package/dist/client/assets/ExperimentalAgentOnboardingModal-DvDix9pH.js +0 -1
  136. package/dist/client/assets/InsightsView-X4RlcgrU.js +0 -11
  137. package/dist/client/assets/SecretsView-B48BIZKw.js +0 -1
  138. package/dist/client/assets/SessionTerminal-CUyYlq16.js +0 -2
  139. package/dist/client/assets/SettingsModal-DbjBoUYD.js +0 -21
  140. package/dist/client/assets/TodoView-DmpJmxu7.css +0 -1
  141. package/dist/client/assets/TodoView-MZ9Pfl65.js +0 -6
  142. package/dist/client/assets/WorkflowNodeEditor-B95Dvf-O.js +0 -8
  143. package/dist/client/assets/app-SucmTDhV.js +0 -13
  144. package/dist/client/assets/channel-Y_Uhrtqx.js +0 -1
  145. package/dist/client/assets/classDiagram-4FO5ZUOK-DhicwSPE.js +0 -1
  146. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DhicwSPE.js +0 -1
  147. package/dist/client/assets/index-Bg8SMXUs.css +0 -1
  148. package/dist/client/assets/index-DO9Ch72Y.js +0 -2544
@@ -1 +0,0 @@
1
- import{r as s,j as n}from"./vendor-react-SZ_qB27O.js";import{v as F,w as V,x as W,y as z,z as B,B as G}from"./index-DO9Ch72Y.js";import{u as U}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-xterm-BNq00GSj.js";function en({isOpen:l,onClose:R,onUseDraft:M,projectId:x,existingAgents:P,mode:_="create",existingAgentConfig:L}){const{t:e}=U("app"),[m,d]=s.useState("initial"),[f,S]=s.useState(""),[c,k]=s.useState(null),[C,w]=s.useState(""),[I,A]=s.useState("answer"),[v,p]=s.useState(""),[t,T]=s.useState(null),[H,g]=s.useState(null),[E,y]=s.useState([]),b=_==="edit",o=s.useRef(l),N=s.useCallback(()=>{d("initial"),S(""),k(null),w(""),A("answer"),p(""),T(null),g(null),y([])},[]),q=s.useMemo(()=>F.map(a=>({id:a.id,label:a.name,description:a.description})),[]);s.useEffect(()=>{if(o.current=l,!c)return;const a=V(c,x,{onThinking:i=>{o.current&&y($=>{const h=[...$],j=h[h.length-1];return j&&!j.question?(h[h.length-1]={...j,thinkingOutput:`${j.thinkingOutput??""}${i}`},h):[...h,{response:{},thinkingOutput:i}]})},onQuestion:i=>{o.current&&(w(i.question),A(i.id),d("question"))},onSummary:i=>{o.current&&(T(i),d("summary"))},onError:i=>{o.current&&(g(i),d("error"))}});return()=>{o.current=!1,a.close()}},[l,c,x]);const u=async()=>{o.current=!1;try{c&&await z(c,x)}catch{}finally{N(),R()}};if(s.useEffect(()=>{o.current=l,l||N()},[l,N]),!l)return null;const r=a=>a==null||a===""?n.jsx("em",{className:"experimental-agent-onboarding-modal__summary-empty",children:e("agents.onboarding.notSet","Not set")}):n.jsx("span",{children:a}),D=async()=>{d("loading"),g(null);try{const a=await B(f,{mode:_,existingAgentConfig:L,existingAgents:P.map(i=>({id:i.id,name:i.name,role:i.role})),templates:q},x);if(!o.current)return;k(a.sessionId)}catch(a){if(!o.current)return;g(a.message),d("error")}},Q=async()=>{if(c){d("loading"),g(null);try{const a={[I]:v};if(y(i=>[...i,{question:{id:I,type:"text",question:C},response:a}]),await G(c,a,x),!o.current)return;p("")}catch(a){if(!o.current)return;g(a.message),d("error")}}},O=async()=>{t&&(M(t),await u())};return n.jsx("div",{className:"modal-overlay open",role:"presentation",children:n.jsxs("div",{className:"modal modal-lg experimental-agent-onboarding-modal",role:"dialog","aria-modal":"true","aria-label":e("agents.onboarding.dialogLabel","AI Interview"),children:[n.jsxs("div",{className:"modal-header",children:[n.jsx("h3",{children:e("agents.onboarding.title","AI Interview")}),n.jsx("button",{className:"modal-close",onClick:()=>void u(),"aria-label":e("common.closeAriaLabel","Close"),children:"×"})]}),E.length>0&&n.jsx(W,{entries:E}),m==="initial"&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-intent",children:b?e("agents.onboarding.intentLabelEdit","What should this agent change or improve?"):e("agents.onboarding.intentLabelCreate","What should this new agent own?")}),n.jsx("textarea",{id:"agent-onboarding-intent",className:"input experimental-agent-onboarding-modal__textarea",value:f,onChange:a=>S(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:!f.trim(),onClick:()=>void D(),children:b?e("agents.onboarding.startInterview","Start interview"):e("agents.onboarding.startOnboarding","Start onboarding")})]})]}),(m==="loading"||m==="question")&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-answer",children:C||e("agents.onboarding.thinking","Thinking...")}),n.jsx("textarea",{id:"agent-onboarding-answer",className:"input experimental-agent-onboarding-modal__textarea",value:v,onChange:a=>p(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:m==="loading"||!v.trim(),onClick:()=>void Q(),children:e("agents.onboarding.continue","Continue")})]})]}),m==="summary"&&t&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{children:b?e("agents.onboarding.updatedDraftReady","Updated draft ready for review"):e("agents.onboarding.draftReady","Draft ready for review")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-intro",children:e("agents.onboarding.draftIntro","Review this generated draft. Nothing is applied until you confirm.")}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary card",children:[n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionIdentity","Identity")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldName","Name")}),n.jsx("dd",{children:r(t.name)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRole","Role")}),n.jsx("dd",{children:r(t.role)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTitle","Title")}),n.jsx("dd",{children:r(t.title)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldIcon","Icon")}),n.jsx("dd",{children:r(t.icon)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldReportsTo","Reports To")}),n.jsx("dd",{children:r(t.reportsTo)})]})]})]}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionConfiguration","Configuration")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldInlineInstructions","Inline Instructions")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.instructionsText)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSoul","Soul")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.soul)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldAgentMemory","Agent Memory")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.memory)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSkills","Skills")}),n.jsx("dd",{children:r(t.skills?.join(", "))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldThinkingLevel","Thinking Level")}),n.jsx("dd",{children:r(t.thinkingLevel)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldMaxTurns","Max Turns")}),n.jsx("dd",{children:r(t.maxTurns)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTemplate","Template")}),n.jsx("dd",{children:r(t.templateId)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldPatternAgent","Pattern Agent")}),n.jsx("dd",{children:r(t.patternAgentId)})]})]})]}),(t.heartbeatProcedurePath||t.heartbeatIntervalMs||t.heartbeatEnabled!==void 0||t.modelHint||t.runtimeHint)&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRuntimeHints","Runtime Hints")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatPath","Heartbeat Procedure Path")}),n.jsx("dd",{children:r(t.heartbeatProcedurePath)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatInterval","Heartbeat Interval")}),n.jsx("dd",{children:r(t.heartbeatIntervalMs?`${t.heartbeatIntervalMs}ms`:void 0)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatEnabled","Heartbeat Enabled")}),n.jsx("dd",{children:r(t.heartbeatEnabled===void 0?void 0:t.heartbeatEnabled?e("agents.onboarding.yes","yes"):e("agents.onboarding.no","no"))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldModelHint","Model Hint")}),n.jsx("dd",{children:r(t.modelHint)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRuntimeHint","Runtime Hint")}),n.jsx("dd",{children:r(t.runtimeHint)})]})]})]}),t.rationale&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRationale","Rationale")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-block",children:t.rationale})]})]}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",onClick:()=>void O(),children:b?e("agents.onboarding.applyDraftSettings","Apply draft to settings form"):e("agents.onboarding.applyDraftAgent","Apply draft to agent form")})]})]}),m==="error"&&H&&n.jsxs("div",{className:"form-group",children:[n.jsx("div",{className:"form-error",children:H}),n.jsx("div",{className:"modal-actions",children:n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.close","Close")})})]})]})})}export{en as ExperimentalAgentOnboardingModal};
@@ -1,11 +0,0 @@
1
- import{r as c,j as e}from"./vendor-react-SZ_qB27O.js";import{c as ze,aA as ce,aB as Se,aC as ke,bp as Ce,bq as Ve,aF as je,br as We,bs as Ye,bt as Ke,bu as Qe,bv as Je,bw as Ze,bx as Me,by as es,bz as ss,bA as Ae,V as ts,S as I,bB as is,X as Ie,bC as me,R as N,N as ns,bD as as,a9 as Le,g as le,bE as Ne,bn as rs,P as _e,al as cs,aY as De,bF as ls}from"./index-DO9Ch72Y.js";import{u as Pe}from"./vendor-i18n-GF3RlKbq.js";import{U as Fe}from"./users-9nCT4liw.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-xterm-BNq00GSj.js";/**
2
- * @license lucide-react v1.7.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const os=[["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M16 6h.01",key:"1x0f13"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M8 6h.01",key:"1dz90k"}],["path",{d:"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3",key:"cabbwy"}],["rect",{x:"4",y:"2",width:"16",height:"20",rx:"2",key:"1uxh74"}]],hs=ze("building",os);/**
7
- * @license lucide-react v1.7.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const gs=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],ds=ze("chart-line",gs),ue=["architecture","quality","workflow","performance","reliability","security","ux","testability","documentation","dependency","features","competitive_analysis","research","trends","other"],Ee={quality:"Quality",performance:"Performance",architecture:"Architecture",security:"Security",reliability:"Reliability",ux:"User Experience",testability:"Testability",documentation:"Documentation",dependency:"Dependencies",workflow:"Workflow",other:"Other",features:"Features",competitive_analysis:"Competitive Analysis",research:"Research",trends:"Trends"};function us(g){const{t:h}=Pe("app"),$=g??"",w=`${ke.INSIGHTS_PREFIX}${$}`,S=`${ke.INSIGHT_LATEST_RUN_PREFIX}${$}`,s=ce(w,{maxAgeMs:Se}),W=ce(S,{maxAgeMs:Ce}),F=c.useRef(Array.isArray(s)&&s.length>0),U=c.useCallback(r=>h(`insights.category.${r}`,Ee[r]??r),[h]),[v,x]=c.useState(()=>Array.isArray(s)?s:[]),[T,Y]=c.useState(()=>ue.map(r=>({category:r,label:Ee[r]??r,items:[],isLoading:!1,error:null}))),[K,z]=c.useState(!(Array.isArray(s)&&s.length>0)),[Q,G]=c.useState(null),[J,L]=c.useState(W??null),[Z,B]=c.useState(!1),[ee,E]=c.useState(null),[se,_]=c.useState(new Map),[te,C]=c.useState(new Map),[u,k]=c.useState(new Map),[m,D]=c.useState(new Map),[H,j]=c.useState(!1),R=c.useCallback(async()=>{F.current||z(!0),G(null);try{const i=(await Ve({status:void 0,limit:1e3},g)).insights.filter(d=>d.status!=="dismissed");x(i),je(w,i.length>500?i.slice(0,500):i,{maxBytes:5e5});const t=await We(g);t.runs.length>0&&(L(t.runs[0]),je(S,t.runs[0],{maxBytes:5e5})),F.current=!0}catch(r){const i=r instanceof Error?r.message:"Failed to fetch insights";G(i)}finally{z(!1)}},[w,S,g]),y=c.useCallback(()=>{j(r=>!r)},[]),ie=c.useCallback(async(r,i)=>{B(!0),E(null);try{const t=await Ye("manual",void 0,g,r,i);L(t),t.status==="completed"?await R():t.status==="failed"&&t.error&&E(t.error)}catch(t){if(t instanceof Ke&&t.status===409&&t.details?.code==="ACTIVE_RUN_CONFLICT"){const f=typeof t.details.activeRunId=="string"?t.details.activeRunId:null;if(f)try{const ge=await Qe(f,g);L(ge)}catch{}throw E("Insight generation is already running"),t}const d=t instanceof Error?t.message:"Failed to generate insights";throw E(d),t}finally{B(!1)}},[g,R]),oe=c.useCallback(async r=>{_(i=>{const t=new Map(i);return t.set(r,{running:!0,error:null}),t});try{await Je(r,g),x(i=>i.filter(t=>t.id!==r)),_(i=>{const t=new Map(i);return t.set(r,{running:!1,error:null}),t})}catch(i){const t=i instanceof Error?i.message:"Failed to dismiss insight";throw _(d=>{const f=new Map(d);return f.set(r,{running:!1,error:t}),f}),i}},[g]),he=c.useCallback(async r=>{C(i=>{const t=new Map(i);return t.set(r,{running:!0,error:null}),t});try{const i=await Ze(r,g);return await Me(r,g),x(t=>t.map(d=>d.id===r?{...d,status:"archived",updatedAt:new Date().toISOString()}:d)),C(t=>{const d=new Map(t);return d.set(r,{running:!1,error:null}),d}),{title:i.suggestedTitle,description:i.suggestedDescription}}catch(i){const t=i instanceof Error?i.message:"Failed to create task";throw C(d=>{const f=new Map(d);return f.set(r,{running:!1,error:t}),f}),i}},[g]);c.useEffect(()=>{const r=new Map;for(const i of ue)r.set(i,[]);for(const i of v){if(!H&&i.status==="archived")continue;const t=r.get(i.category)??[];r.set(i.category,[...t,i])}Y(ue.map(i=>({category:i,label:U(i),items:r.get(i)??[],isLoading:!1,error:null})))},[v,H,U]);const b=c.useCallback(async r=>{k(i=>{const t=new Map(i);return t.set(r,{running:!0,error:null}),t});try{await Me(r,g),x(i=>i.map(t=>t.id===r?{...t,status:"archived",updatedAt:new Date().toISOString()}:t)),k(i=>{const t=new Map(i);return t.set(r,{running:!1,error:null}),t})}catch(i){const t=i instanceof Error?i.message:"Failed to archive insight";throw k(d=>{const f=new Map(d);return f.set(r,{running:!1,error:t}),f}),i}},[g]),O=c.useCallback(async r=>{D(i=>{const t=new Map(i);return t.set(r,{running:!0,error:null}),t});try{await es(r,g),x(i=>i.map(t=>t.id===r?{...t,status:"confirmed",updatedAt:new Date().toISOString()}:t)),D(i=>{const t=new Map(i);return t.set(r,{running:!1,error:null}),t})}catch(i){const t=i instanceof Error?i.message:"Failed to unarchive insight";throw D(d=>{const f=new Map(d);return f.set(r,{running:!1,error:t}),f}),i}},[g]),p=c.useMemo(()=>T.reduce((r,i)=>r+i.items.length,0),[T]),X=c.useMemo(()=>0,[]),q=c.useMemo(()=>v.filter(r=>r.status==="archived").length,[v]);return c.useEffect(()=>{const r=ce(w,{maxAgeMs:Se}),i=ce(S,{maxAgeMs:Ce}),t=Array.isArray(r)&&r.length>0;x(Array.isArray(r)?r:[]),L(i??null),z(!t),F.current=t},[w,S]),c.useEffect(()=>{R()},[R]),{sections:T,loading:K,error:Q,latestRun:J,isRunInFlight:Z,runError:ee,refresh:R,runInsights:ie,dismiss:oe,createTask:he,archive:b,unarchive:O,toggleShowArchived:y,dismissStates:se,createTaskStates:te,archiveStates:u,unarchiveStates:m,totalCount:p,dismissedCount:X,archivedCount:q,showArchived:H}}const $e=["Backlog health:","Backlog pressure detected","Stale paused todo","Backlog health: dependency-blocked todos"];function Re(g){return $e.some(h=>g.title.startsWith(h))}const Te={architecture:hs,quality:Le,workflow:De,performance:Ne,reliability:N,security:le,ux:Fe,testability:me,documentation:cs,dependency:_e,features:rs,competitive_analysis:Fe,research:ds,trends:Ne,other:I};function ws({projectId:g,addToast:h,onClose:$,onCreateTask:w,models:S}){const{t:s}=Pe("app"),{sections:W,loading:F,error:U,latestRun:v,isRunInFlight:x,runError:T,refresh:Y,runInsights:K,dismiss:z,createTask:Q,archive:G=async()=>{},unarchive:J=async()=>{},toggleShowArchived:L=()=>{},dismissStates:Z,createTaskStates:B,archiveStates:ee=new Map,unarchiveStates:E=new Map,totalCount:se,archivedCount:_=0,showArchived:te=!1}=us(g),[C,u]=c.useState(null),[k,m]=c.useState("info"),[D,H]=c.useState(!1),[j,R]=c.useState(!1),[y,ie]=c.useState(()=>localStorage.getItem("fusion-insight-model")??""),[oe,he]=c.useState([]),[b,O]=c.useState([]),[p,X]=c.useState([]),[q,r]=c.useState();c.useEffect(()=>{S||ss().then(n=>{he(n.models),O(n.favoriteProviders),X(n.favoriteModels),r(n.resolvedPlanningProvider);const a=localStorage.getItem("fusion-insight-model");a&&(n.models.some(o=>`${o.provider}/${o.id}`===a)||(localStorage.removeItem("fusion-insight-model"),ie("")))}).catch(()=>{})},[S]);const i=S??oe,t=c.useMemo(()=>b.length>0?b:q?[q]:[],[b,q]),d=c.useCallback(async n=>{const l=b.includes(n)?b.filter(o=>o!==n):[n,...b];O(l);try{await Ae({favoriteProviders:l,favoriteModels:p})}catch{O(b)}},[b,p]),f=c.useCallback(async n=>{const l=p.includes(n)?p.filter(o=>o!==n):[n,...p];X(l);try{await Ae({favoriteProviders:b,favoriteModels:l})}catch{X(p)}},[p,b]),ge=c.useCallback(n=>{ie(n),n?localStorage.setItem("fusion-insight-model",n):localStorage.removeItem("fusion-insight-model")},[]),V=c.useMemo(()=>W.filter(n=>n.items.length>0),[W]),fe=c.useMemo(()=>V.reduce((n,a)=>n+a.items.filter(Re).length,0),[V]),M=c.useMemo(()=>j?V.map(n=>({...n,items:n.items.filter(Re)})).filter(n=>n.items.length>0):V,[V,j]),[P,de]=c.useState(null);c.useEffect(()=>{if(M.length===0){P!==null&&de(null);return}P&&M.some(a=>a.category===P&&a.items.length>0)||de(M[0].category)},[M,P]);const A=c.useMemo(()=>M.find(n=>n.category===P)??M[0],[M,P]);c.useEffect(()=>{if(C){const n=setTimeout(()=>u(null),5e3);return()=>clearTimeout(n)}},[C]);const ve=c.useCallback(async()=>{try{u(s("insights.generatingInsights","Generating insights...")),m("info");let n,a;if(y){const l=y.indexOf("/");if(l!==-1){const o=y.slice(0,l),ne=y.slice(l+1);o&&ne&&(n=o,a=ne)}}await K(n,a),u(s("insights.generationStarted","Insight generation started")),m("success"),h(s("insights.generationStarted","Insight generation started"),"success")}catch(n){const a=n instanceof Error?n.message:s("insights.failedToStart","Failed to start generation");if(a==="Insight generation is already running"){u(s("insights.alreadyRunning","Insight generation is already running. Showing the active run.")),m("info"),h(s("insights.alreadyRunningShort","Insight generation is already running"),"info");return}u(a),m("error"),h(a,"error")}},[K,h,y,s]),Ue=c.useCallback(async(n,a)=>{try{u(s("insights.dismissing",'Dismissing "{{title}}"...',{title:a})),m("info"),await z(n),u(s("insights.dismissed",'Dismissed "{{title}}"',{title:a})),m("success"),h(s("insights.dismissedMsg","Insight dismissed: {{title}}",{title:a}),"success")}catch(l){const o=l instanceof Error?l.message:s("insights.failedToDismiss","Failed to dismiss insight");u(o),m("error"),h(o,"error")}},[z,h,s]),Ge=c.useCallback(async(n,a)=>{try{u(s("insights.archiving",'Archiving "{{title}}"...',{title:a})),m("info"),await G(n),u(s("insights.archived",'Archived "{{title}}"',{title:a})),m("success"),h(s("insights.archivedMsg","Insight archived: {{title}}",{title:a}),"success")}catch(l){const o=l instanceof Error?l.message:s("insights.failedToArchive","Failed to archive insight");u(o),m("error"),h(o,"error")}},[G,h,s]),Be=c.useCallback(async(n,a)=>{try{u(s("insights.unarchiving",'Unarchiving "{{title}}"...',{title:a})),m("info"),await J(n),u(s("insights.unarchived",'Unarchived "{{title}}"',{title:a})),m("success"),h(s("insights.unarchivedMsg","Insight unarchived: {{title}}",{title:a}),"success")}catch(l){const o=l instanceof Error?l.message:s("insights.failedToUnarchive","Failed to unarchive insight");u(o),m("error"),h(o,"error")}},[J,h,s]),He=c.useCallback(async(n,a)=>{try{if(u(s("insights.creatingTask",'Creating task from "{{title}}"...',{title:a})),m("info"),!w)throw new Error(s("insights.taskCreationUnavailable","Task creation is unavailable in this view"));const l=await Q(n);if(!l)throw new Error(s("insights.failedToPreparePayload","Failed to prepare task payload from insight"));await w({insightId:n,title:l.title,description:l.description}),u(s("insights.taskCreated",'Task created from "{{title}}"',{title:a})),m("success"),h(s("insights.taskCreatedMsg","Task created: {{title}}",{title:l.title}),"success")}catch(l){const o=l instanceof Error?l.message:s("insights.failedToCreateTask","Failed to create task");u(o),m("error"),h(o,"error")}},[Q,w,h,s]),Oe=n=>{const a=Te[n.category]??I,l=A?.category===n.category;return e.jsx("li",{children:e.jsxs("button",{type:"button",className:`insights-category-item${l?" insights-category-item--active":""}`,onClick:()=>de(n.category),"aria-current":l?"true":void 0,"data-testid":`insights-category-${n.category}`,children:[e.jsx(a,{size:16,className:"insights-category-icon"}),e.jsx("span",{className:"insights-category-label",children:n.label}),e.jsx("span",{className:"insights-category-count",children:n.items.length})]})},n.category)},Xe=()=>{if(!A)return null;const n=Te[A.category]??I;return e.jsxs("section",{className:"insights-section","data-testid":`insights-section-${A.category}`,children:[e.jsx("div",{className:"insights-section-header",children:e.jsxs("div",{className:"insights-section-title",children:[e.jsx(n,{size:18,className:"insights-section-icon"}),e.jsx("h3",{children:A.label}),e.jsx("span",{className:"insights-section-count",children:A.items.length})]})}),e.jsx("div",{className:"insights-section-content",children:e.jsx("ul",{className:"insights-list",children:A.items.map(a=>{const l=Z.get(a.id),o=B.get(a.id),ne=ee.get(a.id),qe=E.get(a.id),be=l?.running??!1,ye=o?.running??!1,xe=ne?.running??!1,pe=qe?.running??!1,we=a.status==="archived",ae=A.items.some(re=>Z.get(re.id)?.running||B.get(re.id)?.running||ee.get(re.id)?.running||E.get(re.id)?.running);return e.jsxs("li",{className:`insight-item${we?" insight-item--archived":""}`,"data-insight-id":a.id,children:[e.jsxs("div",{className:"insight-item-header",children:[e.jsx("h4",{className:"insight-item-title",children:a.title}),e.jsxs("div",{className:"insight-item-actions",children:[we?e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void Be(a.id,a.title),disabled:pe||ae,title:s("insights.unarchiveTitle","Unarchive this insight"),"aria-label":s("insights.unarchiveLabel","Unarchive this insight"),"data-testid":`unarchive-${a.id}`,children:pe?e.jsx(N,{size:16,className:"spin"}):e.jsx(ls,{size:16})}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void He(a.id,a.title),disabled:ye||ae,title:s("insights.createTaskTitle","Create task from this insight"),"aria-label":s("insights.createTaskLabel","Create task from this insight"),"data-testid":`create-task-${a.id}`,children:ye?e.jsx(N,{size:16,className:"spin"}):e.jsx(_e,{size:16})}),e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void Ge(a.id,a.title),disabled:xe||ae,title:s("insights.archiveTitle","Archive this insight"),"aria-label":s("insights.archiveLabel","Archive this insight"),"data-testid":`archive-${a.id}`,children:xe?e.jsx(N,{size:16,className:"spin"}):e.jsx(me,{size:16})})]}),e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void Ue(a.id,a.title),disabled:be||ae,title:s("insights.dismissTitle","Dismiss this insight"),"aria-label":s("insights.dismissLabel","Dismiss this insight"),"data-testid":`dismiss-${a.id}`,children:be?e.jsx(N,{size:16,className:"spin"}):e.jsx(Ie,{size:16})})]})]}),a.content&&e.jsx("p",{className:"insight-item-content",children:a.content}),e.jsxs("div",{className:"insight-item-meta",children:[e.jsx("span",{className:`insight-item-status insight-item-status--${a.status}`,children:a.status}),a.createdAt&&e.jsxs("span",{className:"insight-item-date",children:[e.jsx(De,{size:12}),new Date(a.createdAt).toLocaleDateString()]})]})]},a.id)})})})]})};return e.jsxs("div",{className:"insights-view","data-testid":"insights-view",children:[e.jsx(ts,{icon:I,title:s("insights.title","Insights"),actions:e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"insights-view-count",children:[se," ",s("common.total","total")]}),fe>0&&e.jsxs("button",{className:`btn btn-sm insights-backlog-health-toggle${j?" btn-icon--active":""}`,onClick:()=>R(n=>!n),"aria-pressed":j,"aria-label":j?s("insights.showAllInsights","Show all insights"):s("insights.showBacklogHealth","Show only backlog health insights"),"data-testid":"toggle-backlog-health",title:$e.join(", "),children:[e.jsx(is,{size:14}),j?s("insights.allInsights","All Insights"):s("insights.backlogHealth","Backlog")," ",e.jsxs("span",{children:["(",fe,")"]})]}),$&&e.jsx("button",{className:"btn btn-sm insights-view-close",onClick:$,"aria-label":s("actions.closeInsightsView","Close insights view"),title:s("actions.close","Close"),children:e.jsx(Ie,{size:16})}),_>0&&e.jsxs("button",{className:"btn btn-sm insights-show-archived-toggle",onClick:L,"aria-label":te?s("insights.hideArchived","Hide archived insights"):s("insights.showArchived","Show archived insights"),"data-testid":"toggle-archived-insights",children:[e.jsx(me,{size:14}),te?s("insights.hideArchivedLabel","Archived"):s("insights.showArchivedLabel","Archived ({{count}})",{count:_})]}),e.jsx("button",{className:"btn btn-icon btn-sm insights-refresh-btn",onClick:()=>void Y(),disabled:F,"aria-label":s("actions.refreshInsights","Refresh insights"),title:s("actions.refreshInsights","Refresh insights"),"data-testid":"refresh-insights",children:e.jsx(N,{size:14,className:F?"spin":""})}),e.jsxs("button",{className:"btn btn-sm insights-model-toggle",onClick:()=>H(n=>!n),"aria-label":s("insights.configureModel","Configure insight generation model"),"aria-expanded":D,"data-testid":"toggle-model-config",title:y?s("insights.modelConfigured","Model: {{model}}",{model:y}):s("insights.configureModelTitle","Configure model"),children:[e.jsx(ns,{size:14}),y&&e.jsx("span",{className:"insights-model-indicator"})]}),e.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void ve(),disabled:x,"aria-label":s("insights.generateInsights","Generate new insights"),"data-testid":"run-insights",children:x?e.jsxs(e.Fragment,{children:[e.jsx(N,{size:14,className:"spin"}),s("insights.generating","Generating...")]}):e.jsxs(e.Fragment,{children:[e.jsx(I,{size:14}),s("insights.generateInsightsBtn","Generate Insights")]})})]})}),D&&e.jsxs("div",{className:"insights-model-config","data-testid":"model-config",children:[e.jsx("label",{htmlFor:"insight-model-select",className:"insights-model-label",children:s("insights.model","Model")}),e.jsx(as,{models:i,value:y,onChange:ge,placeholder:s("insights.usePlanningDefault","Use planning default"),label:s("insights.generationModel","Insight generation model"),disabled:x,id:"insight-model-select",favoriteProviders:t,favoriteModels:p,onToggleFavorite:d,onToggleModelFavorite:f})]}),e.jsx("div",{className:"insights-status-region","aria-live":"polite","data-testid":"insights-status",children:C&&e.jsxs("div",{className:`insights-status-message insights-status-message--${k}`,role:k==="error"?"alert":void 0,children:[k==="success"&&e.jsx(Le,{size:16}),k==="error"&&e.jsx(le,{size:16}),k==="info"&&e.jsx(I,{size:16}),e.jsx("span",{children:C})]})}),T&&e.jsxs("div",{className:"insights-error-callout",role:"alert","data-testid":"run-error",children:[e.jsx(le,{size:16}),e.jsx("span",{children:T})]}),v&&e.jsx("div",{className:"insights-run-info","data-testid":"latest-run",children:e.jsxs("span",{className:"insights-run-status",children:[s("insights.latestRun","Latest run:")," ",v.status,v.status==="completed"&&e.jsxs(e.Fragment,{children:[" — ",s("insights.runCompleted","{{created}} created, {{updated}} updated",{created:v.insightsCreated,updated:v.insightsUpdated})]}),v.status==="failed"&&v.error&&e.jsxs(e.Fragment,{children:[" — ",v.error]})]})}),F?e.jsxs("div",{className:"insights-loading","data-testid":"insights-loading",children:[e.jsx(N,{size:24,className:"spin"}),e.jsx("p",{children:s("insights.loading","Loading insights...")})]}):U?e.jsxs("div",{className:"insights-error","data-testid":"insights-error",children:[e.jsx(le,{size:24}),e.jsx("p",{children:U}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void Y(),children:s("actions.retry","Retry")})]}):se===0?e.jsxs("div",{className:"insights-empty","data-testid":"insights-empty",children:[e.jsx(I,{size:48}),e.jsx("h3",{children:s("insights.noInsightsYet","No insights yet")}),e.jsx("p",{children:s("insights.generateDescription","Generate insights to get AI-powered recommendations for your project.")}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void ve(),children:[e.jsx(I,{size:14}),s("insights.generateFirst","Generate First Insights")]})]}):e.jsxs("div",{className:"insights-body",children:[e.jsx("aside",{className:"insights-sidebar","aria-label":s("insights.categoriesLabel","Insight categories"),children:e.jsx("ul",{className:"insights-category-list",children:M.map(Oe)})}),e.jsx("div",{className:"insights-detail",children:Xe()})]})]})}export{ws as InsightsView};
@@ -1 +0,0 @@
1
- import{r as c,j as e}from"./vendor-react-SZ_qB27O.js";import{V as ue,n as he,R as J,P as me,E as Y,o as z,p as ye,q as xe,s as ve,u as be,C as je,e as fe}from"./index-DO9Ch72Y.js";import{u as Se}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-xterm-BNq00GSj.js";const ge="__sync_passphrase__",L={key:"",value:"",description:"",scope:"project",accessPolicy:"prompt",envExportable:!1,envExportKey:""},n={className:"secrets-action-icon","aria-hidden":!0,style:{width:"1em",height:"1em"}},Ne={...n,className:"secrets-action-icon spin"},Re=({addToast:d})=>{const{t:a}=Se("app"),[R,G]=c.useState([]),[T,M]=c.useState(!0),[A,D]=c.useState(null),[K,b]=c.useState(null),[p,O]=c.useState(null),[U,y]=c.useState(!1),[Q,g]=c.useState(null),[t,l]=c.useState(L),[N,C]=c.useState(!1),[V,j]=c.useState({}),[W,_]=c.useState(null),[u,X]=c.useState(!1),[Z,B]=c.useState(!1),[f,F]=c.useState(""),[P,$]=c.useState(""),[ee,H]=c.useState(!1),[E,se]=c.useState(!1),m=c.useRef(new Map),w=c.useRef(new Map),o=c.useCallback(async(s,r)=>{const i=await fetch(s,{...r,headers:{"Content-Type":"application/json",...r?.headers??{}}});if(!i.ok){const h=await i.json().catch(()=>({error:"Request failed"}));throw new Error(String(h?.error??"Request failed"))}if(i.status!==204)return i.json()},[]),x=c.useCallback(async()=>{M(!0),D(null);try{const s=await o("/api/secrets");G(s.secrets)}catch(s){D(s instanceof Error?s.message:String(s))}finally{M(!1)}},[o]),S=c.useCallback(async()=>{try{const s=await o("/api/secrets/sync-passphrase");X(!!s.configured)}catch(s){d?.(a("secrets.errorLoadSyncStatus","Failed to load sync passphrase status: {{error}}",{error:s instanceof Error?s.message:String(s)}),"error")}},[d,o]);c.useEffect(()=>(x(),S(),()=>{m.current.forEach(s=>clearTimeout(s)),w.current.forEach(s=>clearTimeout(s))}),[x,S]);const k=()=>{B(!1),F(""),$("")},ae=async s=>{await o("/api/secrets/sync-passphrase",{method:"PUT",body:JSON.stringify({passphrase:s})})},re=async()=>{H(!0);try{await ae(f),d?.(u?a("secrets.syncPassphraseRotated","Sync passphrase rotated"):a("secrets.syncPassphraseSet","Sync passphrase set"),"success"),k(),await S()}catch(s){d?.(a("secrets.errorSaveSyncPassphrase","Failed to save sync passphrase: {{error}}",{error:s instanceof Error?s.message:String(s)}),"error")}finally{H(!1)}},te=async()=>{if(window.confirm(a("secrets.confirmClearSyncPassphrase","Clear the cross-node sync passphrase? Existing sync pairs will stop working until you set a new passphrase.")))try{await o("/api/secrets/sync-passphrase",{method:"DELETE"}),d?.(a("secrets.syncPassphraseCleared","Sync passphrase cleared"),"success"),await S()}catch(r){d?.(a("secrets.errorClearSyncPassphrase","Failed to clear sync passphrase: {{error}}",{error:r instanceof Error?r.message:String(r)}),"error")}},ce=()=>{O(null),l(L),y(!0),C(!1),b(null)},le=s=>{O(s),l({key:s.key,value:"",description:s.description??"",scope:s.scope,accessPolicy:s.accessPolicy,envExportable:s.envExportable,envExportKey:s.envExportKey??""}),y(!0),C(!1),b(null)},ne=async()=>{b(null);try{if(p){const s={key:t.key,description:t.description||null,accessPolicy:t.accessPolicy,envExportable:t.envExportable,envExportKey:t.envExportable&&t.envExportKey||null};t.value&&(s.value=t.value),await o(`/api/secrets/${p.scope}/${p.id}`,{method:"PATCH",body:JSON.stringify(s)})}else await o("/api/secrets",{method:"POST",body:JSON.stringify({scope:t.scope,key:t.key,value:t.value,description:t.description||null,accessPolicy:t.accessPolicy,envExportable:t.envExportable,envExportKey:t.envExportable&&t.envExportKey||null})});y(!1),l(L),await x()}catch(s){b(s instanceof Error?s.message:String(s))}},oe=s=>{const r=m.current.get(s.id);r&&(clearTimeout(r),m.current.delete(s.id)),j(i=>({...i,[s.id]:null}))},ie=async s=>{const r=await o(`/api/secrets/${s.scope}/${s.id}/reveal`,{method:"POST"});j(v=>({...v,[s.id]:r.value})),d?.(a("secrets.revealed","Revealed"),"success");const i=setTimeout(()=>{j(v=>({...v,[s.id]:null})),m.current.delete(s.id)},3e4),h=m.current.get(s.id);h&&clearTimeout(h),m.current.set(s.id,i)},de=async s=>{const r=V[s.id];if(!r)return;await navigator.clipboard.writeText(r),_(s.id),d?.(a("secrets.copied","Copied"),"success");const i=setTimeout(()=>{_(null),j(v=>({...v,[s.id]:null}))},1500),h=w.current.get(s.id);h&&clearTimeout(h),w.current.set(s.id,i)},pe=async s=>{await o(`/api/secrets/${s.scope}/${s.id}`,{method:"DELETE"}),g(null),await x()},I=c.useMemo(()=>[...R].filter(s=>!(s.scope==="global"&&s.key===ge)).sort((s,r)=>s.key.localeCompare(r.key)),[R]),q=f.length>0&&f===P;return e.jsxs("section",{className:"secrets-view",children:[e.jsx(ue,{icon:he,title:a("secrets.title","Secrets"),actions:e.jsxs(e.Fragment,{children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void x(),children:[e.jsx(J,{...n})," ",a("secrets.refresh","Refresh")]}),e.jsxs("button",{className:"btn btn-primary btn-sm",onClick:ce,children:[e.jsx(me,{...n})," ",a("secrets.addSecret","Add Secret")]})]})}),A?e.jsx("div",{className:"form-error",children:A}):null,T?e.jsxs("div",{className:"secrets-loading",children:[e.jsx(J,{...Ne})," ",a("secrets.loading","Loading…")]}):null,!T&&I.length===0?e.jsx("div",{className:"secrets-empty",children:a("secrets.empty","No secrets found.")}):null,e.jsx("div",{className:"secrets-list",children:I.map(s=>{const r=V[s.id];return e.jsxs("article",{className:"card secrets-row",children:[e.jsxs("div",{className:"secrets-row-main",children:[e.jsx("div",{className:"secrets-row-key",children:s.key}),e.jsxs("div",{className:"secrets-row-meta",children:[e.jsx("span",{className:"secrets-chip",children:s.scope}),e.jsx("span",{className:"secrets-chip",children:s.accessPolicy}),s.envExportable?e.jsx("span",{className:"secrets-chip",children:a("secrets.envExportableChip","env exportable")}):null]}),r?e.jsx("pre",{className:"secrets-revealed",children:r}):null]}),e.jsxs("div",{className:"secrets-row-side",children:[e.jsx("span",{className:"secrets-row-read",children:s.lastReadAt?new Date(s.lastReadAt).toLocaleString():a("secrets.neverRead","Never read")}),e.jsxs("div",{className:"secrets-row-actions",children:[e.jsx("button",{type:"button",className:"btn btn-icon secrets-visibility-toggle",onClick:()=>{if(r){oe(s);return}ie(s)},"aria-label":r?a("secrets.hideAriaLabel","Hide"):a("secrets.revealAriaLabel","Reveal"),children:r?e.jsx(Y,{...n}):e.jsx(z,{...n})}),e.jsx("button",{className:"btn btn-icon",onClick:()=>void de(s),"aria-label":a("secrets.copyAriaLabel","Copy"),disabled:!r,children:W===s.id?e.jsx(ye,{...n}):e.jsx(xe,{...n})}),e.jsx("button",{className:"btn btn-icon",onClick:()=>le(s),"aria-label":a("secrets.editAriaLabel","Edit"),children:e.jsx(ve,{...n})}),e.jsx("button",{className:"btn btn-icon btn-danger",onClick:()=>g(s.id),"aria-label":a("secrets.deleteAriaLabel","Delete"),children:e.jsx(be,{...n})})]}),Q===s.id?e.jsxs("div",{className:"secrets-confirm",children:[e.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void pe(s),children:a("secrets.confirmDelete","Confirm")}),e.jsx("button",{className:"btn btn-sm",onClick:()=>g(null),children:a("secrets.cancelDelete","Cancel")})]}):null]})]},s.id)})}),e.jsxs("article",{className:"card secrets-sync-card secrets-sync-disclosure",children:[e.jsxs("button",{type:"button",className:"secrets-sync-disclosure-toggle","data-testid":"secrets-passphrase-disclosure","aria-expanded":E,"aria-controls":"secrets-sync-disclosure-panel",onClick:()=>se(s=>!s),children:[E?e.jsx(je,{size:16,"aria-hidden":"true"}):e.jsx(fe,{size:16,"aria-hidden":"true"}),e.jsx("span",{children:a("secrets.syncPassphraseTitle","Cross-Node Sync Passphrase")})]}),E?e.jsxs("div",{id:"secrets-sync-disclosure-panel",className:"secrets-sync-disclosure-panel",children:[e.jsxs("div",{className:"secrets-sync-header",children:[e.jsxs("p",{className:"secrets-sync-status",children:[e.jsx("span",{className:`status-dot ${u?"status-dot--online":"status-dot--pending"}`,"aria-hidden":"true"})," ",u?a("secrets.syncConfigured","Configured"):a("secrets.syncNotConfigured","Not configured")]}),e.jsxs("div",{className:"secrets-sync-actions",children:[e.jsx("button",{className:"btn",onClick:()=>B(!0),children:u?a("secrets.rotateSyncPassphrase","Rotate"):a("secrets.setPassphrase","Set passphrase")}),u?e.jsx("button",{className:"btn btn-danger",onClick:()=>void te(),children:a("secrets.clearSyncPassphrase","Clear")}):null]})]}),e.jsx("p",{className:"secrets-sync-copy",children:a("secrets.syncPassphraseDescription","Shared passphrase used to wrap cross-node secret bundles. Both nodes in a sync pair must share the same value. Stored locally only; never transmitted.")})]}):null]}),Z?e.jsx("div",{className:"modal-overlay open",role:"presentation",children:e.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true","aria-label":u?a("secrets.rotateSyncPassphraseModalTitle","Rotate sync passphrase"):a("secrets.setSyncPassphraseModalTitle","Set sync passphrase"),children:[e.jsxs("div",{className:"modal-header",children:[e.jsx("h3",{children:u?a("secrets.rotateSyncPassphraseModalTitle","Rotate sync passphrase"):a("secrets.setSyncPassphraseModalTitle","Set sync passphrase")}),e.jsx("button",{className:"modal-close",onClick:k,"aria-label":a("secrets.closeAriaLabel","Close"),children:"×"})]}),e.jsxs("div",{className:"secrets-modal-body",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.passphraseLabel","Passphrase")}),e.jsx("input",{"aria-label":a("secrets.passphraseLabel","Passphrase"),className:"input",type:"password",autoComplete:"new-password",value:f,onChange:s=>F(s.target.value)})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.confirmPassphraseLabel","Confirm passphrase")}),e.jsx("input",{"aria-label":a("secrets.confirmPassphraseLabel","Confirm passphrase"),className:"input",type:"password",autoComplete:"new-password",value:P,onChange:s=>$(s.target.value)})]}),!q&&P.length>0?e.jsx("div",{className:"form-error",children:a("secrets.passphraseMustMatch","Passphrases must match.")}):null]}),e.jsx("div",{className:"modal-actions",children:e.jsxs("div",{className:"modal-actions-right",children:[e.jsx("button",{className:"btn",onClick:k,children:a("secrets.cancelBtn","Cancel")}),e.jsx("button",{className:"btn btn-primary",onClick:()=>void re(),disabled:!q||ee,children:u?a("secrets.rotateSyncPassphrase","Rotate"):a("secrets.setPassphrase","Set passphrase")})]})})]})}):null,U?e.jsx("div",{className:"modal-overlay open",role:"presentation",children:e.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true","aria-label":p?a("secrets.editSecretModalTitle","Edit secret"):a("secrets.addSecretModalTitle","Add secret"),children:[e.jsxs("div",{className:"modal-header",children:[e.jsx("h3",{children:p?a("secrets.editSecretModalTitle","Edit secret"):a("secrets.addSecretModalTitle","Add secret")}),e.jsx("button",{className:"modal-close",onClick:()=>y(!1),"aria-label":a("secrets.closeAriaLabel","Close"),children:"×"})]}),e.jsxs("div",{className:"secrets-modal-body",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.keyLabel","Key")}),e.jsx("input",{className:"input",value:t.key,onChange:s=>l(r=>({...r,key:s.target.value}))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.valueLabel","Value")}),e.jsxs("div",{className:"secrets-value-row",children:[e.jsx("input",{className:"input",type:N?"text":"password",autoComplete:"off",spellCheck:!1,value:t.value,onChange:s=>l(r=>({...r,value:s.target.value}))}),e.jsx("button",{type:"button",className:"btn btn-icon secrets-visibility-toggle",onClick:()=>C(s=>!s),"aria-label":N?a("secrets.hideValueAriaLabel","Hide value"):a("secrets.showValueAriaLabel","Show value"),children:N?e.jsx(Y,{...n}):e.jsx(z,{...n})})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.descriptionLabel","Description")}),e.jsx("textarea",{className:"input",value:t.description,onChange:s=>l(r=>({...r,description:s.target.value}))})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.scopeLabel","Scope")}),e.jsxs("div",{className:"secrets-radio-row",children:[e.jsxs("label",{children:[e.jsx("input",{type:"radio",checked:t.scope==="project",onChange:()=>l(s=>({...s,scope:"project"})),disabled:!!p})," ",a("secrets.scopeProject","Project")]}),e.jsxs("label",{children:[e.jsx("input",{type:"radio",checked:t.scope==="global",onChange:()=>l(s=>({...s,scope:"global"})),disabled:!!p})," ",a("secrets.scopeGlobal","Global")]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.accessPolicyLabel","Access policy")}),e.jsxs("select",{className:"select",value:t.accessPolicy,onChange:s=>l(r=>({...r,accessPolicy:s.target.value})),children:[e.jsx("option",{value:"auto",children:a("secrets.accessPolicyAuto","auto")}),e.jsx("option",{value:"prompt",children:a("secrets.accessPolicyPrompt","prompt")}),e.jsx("option",{value:"deny",children:a("secrets.accessPolicyDeny","deny")})]})]}),e.jsx("div",{className:"form-group",children:e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:t.envExportable,onChange:s=>l(r=>({...r,envExportable:s.target.checked}))})," ",a("secrets.exportToEnvLabel","Export to env")]})}),t.envExportable?e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:a("secrets.envKeyLabel","Env key")}),e.jsx("input",{className:"input",value:t.envExportKey,onChange:s=>l(r=>({...r,envExportKey:s.target.value}))})]}):null,K?e.jsx("div",{className:"form-error",children:K}):null]}),e.jsx("div",{className:"modal-actions",children:e.jsxs("div",{className:"modal-actions-right",children:[e.jsx("button",{className:"btn",onClick:()=>y(!1),children:a("secrets.cancelBtn","Cancel")}),e.jsx("button",{className:"btn btn-primary",onClick:()=>void ne(),children:p?a("secrets.saveBtn","Save"):a("secrets.createBtn","Create")})]})})]})}):null]})};export{Re as SecretsView};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-xterm-BNq00GSj.js","assets/vendor-react-SZ_qB27O.js","assets/vendor-xterm-LZoznX6r.css","assets/addon-fit-C1WQXRvu.js","assets/addon-unicode11-BVmNDUBM.js","assets/addon-webgl-uLc0RKcC.js"])))=>i.map(i=>d[i]);
2
- import{D as Te,F as Q,G as le,H as V,I as ce,J as F,K as Ce,N as ge,o as xe,O as J,Q as Ne,U as Re,W as Pe,_ as B,Y as je,$ as Me}from"./index-DO9Ch72Y.js";import{r as i,j as t}from"./vendor-react-SZ_qB27O.js";import"./vendor-xterm-BNq00GSj.js";import{u as De}from"./vendor-i18n-GF3RlKbq.js";import{S as Le}from"./shield-alert-4FPCIFZ2.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-codemirror-jBKmHyH0.js";const Oe=32*1024,Ae=100,ze="\x1B",Fe=" ",Be="",Ie="\x1B[A",Ke="\x1B[B",We="\x1B[C",Ue="\x1B[D",I={ctrl:"Ctrl",escape:"Esc",tab:"Tab",ctrlC:"^C"};function de(u){if(u.length!==1)return null;const o=u.toUpperCase().charCodeAt(0);return o>=64&&o<=95?String.fromCharCode(o&31):null}function $e(){const[u,f]=i.useState(()=>J());return i.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const o=window.matchMedia(Ne),a=window.visualViewport,y=()=>f(J());return y(),typeof a?.addEventListener=="function"&&a.addEventListener("resize",y),typeof o.addEventListener=="function"?(o.addEventListener("change",y),()=>{o.removeEventListener("change",y),typeof a?.removeEventListener=="function"&&a.removeEventListener("resize",y)}):(o.addListener(y),()=>{o.removeListener(y),typeof a?.removeEventListener=="function"&&a.removeEventListener("resize",y)})},[]),u}function Qe(u,f){if(typeof window>"u")return"";const a=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/cli-sessions/ws?sessionId=${encodeURIComponent(u)}&ticket=${encodeURIComponent(f)}`;return Me(a)}function Ve(){return/Mac|iPhone|iPad|iPod/i.test(navigator.platform)}function Je(u){if(typeof window<"u"&&typeof window.atob=="function"){const f=window.atob(u),o=new Uint8Array(f.length);for(let a=0;a<f.length;a++)o[a]=f.charCodeAt(a);return new TextDecoder("utf-8").decode(o)}return Buffer.from(u,"base64").toString("utf8")}function it({sessionId:u,readOnly:f=!1,posture:o,mode:a="live",projectId:y,onConfirmAdvance:E,showConfirmAdvance:K=!1,onOpenAdapterSettings:Y}){const{t:r}=De("app"),T=i.useRef(null),C=i.useRef(null),j=i.useRef(null),_=i.useRef(null),[H,G]=i.useState(!1),[ue,W]=i.useState(!1),[Z,q]=i.useState(!1),g=$e(),{keyboardOpen:O,keyboardOverlap:me}=Te({enabled:g}),fe=i.useRef(null),[S,X]=i.useState(""),[x,A]=i.useState(!1),[ee,te]=i.useState(null),ne=f||ee===!0,M=!f&&ee===!1&&a==="live",b=i.useCallback(e=>{if(!e||!M)return;const n=_.current;n?.readyState===WebSocket.OPEN&&n.send(JSON.stringify({type:"input",data:e}))},[M]),N=i.useCallback(e=>{if(x){const n=de(e);if(A(!1),n){b(n);return}}b(e)},[x,b]),c=i.useCallback(e=>{e.preventDefault()},[]),pe=i.useCallback(e=>{e?.preventDefault?.(),S&&b(S),b("\r"),X("")},[S,b]),ye=i.useCallback(e=>{if(x&&e.length>S.length){const n=e.slice(S.length,S.length+1),d=de(n);if(A(!1),d){b(d);return}}X(e)},[x,S,b]);i.useEffect(()=>{K&&W(!1)},[K,u]);const D=i.useCallback((e,n)=>{const d=_.current;d?.readyState===WebSocket.OPEN&&d.send(JSON.stringify({type:"resize",cols:e,rows:n}))},[]),ie=i.useCallback(()=>{const e=C.current;if(!e)return;const n=Q(),d=le(n.fontFamily);e.options.fontFamily=d,T.current?.style.setProperty("--terminal-glyph-font-family",V(n.fontFamily)),e.options.fontSize=n.fontSize,e.options.cursorStyle=n.cursorStyle,e.options.cursorBlink=n.cursorBlink&&M;try{j.current?.fit?.(),D(e.cols,e.rows)}catch{}ce(n.fontSize,d).then(R=>{if(!(!R||C.current!==e||e.options.fontSize!==n.fontSize||e.options.fontFamily!==d)){F(e,d),e.options.fontSize=n.fontSize;try{j.current?.fit?.(),D(e.cols,e.rows),F(e,d),e.refresh(0,Math.max(0,e.rows-1))}catch{}}},()=>{})},[M,D]);i.useEffect(()=>{if(typeof window>"u")return;const e=n=>{n.key===Re&&ie()};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[ie]),i.useEffect(()=>{if(!u||typeof window>"u")return;let e=!1,n=null,d=null,R=0;te(null);const U=D,_e=p=>{if(R+=p,R<Oe)return;const h=_.current;h?.readyState===WebSocket.OPEN&&h.send(JSON.stringify({type:"ack",bytes:R})),R=0};return(async()=>{let p;try{p=await Pe(`/cli-sessions/${encodeURIComponent(u)}/attach-ticket`,{method:"POST",body:JSON.stringify(y?{projectId:y}:{})})}catch{return}if(e)return;te(p.readOnly);const h=!f&&!p.readOnly&&a==="live",[{Terminal:Se},{FitAddon:ke},{Unicode11Addon:ve}]=await Promise.all([B(()=>import("./vendor-xterm-BNq00GSj.js").then(l=>l.x),__vite__mapDeps([0,1,2])),B(()=>import("./addon-fit-C1WQXRvu.js").then(l=>l.a),__vite__mapDeps([3,1])),B(()=>import("./addon-unicode11-BVmNDUBM.js").then(l=>l.a),__vite__mapDeps([4,1]))]);if(e||!T.current)return;const w=Q(),L=le(w.fontFamily);T.current.style.setProperty("--terminal-glyph-font-family",V(w.fontFamily));const s=new Se({convertEol:!1,cursorBlink:w.cursorBlink&&h,cursorStyle:w.cursorStyle,disableStdin:!h,scrollback:1e4,fontFamily:L,fontSize:w.fontSize}),P=new ke;s.loadAddon(P);const Ee=new ve;if(s.loadAddon(Ee),s.unicode.activeVersion="11",je(()=>{s.open(T.current)}),C.current=s,j.current=P,w.renderer==="auto"&&!J())try{const{WebglAddon:l}=await B(async()=>{const{WebglAddon:m}=await import("./addon-webgl-uLc0RKcC.js").then(k=>k.a);return{WebglAddon:m}},__vite__mapDeps([5,1]));if(!e){const m=new l;m.onContextLoss(()=>{try{m.dispose()}catch{}}),s.loadAddon(m)}}catch{}try{P.fit()}catch{}(async()=>{if(!(!await ce(w.fontSize,L)||e||C.current!==s||j.current!==P||s.options.fontSize!==w.fontSize||s.options.fontFamily!==L))try{F(s,L),s.options.fontSize=w.fontSize,P.fit(),U(s.cols,s.rows),F(s,L),s.refresh(0,Math.max(0,s.rows-1))}catch{}})(),h&&(s.onData(l=>{const m=_.current;m?.readyState===WebSocket.OPEN&&m.send(JSON.stringify({type:"input",data:l}))}),s.attachCustomKeyEventHandler(l=>{if(l.type!=="keydown"||!(Ve()?l.metaKey:l.ctrlKey)||l.altKey||l.shiftKey)return!0;const k=l.key.toLowerCase();if(k==="c"){const v=s.hasSelection()?s.getSelection():"";return v?(navigator.clipboard?.writeText(v).catch(()=>{}),!1):!0}if(k==="v"){const v=navigator.clipboard?.readText;return v&&v.call(navigator.clipboard).then(ae=>{if(!ae)return;const re=_.current;re?.readyState===WebSocket.OPEN&&re.send(JSON.stringify({type:"input",data:ae}))}).catch(()=>{}),!1}return!0})),n=new ResizeObserver(()=>{d&&clearTimeout(d),d=setTimeout(()=>{try{P.fit(),U(s.cols,s.rows)}catch{}},Ae)}),n.observe(T.current);const $=new WebSocket(Qe(u,p.ticket));_.current=$,$.onopen=()=>{U(s.cols,s.rows)},$.onmessage=l=>{let m;try{m=JSON.parse(typeof l.data=="string"?l.data:"")}catch{return}switch(m.type){case"scrollback":case"data":{if(typeof m.data!="string")return;const k=Je(m.data),v=k.length;s.write(k,()=>_e(v));break}}}})(),()=>{e=!0,d&&clearTimeout(d),n&&n.disconnect();const p=_.current;if(p){p.onopen=null,p.onmessage=null,p.onclose=null,p.onerror=null;try{p.close()}catch{}_.current=null}const h=C.current;if(h){try{h.dispose()}catch{}C.current=null}j.current=null}},[u,f,a,y,D]);const se=i.useMemo(()=>a==="idle"?r("cliTerminal.replayIdle","Session idle"):a==="ended"?r("cliTerminal.replayEnded","Session ended"):null,[a,r]),be=i.useCallback(async()=>{if(E){q(!0);try{await E("advance"),W(!0)}finally{q(!1)}}},[E]),he=i.useCallback(async()=>{E&&await E("not-yet"),W(!0)},[E]),z=!!o?.elevated,oe=o?.elevatedFlags?.join(", "),we={"--terminal-glyph-font-family":V(Q().fontFamily)};return t.jsxs("div",{className:`cli-session-terminal${g?" cli-session-terminal--mobile":""}${g&&O?" cli-session-terminal--keyboard-open":""}`,"data-mode":a,"data-read-only":ne,"data-mobile":g,"data-keyboard-open":g&&O,children:[t.jsxs("header",{className:"cli-session-terminal__header",children:[o&&t.jsxs("div",{className:"cli-session-terminal__posture-wrap",children:[t.jsxs("button",{type:"button",className:`cli-posture-chip${z?" cli-posture-chip--elevated":""}`,"data-elevated":z,"aria-expanded":H,onClick:()=>G(e=>!e),children:[z?t.jsx(Le,{size:13,"aria-hidden":"true"}):t.jsx(Ce,{size:13,"aria-hidden":"true"}),t.jsx("span",{className:"cli-posture-chip__name",children:o.adapterName}),o.mode&&t.jsx("span",{className:"cli-posture-chip__mode",children:o.mode}),z&&oe&&t.jsx("span",{className:"cli-posture-chip__flag",children:oe})]}),H&&t.jsxs("div",{className:"cli-posture-tooltip",role:"tooltip",children:[t.jsx("p",{className:"cli-posture-tooltip__title",children:r("cliTerminal.postureResolved","Resolved posture")}),t.jsxs("ul",{className:"cli-posture-tooltip__list",children:[(o.resolved??[]).map((e,n)=>t.jsx("li",{children:e},n)),(o.resolved??[]).length===0&&t.jsx("li",{children:o.mode??r("cliTerminal.postureBaseline","Baseline")})]}),Y&&t.jsxs("button",{type:"button",className:"cli-posture-tooltip__settings",onClick:()=>{G(!1),Y()},children:[t.jsx(ge,{size:12,"aria-hidden":"true"}),r("cliTerminal.adapterSettings","Adapter settings")]})]})]}),ne&&t.jsxs("span",{className:"cli-session-terminal__readonly-badge",children:[t.jsx(xe,{size:12,"aria-hidden":"true"}),r("cliTerminal.readOnly","Read-only")]}),se&&t.jsx("span",{className:"cli-session-terminal__replay-badge","data-replay-mode":a,children:se})]}),t.jsx("div",{className:"cli-session-terminal__viewport",ref:T,"data-testid":"cli-terminal-viewport",style:we}),K&&!ue&&t.jsxs("div",{className:"cli-session-terminal__advance-strip",role:"region",children:[t.jsx("span",{className:"cli-session-terminal__advance-copy",children:r("cliTerminal.advancePrompt","This session looks idle — advance to review?")}),t.jsxs("div",{className:"cli-session-terminal__advance-actions",children:[t.jsx("button",{type:"button",className:"cli-session-terminal__advance-btn",disabled:Z,onClick:be,children:r("cliTerminal.advance","Advance")}),t.jsx("button",{type:"button",className:"cli-session-terminal__advance-btn cli-session-terminal__advance-btn--secondary",disabled:Z,onClick:he,children:r("cliTerminal.notYet","Not yet")})]})]}),g&&M&&t.jsxs("div",{className:`cli-session-terminal__mobile-bar${O?" cli-session-terminal__mobile-bar--keyboard-open":""}`,"data-testid":"cli-terminal-mobile-bar",style:O?{bottom:`${me}px`}:void 0,children:[t.jsxs("div",{className:"cli-session-terminal__key-row","data-testid":"cli-terminal-key-bar",children:[t.jsx("button",{type:"button",className:`cli-terminal-key cli-terminal-key--ctrl${x?" cli-terminal-key--active":""}`,"data-testid":"cli-key-ctrl","aria-label":r("cliTerminal.mobileKeyCtrl","Sticky Ctrl modifier"),"aria-pressed":x,onPointerDown:c,onMouseDown:c,onClick:()=>A(e=>!e),children:I.ctrl}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-esc","aria-label":r("cliTerminal.mobileKeyEsc","Send Escape"),onPointerDown:c,onMouseDown:c,onClick:()=>N(ze),children:I.escape}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-tab","aria-label":r("cliTerminal.mobileKeyTab","Send Tab"),onPointerDown:c,onMouseDown:c,onClick:()=>N(Fe),children:I.tab}),t.jsx("button",{type:"button",className:"cli-terminal-key cli-terminal-key--ctrlc","data-testid":"cli-key-ctrl-c","aria-label":r("cliTerminal.mobileKeyCtrlC","Send Ctrl-C"),onPointerDown:c,onMouseDown:c,onClick:()=>{A(!1),b(Be)},children:I.ctrlC}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-up","aria-label":r("cliTerminal.mobileKeyArrowUp","Cursor up"),onPointerDown:c,onMouseDown:c,onClick:()=>N(Ie),children:"↑"}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-down","aria-label":r("cliTerminal.mobileKeyArrowDown","Cursor down"),onPointerDown:c,onMouseDown:c,onClick:()=>N(Ke),children:"↓"}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-left","aria-label":r("cliTerminal.mobileKeyArrowLeft","Cursor left"),onPointerDown:c,onMouseDown:c,onClick:()=>N(Ue),children:"←"}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-right","aria-label":r("cliTerminal.mobileKeyArrowRight","Cursor right"),onPointerDown:c,onMouseDown:c,onClick:()=>N(We),children:"→"})]}),t.jsxs("form",{className:"cli-session-terminal__input-row",onSubmit:pe,children:[t.jsx("input",{ref:fe,type:"text",className:"cli-session-terminal__mobile-input","data-testid":"cli-terminal-mobile-input",value:S,placeholder:r("cliTerminal.mobileInputPlaceholder","Type to send to the session…"),autoCapitalize:"off",autoCorrect:"off",autoComplete:"off",spellCheck:!1,onChange:e=>ye(e.target.value)}),t.jsx("button",{type:"submit",className:"cli-session-terminal__mobile-send","data-testid":"cli-terminal-mobile-send","aria-label":r("cliTerminal.mobileSend","Send"),onPointerDown:c,onMouseDown:c,children:r("cliTerminal.mobileSend","Send")})]})]})]})}export{it as SessionTerminal};