@runfusion/fusion 0.78.0-beta.3 → 0.78.0-beta.4

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 (165) hide show
  1. package/dist/bin.js +4076 -4950
  2. package/dist/child-process-worker.js +3064 -3550
  3. package/dist/client/.vite/manifest.json +259 -259
  4. package/dist/client/assets/{AgentDetailView-DAtUBPar.js → AgentDetailView-BVDrAj1Y.js} +3 -3
  5. package/dist/client/assets/AgentDetailView-DaSEdzYy.css +1 -0
  6. package/dist/client/assets/{AgentPermissionPolicyEditor-Cth5Qyvz.js → AgentPermissionPolicyEditor--11QLSt_.js} +1 -1
  7. package/dist/client/assets/{AgentsView-D6odi29-.js → AgentsView-D3mLjE0-.js} +4 -4
  8. package/dist/client/assets/{CommandCenter-DUlZFMvJ.js → CommandCenter-CPy2a26y.js} +1 -1
  9. package/dist/client/assets/{DevServerView-GD1-vwId.js → DevServerView-CWHhisoR.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-De3Q7_zu.js → DirectoryPicker-DMd9MEtq.js} +1 -1
  11. package/dist/client/assets/DocumentsView-YeYy6DJV.js +1 -0
  12. package/dist/client/assets/{EvalsView-CYfclysr.js → EvalsView-DfvYGoX4.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-B1dQuReY.js → ExperimentalAgentOnboardingModal-CFjRfBUk.js} +1 -1
  14. package/dist/client/assets/{GoalsView-BHxjegdt.js → GoalsView-DdlI85_-.js} +1 -1
  15. package/dist/client/assets/InsightsView-Du2UKeQE.js +11 -0
  16. package/dist/client/assets/{MemoryView-O8vfqipX.js → MemoryView-DeSuPKc7.js} +1 -1
  17. package/dist/client/assets/{PatchnodeView-WM5ZlnTS.js → PatchnodeView-Ow5ErHE3.js} +1 -1
  18. package/dist/client/assets/{PiExtensionsManager-BrTit_vk.js → PiExtensionsManager-D65p_Z4a.js} +1 -1
  19. package/dist/client/assets/{PluginManager-DBUm9Q30.js → PluginManager-BruzVBGM.js} +1 -1
  20. package/dist/client/assets/{PullRequestView-DW9EqNT3.js → PullRequestView-BTzsKxrq.js} +1 -1
  21. package/dist/client/assets/{ReportModal-Cv7Lxy1u.js → ReportModal-YpkrGp21.js} +2 -2
  22. package/dist/client/assets/ResearchView-D0oWTBMk.js +2 -0
  23. package/dist/client/assets/{SecretsView-C2K-n5_X.js → SecretsView-B6ZH6O1O.js} +1 -1
  24. package/dist/client/assets/{SettingsModal-Crpg0GmF.js → SettingsModal-CN4NVtbD.js} +1 -1
  25. package/dist/client/assets/SettingsModal-CmPRFol7.css +1 -0
  26. package/dist/client/assets/SettingsModal-CwUcFHcw.js +21 -0
  27. package/dist/client/assets/{SettingsTextareaRow-B7FIDTtF.js → SettingsTextareaRow-B_iNwevV.js} +1 -1
  28. package/dist/client/assets/{SetupWizardModal-CBWFrde9.js → SetupWizardModal-BSAtv8xH.js} +2 -2
  29. package/dist/client/assets/{SkillsView-B1l4qkYj.js → SkillsView-DhhiUAPO.js} +1 -1
  30. package/dist/client/assets/{WorkflowNodeEditor-e122mQ0Z.js → WorkflowNodeEditor-YeZ_DH3a.js} +1 -1
  31. package/dist/client/assets/{agent-import-generation-CX_NVRPC.js → agent-import-generation-BPFU14s8.js} +1 -1
  32. package/dist/client/assets/{agentsOrgChartLayout-BAhAecHd.js → agentsOrgChartLayout-CWqQ9XMW.js} +1 -1
  33. package/dist/client/assets/app-BVuhE-pB.js +3 -0
  34. package/dist/client/assets/app-BVz53oEh.js +9 -0
  35. package/dist/client/assets/app-BfzM5z-d.js +9 -0
  36. package/dist/client/assets/app-BgtLSw3s.js +9 -0
  37. package/dist/client/assets/app-BpjF_vWi.js +9 -0
  38. package/dist/client/assets/app-Cjqb3Hrq.js +3 -0
  39. package/dist/client/assets/app-CoyPSunU.js +9 -0
  40. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BOmFDW7M.js → architectureDiagram-3BPJPVTR-DX2xxWsB.js} +1 -1
  41. package/dist/client/assets/{blockDiagram-GPEHLZMM-D7CnZ9-e.js → blockDiagram-GPEHLZMM-tVB-pLpH.js} +1 -1
  42. package/dist/client/assets/{c4Diagram-AAUBKEIU-CQZw8PeP.js → c4Diagram-AAUBKEIU-BEV-l4nl.js} +1 -1
  43. package/dist/client/assets/channel-BoqUD_yo.js +1 -0
  44. package/dist/client/assets/{chunk-2J33WTMH-DBS2o2AZ.js → chunk-2J33WTMH-DduonyQt.js} +1 -1
  45. package/dist/client/assets/{chunk-4BX2VUAB-CFKEnTmJ.js → chunk-4BX2VUAB-BPCXybBl.js} +1 -1
  46. package/dist/client/assets/{chunk-55IACEB6-DpjYRScs.js → chunk-55IACEB6-ByqbaUCB.js} +1 -1
  47. package/dist/client/assets/{chunk-727SXJPM-Db7lQvPG.js → chunk-727SXJPM-DdtczHe_.js} +1 -1
  48. package/dist/client/assets/{chunk-AQP2D5EJ-rSGEvDdj.js → chunk-AQP2D5EJ-V5pHkNOZ.js} +1 -1
  49. package/dist/client/assets/{chunk-FMBD7UC4-Cdi9zNME.js → chunk-FMBD7UC4-i0P_U91V.js} +1 -1
  50. package/dist/client/assets/{chunk-ND2GUHAM-D_3BQZ27.js → chunk-ND2GUHAM-BWdXSws9.js} +1 -1
  51. package/dist/client/assets/{chunk-QZHKN3VN-DnVoTnz9.js → chunk-QZHKN3VN-C7vpw2O4.js} +1 -1
  52. package/dist/client/assets/classDiagram-4FO5ZUOK-5Yk5cF5o.js +1 -0
  53. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-5Yk5cF5o.js +1 -0
  54. package/dist/client/assets/{cose-bilkent-S5V4N54A-HQFw9frh.js → cose-bilkent-S5V4N54A-C_OJmqvv.js} +1 -1
  55. package/dist/client/assets/{dagre-BM42HDAG-BdHp0sc2.js → dagre-BM42HDAG-DlxhXtcR.js} +1 -1
  56. package/dist/client/assets/{dashboard-view-C3vvo4zP.js → dashboard-view-C_aj9Avl.js} +2 -2
  57. package/dist/client/assets/{dashboard-view-mWhkEiwE.js → dashboard-view-CtFwciFc.js} +1 -1
  58. package/dist/client/assets/dashboard-view-Cy2aXOHq.js +1 -0
  59. package/dist/client/assets/{dashboard-view-DaqL1Ufr.js → dashboard-view-ZNgeI6tK.js} +1 -1
  60. package/dist/client/assets/{diagram-2AECGRRQ-BDu9AETT.js → diagram-2AECGRRQ-B5OQ5SjT.js} +1 -1
  61. package/dist/client/assets/{diagram-5GNKFQAL-2qzqfWTz.js → diagram-5GNKFQAL-OnHyeSDX.js} +1 -1
  62. package/dist/client/assets/{diagram-KO2AKTUF-DYa-tplS.js → diagram-KO2AKTUF-BESRlk6K.js} +1 -1
  63. package/dist/client/assets/{diagram-LMA3HP47-ChwcQccK.js → diagram-LMA3HP47-jc5KVOgo.js} +1 -1
  64. package/dist/client/assets/{diagram-OG6HWLK6-DoGKft5E.js → diagram-OG6HWLK6-CbvV1B1C.js} +1 -1
  65. package/dist/client/assets/{erDiagram-TEJ5UH35-5dsSgUXk.js → erDiagram-TEJ5UH35-CU4gukmG.js} +1 -1
  66. package/dist/client/assets/{flowDiagram-I6XJVG4X-BOHB4RzL.js → flowDiagram-I6XJVG4X-Dq9UKge4.js} +1 -1
  67. package/dist/client/assets/{folder-open-BQcY8jvq.js → folder-open-CF9O-sX4.js} +1 -1
  68. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BD3aivUG.js → ganttDiagram-6RSMTGT7-BWA_00UM.js} +1 -1
  69. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-HBZEAECF.js → gitGraphDiagram-PVQCEYII-DKdPzNtQ.js} +1 -1
  70. package/dist/client/assets/index-CiVIbypZ.js +2949 -0
  71. package/dist/client/assets/index-Duxgoh_Y.css +1 -0
  72. package/dist/client/assets/{infoDiagram-5YYISTIA-d7hsqM0V.js → infoDiagram-5YYISTIA-BvusFnLt.js} +1 -1
  73. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-k4Dnhc_y.js → ishikawaDiagram-YF4QCWOH-NLucC59B.js} +1 -1
  74. package/dist/client/assets/{journeyDiagram-JHISSGLW-Dh3yqZPQ.js → journeyDiagram-JHISSGLW-OMF0ZqP2.js} +1 -1
  75. package/dist/client/assets/{kanban-definition-UN3LZRKU-BYqpe7Ju.js → kanban-definition-UN3LZRKU-DcIw1Gei.js} +1 -1
  76. package/dist/client/assets/{mermaid.core-D5Ccw5tQ.js → mermaid.core-BXdGnca4.js} +4 -4
  77. package/dist/client/assets/{mindmap-definition-RKZ34NQL-D64P3Mc4.js → mindmap-definition-RKZ34NQL-CJdZ2giE.js} +1 -1
  78. package/dist/client/assets/{pieDiagram-4H26LBE5-CtMfKnlZ.js → pieDiagram-4H26LBE5-CIS3IXyQ.js} +1 -1
  79. package/dist/client/assets/{puzzle-D4y4g-nb.js → puzzle-DLP4jrVO.js} +1 -1
  80. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-B5gSMr9M.js → quadrantDiagram-W4KKPZXB-CyXg_FqY.js} +1 -1
  81. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DKtBfWDi.js → requirementDiagram-4Y6WPE33-Cl5zZfEW.js} +1 -1
  82. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BcWeBcNk.js → sankeyDiagram-5OEKKPKP-RPvS_KDe.js} +1 -1
  83. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Crp7Mc0M.js → sequenceDiagram-3UESZ5HK-mqxbDVma.js} +1 -1
  84. package/dist/client/assets/{standing-instructions-template-lD5Vcanq.js → standing-instructions-template-oByMjuf9.js} +1 -1
  85. package/dist/client/assets/{stateDiagram-AJRCARHV-CA5FEPYe.js → stateDiagram-AJRCARHV-BMThgwA0.js} +1 -1
  86. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Bo75sO6t.js → stateDiagram-v2-BHNVJYJU-BQQVmi0s.js} +1 -1
  87. package/dist/client/assets/{timeline-definition-PNZ67QCA-Dmr4NeTD.js → timeline-definition-PNZ67QCA-DxRT4zz3.js} +1 -1
  88. package/dist/client/assets/{upload-CzJ1o8Px.js → upload-C1hBXwxT.js} +1 -1
  89. package/dist/client/assets/{users-BMnytPKO.js → users-CUTsjdYo.js} +1 -1
  90. package/dist/client/assets/{vennDiagram-CIIHVFJN-DfbBSNgT.js → vennDiagram-CIIHVFJN-CplrXnmO.js} +1 -1
  91. package/dist/client/assets/{wardley-L42UT6IY-Wxq1L5VU.js → wardley-L42UT6IY-DN3nUl9Y.js} +1 -1
  92. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D6HnIS8j.js → wardleyDiagram-YWT4CUSO-C0hUcS3e.js} +1 -1
  93. package/dist/client/assets/{xychartDiagram-2RQKCTM6-5MfFlu30.js → xychartDiagram-2RQKCTM6-CDB05pHe.js} +1 -1
  94. package/dist/client/index.html +2 -2
  95. package/dist/client/version.json +1 -1
  96. package/dist/droid-cli/package.json +1 -1
  97. package/dist/extension.js +3278 -3998
  98. package/dist/pi-claude-cli/package.json +1 -1
  99. package/dist/plugin-sdk/index.d.ts +104 -125
  100. package/dist/plugin-sdk/index.js +35 -93
  101. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +35 -93
  102. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  103. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +35 -93
  104. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  105. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +35 -93
  106. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  107. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +35 -93
  108. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  109. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +35 -93
  110. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  111. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +35 -93
  112. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  113. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +35 -93
  114. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  115. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +35 -93
  116. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  117. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +35 -93
  118. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  119. package/dist/plugins/fusion-plugin-linear-import/bundled.js +35 -93
  120. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  121. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +35 -93
  122. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  123. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +35 -93
  124. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  125. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +35 -93
  126. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  127. package/dist/plugins/fusion-plugin-quality/bundled.js +35 -93
  128. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  129. package/dist/plugins/fusion-plugin-reports/bundled.js +35 -93
  130. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  131. package/dist/plugins/fusion-plugin-roadmap/bundled.js +35 -93
  132. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  133. package/dist/plugins/fusion-plugin-todos/bundled.js +35 -93
  134. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  135. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +35 -93
  136. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  137. package/package.json +1 -1
  138. package/skill/fusion/SKILL.md +1 -1
  139. package/skill/fusion/references/best-practices.md +2 -2
  140. package/skill/fusion/references/cli-commands.md +0 -2
  141. package/skill/fusion/references/engine-tools.md +2 -2
  142. package/skill/fusion/references/extension-tools.md +1 -18
  143. package/skill/fusion/references/fusion-capabilities.md +1 -4
  144. package/skill/fusion/references/task-structure.md +1 -1
  145. package/skill/fusion/workflows/task-lifecycle.md +5 -9
  146. package/skill/fusion/workflows/task-management.md +1 -3
  147. package/dist/client/assets/AgentDetailView-DPoh46Ym.css +0 -1
  148. package/dist/client/assets/DocumentsView-BMYBV8DV.js +0 -1
  149. package/dist/client/assets/InsightsView-DK0EP68R.js +0 -11
  150. package/dist/client/assets/ResearchView-DDGbBXlh.js +0 -2
  151. package/dist/client/assets/SettingsModal-C7npF9nB.js +0 -21
  152. package/dist/client/assets/SettingsModal-Crai1dEI.css +0 -1
  153. package/dist/client/assets/app-BO1iuWOt.js +0 -13
  154. package/dist/client/assets/app-BRFfR55q.js +0 -5
  155. package/dist/client/assets/app-BW03hpJV.js +0 -13
  156. package/dist/client/assets/app-B_skBURN.js +0 -13
  157. package/dist/client/assets/app-C0JL4IcI.js +0 -13
  158. package/dist/client/assets/app-C5uZ_9kI.js +0 -13
  159. package/dist/client/assets/app-DxFiSzSJ.js +0 -5
  160. package/dist/client/assets/channel-Drj7VQBu.js +0 -1
  161. package/dist/client/assets/classDiagram-4FO5ZUOK-DGxwjUYU.js +0 -1
  162. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DGxwjUYU.js +0 -1
  163. package/dist/client/assets/dashboard-view-CoxDPI4m.js +0 -1
  164. package/dist/client/assets/index-26HUNwwJ.css +0 -1
  165. package/dist/client/assets/index-QU8sENvc.js +0 -2959
@@ -1 +1 @@
1
- import{r as h,j as e}from"./vendor-react-SZ_qB27O.js";import{u as j}from"./vendor-i18n-Duky4gdQ.js";import{di as S,aU as E}from"./index-QU8sENvc.js";const b="fusion:settings-help-open";function y({children:s,settingKey:l}){const{t:n}=j("app"),[c,o]=h.useState(!1),a=h.useRef(null),p=h.useId(),d=`settings-help-${l??p}`;h.useEffect(()=>{const t=i=>{i.detail!==d&&o(!1)};return document.addEventListener(b,t),()=>document.removeEventListener(b,t)},[d]);const u=()=>{o(t=>{const i=!t;return i&&document.dispatchEvent(new CustomEvent(b,{detail:d})),i})};return h.useEffect(()=>{if(!c)return;const t=r=>{a.current?.contains(r.target)||o(!1)},i=r=>{r.key==="Escape"&&(r.stopPropagation(),o(!1))};return document.addEventListener("pointerdown",t,!0),document.addEventListener("keydown",i,!0),()=>{document.removeEventListener("pointerdown",t,!0),document.removeEventListener("keydown",i,!0)}},[c]),e.jsxs("span",{className:"settings-help","data-open":c?"true":"false",ref:a,children:[e.jsx("button",{type:"button",className:"settings-help-trigger","aria-label":n("settings.help.show","Show help"),"aria-expanded":c,"aria-describedby":d,"data-testid":l?`settings-help-${l}`:void 0,onClick:u,children:e.jsx(S,{size:13,"aria-hidden":!0})}),e.jsx("span",{id:d,role:"note",className:"settings-help-bubble",children:s})]})}const N=h.createContext({highlightedKey:null});function L({highlightedKey:s,children:l}){const n=h.useMemo(()=>({highlightedKey:s}),[s]);return e.jsx(N.Provider,{value:n,children:l})}function k(s){const{highlightedKey:l}=h.useContext(N);return s!==void 0&&s===l}function m({htmlFor:s,label:l,help:n,error:c,scope:o,disabled:a,clearable:p,onClear:d,inlineControl:u,children:t}){const{t:i}=j("app"),r=k(s),g=e.jsxs("div",{className:"settings-field-row-control",children:[t,p&&e.jsx("button",{type:"button",className:"settings-field-row-clear","aria-label":i("settings.clearToDefault","Reset to default"),title:i("settings.clearToDefault","Reset to default"),disabled:a,onClick:d,children:e.jsx(E,{size:13,"aria-hidden":!0})})]}),f=e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"settings-field-row-label",htmlFor:s,children:l}),o&&e.jsx("span",{className:`settings-field-row-scope settings-field-row-scope--${o}`,"data-testid":"settings-field-row-scope",children:o}),n&&e.jsx(y,{settingKey:s,children:n})]});return e.jsxs("div",{className:`settings-field-row${u?" settings-field-row--inline":""}${a?" is-disabled":""}${r?" is-search-match":""}`,"data-settings-key":s,children:[e.jsxs("div",{className:"settings-field-row-head",children:[u&&g,e.jsx("div",{className:"settings-field-row-labelgroup",children:f})]}),!u&&g,c&&e.jsx("p",{className:"settings-field-row-error",role:"alert",children:c})]})}function P({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),inlineControl:!0,children:e.jsx("label",{className:"settings-toggle",children:e.jsx("input",{id:a,type:"checkbox",checked:l===!0,disabled:t,onChange:i=>n(i.target.checked)})})})}function $({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,options:i}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("select",{id:a,className:"select settings-select",value:l??"",disabled:t,onChange:r=>n(r.target.value),children:i.map(r=>e.jsx("option",{value:r.value,children:r.label},r.value))})})}function H({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,min:i,max:r,step:g,placeholder:f}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("input",{id:a,className:"input settings-number",type:"number",value:l??"",min:i,max:r,step:g,placeholder:f,disabled:t,onChange:x=>{const v=x.target.value;if(v==="")return n(null);const w=Number(v);Number.isNaN(w)||n(w)}})})}function I({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,placeholder:i,type:r,autoComplete:g}=s,f=g??(r==="password"?"off":void 0);return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("input",{id:a,className:"input settings-text",type:r??"text",autoComplete:f,value:l??"",placeholder:i,disabled:t,onChange:x=>n(x.target.value)})})}function D({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,placeholder:i}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("textarea",{id:a,className:"input settings-textarea",value:l??"",placeholder:i,disabled:t,rows:3,onChange:r=>n(r.target.value)})})}export{m as S,I as a,D as b,$ as c,H as d,P as e,y as f,L as g};
1
+ import{r as h,j as e}from"./vendor-react-SZ_qB27O.js";import{u as j}from"./vendor-i18n-Duky4gdQ.js";import{df as S,aU as E}from"./index-CiVIbypZ.js";const b="fusion:settings-help-open";function y({children:s,settingKey:l}){const{t:n}=j("app"),[c,o]=h.useState(!1),a=h.useRef(null),p=h.useId(),d=`settings-help-${l??p}`;h.useEffect(()=>{const t=i=>{i.detail!==d&&o(!1)};return document.addEventListener(b,t),()=>document.removeEventListener(b,t)},[d]);const u=()=>{o(t=>{const i=!t;return i&&document.dispatchEvent(new CustomEvent(b,{detail:d})),i})};return h.useEffect(()=>{if(!c)return;const t=r=>{a.current?.contains(r.target)||o(!1)},i=r=>{r.key==="Escape"&&(r.stopPropagation(),o(!1))};return document.addEventListener("pointerdown",t,!0),document.addEventListener("keydown",i,!0),()=>{document.removeEventListener("pointerdown",t,!0),document.removeEventListener("keydown",i,!0)}},[c]),e.jsxs("span",{className:"settings-help","data-open":c?"true":"false",ref:a,children:[e.jsx("button",{type:"button",className:"settings-help-trigger","aria-label":n("settings.help.show","Show help"),"aria-expanded":c,"aria-describedby":d,"data-testid":l?`settings-help-${l}`:void 0,onClick:u,children:e.jsx(S,{size:13,"aria-hidden":!0})}),e.jsx("span",{id:d,role:"note",className:"settings-help-bubble",children:s})]})}const N=h.createContext({highlightedKey:null});function L({highlightedKey:s,children:l}){const n=h.useMemo(()=>({highlightedKey:s}),[s]);return e.jsx(N.Provider,{value:n,children:l})}function k(s){const{highlightedKey:l}=h.useContext(N);return s!==void 0&&s===l}function m({htmlFor:s,label:l,help:n,error:c,scope:o,disabled:a,clearable:p,onClear:d,inlineControl:u,children:t}){const{t:i}=j("app"),r=k(s),g=e.jsxs("div",{className:"settings-field-row-control",children:[t,p&&e.jsx("button",{type:"button",className:"settings-field-row-clear","aria-label":i("settings.clearToDefault","Reset to default"),title:i("settings.clearToDefault","Reset to default"),disabled:a,onClick:d,children:e.jsx(E,{size:13,"aria-hidden":!0})})]}),f=e.jsxs(e.Fragment,{children:[e.jsx("label",{className:"settings-field-row-label",htmlFor:s,children:l}),o&&e.jsx("span",{className:`settings-field-row-scope settings-field-row-scope--${o}`,"data-testid":"settings-field-row-scope",children:o}),n&&e.jsx(y,{settingKey:s,children:n})]});return e.jsxs("div",{className:`settings-field-row${u?" settings-field-row--inline":""}${a?" is-disabled":""}${r?" is-search-match":""}`,"data-settings-key":s,children:[e.jsxs("div",{className:"settings-field-row-head",children:[u&&g,e.jsx("div",{className:"settings-field-row-labelgroup",children:f})]}),!u&&g,c&&e.jsx("p",{className:"settings-field-row-error",role:"alert",children:c})]})}function P({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),inlineControl:!0,children:e.jsx("label",{className:"settings-toggle",children:e.jsx("input",{id:a,type:"checkbox",checked:l===!0,disabled:t,onChange:i=>n(i.target.checked)})})})}function $({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,options:i}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("select",{id:a,className:"select settings-select",value:l??"",disabled:t,onChange:r=>n(r.target.value),children:i.map(r=>e.jsx("option",{value:r.value,children:r.label},r.value))})})}function H({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,min:i,max:r,step:g,placeholder:f}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("input",{id:a,className:"input settings-number",type:"number",value:l??"",min:i,max:r,step:g,placeholder:f,disabled:t,onChange:x=>{const v=x.target.value;if(v==="")return n(null);const w=Number(v);Number.isNaN(w)||n(w)}})})}function I({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,placeholder:i,type:r,autoComplete:g}=s,f=g??(r==="password"?"off":void 0);return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("input",{id:a,className:"input settings-text",type:r??"text",autoComplete:f,value:l??"",placeholder:i,disabled:t,onChange:x=>n(x.target.value)})})}function D({descriptor:s,value:l,onChange:n,error:c,clearable:o}){const{key:a,label:p,help:d,scope:u,disabled:t,placeholder:i}=s;return e.jsx(m,{htmlFor:a,label:p,help:d,error:c,scope:u,disabled:t,clearable:o,onClear:()=>n(null),children:e.jsx("textarea",{id:a,className:"input settings-textarea",value:l??"",placeholder:i,disabled:t,rows:3,onChange:r=>n(r.target.value)})})}export{m as S,I as a,D as b,$ as c,H as d,P as e,y as f,L as g};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ExperimentalAgentOnboardingModal-B1dQuReY.js","assets/vendor-react-SZ_qB27O.js","assets/index-QU8sENvc.js","assets/vendor-i18n-Duky4gdQ.js","assets/vendor-codemirror-CcrtqoCy.js","assets/vendor-reactflow-BlIeoTu4.js","assets/vendor-reactflow-BnuhLJ6X.css","assets/vendor-xterm-BNq00GSj.js","assets/vendor-xterm-LZoznX6r.css","assets/index-26HUNwwJ.css","assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css"])))=>i.map(i=>d[i]);
2
- import{a1 as le,I as x,a2 as I,a3 as U,a4 as ce,a5 as de,a6 as pe,a7 as ue,a8 as me,a9 as ge,aa as he,ab as xe,K as je,X as fe,L as R,k as we,ac as W,S as Ne,ad as L,ae as ye,af as be}from"./index-QU8sENvc.js";import{r as o,j as e}from"./vendor-react-SZ_qB27O.js";import{D as ke}from"./DirectoryPicker-De3Q7_zu.js";import{s as A}from"./projectDetection-G3XuxD2X.js";import{u as Ce}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";import"./folder-open-BQcY8jvq.js";function H(c){return c.filter(d=>d.type!=="local")}function ze(c){return H(c).length>0}function D(c){const d=c.replace(/[^a-zA-Z]/g,"").toUpperCase();return d.length>=2&&d.length<=4?d:d.length>4?d.slice(0,4):"FN"}const Pe=o.lazy(()=>be(()=>import("./ExperimentalAgentOnboardingModal-B1dQuReY.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(c=>({default:c.ExperimentalAgentOnboardingModal})));function Te({onProjectRegistered:c,onClose:d,agentOnboardingEnabled:M=!1,includeAgentStep:j=!0}){const{t:s}=Ce("app"),{confirmWithChoice:S}=le(),O="https://discord.gg/ksrfuy7WYR",y=o.useMemo(()=>I("ceo")??x[0],[]),[G,_]=o.useState(!0),[t,r]=o.useState(()=>({step:"manual",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",manualTaskPrefix:"",detectedRepos:[],workspaceMode:!1,isDetectingWorkspace:!1,registeredProject:null,selectedPresetId:y.id,agentDraft:U(y),isCreatingAgent:!1,isRegistering:!1,error:null,agentError:null,agentOutcome:null})),[F,B]=o.useState(!1),[E,b]=o.useState(!1),T=o.useRef(null),{nodes:k,loading:$}=ce(),Y=k.find(a=>a.type==="local")?.id,C=o.useCallback(()=>{_(!1),d?.()},[d]),K=o.useCallback(()=>{if(t.registeredProject){c(t.registeredProject);return}C()},[C,c,t.registeredProject]);o.useEffect(()=>{t.agentError&&T.current?.focus()},[t.agentError]);const f=o.useRef(0),w=o.useRef(!1),q=o.useCallback(a=>{if(r(i=>{const n={manualPath:a,detectedRepos:[],workspaceMode:!1,error:null};a&&(!i.manualName||i.manualName===A(i.manualPath))&&(n.manualName=A(a));const p=n.manualName??i.manualName;return p&&(!i.manualTaskPrefix||i.manualTaskPrefix===D(A(i.manualPath)))&&(n.manualTaskPrefix=D(p)),{...i,...n}}),t.manualMode==="existing"&&a.trim()&&a.trim()!=="/"){const i=++f.current;r(n=>({...n,isDetectingWorkspace:!0})),de(a.trim()).then(n=>{i===f.current&&r(p=>({...p,isDetectingWorkspace:!1,detectedRepos:n.repos,workspaceMode:n.isWorkspace}))}).catch(()=>{i===f.current&&r(n=>({...n,isDetectingWorkspace:!1}))})}},[t.manualMode]),z=o.useCallback(a=>{r(i=>({...i,manualMode:a,manualCloneUrl:a==="clone"?i.manualCloneUrl:"",detectedRepos:a==="existing"?i.detectedRepos:[],workspaceMode:a==="existing"?i.workspaceMode:!1,isDetectingWorkspace:!1,error:null})),f.current+=1},[]),V=o.useCallback(async()=>{const a=t.manualPath.trim(),i=t.manualName.trim(),n=t.manualCloneUrl.trim();if(!a||!i||t.manualMode==="clone"&&!n||w.current||t.isRegistering)return;w.current=!0,r(l=>({...l,isRegistering:!0,error:null}));const p=()=>{w.current=!1,r(l=>({...l,isRegistering:!1}))};try{const{gitCli:l}=await pe();if(l&&!l.available){await S({title:s("setup.gitMissingTitle","Git is not installed"),message:s("setup.gitMissingMessage","Git was not found on the Fusion host. Install Git, then try again — Fusion projects need Git so agents can create task worktrees."),confirmLabel:s("setup.gitMissingOpenDownloads","Open Git downloads"),cancelLabel:s("setup.cancel","Cancel"),alwaysAsk:!0})==="primary"&&ue(l.installUrl??"https://git-scm.com/downloads"),p();return}}catch{}try{const l={name:i,path:a,isolationMode:t.manualIsolationMode,nodeId:t.manualNodeId||void 0,gitSetupMode:t.manualMode,cloneUrl:t.manualMode==="clone"?n:void 0,workspaceMode:t.manualMode==="existing"?t.workspaceMode:!1,taskPrefix:t.manualTaskPrefix.trim()||void 0},m=await me(l);if(!j){r(h=>({...h,isRegistering:!1})),c(m);return}r(h=>({...h,step:"agent",registeredProject:m,isRegistering:!1}))}catch(l){r(m=>({...m,isRegistering:!1,error:l instanceof Error?l.message:"Failed to register project"}))}finally{w.current=!1}},[j,c,t.manualPath,t.manualName,t.manualCloneUrl,t.manualMode,t.manualIsolationMode,t.manualNodeId,t.workspaceMode,t.manualTaskPrefix,S,s]),P=o.useCallback(a=>{const i=I(a);i&&r(n=>({...n,selectedPresetId:i.id,agentDraft:U(i),agentError:null}))},[]),Z=o.useCallback((a,i)=>{const n=x.findIndex(h=>h.id===i);if(n<0)return;const p=x.length-1;let l=null;if(a.key==="ArrowDown"||a.key==="ArrowRight"?l=n===p?0:n+1:a.key==="ArrowUp"||a.key==="ArrowLeft"?l=n===0?p:n-1:a.key==="Home"?l=0:a.key==="End"&&(l=p),l===null)return;a.preventDefault();const m=x[l];P(m.id),requestAnimationFrame(()=>{document.querySelector(`[data-agent-preset-id="${m.id}"]`)?.focus()})},[P]),X=o.useCallback(a=>{r(i=>({...i,selectedPresetId:"",agentDraft:ge(a),agentError:null}))},[]),J=o.useCallback(async()=>{if(!(!t.registeredProject||!t.agentDraft.name.trim())){r(a=>({...a,isCreatingAgent:!0,agentError:null}));try{await he(xe(t.agentDraft),t.registeredProject.id),r(a=>({...a,step:"complete",isCreatingAgent:!1,agentOutcome:"created"}))}catch(a){if(a instanceof Error&&/already exists/i.test(a.message)){r(i=>({...i,step:"complete",isCreatingAgent:!1,agentOutcome:"created"}));return}r(i=>({...i,isCreatingAgent:!1,agentError:a instanceof Error?a.message:s("setup.firstAgentCreateError","Failed to create agent")}))}}},[t.agentDraft,t.registeredProject,s]),Q=o.useCallback(()=>{r(a=>({...a,step:"complete",agentError:null,agentOutcome:"skipped"}))},[]);if(!G)return null;const v=t.manualMode==="existing",g=t.manualMode==="init",u=t.manualMode==="clone",ee=u?s("setup.cloneAndRegisterProject","Clone and Register Project"):g?s("setup.initializeAndRegisterProject","Initialize and Register Project"):s("setup.registerProject","Register Project"),te=t.manualPath.trim().length>0,se=t.manualName.trim().length>0,ae=t.manualCloneUrl.trim().length>0,ie=t.isRegistering||!te||!se||u&&!ae,re=t.selectedPresetId?I(t.selectedPresetId):void 0,N=t.isCreatingAgent,ne=t.selectedPresetId||y.id,oe=`modal setup-wizard-modal${t.step==="agent"?" setup-wizard-modal--agent":""}`;return e.jsxs(je,{windowKey:"setup-wizard",modal:!0,title:s("setup.welcomeToFusion","Welcome to Fusion"),ariaLabelledBy:"wizard-title",onClose:()=>{},hideHeader:!0,dragHandleSelector:".setup-wizard-modal .setup-wizard-header",className:"floating-window--setup-wizard",defaultSize:{width:760,height:680},minSize:{width:480,height:360},persistGeometryKey:"floating-window:setup-wizard",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,children:[e.jsxs("div",{className:oe,children:[e.jsxs("div",{className:"setup-wizard-header",children:[e.jsxs("div",{className:"setup-wizard-heading",children:[e.jsxs("div",{className:"setup-wizard-brand","aria-label":s("setup.brandName","Fusion"),children:[e.jsxs("svg",{className:"setup-wizard-brand-logo",width:28,height:28,viewBox:"0 0 128 128",fill:"none","aria-label":s("setup.brandLogo","Fusion logo"),role:"img",children:[e.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),e.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),e.jsx("span",{className:"setup-wizard-brand-name",children:s("setup.brandName","Fusion")})]}),!j&&t.step==="manual"&&e.jsx("span",{className:"setup-wizard-step-context",children:s("setup.projectStepContext","Step 3 of 5 — Project · Fusion setup")}),e.jsxs("h2",{id:"wizard-title",className:"setup-wizard-title",children:[t.step==="manual"&&(j?s("setup.welcomeToFusion","Welcome to Fusion"):s("setup.titleSetUpProject","Set Up Your Project")),t.step==="agent"&&s("setup.firstAgentTitle","Create your first agent"),t.step==="complete"&&s("setup.setupCompleteTitle","Setup Complete!")]})]}),t.step!=="complete"&&t.step!=="agent"&&e.jsx("button",{className:"modal-close",onClick:C,"aria-label":s("setup.closeWizard","Close wizard"),children:e.jsx(fe,{size:20})})]}),e.jsxs("div",{className:"setup-wizard-content",children:[t.step==="manual"&&e.jsxs("div",{className:"setup-wizard-manual",children:[e.jsxs("section",{className:"setup-wizard-repository-section","aria-labelledby":"setup-repository-mode-title",children:[e.jsxs("div",{className:"setup-wizard-section-heading",children:[e.jsx("h3",{id:"setup-repository-mode-title",children:s("setup.repositorySetupTitle","Repository setup")}),e.jsx("p",{children:s("setup.repositorySetupDescription","Choose how Fusion should prepare the project directory before registration.")})]}),e.jsxs("fieldset",{className:"setup-wizard-mode-switch","aria-label":s("setup.projectSetupModeAriaLabel","Project setup mode"),children:[e.jsx("legend",{children:s("setup.setupMode","Setup Mode")}),e.jsxs("label",{className:`setup-wizard-mode-option${v?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"existing","aria-label":s("setup.useExistingDirectory","Use Existing Directory"),checked:v,onChange:()=>z("existing")}),e.jsxs("span",{className:"setup-wizard-mode-option-copy",children:[e.jsx("strong",{children:s("setup.useExistingDirectory","Use Existing Directory")}),e.jsx("span",{children:s("setup.useExistingDirectoryHint","Register a folder that is already a git repository or workspace root.")})]})]}),e.jsxs("label",{className:`setup-wizard-mode-option${g?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"init","aria-label":s("setup.initializeNewRepository","Initialize New Repository"),checked:g,onChange:()=>z("init")}),e.jsxs("span",{className:"setup-wizard-mode-option-copy",children:[e.jsx("strong",{children:s("setup.initializeNewRepository","Initialize New Repository")}),e.jsx("span",{children:s("setup.initializeNewRepositoryHint","Register a selected non-git folder and let Fusion run git init on the server.")})]})]}),e.jsxs("label",{className:`setup-wizard-mode-option${u?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"clone","aria-label":s("setup.cloneGitRepository","Clone Git Repository"),checked:u,onChange:()=>z("clone")}),e.jsxs("span",{className:"setup-wizard-mode-option-copy",children:[e.jsx("strong",{children:s("setup.cloneGitRepository","Clone Git Repository")}),e.jsx("span",{children:s("setup.cloneGitRepositoryHint","Clone a remote repository into an empty or absent destination folder.")})]})]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:u?s("setup.destinationDirectory","Destination Directory"):g?s("setup.newRepositoryDirectory","New Repository Directory"):s("setup.projectDirectory","Project Directory")}),e.jsx(ke,{value:t.manualPath,onChange:q,nodeId:t.manualNodeId||void 0,localNodeId:Y,selectCreatedDirectory:!0,placeholder:u?s("setup.clonePathPlaceholder","/path/for/new-clone"):g?s("setup.initPathPlaceholder","/path/to/new-project"):s("setup.projectPathPlaceholder","/path/to/your/project")}),e.jsx("p",{className:"form-hint",children:u?s("setup.clonePathHint","Select or type an absolute destination path. Fusion will clone into this directory. The destination must be empty or absent."):g?s("setup.initPathHint","Select or type an absolute path to an empty or non-git folder. Fusion will run git init during registration."):s("setup.projectPathHint","Select or type the absolute path to an existing git repository or workspace root.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-name",children:s("setup.projectName","Project Name")}),e.jsx("input",{id:"project-name",type:"text",value:t.manualName,onChange:a=>r(i=>({...i,manualName:a.target.value})),placeholder:s("setup.projectNamePlaceholder","my-project")}),e.jsx("p",{className:"form-hint",children:u?s("setup.projectNameHintClone","By default this follows the destination folder name unless you edit it."):g?s("setup.projectNameHintInit","By default this follows the folder name Fusion will initialize unless you edit it."):s("setup.projectNameHintExisting","By default this follows the selected directory name unless you edit it.")})]}),u&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-clone-url",children:s("setup.repositoryUrl","Repository URL")}),e.jsx("input",{id:"project-clone-url",type:"text",value:t.manualCloneUrl,onChange:a=>r(i=>({...i,manualCloneUrl:a.target.value,error:null})),placeholder:s("setup.repositoryUrlPlaceholder","https://github.com/owner/repo.git")}),e.jsx("p",{className:"form-hint",children:s("setup.cloneGitHint","Fusion will run git clone into the destination directory, then register that cloned folder.")})]}),v&&t.manualPath.trim()&&e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:"workspace-mode",className:"checkbox-label",children:[e.jsx("input",{id:"workspace-mode",type:"checkbox",checked:t.workspaceMode,onChange:a=>r(i=>({...i,workspaceMode:a.target.checked}))}),s("setup.workspaceMode","Workspace mode (multi-repo)")]}),t.isDetectingWorkspace&&e.jsxs("p",{className:"form-hint",children:[e.jsx(R,{size:12,className:"animate-spin setup-wizard-inline-spinner"}),s("setup.detectingWorkspace","Detecting sub-repositories...")]}),!t.isDetectingWorkspace&&t.detectedRepos.length>0&&e.jsxs("p",{className:"form-hint",children:[s("setup.detectedRepos","Found {{count}} repositories:",{count:t.detectedRepos.length})," ",t.detectedRepos.join(", ")]}),!t.isDetectingWorkspace&&t.detectedRepos.length===0&&t.workspaceMode===!1&&t.manualPath.trim()&&e.jsx("p",{className:"form-hint",children:s("setup.noSubReposDetected","No sub-repositories detected. Enable if this is a multi-repo workspace.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"task-prefix",children:s("setup.taskPrefix","Task Prefix")}),e.jsx("input",{id:"task-prefix",type:"text",value:t.manualTaskPrefix,onChange:a=>r(i=>({...i,manualTaskPrefix:a.target.value.toUpperCase()})),placeholder:D(t.manualName||"FN"),maxLength:5}),e.jsx("p",{className:"form-hint",children:s("setup.taskPrefixHint",'Used for task IDs (e.g. "{{prefix}}-1"). Derived from project name.',{prefix:t.manualTaskPrefix||"FN"})})]}),e.jsxs("div",{className:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":F,onClick:()=>B(a=>!a),children:[e.jsx(we,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:s("setup.advancedSettings","Advanced settings")})]}),F&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[ze(k)&&e.jsxs("div",{className:"form-group",children:[e.jsxs("div",{className:"project-node-selector",children:[e.jsx("span",{className:"project-node-selector__label",children:s("setup.runtimeNode","Runtime Node")}),e.jsxs("select",{value:t.manualNodeId,onChange:a=>r(i=>({...i,manualNodeId:a.target.value})),disabled:$||t.isRegistering,children:[e.jsx("option",{value:"",children:s("setup.localNode","Local node")}),H(k).map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.type,")"]},a.id))]})]}),e.jsx("p",{className:"form-hint",children:s("setup.runtimeNodeHint",`A runtime node is the machine where this project's tasks run. "Local node" is this computer; pick a remote node to run tasks elsewhere.`)})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:s("setup.isolationMode","Isolation Mode")}),e.jsxs("div",{className:"setup-wizard-isolation-options",children:[e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="in-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"in-process",checked:t.manualIsolationMode==="in-process",onChange:()=>r(a=>({...a,manualIsolationMode:"in-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.inProcess","In-Process")}),e.jsx("span",{children:s("setup.inProcessDesc","Lower overhead, shared memory. Best for most projects.")}),e.jsx("span",{className:"wizard-option-recommended",children:s("setup.recommended","Recommended")})]})]}),e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="child-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"child-process",checked:t.manualIsolationMode==="child-process",onChange:()=>r(a=>({...a,manualIsolationMode:"child-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.childProcess","Child-Process")}),e.jsx("span",{children:s("setup.childProcessDesc","Isolated execution with crash containment.")})]})]})]})]})]})]}),t.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:t.error})]}),t.step==="agent"&&e.jsxs("div",{className:"setup-wizard-agent-step",children:[e.jsx("p",{className:"setup-wizard-agent-intro",children:s("setup.firstAgentIntro","Agents are optional. Fusion can build tasks without one by starting temporary agents for planning, coding, review, and merge. Create an agent only if you want help coordinating tasks and direction.")}),e.jsxs("div",{className:"setup-wizard-agent-layout",children:[e.jsxs("section",{className:"setup-wizard-agent-presets","aria-labelledby":"setup-first-agent-presets-heading",children:[e.jsx("div",{className:"setup-wizard-agent-section-heading",id:"setup-first-agent-presets-heading",children:s("setup.firstAgentTemplates","Templates")}),e.jsx("div",{className:"setup-wizard-agent-preset-list",role:"radiogroup","aria-label":s("setup.firstAgentTemplates","Templates"),children:x.map(a=>{const i=t.selectedPresetId===a.id;return e.jsxs("button",{type:"button",className:`setup-wizard-agent-preset${i?" selected":""}`,role:"radio","aria-checked":i,"aria-label":i?s("setup.selectedAgentTemplate","{{name}} selected",{name:a.name}):a.name,tabIndex:a.id===ne?0:-1,"data-agent-preset-id":a.id,disabled:N,onClick:()=>P(a.id),onKeyDown:n=>Z(n,a.id),children:[e.jsx(W,{agent:{id:a.id,icon:a.icon,name:a.name},size:28}),e.jsxs("span",{className:"setup-wizard-agent-preset-copy",children:[e.jsxs("span",{className:"setup-wizard-agent-preset-name",children:[a.name,a.id==="ceo"&&e.jsx("span",{className:"wizard-option-recommended",children:s("setup.recommended","Recommended")})]}),e.jsx("span",{className:"setup-wizard-agent-preset-description",children:a.description})]})]},a.id)})})]}),e.jsxs("section",{className:"setup-wizard-agent-preview","aria-labelledby":"setup-first-agent-preview-heading",children:[e.jsx("div",{className:"setup-wizard-agent-section-heading",id:"setup-first-agent-preview-heading",children:s("setup.firstAgentPreview","Preview")}),e.jsxs("div",{className:"setup-wizard-agent-preview-card",children:[e.jsxs("div",{className:"setup-wizard-agent-preview-title-row",children:[e.jsx(W,{agent:{id:t.selectedPresetId||"draft",icon:t.agentDraft.icon,name:t.agentDraft.name},size:36}),e.jsxs("div",{children:[e.jsx("h3",{children:t.agentDraft.name||s("setup.firstAgentDraftName","Draft agent")}),e.jsx("p",{children:t.agentDraft.title||re?.title||s("setup.firstAgentCustomDraft","Custom agent draft")})]})]}),e.jsxs("dl",{className:"setup-wizard-agent-preview-list",children:[e.jsxs("div",{children:[e.jsx("dt",{children:s("agents.fieldRole","Role")}),e.jsx("dd",{children:t.agentDraft.role})]}),e.jsxs("div",{children:[e.jsx("dt",{children:s("agents.fieldInstructionsText","Inline Instructions")}),e.jsx("dd",{children:t.agentDraft.instructionsText||s("setup.firstAgentNoInstructions","No inline instructions yet")})]})]}),M&&e.jsxs("button",{type:"button",className:"btn setup-wizard-agent-ai-btn",onClick:()=>b(!0),disabled:N,children:[e.jsx(Ne,{size:16}),e.jsx("span",{children:s("agents.aiInterview","AI Interview")})]})]})]})]}),t.agentError&&e.jsx("div",{className:"wizard-error",role:"alert",tabIndex:-1,ref:T,children:t.agentError})]}),t.step==="complete"&&e.jsxs("div",{className:"setup-wizard-complete",children:[e.jsxs("div",{className:"setup-wizard-success-streak","aria-hidden":"true",children:[e.jsx("div",{className:"setup-wizard-success-streak-core"}),e.jsx("div",{className:"setup-wizard-success-streak-glow"})]}),e.jsx(L,{size:64,className:"success-icon"}),e.jsx("h3",{children:s("setup.allSet","All Set!")}),e.jsx("p",{children:t.agentOutcome==="created"?s("setup.firstAgentCreatedSuccess","Your project is registered and your first agent is ready."):s("setup.projectRegisteredSuccess","Your project has been registered successfully.")}),e.jsx("p",{children:t.agentOutcome==="skipped"?s("setup.firstAgentSkippedHint","You can create agents later from the Agents view."):s("setup.addMoreProjectsHint","You can add more projects anytime from the project overview.")})]})]}),e.jsxs("div",{className:"setup-wizard-footer",children:[e.jsx("a",{className:"btn setup-wizard-help-link",href:O,target:"_blank",rel:"noopener noreferrer",children:s("setup.needHelp","Need help?")}),t.step==="manual"&&e.jsx("button",{className:"btn btn-primary",onClick:V,disabled:ie,children:t.isRegistering?e.jsxs(e.Fragment,{children:[e.jsx(R,{size:16,className:"animate-spin"}),e.jsx("span",{children:s("setup.registering","Registering...")})]}):e.jsx("span",{children:ee})}),t.step==="agent"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:Q,disabled:N,children:s("setup.skipFirstAgent","Skip for now")}),e.jsx("button",{className:"btn btn-primary",onClick:()=>void J(),disabled:N||!t.agentDraft.name.trim(),"aria-busy":t.isCreatingAgent,children:t.isCreatingAgent?e.jsxs(e.Fragment,{children:[e.jsx(R,{size:16,className:"animate-spin"}),e.jsx("span",{children:s("setup.creatingFirstAgent","Creating agent...")})]}):e.jsx("span",{children:s("setup.createFirstAgent","Create Agent")})})]}),t.step==="complete"&&e.jsxs("button",{className:"btn btn-primary",onClick:K,children:[e.jsx(L,{size:16}),e.jsx("span",{children:s("setup.getStarted","Get Started")})]})]})]}),M&&E&&e.jsx(ye,{level:"modal",fallback:e.jsxs("div",{className:"wizard-error setup-wizard-agent-interview-error",role:"alert",children:[e.jsx("span",{children:s("setup.firstAgentInterviewLoadError","AI interview could not load. You can still create an agent from a template or skip this step.")}),e.jsx("button",{type:"button",className:"btn",onClick:()=>b(!1),children:s("setup.firstAgentContinueWithTemplates","Continue with templates")})]}),children:e.jsx(o.Suspense,{fallback:e.jsx("div",{className:"wizard-error setup-wizard-agent-interview-error",role:"status",children:s("setup.firstAgentInterviewLoading","Loading AI Interview...")}),children:e.jsx(Pe,{isOpen:E,onClose:()=>b(!1),onUseDraft:X,projectId:t.registeredProject?.id,existingAgents:[],mode:"create"})})})]})}export{Te as SetupWizardModal};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ExperimentalAgentOnboardingModal-CFjRfBUk.js","assets/vendor-react-SZ_qB27O.js","assets/index-CiVIbypZ.js","assets/vendor-i18n-Duky4gdQ.js","assets/vendor-codemirror-CcrtqoCy.js","assets/vendor-reactflow-BlIeoTu4.js","assets/vendor-reactflow-BnuhLJ6X.css","assets/vendor-xterm-BNq00GSj.js","assets/vendor-xterm-LZoznX6r.css","assets/index-Duxgoh_Y.css","assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css"])))=>i.map(i=>d[i]);
2
+ import{a1 as le,I as x,a2 as I,a3 as U,a4 as ce,a5 as de,a6 as pe,a7 as ue,a8 as me,a9 as ge,aa as he,ab as xe,K as je,X as fe,L as R,k as we,ac as W,S as Ne,ad as L,ae as ye,af as be}from"./index-CiVIbypZ.js";import{r as o,j as e}from"./vendor-react-SZ_qB27O.js";import{D as ke}from"./DirectoryPicker-DMd9MEtq.js";import{s as A}from"./projectDetection-G3XuxD2X.js";import{u as Ce}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";import"./folder-open-CF9O-sX4.js";function H(c){return c.filter(d=>d.type!=="local")}function ze(c){return H(c).length>0}function D(c){const d=c.replace(/[^a-zA-Z]/g,"").toUpperCase();return d.length>=2&&d.length<=4?d:d.length>4?d.slice(0,4):"FN"}const Pe=o.lazy(()=>be(()=>import("./ExperimentalAgentOnboardingModal-CFjRfBUk.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(c=>({default:c.ExperimentalAgentOnboardingModal})));function Te({onProjectRegistered:c,onClose:d,agentOnboardingEnabled:M=!1,includeAgentStep:j=!0}){const{t:s}=Ce("app"),{confirmWithChoice:S}=le(),O="https://discord.gg/ksrfuy7WYR",y=o.useMemo(()=>I("ceo")??x[0],[]),[G,_]=o.useState(!0),[t,r]=o.useState(()=>({step:"manual",manualMode:"existing",manualPath:"",manualCloneUrl:"",manualName:"",manualIsolationMode:"in-process",manualNodeId:"",manualTaskPrefix:"",detectedRepos:[],workspaceMode:!1,isDetectingWorkspace:!1,registeredProject:null,selectedPresetId:y.id,agentDraft:U(y),isCreatingAgent:!1,isRegistering:!1,error:null,agentError:null,agentOutcome:null})),[F,B]=o.useState(!1),[E,b]=o.useState(!1),T=o.useRef(null),{nodes:k,loading:$}=ce(),Y=k.find(a=>a.type==="local")?.id,C=o.useCallback(()=>{_(!1),d?.()},[d]),K=o.useCallback(()=>{if(t.registeredProject){c(t.registeredProject);return}C()},[C,c,t.registeredProject]);o.useEffect(()=>{t.agentError&&T.current?.focus()},[t.agentError]);const f=o.useRef(0),w=o.useRef(!1),q=o.useCallback(a=>{if(r(i=>{const n={manualPath:a,detectedRepos:[],workspaceMode:!1,error:null};a&&(!i.manualName||i.manualName===A(i.manualPath))&&(n.manualName=A(a));const p=n.manualName??i.manualName;return p&&(!i.manualTaskPrefix||i.manualTaskPrefix===D(A(i.manualPath)))&&(n.manualTaskPrefix=D(p)),{...i,...n}}),t.manualMode==="existing"&&a.trim()&&a.trim()!=="/"){const i=++f.current;r(n=>({...n,isDetectingWorkspace:!0})),de(a.trim()).then(n=>{i===f.current&&r(p=>({...p,isDetectingWorkspace:!1,detectedRepos:n.repos,workspaceMode:n.isWorkspace}))}).catch(()=>{i===f.current&&r(n=>({...n,isDetectingWorkspace:!1}))})}},[t.manualMode]),z=o.useCallback(a=>{r(i=>({...i,manualMode:a,manualCloneUrl:a==="clone"?i.manualCloneUrl:"",detectedRepos:a==="existing"?i.detectedRepos:[],workspaceMode:a==="existing"?i.workspaceMode:!1,isDetectingWorkspace:!1,error:null})),f.current+=1},[]),V=o.useCallback(async()=>{const a=t.manualPath.trim(),i=t.manualName.trim(),n=t.manualCloneUrl.trim();if(!a||!i||t.manualMode==="clone"&&!n||w.current||t.isRegistering)return;w.current=!0,r(l=>({...l,isRegistering:!0,error:null}));const p=()=>{w.current=!1,r(l=>({...l,isRegistering:!1}))};try{const{gitCli:l}=await pe();if(l&&!l.available){await S({title:s("setup.gitMissingTitle","Git is not installed"),message:s("setup.gitMissingMessage","Git was not found on the Fusion host. Install Git, then try again — Fusion projects need Git so agents can create task worktrees."),confirmLabel:s("setup.gitMissingOpenDownloads","Open Git downloads"),cancelLabel:s("setup.cancel","Cancel"),alwaysAsk:!0})==="primary"&&ue(l.installUrl??"https://git-scm.com/downloads"),p();return}}catch{}try{const l={name:i,path:a,isolationMode:t.manualIsolationMode,nodeId:t.manualNodeId||void 0,gitSetupMode:t.manualMode,cloneUrl:t.manualMode==="clone"?n:void 0,workspaceMode:t.manualMode==="existing"?t.workspaceMode:!1,taskPrefix:t.manualTaskPrefix.trim()||void 0},m=await me(l);if(!j){r(h=>({...h,isRegistering:!1})),c(m);return}r(h=>({...h,step:"agent",registeredProject:m,isRegistering:!1}))}catch(l){r(m=>({...m,isRegistering:!1,error:l instanceof Error?l.message:"Failed to register project"}))}finally{w.current=!1}},[j,c,t.manualPath,t.manualName,t.manualCloneUrl,t.manualMode,t.manualIsolationMode,t.manualNodeId,t.workspaceMode,t.manualTaskPrefix,S,s]),P=o.useCallback(a=>{const i=I(a);i&&r(n=>({...n,selectedPresetId:i.id,agentDraft:U(i),agentError:null}))},[]),Z=o.useCallback((a,i)=>{const n=x.findIndex(h=>h.id===i);if(n<0)return;const p=x.length-1;let l=null;if(a.key==="ArrowDown"||a.key==="ArrowRight"?l=n===p?0:n+1:a.key==="ArrowUp"||a.key==="ArrowLeft"?l=n===0?p:n-1:a.key==="Home"?l=0:a.key==="End"&&(l=p),l===null)return;a.preventDefault();const m=x[l];P(m.id),requestAnimationFrame(()=>{document.querySelector(`[data-agent-preset-id="${m.id}"]`)?.focus()})},[P]),X=o.useCallback(a=>{r(i=>({...i,selectedPresetId:"",agentDraft:ge(a),agentError:null}))},[]),J=o.useCallback(async()=>{if(!(!t.registeredProject||!t.agentDraft.name.trim())){r(a=>({...a,isCreatingAgent:!0,agentError:null}));try{await he(xe(t.agentDraft),t.registeredProject.id),r(a=>({...a,step:"complete",isCreatingAgent:!1,agentOutcome:"created"}))}catch(a){if(a instanceof Error&&/already exists/i.test(a.message)){r(i=>({...i,step:"complete",isCreatingAgent:!1,agentOutcome:"created"}));return}r(i=>({...i,isCreatingAgent:!1,agentError:a instanceof Error?a.message:s("setup.firstAgentCreateError","Failed to create agent")}))}}},[t.agentDraft,t.registeredProject,s]),Q=o.useCallback(()=>{r(a=>({...a,step:"complete",agentError:null,agentOutcome:"skipped"}))},[]);if(!G)return null;const v=t.manualMode==="existing",g=t.manualMode==="init",u=t.manualMode==="clone",ee=u?s("setup.cloneAndRegisterProject","Clone and Register Project"):g?s("setup.initializeAndRegisterProject","Initialize and Register Project"):s("setup.registerProject","Register Project"),te=t.manualPath.trim().length>0,se=t.manualName.trim().length>0,ae=t.manualCloneUrl.trim().length>0,ie=t.isRegistering||!te||!se||u&&!ae,re=t.selectedPresetId?I(t.selectedPresetId):void 0,N=t.isCreatingAgent,ne=t.selectedPresetId||y.id,oe=`modal setup-wizard-modal${t.step==="agent"?" setup-wizard-modal--agent":""}`;return e.jsxs(je,{windowKey:"setup-wizard",modal:!0,title:s("setup.welcomeToFusion","Welcome to Fusion"),ariaLabelledBy:"wizard-title",onClose:()=>{},hideHeader:!0,dragHandleSelector:".setup-wizard-modal .setup-wizard-header",className:"floating-window--setup-wizard",defaultSize:{width:760,height:680},minSize:{width:480,height:360},persistGeometryKey:"floating-window:setup-wizard",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,children:[e.jsxs("div",{className:oe,children:[e.jsxs("div",{className:"setup-wizard-header",children:[e.jsxs("div",{className:"setup-wizard-heading",children:[e.jsxs("div",{className:"setup-wizard-brand","aria-label":s("setup.brandName","Fusion"),children:[e.jsxs("svg",{className:"setup-wizard-brand-logo",width:28,height:28,viewBox:"0 0 128 128",fill:"none","aria-label":s("setup.brandLogo","Fusion logo"),role:"img",children:[e.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),e.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),e.jsx("span",{className:"setup-wizard-brand-name",children:s("setup.brandName","Fusion")})]}),!j&&t.step==="manual"&&e.jsx("span",{className:"setup-wizard-step-context",children:s("setup.projectStepContext","Step 3 of 5 — Project · Fusion setup")}),e.jsxs("h2",{id:"wizard-title",className:"setup-wizard-title",children:[t.step==="manual"&&(j?s("setup.welcomeToFusion","Welcome to Fusion"):s("setup.titleSetUpProject","Set Up Your Project")),t.step==="agent"&&s("setup.firstAgentTitle","Create your first agent"),t.step==="complete"&&s("setup.setupCompleteTitle","Setup Complete!")]})]}),t.step!=="complete"&&t.step!=="agent"&&e.jsx("button",{className:"modal-close",onClick:C,"aria-label":s("setup.closeWizard","Close wizard"),children:e.jsx(fe,{size:20})})]}),e.jsxs("div",{className:"setup-wizard-content",children:[t.step==="manual"&&e.jsxs("div",{className:"setup-wizard-manual",children:[e.jsxs("section",{className:"setup-wizard-repository-section","aria-labelledby":"setup-repository-mode-title",children:[e.jsxs("div",{className:"setup-wizard-section-heading",children:[e.jsx("h3",{id:"setup-repository-mode-title",children:s("setup.repositorySetupTitle","Repository setup")}),e.jsx("p",{children:s("setup.repositorySetupDescription","Choose how Fusion should prepare the project directory before registration.")})]}),e.jsxs("fieldset",{className:"setup-wizard-mode-switch","aria-label":s("setup.projectSetupModeAriaLabel","Project setup mode"),children:[e.jsx("legend",{children:s("setup.setupMode","Setup Mode")}),e.jsxs("label",{className:`setup-wizard-mode-option${v?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"existing","aria-label":s("setup.useExistingDirectory","Use Existing Directory"),checked:v,onChange:()=>z("existing")}),e.jsxs("span",{className:"setup-wizard-mode-option-copy",children:[e.jsx("strong",{children:s("setup.useExistingDirectory","Use Existing Directory")}),e.jsx("span",{children:s("setup.useExistingDirectoryHint","Register a folder that is already a git repository or workspace root.")})]})]}),e.jsxs("label",{className:`setup-wizard-mode-option${g?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"init","aria-label":s("setup.initializeNewRepository","Initialize New Repository"),checked:g,onChange:()=>z("init")}),e.jsxs("span",{className:"setup-wizard-mode-option-copy",children:[e.jsx("strong",{children:s("setup.initializeNewRepository","Initialize New Repository")}),e.jsx("span",{children:s("setup.initializeNewRepositoryHint","Register a selected non-git folder and let Fusion run git init on the server.")})]})]}),e.jsxs("label",{className:`setup-wizard-mode-option${u?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"clone","aria-label":s("setup.cloneGitRepository","Clone Git Repository"),checked:u,onChange:()=>z("clone")}),e.jsxs("span",{className:"setup-wizard-mode-option-copy",children:[e.jsx("strong",{children:s("setup.cloneGitRepository","Clone Git Repository")}),e.jsx("span",{children:s("setup.cloneGitRepositoryHint","Clone a remote repository into an empty or absent destination folder.")})]})]})]})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-path",children:u?s("setup.destinationDirectory","Destination Directory"):g?s("setup.newRepositoryDirectory","New Repository Directory"):s("setup.projectDirectory","Project Directory")}),e.jsx(ke,{value:t.manualPath,onChange:q,nodeId:t.manualNodeId||void 0,localNodeId:Y,selectCreatedDirectory:!0,placeholder:u?s("setup.clonePathPlaceholder","/path/for/new-clone"):g?s("setup.initPathPlaceholder","/path/to/new-project"):s("setup.projectPathPlaceholder","/path/to/your/project")}),e.jsx("p",{className:"form-hint",children:u?s("setup.clonePathHint","Select or type an absolute destination path. Fusion will clone into this directory. The destination must be empty or absent."):g?s("setup.initPathHint","Select or type an absolute path to an empty or non-git folder. Fusion will run git init during registration."):s("setup.projectPathHint","Select or type the absolute path to an existing git repository or workspace root.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-name",children:s("setup.projectName","Project Name")}),e.jsx("input",{id:"project-name",type:"text",value:t.manualName,onChange:a=>r(i=>({...i,manualName:a.target.value})),placeholder:s("setup.projectNamePlaceholder","my-project")}),e.jsx("p",{className:"form-hint",children:u?s("setup.projectNameHintClone","By default this follows the destination folder name unless you edit it."):g?s("setup.projectNameHintInit","By default this follows the folder name Fusion will initialize unless you edit it."):s("setup.projectNameHintExisting","By default this follows the selected directory name unless you edit it.")})]}),u&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"project-clone-url",children:s("setup.repositoryUrl","Repository URL")}),e.jsx("input",{id:"project-clone-url",type:"text",value:t.manualCloneUrl,onChange:a=>r(i=>({...i,manualCloneUrl:a.target.value,error:null})),placeholder:s("setup.repositoryUrlPlaceholder","https://github.com/owner/repo.git")}),e.jsx("p",{className:"form-hint",children:s("setup.cloneGitHint","Fusion will run git clone into the destination directory, then register that cloned folder.")})]}),v&&t.manualPath.trim()&&e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:"workspace-mode",className:"checkbox-label",children:[e.jsx("input",{id:"workspace-mode",type:"checkbox",checked:t.workspaceMode,onChange:a=>r(i=>({...i,workspaceMode:a.target.checked}))}),s("setup.workspaceMode","Workspace mode (multi-repo)")]}),t.isDetectingWorkspace&&e.jsxs("p",{className:"form-hint",children:[e.jsx(R,{size:12,className:"animate-spin setup-wizard-inline-spinner"}),s("setup.detectingWorkspace","Detecting sub-repositories...")]}),!t.isDetectingWorkspace&&t.detectedRepos.length>0&&e.jsxs("p",{className:"form-hint",children:[s("setup.detectedRepos","Found {{count}} repositories:",{count:t.detectedRepos.length})," ",t.detectedRepos.join(", ")]}),!t.isDetectingWorkspace&&t.detectedRepos.length===0&&t.workspaceMode===!1&&t.manualPath.trim()&&e.jsx("p",{className:"form-hint",children:s("setup.noSubReposDetected","No sub-repositories detected. Enable if this is a multi-repo workspace.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"task-prefix",children:s("setup.taskPrefix","Task Prefix")}),e.jsx("input",{id:"task-prefix",type:"text",value:t.manualTaskPrefix,onChange:a=>r(i=>({...i,manualTaskPrefix:a.target.value.toUpperCase()})),placeholder:D(t.manualName||"FN"),maxLength:5}),e.jsx("p",{className:"form-hint",children:s("setup.taskPrefixHint",'Used for task IDs (e.g. "{{prefix}}-1"). Derived from project name.',{prefix:t.manualTaskPrefix||"FN"})})]}),e.jsxs("div",{className:"setup-wizard-advanced",children:[e.jsxs("button",{type:"button",className:"setup-wizard-advanced-toggle","aria-expanded":F,onClick:()=>B(a=>!a),children:[e.jsx(we,{size:16,className:"setup-wizard-advanced-chevron"}),e.jsx("span",{children:s("setup.advancedSettings","Advanced settings")})]}),F&&e.jsxs("div",{className:"setup-wizard-advanced-panel",children:[ze(k)&&e.jsxs("div",{className:"form-group",children:[e.jsxs("div",{className:"project-node-selector",children:[e.jsx("span",{className:"project-node-selector__label",children:s("setup.runtimeNode","Runtime Node")}),e.jsxs("select",{value:t.manualNodeId,onChange:a=>r(i=>({...i,manualNodeId:a.target.value})),disabled:$||t.isRegistering,children:[e.jsx("option",{value:"",children:s("setup.localNode","Local node")}),H(k).map(a=>e.jsxs("option",{value:a.id,children:[a.name," (",a.type,")"]},a.id))]})]}),e.jsx("p",{className:"form-hint",children:s("setup.runtimeNodeHint",`A runtime node is the machine where this project's tasks run. "Local node" is this computer; pick a remote node to run tasks elsewhere.`)})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:s("setup.isolationMode","Isolation Mode")}),e.jsxs("div",{className:"setup-wizard-isolation-options",children:[e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="in-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"in-process",checked:t.manualIsolationMode==="in-process",onChange:()=>r(a=>({...a,manualIsolationMode:"in-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.inProcess","In-Process")}),e.jsx("span",{children:s("setup.inProcessDesc","Lower overhead, shared memory. Best for most projects.")}),e.jsx("span",{className:"wizard-option-recommended",children:s("setup.recommended","Recommended")})]})]}),e.jsxs("label",{className:`setup-wizard-isolation-option${t.manualIsolationMode==="child-process"?" selected":""}`,children:[e.jsx("input",{type:"radio",name:"isolation-mode",value:"child-process",checked:t.manualIsolationMode==="child-process",onChange:()=>r(a=>({...a,manualIsolationMode:"child-process"}))}),e.jsxs("div",{className:"setup-wizard-isolation-option-content",children:[e.jsx("strong",{children:s("setup.childProcess","Child-Process")}),e.jsx("span",{children:s("setup.childProcessDesc","Isolated execution with crash containment.")})]})]})]})]})]})]}),t.error&&e.jsx("div",{className:"wizard-error",role:"alert",children:t.error})]}),t.step==="agent"&&e.jsxs("div",{className:"setup-wizard-agent-step",children:[e.jsx("p",{className:"setup-wizard-agent-intro",children:s("setup.firstAgentIntro","Agents are optional. Fusion can build tasks without one by starting temporary agents for planning, coding, review, and merge. Create an agent only if you want help coordinating tasks and direction.")}),e.jsxs("div",{className:"setup-wizard-agent-layout",children:[e.jsxs("section",{className:"setup-wizard-agent-presets","aria-labelledby":"setup-first-agent-presets-heading",children:[e.jsx("div",{className:"setup-wizard-agent-section-heading",id:"setup-first-agent-presets-heading",children:s("setup.firstAgentTemplates","Templates")}),e.jsx("div",{className:"setup-wizard-agent-preset-list",role:"radiogroup","aria-label":s("setup.firstAgentTemplates","Templates"),children:x.map(a=>{const i=t.selectedPresetId===a.id;return e.jsxs("button",{type:"button",className:`setup-wizard-agent-preset${i?" selected":""}`,role:"radio","aria-checked":i,"aria-label":i?s("setup.selectedAgentTemplate","{{name}} selected",{name:a.name}):a.name,tabIndex:a.id===ne?0:-1,"data-agent-preset-id":a.id,disabled:N,onClick:()=>P(a.id),onKeyDown:n=>Z(n,a.id),children:[e.jsx(W,{agent:{id:a.id,icon:a.icon,name:a.name},size:28}),e.jsxs("span",{className:"setup-wizard-agent-preset-copy",children:[e.jsxs("span",{className:"setup-wizard-agent-preset-name",children:[a.name,a.id==="ceo"&&e.jsx("span",{className:"wizard-option-recommended",children:s("setup.recommended","Recommended")})]}),e.jsx("span",{className:"setup-wizard-agent-preset-description",children:a.description})]})]},a.id)})})]}),e.jsxs("section",{className:"setup-wizard-agent-preview","aria-labelledby":"setup-first-agent-preview-heading",children:[e.jsx("div",{className:"setup-wizard-agent-section-heading",id:"setup-first-agent-preview-heading",children:s("setup.firstAgentPreview","Preview")}),e.jsxs("div",{className:"setup-wizard-agent-preview-card",children:[e.jsxs("div",{className:"setup-wizard-agent-preview-title-row",children:[e.jsx(W,{agent:{id:t.selectedPresetId||"draft",icon:t.agentDraft.icon,name:t.agentDraft.name},size:36}),e.jsxs("div",{children:[e.jsx("h3",{children:t.agentDraft.name||s("setup.firstAgentDraftName","Draft agent")}),e.jsx("p",{children:t.agentDraft.title||re?.title||s("setup.firstAgentCustomDraft","Custom agent draft")})]})]}),e.jsxs("dl",{className:"setup-wizard-agent-preview-list",children:[e.jsxs("div",{children:[e.jsx("dt",{children:s("agents.fieldRole","Role")}),e.jsx("dd",{children:t.agentDraft.role})]}),e.jsxs("div",{children:[e.jsx("dt",{children:s("agents.fieldInstructionsText","Inline Instructions")}),e.jsx("dd",{children:t.agentDraft.instructionsText||s("setup.firstAgentNoInstructions","No inline instructions yet")})]})]}),M&&e.jsxs("button",{type:"button",className:"btn setup-wizard-agent-ai-btn",onClick:()=>b(!0),disabled:N,children:[e.jsx(Ne,{size:16}),e.jsx("span",{children:s("agents.aiInterview","AI Interview")})]})]})]})]}),t.agentError&&e.jsx("div",{className:"wizard-error",role:"alert",tabIndex:-1,ref:T,children:t.agentError})]}),t.step==="complete"&&e.jsxs("div",{className:"setup-wizard-complete",children:[e.jsxs("div",{className:"setup-wizard-success-streak","aria-hidden":"true",children:[e.jsx("div",{className:"setup-wizard-success-streak-core"}),e.jsx("div",{className:"setup-wizard-success-streak-glow"})]}),e.jsx(L,{size:64,className:"success-icon"}),e.jsx("h3",{children:s("setup.allSet","All Set!")}),e.jsx("p",{children:t.agentOutcome==="created"?s("setup.firstAgentCreatedSuccess","Your project is registered and your first agent is ready."):s("setup.projectRegisteredSuccess","Your project has been registered successfully.")}),e.jsx("p",{children:t.agentOutcome==="skipped"?s("setup.firstAgentSkippedHint","You can create agents later from the Agents view."):s("setup.addMoreProjectsHint","You can add more projects anytime from the project overview.")})]})]}),e.jsxs("div",{className:"setup-wizard-footer",children:[e.jsx("a",{className:"btn setup-wizard-help-link",href:O,target:"_blank",rel:"noopener noreferrer",children:s("setup.needHelp","Need help?")}),t.step==="manual"&&e.jsx("button",{className:"btn btn-primary",onClick:V,disabled:ie,children:t.isRegistering?e.jsxs(e.Fragment,{children:[e.jsx(R,{size:16,className:"animate-spin"}),e.jsx("span",{children:s("setup.registering","Registering...")})]}):e.jsx("span",{children:ee})}),t.step==="agent"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn",onClick:Q,disabled:N,children:s("setup.skipFirstAgent","Skip for now")}),e.jsx("button",{className:"btn btn-primary",onClick:()=>void J(),disabled:N||!t.agentDraft.name.trim(),"aria-busy":t.isCreatingAgent,children:t.isCreatingAgent?e.jsxs(e.Fragment,{children:[e.jsx(R,{size:16,className:"animate-spin"}),e.jsx("span",{children:s("setup.creatingFirstAgent","Creating agent...")})]}):e.jsx("span",{children:s("setup.createFirstAgent","Create Agent")})})]}),t.step==="complete"&&e.jsxs("button",{className:"btn btn-primary",onClick:K,children:[e.jsx(L,{size:16}),e.jsx("span",{children:s("setup.getStarted","Get Started")})]})]})]}),M&&E&&e.jsx(ye,{level:"modal",fallback:e.jsxs("div",{className:"wizard-error setup-wizard-agent-interview-error",role:"alert",children:[e.jsx("span",{children:s("setup.firstAgentInterviewLoadError","AI interview could not load. You can still create an agent from a template or skip this step.")}),e.jsx("button",{type:"button",className:"btn",onClick:()=>b(!1),children:s("setup.firstAgentContinueWithTemplates","Continue with templates")})]}),children:e.jsx(o.Suspense,{fallback:e.jsx("div",{className:"wizard-error setup-wizard-agent-interview-error",role:"status",children:s("setup.firstAgentInterviewLoading","Loading AI Interview...")}),children:e.jsx(Pe,{isOpen:E,onClose:()=>b(!1),onUseDraft:X,projectId:t.registeredProject?.id,existingAgents:[],mode:"create"})})})]})}export{Te as SetupWizardModal};
@@ -1 +1 @@
1
- import{r as a,j as s}from"./vendor-react-SZ_qB27O.js";import{u as Bs,f as Os,b as Qs,C as Xs,n as xs,d as Z,e as ws,t as Us,i as Ws,g as Ys,h as Zs,V as qs,Z as Gs,X as fs,R as Js,j as se,k as ee,L as P,A as Ns,P as le,l as ie,T as ae,m as js,M as Ss}from"./index-QU8sENvc.js";import{u as te}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";const ne=new Set([".md",".markdown",".mdx"]);function re(d){const k=d.toLowerCase(),D=k.lastIndexOf(".");return D<0?!1:ne.has(k.slice(D))}function ue({projectId:d,addToast:k,onClose:D}){const{t:l}=te("app"),[b,T]=a.useState([]),[K,q]=a.useState(!0),[Cs,G]=a.useState(!1),[J,$]=a.useState(null),[ss,ys]=a.useState([]),[C,_s]=a.useState(""),[B,es]=a.useState(null),[r,O]=a.useState("skills"),ls=a.useRef(null),is=a.useRef(null),{snippets:m,loading:Q,error:Es,hasLoaded:h,createSnippet:as,updateSnippet:ts,deleteSnippet:ns,refresh:rs}=Bs(),[f,X]=a.useState(""),[g,U]=a.useState(""),[p,cs]=a.useState(null),[u,R]=a.useState(null),[os,v]=a.useState(null),[c,A]=a.useState(null),[y,z]=a.useState(null),[Ls,ds]=a.useState(!1),[ps,M]=a.useState(null),[I,_]=a.useState(null),[N,j]=a.useState(null),[Fs,W]=a.useState(!1),[ms,S]=a.useState(null),x=a.useRef(null),[E,Ps]=a.useState(""),ks=C.trim()?b.filter(e=>e.name.toLowerCase().includes(C.toLowerCase())||e.relativePath.toLowerCase().includes(C.toLowerCase())):b,L=a.useCallback(async()=>{q(!0);try{const e=await Os(d);T(e)}catch(e){const t=e instanceof Error?e.message:l("skills.loadDiscoveredError","Failed to load discovered skills");k(t,"error")}finally{q(!1)}},[d,k]),w=a.useCallback(async e=>{const t=i=>{if(!i||typeof i!="object")return!1;const n=i;if(typeof n.status=="number"&&n.status>=500)return!0;if(n.details&&typeof n.details=="object"){const V=n.details;if(typeof V.code=="string"&&V.code.startsWith("upstream_"))return!0}const o=i;return typeof o.error=="string"&&typeof o.code=="string"};G(!0),$(null);try{const i=await Qs(e,20,d);ys(i.entries)}catch(i){if(t(i))$(l("skills.catalogUnavailable","Catalog is temporarily unavailable. Please try again later."));else{const n=i instanceof Error?i.message:l("skills.loadCatalogError","Failed to load catalog");$(n)}}finally{G(!1)}},[d]),F=a.useCallback(()=>{X(""),U(""),cs(null),v(null)},[]),us=a.useCallback(()=>{const e=f.normalize("NFKC").trim().toLowerCase();if(Xs.includes(e))return l("skills.snippetsReservedName","This name is reserved for a chat command.");const t=xs(f);return t?g.trim().length===0?l("skills.snippetsPromptRequired","Enter a prompt for this snippet."):g.length>Z?l("skills.snippetsPromptTooLong","Prompts can contain at most {{count}} characters.",{count:Z}):m.some(i=>i.name===t&&i.name!==p)?l("skills.snippetsDuplicateName","A snippet with this name already exists."):!p&&m.length>=ws?l("skills.snippetsLimitReached","You can save up to {{count}} snippets.",{count:ws}):null:l("skills.snippetsInvalidName","Use 1–48 letters, numbers, underscores, or hyphens.")},[p,f,g,m,l]),Ds=a.useCallback(async e=>{if(e.preventDefault(),!h||u)return;const t=us();if(t){v(t);return}const i=xs(f);R(p??"create"),v(null);try{p?await ts(p,{name:i,prompt:g}):await as({name:i,prompt:g}),F()}catch{v(l("skills.snippetsSaveError","The snippet could not be saved. Refresh and try again."))}finally{R(null)}},[as,p,F,u,f,g,h,l,ts,us]),Ts=a.useCallback(e=>{const t=m.find(i=>i.name===e);t&&(cs(t.name),X(t.name),U(t.prompt),v(null))},[m]),Rs=a.useCallback(async e=>{if(!(!h||u)){R(e),v(null);try{await ns(e),p===e&&F()}catch{v(l("skills.snippetsDeleteError","The snippet could not be deleted. Refresh and try again."))}finally{R(null)}}},[ns,p,F,u,h,l]);a.useEffect(()=>{L(),w("")},[L,w]);const As=a.useCallback(e=>{_s(e),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{Ps(e),x.current=null},300)},[]);a.useEffect(()=>()=>{x.current&&(clearTimeout(x.current),x.current=null)},[]),a.useEffect(()=>{w(E)},[E,w]);const zs=a.useCallback(e=>{let t=null;e.key==="ArrowLeft"||e.key==="ArrowRight"?t=r==="skills"?"snippets":"skills":e.key==="Home"?t="skills":e.key==="End"&&(t="snippets"),t&&(e.preventDefault(),O(t),(t==="skills"?ls:is).current?.focus())},[r]),Ms=a.useCallback(async(e,t)=>{const i=!t;T(n=>n.map(o=>o.id===e?{...o,toggling:!0}:o));try{await Us(e,i,d),T(n=>n.map(o=>o.id===e?{...o,enabled:i,toggling:!1}:o)),k(l(`skills.${i?"enabled":"disabled"}`,i?"Skill enabled":"Skill disabled"),"success")}catch(n){T(V=>V.map(Y=>Y.id===e?{...Y,toggling:!1}:Y));const o=n instanceof Error?n.message:l("skills.toggleError","Failed to toggle skill");k(l("skills.toggleFailed","Failed to toggle skill: {{message}}",{message:o}),"error")}},[d,k]),Is=a.useCallback(async e=>{const t=e.repo?.trim();if(!(!t||B===e.id)){es(e.id);try{await Ws(t,e.slug||e.name,d),k(l("skills.installSuccess","Installed {{name}}",{name:e.name}),"success"),await Promise.all([L(),w(E)])}catch(i){const n=i instanceof Error?i.message:l("skills.installError","Failed to install skill");k(l("skills.installFailed","Failed to install {{name}}: {{message}}",{name:e.name,message:n}),"error")}finally{es(i=>i===e.id?null:i)}}},[k,E,B,w,L,d]),H=a.useCallback(async e=>{ds(!0),M(null),z(null),_(null),j(null),S(null);try{const t=await Ys(e,d);z(t)}catch(t){const i=t instanceof Error?t.message:l("skills.loadContentError","Failed to load skill content");M(i)}finally{ds(!1)}},[d]),hs=a.useCallback((e,t)=>{if(!(t&&t.target.closest(".skills-view-item-toggle"))){if(c===e){A(null),z(null),M(null),_(null),j(null),S(null);return}A(e),H(e)}},[c,H]),Hs=a.useCallback(e=>{c!==e&&A(e),H(e)},[H,c]),vs=a.useCallback(async(e,t)=>{_(t),j(null),S(null),W(!0);try{const i=await Zs(e,t,d);j(i)}catch(i){const n=i instanceof Error?i.message:l("skills.loadFileError","Failed to load file");S(n)}finally{W(!1)}},[d]),Vs=a.useCallback(()=>{_(null),j(null),S(null),W(!1)},[]),bs=a.useCallback(()=>{A(null),z(null),M(null),_(null),j(null),S(null)},[]),Ks=a.useMemo(()=>b.find(e=>e.id===c)??null,[b,c]),gs=()=>!y||y.files.length===0?null:s.jsxs("div",{className:"skills-view-detail-files","data-testid":"skill-files",children:[s.jsxs("span",{className:"skills-view-detail-files-label",children:[l("skills.filesLabel","Files"),":"]}),y.files.map(e=>{if(e.type==="directory")return s.jsxs("span",{className:"badge badge--sm skills-view-detail-file--dir",children:[e.name,"/"]},e.relativePath);const t=I===e.relativePath;return s.jsx("button",{type:"button","data-testid":"skill-file-item",className:`badge badge--sm skills-view-detail-file${t?" skills-view-detail-file--active":""}`,onClick:()=>c&&void vs(c,e.relativePath),"aria-pressed":t,"aria-label":l("skills.viewFile","View {{name}}",{name:e.name}),children:e.name},e.relativePath)})]}),$s=()=>c?Ls?s.jsxs("div",{className:"skills-view-detail-loading",children:[s.jsx(P,{size:16,className:"spin"}),l("skills.loadingContent","Loading skill content...")]}):ps?s.jsxs("div",{className:"skills-view-detail-error",children:[s.jsx(js,{size:14}),s.jsx("span",{children:ps}),s.jsx("button",{className:"btn btn-sm",onClick:()=>Hs(c),children:l("common.retry","Retry")})]}):y?I!==null?s.jsxs("div",{className:"skills-view-file-viewer","data-testid":"skill-file-viewer",children:[s.jsxs("div",{className:"skills-view-file-viewer-bar",children:[s.jsxs("button",{type:"button",className:"btn btn-sm skills-view-file-back",onClick:Vs,"data-testid":"skill-file-back","aria-label":l("skills.backToSkillMd","Back to SKILL.md"),children:[s.jsx(Ns,{size:14}),l("skills.backToSkillMd","Back to SKILL.md")]}),s.jsx("span",{className:"skills-view-file-viewer-name",children:I})]}),Fs?s.jsxs("div",{className:"skills-view-detail-loading",children:[s.jsx(P,{size:16,className:"spin"}),l("skills.loadingFile","Loading file...")]}):ms?s.jsxs("div",{className:"skills-view-detail-error",children:[s.jsx(js,{size:14}),s.jsx("span",{children:ms}),s.jsx("button",{className:"btn btn-sm",onClick:()=>c&&void vs(c,I),children:l("common.retry","Retry")})]}):N&&!N.isText?s.jsx("div",{className:"skills-view-detail-empty",children:l("skills.fileNotPreviewable","This file cannot be previewed.")}):N?re(N.relativePath)?s.jsx(Ss,{content:N.content||l("skills.emptyFile","(Empty file)"),className:"skills-view-detail-markdown",testId:"skills-view-detail-markdown"}):s.jsx("pre",{className:"skills-view-detail-content",children:N.content||l("skills.emptyFile","(Empty file)")}):null,gs()]}):s.jsxs(s.Fragment,{children:[s.jsx(Ss,{content:y.skillMd||l("skills.noSkillMd","(No SKILL.md found)"),className:"skills-view-detail-markdown",testId:"skills-view-detail-markdown"}),gs()]}):null:s.jsx("div",{className:"skills-view-detail-placeholder","data-testid":"skills-detail-empty",children:l("skills.selectASkill","Select a skill to view its details")});return s.jsxs("div",{className:"skills-view","data-testid":"skills-view","data-selected":c?"true":"false",children:[s.jsx(qs,{icon:Gs,title:l("skills.title","Skills & Snippets"),actions:s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"skills-view-count","aria-label":r==="skills"?l("skills.discoveredCount","{{count}} discovered skills",{count:b.length}):l("skills.snippetsCount","{{count}} saved",{count:m.length}),children:r==="skills"?`${b.length} ${l("skills.discovered","discovered")}`:l("skills.snippetsCount","{{count}} saved",{count:m.length})}),s.jsx("button",{className:"btn-icon skills-view-close touch-target",onClick:D,"aria-label":l("skills.closeView","Close Skills & Snippets view"),children:s.jsx(fs,{size:16})}),s.jsxs("button",{className:"btn btn-sm",onClick:()=>void(r==="skills"?L():rs()),disabled:r==="skills"?K:Q,"aria-label":r==="skills"?l("skills.refreshSkillsLabel","Refresh skills"):l("skills.refreshSnippetsLabel","Refresh snippets"),children:[s.jsx(Js,{size:14,className:(r==="skills"?K:Q)?"spin":""}),l("common.refresh","Refresh")]})]})}),s.jsxs("div",{className:"skills-view-tabs",role:"tablist","aria-label":l("skills.tabsLabel","Skills and snippets sections"),onKeyDown:zs,children:[s.jsxs("button",{ref:ls,type:"button",role:"tab",id:"skills-tab-skills","data-testid":"skills-tab-skills","aria-selected":r==="skills","aria-controls":"skills-panel-skills",tabIndex:r==="skills"?0:-1,className:`skills-view-tab${r==="skills"?" skills-view-tab--active":""}`,onClick:()=>O("skills"),children:[l("skills.tabSkills","Skills"),s.jsx("span",{className:"skills-view-tab-count",children:b.length})]}),s.jsxs("button",{ref:is,type:"button",role:"tab",id:"skills-tab-snippets","data-testid":"skills-tab-snippets","aria-selected":r==="snippets","aria-controls":"skills-panel-snippets",tabIndex:r==="snippets"?0:-1,className:`skills-view-tab${r==="snippets"?" skills-view-tab--active":""}`,onClick:()=>O("snippets"),children:[l("skills.tabSnippets","Snippets"),s.jsx("span",{className:"skills-view-tab-count",children:m.length})]})]}),s.jsxs("div",{className:"skills-view-body",role:"tabpanel",id:"skills-panel-skills","aria-labelledby":"skills-tab-skills",tabIndex:0,"data-testid":"skills-panel-skills",hidden:r!=="skills",children:[s.jsx("div",{className:"skills-view__list","data-testid":"skills-list",children:s.jsxs("div",{className:"skills-view-content",children:[s.jsx("p",{className:"skills-view-section-description",children:l("skills.skillsDescription","Browse, enable, and install skills available to this project.")}),s.jsx("div",{className:"skills-view-search",children:s.jsx("input",{type:"text",className:"form-input",placeholder:l("skills.searchPlaceholder","Search skills..."),value:C,onChange:e=>As(e.target.value),"aria-label":l("skills.searchLabel","Search skills")})}),s.jsxs("section",{className:"skills-view-section","aria-labelledby":"discovered-skills-title",children:[s.jsx("h3",{id:"discovered-skills-title",className:"skills-view-section-title",children:l("skills.discoveredSection","Discovered Skills")}),K?s.jsxs("div",{className:"skills-view-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.loadingDiscovered","Loading discovered skills...")]}):b.length===0?s.jsx("div",{className:"skills-view-empty",children:s.jsx("p",{children:l("skills.noDiscovered","No skills discovered in this project.")})}):ks.length===0?s.jsx("div",{className:"skills-view-empty",children:s.jsx("p",{children:l("skills.noMatchingDiscovered","No discovered skills match your search.")})}):s.jsx("div",{className:"skills-view-list",children:ks.map(e=>{const t=c===e.id;return s.jsx("div",{children:s.jsxs("div",{className:`skills-view-item${t?" skills-view-item--selected":""}`,onClick:i=>hs(e.id,i),role:"button",tabIndex:0,onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),hs(e.id))},"aria-expanded":t,"aria-label":l("skills.viewDetails","View details for {{name}}",{name:e.name}),children:[s.jsxs("div",{className:"skills-view-item-info",children:[s.jsxs("span",{className:"skills-view-item-name",children:[t?s.jsx(se,{size:14}):s.jsx(ee,{size:14}),s.jsx("span",{className:"skills-view-item-name-text",children:e.name})]}),s.jsx("span",{className:"skills-view-item-path",children:e.relativePath}),s.jsx("span",{className:"skills-view-item-source",children:e.metadata.source})]}),s.jsxs("label",{className:"skills-view-item-toggle",onClick:i=>i.stopPropagation(),children:[s.jsx("input",{type:"checkbox",checked:e.enabled,disabled:e.toggling,onChange:()=>void Ms(e.id,e.enabled),"aria-label":l(`skills.${e.enabled?"disable":"enable"}Skill`,e.enabled?"Disable {{name}}":"Enable {{name}}",{name:e.name})}),s.jsx("span",{className:"skills-view-toggle-slider"})]})]})},e.id)})})]}),s.jsxs("section",{className:"skills-view-section","aria-labelledby":"catalog-title",children:[s.jsx("h3",{id:"catalog-title",className:"skills-view-section-title",children:l("skills.catalogSection","Skills Catalog")}),J?s.jsxs("div",{className:"skills-view-error",children:[s.jsx("p",{children:J}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void w(E),children:l("common.tryAgain","Try Again")})]}):Cs?s.jsxs("div",{className:"skills-view-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.loadingCatalog","Loading catalog...")]}):ss.length===0?s.jsx("div",{className:"skills-view-empty",children:C?s.jsx("p",{children:l("skills.noMatchingSearch","No skills match your search.")}):s.jsx("p",{children:l("skills.noCatalogAvailable","No skills available in the catalog.")})}):s.jsx("div",{className:"skills-view-grid",children:ss.map(e=>{const i=!!e.repo?.trim()&&!e.installation?.installed,n=B===e.id;return s.jsxs("div",{className:"skills-view-card",children:[s.jsxs("div",{className:"skills-view-card-header",children:[s.jsx("h4",{className:"skills-view-card-title",children:e.name}),e.installation?.installed?s.jsx("span",{className:"badge badge--sm",children:l("skills.installed","Installed")}):i?s.jsxs("button",{type:"button",className:"btn btn-sm skills-view-card-install",onClick:()=>void Is(e),disabled:n,"aria-label":l("skills.installSkill","Install {{name}}",{name:e.name}),children:[n?s.jsx(P,{size:14,className:"spin"}):null,n?l("skills.installing","Installing…"):l("skills.install","Install")]}):null]}),e.description&&s.jsx("p",{className:"skills-view-card-description",children:e.description}),e.tags&&e.tags.length>0&&s.jsx("div",{className:"skills-view-card-tags",children:e.tags.map(o=>s.jsx("span",{className:"badge badge--sm",children:o},o))}),e.installs!==void 0&&s.jsx("span",{className:"skills-view-card-installs",children:l("skills.installsCount","{{value}} installs",{value:e.installs.toLocaleString()})})]},e.id)})})]})]})}),s.jsxs("div",{className:"skills-view__detail","data-testid":"skill-detail",children:[s.jsxs("div",{className:"skills-view-detail-header",children:[s.jsx("button",{type:"button",className:"btn btn-sm btn-icon skills-view-detail-back",onClick:bs,"aria-label":l("skills.backToList","Back to skills"),title:l("skills.backToList","Back to skills"),"data-testid":"skills-detail-back",children:s.jsx(Ns,{size:14})}),s.jsx("span",{className:"skills-view-detail-title",children:Ks?.name??l("skills.detailTitle","Skill")}),s.jsxs("button",{className:"btn btn-sm skills-view-detail-close",onClick:bs,disabled:!c,"aria-label":l("skills.closeDetail","Close skill detail"),children:[s.jsx(fs,{size:14}),l("common.close","Close")]})]}),s.jsx("div",{className:"skills-view-detail-body",children:$s()})]})]}),s.jsx("div",{className:"skills-view-snippets-panel",role:"tabpanel",id:"skills-panel-snippets","aria-labelledby":"skills-tab-snippets",tabIndex:0,"data-testid":"skills-panel-snippets",hidden:r!=="snippets",children:s.jsxs("section",{className:"skills-view-section skills-view-snippets","aria-labelledby":"chat-snippets-title",children:[s.jsxs("div",{className:"skills-view-section-title skills-view-snippets__heading",children:[s.jsx("h3",{id:"chat-snippets-title",children:l("skills.snippetsTitle","Chat Snippets")}),s.jsx("span",{className:"skills-view-snippets__count",children:l("skills.snippetsCount","{{count}} saved",{count:m.length})})]}),s.jsx("p",{className:"skills-view-snippets__description",children:l("skills.snippetsDescription","Save reusable prompts, then type /name in any chat to insert one without sending it.")}),s.jsxs("div",{className:"skills-view-snippets__layout",children:[s.jsxs("form",{className:"skills-view-snippets__form",onSubmit:Ds,"aria-label":l("skills.snippetsFormLabel","Chat snippet editor"),children:[s.jsxs("label",{className:"skills-view-snippets__field",children:[s.jsx("span",{children:l("skills.snippetsNameLabel","Name")}),s.jsxs("div",{className:"skills-view-snippets__name-input",children:[s.jsx("span",{"aria-hidden":"true",children:"/"}),s.jsx("input",{type:"text",className:"form-input",value:f,onChange:e=>{X(e.target.value),v(null)},autoComplete:"off","aria-label":l("skills.snippetsNameLabel","Name"),"aria-describedby":"chat-snippet-name-help"})]}),s.jsx("span",{id:"chat-snippet-name-help",className:"skills-view-snippets__help",children:l("skills.snippetsNameHelp","Letters, numbers, underscores, or hyphens; up to 48 characters.")})]}),s.jsxs("label",{className:"skills-view-snippets__field",children:[s.jsx("span",{children:l("skills.snippetsPromptLabel","Prompt")}),s.jsx("textarea",{className:"form-input skills-view-snippets__prompt",value:g,"aria-label":l("skills.snippetsPromptLabel","Prompt"),onChange:e=>{U(e.target.value),v(null)},rows:4}),s.jsx("span",{className:"skills-view-snippets__help",children:l("skills.snippetsPromptHelp","{{count}} / {{max}} characters",{count:g.length,max:Z})})]}),os?s.jsx("p",{className:"skills-view-snippets__form-error",role:"alert",children:os}):null,s.jsxs("div",{className:"skills-view-snippets__form-actions",children:[s.jsxs("button",{type:"submit",className:"btn btn-sm",disabled:!h||u!==null,children:[u===(p??"create")?s.jsx(P,{size:14,className:"spin"}):s.jsx(le,{size:14}),u===(p??"create")?l("skills.snippetsSaving","Saving..."):p?l("skills.snippetsSaveChanges","Save changes"):l("skills.snippetsAdd","Add snippet")]}),p?s.jsx("button",{type:"button",className:"btn btn-sm",onClick:F,disabled:u!==null,children:l("common.cancel","Cancel")}):null]})]}),s.jsxs("div",{className:"skills-view-snippets__collection",children:[Q&&!h?s.jsxs("div",{className:"skills-view-loading","data-testid":"snippets-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.snippetsLoading","Loading snippets...")]}):null,Es?s.jsxs("div",{className:"skills-view-error skills-view-snippets__error",role:"alert",children:[s.jsx("p",{children:l("skills.snippetsLoadError","Snippets could not be refreshed. Your last loaded list is still shown.")}),s.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void rs(),children:l("common.retry","Retry")})]}):null,h&&m.length===0?s.jsxs("div",{className:"skills-view-empty skills-view-snippets__empty","data-testid":"snippets-empty",children:[s.jsx("p",{children:l("skills.snippetsEmpty","No snippets saved yet.")}),s.jsx("p",{children:l("skills.snippetsEmptyHint","Create one here, then type /name in any chat to insert it.")})]}):m.length>0?s.jsx("div",{className:"skills-view-snippets__list","data-testid":"snippets-list",children:m.map(e=>s.jsxs("article",{className:"skills-view-snippets__item",children:[s.jsxs("div",{className:"skills-view-snippets__item-content",children:[s.jsxs("code",{className:"skills-view-snippets__trigger",children:["/",e.name]}),s.jsx("p",{className:"skills-view-snippets__preview",children:e.prompt})]}),s.jsxs("div",{className:"skills-view-snippets__item-actions",children:[u===e.name?s.jsxs("span",{className:"skills-view-snippets__pending",children:[s.jsx(P,{size:14,className:"spin"}),l("skills.snippetsSaving","Saving...")]}):null,s.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>Ts(e.name),disabled:!h||u!==null,"aria-label":l("skills.snippetsEdit","Edit /{{name}}",{name:e.name}),children:s.jsx(ie,{size:14})}),s.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>void Rs(e.name),disabled:!h||u!==null,"aria-label":l("skills.snippetsDelete","Delete /{{name}}",{name:e.name}),children:s.jsx(ae,{size:14})})]})]},e.name))}):null]})]})]})})]})}export{ue as SkillsView};
1
+ import{r as a,j as s}from"./vendor-react-SZ_qB27O.js";import{u as Bs,f as Os,b as Qs,C as Xs,n as xs,d as Z,e as ws,t as Us,i as Ws,g as Ys,h as Zs,V as qs,Z as Gs,X as fs,R as Js,j as se,k as ee,L as P,A as Ns,P as le,l as ie,T as ae,m as js,M as Ss}from"./index-CiVIbypZ.js";import{u as te}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";const ne=new Set([".md",".markdown",".mdx"]);function re(d){const k=d.toLowerCase(),D=k.lastIndexOf(".");return D<0?!1:ne.has(k.slice(D))}function ue({projectId:d,addToast:k,onClose:D}){const{t:l}=te("app"),[b,T]=a.useState([]),[K,q]=a.useState(!0),[Cs,G]=a.useState(!1),[J,$]=a.useState(null),[ss,ys]=a.useState([]),[C,_s]=a.useState(""),[B,es]=a.useState(null),[r,O]=a.useState("skills"),ls=a.useRef(null),is=a.useRef(null),{snippets:m,loading:Q,error:Es,hasLoaded:h,createSnippet:as,updateSnippet:ts,deleteSnippet:ns,refresh:rs}=Bs(),[f,X]=a.useState(""),[g,U]=a.useState(""),[p,cs]=a.useState(null),[u,R]=a.useState(null),[os,v]=a.useState(null),[c,A]=a.useState(null),[y,z]=a.useState(null),[Ls,ds]=a.useState(!1),[ps,M]=a.useState(null),[I,_]=a.useState(null),[N,j]=a.useState(null),[Fs,W]=a.useState(!1),[ms,S]=a.useState(null),x=a.useRef(null),[E,Ps]=a.useState(""),ks=C.trim()?b.filter(e=>e.name.toLowerCase().includes(C.toLowerCase())||e.relativePath.toLowerCase().includes(C.toLowerCase())):b,L=a.useCallback(async()=>{q(!0);try{const e=await Os(d);T(e)}catch(e){const t=e instanceof Error?e.message:l("skills.loadDiscoveredError","Failed to load discovered skills");k(t,"error")}finally{q(!1)}},[d,k]),w=a.useCallback(async e=>{const t=i=>{if(!i||typeof i!="object")return!1;const n=i;if(typeof n.status=="number"&&n.status>=500)return!0;if(n.details&&typeof n.details=="object"){const V=n.details;if(typeof V.code=="string"&&V.code.startsWith("upstream_"))return!0}const o=i;return typeof o.error=="string"&&typeof o.code=="string"};G(!0),$(null);try{const i=await Qs(e,20,d);ys(i.entries)}catch(i){if(t(i))$(l("skills.catalogUnavailable","Catalog is temporarily unavailable. Please try again later."));else{const n=i instanceof Error?i.message:l("skills.loadCatalogError","Failed to load catalog");$(n)}}finally{G(!1)}},[d]),F=a.useCallback(()=>{X(""),U(""),cs(null),v(null)},[]),us=a.useCallback(()=>{const e=f.normalize("NFKC").trim().toLowerCase();if(Xs.includes(e))return l("skills.snippetsReservedName","This name is reserved for a chat command.");const t=xs(f);return t?g.trim().length===0?l("skills.snippetsPromptRequired","Enter a prompt for this snippet."):g.length>Z?l("skills.snippetsPromptTooLong","Prompts can contain at most {{count}} characters.",{count:Z}):m.some(i=>i.name===t&&i.name!==p)?l("skills.snippetsDuplicateName","A snippet with this name already exists."):!p&&m.length>=ws?l("skills.snippetsLimitReached","You can save up to {{count}} snippets.",{count:ws}):null:l("skills.snippetsInvalidName","Use 1–48 letters, numbers, underscores, or hyphens.")},[p,f,g,m,l]),Ds=a.useCallback(async e=>{if(e.preventDefault(),!h||u)return;const t=us();if(t){v(t);return}const i=xs(f);R(p??"create"),v(null);try{p?await ts(p,{name:i,prompt:g}):await as({name:i,prompt:g}),F()}catch{v(l("skills.snippetsSaveError","The snippet could not be saved. Refresh and try again."))}finally{R(null)}},[as,p,F,u,f,g,h,l,ts,us]),Ts=a.useCallback(e=>{const t=m.find(i=>i.name===e);t&&(cs(t.name),X(t.name),U(t.prompt),v(null))},[m]),Rs=a.useCallback(async e=>{if(!(!h||u)){R(e),v(null);try{await ns(e),p===e&&F()}catch{v(l("skills.snippetsDeleteError","The snippet could not be deleted. Refresh and try again."))}finally{R(null)}}},[ns,p,F,u,h,l]);a.useEffect(()=>{L(),w("")},[L,w]);const As=a.useCallback(e=>{_s(e),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{Ps(e),x.current=null},300)},[]);a.useEffect(()=>()=>{x.current&&(clearTimeout(x.current),x.current=null)},[]),a.useEffect(()=>{w(E)},[E,w]);const zs=a.useCallback(e=>{let t=null;e.key==="ArrowLeft"||e.key==="ArrowRight"?t=r==="skills"?"snippets":"skills":e.key==="Home"?t="skills":e.key==="End"&&(t="snippets"),t&&(e.preventDefault(),O(t),(t==="skills"?ls:is).current?.focus())},[r]),Ms=a.useCallback(async(e,t)=>{const i=!t;T(n=>n.map(o=>o.id===e?{...o,toggling:!0}:o));try{await Us(e,i,d),T(n=>n.map(o=>o.id===e?{...o,enabled:i,toggling:!1}:o)),k(l(`skills.${i?"enabled":"disabled"}`,i?"Skill enabled":"Skill disabled"),"success")}catch(n){T(V=>V.map(Y=>Y.id===e?{...Y,toggling:!1}:Y));const o=n instanceof Error?n.message:l("skills.toggleError","Failed to toggle skill");k(l("skills.toggleFailed","Failed to toggle skill: {{message}}",{message:o}),"error")}},[d,k]),Is=a.useCallback(async e=>{const t=e.repo?.trim();if(!(!t||B===e.id)){es(e.id);try{await Ws(t,e.slug||e.name,d),k(l("skills.installSuccess","Installed {{name}}",{name:e.name}),"success"),await Promise.all([L(),w(E)])}catch(i){const n=i instanceof Error?i.message:l("skills.installError","Failed to install skill");k(l("skills.installFailed","Failed to install {{name}}: {{message}}",{name:e.name,message:n}),"error")}finally{es(i=>i===e.id?null:i)}}},[k,E,B,w,L,d]),H=a.useCallback(async e=>{ds(!0),M(null),z(null),_(null),j(null),S(null);try{const t=await Ys(e,d);z(t)}catch(t){const i=t instanceof Error?t.message:l("skills.loadContentError","Failed to load skill content");M(i)}finally{ds(!1)}},[d]),hs=a.useCallback((e,t)=>{if(!(t&&t.target.closest(".skills-view-item-toggle"))){if(c===e){A(null),z(null),M(null),_(null),j(null),S(null);return}A(e),H(e)}},[c,H]),Hs=a.useCallback(e=>{c!==e&&A(e),H(e)},[H,c]),vs=a.useCallback(async(e,t)=>{_(t),j(null),S(null),W(!0);try{const i=await Zs(e,t,d);j(i)}catch(i){const n=i instanceof Error?i.message:l("skills.loadFileError","Failed to load file");S(n)}finally{W(!1)}},[d]),Vs=a.useCallback(()=>{_(null),j(null),S(null),W(!1)},[]),bs=a.useCallback(()=>{A(null),z(null),M(null),_(null),j(null),S(null)},[]),Ks=a.useMemo(()=>b.find(e=>e.id===c)??null,[b,c]),gs=()=>!y||y.files.length===0?null:s.jsxs("div",{className:"skills-view-detail-files","data-testid":"skill-files",children:[s.jsxs("span",{className:"skills-view-detail-files-label",children:[l("skills.filesLabel","Files"),":"]}),y.files.map(e=>{if(e.type==="directory")return s.jsxs("span",{className:"badge badge--sm skills-view-detail-file--dir",children:[e.name,"/"]},e.relativePath);const t=I===e.relativePath;return s.jsx("button",{type:"button","data-testid":"skill-file-item",className:`badge badge--sm skills-view-detail-file${t?" skills-view-detail-file--active":""}`,onClick:()=>c&&void vs(c,e.relativePath),"aria-pressed":t,"aria-label":l("skills.viewFile","View {{name}}",{name:e.name}),children:e.name},e.relativePath)})]}),$s=()=>c?Ls?s.jsxs("div",{className:"skills-view-detail-loading",children:[s.jsx(P,{size:16,className:"spin"}),l("skills.loadingContent","Loading skill content...")]}):ps?s.jsxs("div",{className:"skills-view-detail-error",children:[s.jsx(js,{size:14}),s.jsx("span",{children:ps}),s.jsx("button",{className:"btn btn-sm",onClick:()=>Hs(c),children:l("common.retry","Retry")})]}):y?I!==null?s.jsxs("div",{className:"skills-view-file-viewer","data-testid":"skill-file-viewer",children:[s.jsxs("div",{className:"skills-view-file-viewer-bar",children:[s.jsxs("button",{type:"button",className:"btn btn-sm skills-view-file-back",onClick:Vs,"data-testid":"skill-file-back","aria-label":l("skills.backToSkillMd","Back to SKILL.md"),children:[s.jsx(Ns,{size:14}),l("skills.backToSkillMd","Back to SKILL.md")]}),s.jsx("span",{className:"skills-view-file-viewer-name",children:I})]}),Fs?s.jsxs("div",{className:"skills-view-detail-loading",children:[s.jsx(P,{size:16,className:"spin"}),l("skills.loadingFile","Loading file...")]}):ms?s.jsxs("div",{className:"skills-view-detail-error",children:[s.jsx(js,{size:14}),s.jsx("span",{children:ms}),s.jsx("button",{className:"btn btn-sm",onClick:()=>c&&void vs(c,I),children:l("common.retry","Retry")})]}):N&&!N.isText?s.jsx("div",{className:"skills-view-detail-empty",children:l("skills.fileNotPreviewable","This file cannot be previewed.")}):N?re(N.relativePath)?s.jsx(Ss,{content:N.content||l("skills.emptyFile","(Empty file)"),className:"skills-view-detail-markdown",testId:"skills-view-detail-markdown"}):s.jsx("pre",{className:"skills-view-detail-content",children:N.content||l("skills.emptyFile","(Empty file)")}):null,gs()]}):s.jsxs(s.Fragment,{children:[s.jsx(Ss,{content:y.skillMd||l("skills.noSkillMd","(No SKILL.md found)"),className:"skills-view-detail-markdown",testId:"skills-view-detail-markdown"}),gs()]}):null:s.jsx("div",{className:"skills-view-detail-placeholder","data-testid":"skills-detail-empty",children:l("skills.selectASkill","Select a skill to view its details")});return s.jsxs("div",{className:"skills-view","data-testid":"skills-view","data-selected":c?"true":"false",children:[s.jsx(qs,{icon:Gs,title:l("skills.title","Skills & Snippets"),actions:s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"skills-view-count","aria-label":r==="skills"?l("skills.discoveredCount","{{count}} discovered skills",{count:b.length}):l("skills.snippetsCount","{{count}} saved",{count:m.length}),children:r==="skills"?`${b.length} ${l("skills.discovered","discovered")}`:l("skills.snippetsCount","{{count}} saved",{count:m.length})}),s.jsx("button",{className:"btn-icon skills-view-close touch-target",onClick:D,"aria-label":l("skills.closeView","Close Skills & Snippets view"),children:s.jsx(fs,{size:16})}),s.jsxs("button",{className:"btn btn-sm",onClick:()=>void(r==="skills"?L():rs()),disabled:r==="skills"?K:Q,"aria-label":r==="skills"?l("skills.refreshSkillsLabel","Refresh skills"):l("skills.refreshSnippetsLabel","Refresh snippets"),children:[s.jsx(Js,{size:14,className:(r==="skills"?K:Q)?"spin":""}),l("common.refresh","Refresh")]})]})}),s.jsxs("div",{className:"skills-view-tabs",role:"tablist","aria-label":l("skills.tabsLabel","Skills and snippets sections"),onKeyDown:zs,children:[s.jsxs("button",{ref:ls,type:"button",role:"tab",id:"skills-tab-skills","data-testid":"skills-tab-skills","aria-selected":r==="skills","aria-controls":"skills-panel-skills",tabIndex:r==="skills"?0:-1,className:`skills-view-tab${r==="skills"?" skills-view-tab--active":""}`,onClick:()=>O("skills"),children:[l("skills.tabSkills","Skills"),s.jsx("span",{className:"skills-view-tab-count",children:b.length})]}),s.jsxs("button",{ref:is,type:"button",role:"tab",id:"skills-tab-snippets","data-testid":"skills-tab-snippets","aria-selected":r==="snippets","aria-controls":"skills-panel-snippets",tabIndex:r==="snippets"?0:-1,className:`skills-view-tab${r==="snippets"?" skills-view-tab--active":""}`,onClick:()=>O("snippets"),children:[l("skills.tabSnippets","Snippets"),s.jsx("span",{className:"skills-view-tab-count",children:m.length})]})]}),s.jsxs("div",{className:"skills-view-body",role:"tabpanel",id:"skills-panel-skills","aria-labelledby":"skills-tab-skills",tabIndex:0,"data-testid":"skills-panel-skills",hidden:r!=="skills",children:[s.jsx("div",{className:"skills-view__list","data-testid":"skills-list",children:s.jsxs("div",{className:"skills-view-content",children:[s.jsx("p",{className:"skills-view-section-description",children:l("skills.skillsDescription","Browse, enable, and install skills available to this project.")}),s.jsx("div",{className:"skills-view-search",children:s.jsx("input",{type:"text",className:"form-input",placeholder:l("skills.searchPlaceholder","Search skills..."),value:C,onChange:e=>As(e.target.value),"aria-label":l("skills.searchLabel","Search skills")})}),s.jsxs("section",{className:"skills-view-section","aria-labelledby":"discovered-skills-title",children:[s.jsx("h3",{id:"discovered-skills-title",className:"skills-view-section-title",children:l("skills.discoveredSection","Discovered Skills")}),K?s.jsxs("div",{className:"skills-view-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.loadingDiscovered","Loading discovered skills...")]}):b.length===0?s.jsx("div",{className:"skills-view-empty",children:s.jsx("p",{children:l("skills.noDiscovered","No skills discovered in this project.")})}):ks.length===0?s.jsx("div",{className:"skills-view-empty",children:s.jsx("p",{children:l("skills.noMatchingDiscovered","No discovered skills match your search.")})}):s.jsx("div",{className:"skills-view-list",children:ks.map(e=>{const t=c===e.id;return s.jsx("div",{children:s.jsxs("div",{className:`skills-view-item${t?" skills-view-item--selected":""}`,onClick:i=>hs(e.id,i),role:"button",tabIndex:0,onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),hs(e.id))},"aria-expanded":t,"aria-label":l("skills.viewDetails","View details for {{name}}",{name:e.name}),children:[s.jsxs("div",{className:"skills-view-item-info",children:[s.jsxs("span",{className:"skills-view-item-name",children:[t?s.jsx(se,{size:14}):s.jsx(ee,{size:14}),s.jsx("span",{className:"skills-view-item-name-text",children:e.name})]}),s.jsx("span",{className:"skills-view-item-path",children:e.relativePath}),s.jsx("span",{className:"skills-view-item-source",children:e.metadata.source})]}),s.jsxs("label",{className:"skills-view-item-toggle",onClick:i=>i.stopPropagation(),children:[s.jsx("input",{type:"checkbox",checked:e.enabled,disabled:e.toggling,onChange:()=>void Ms(e.id,e.enabled),"aria-label":l(`skills.${e.enabled?"disable":"enable"}Skill`,e.enabled?"Disable {{name}}":"Enable {{name}}",{name:e.name})}),s.jsx("span",{className:"skills-view-toggle-slider"})]})]})},e.id)})})]}),s.jsxs("section",{className:"skills-view-section","aria-labelledby":"catalog-title",children:[s.jsx("h3",{id:"catalog-title",className:"skills-view-section-title",children:l("skills.catalogSection","Skills Catalog")}),J?s.jsxs("div",{className:"skills-view-error",children:[s.jsx("p",{children:J}),s.jsx("button",{className:"btn btn-sm",onClick:()=>void w(E),children:l("common.tryAgain","Try Again")})]}):Cs?s.jsxs("div",{className:"skills-view-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.loadingCatalog","Loading catalog...")]}):ss.length===0?s.jsx("div",{className:"skills-view-empty",children:C?s.jsx("p",{children:l("skills.noMatchingSearch","No skills match your search.")}):s.jsx("p",{children:l("skills.noCatalogAvailable","No skills available in the catalog.")})}):s.jsx("div",{className:"skills-view-grid",children:ss.map(e=>{const i=!!e.repo?.trim()&&!e.installation?.installed,n=B===e.id;return s.jsxs("div",{className:"skills-view-card",children:[s.jsxs("div",{className:"skills-view-card-header",children:[s.jsx("h4",{className:"skills-view-card-title",children:e.name}),e.installation?.installed?s.jsx("span",{className:"badge badge--sm",children:l("skills.installed","Installed")}):i?s.jsxs("button",{type:"button",className:"btn btn-sm skills-view-card-install",onClick:()=>void Is(e),disabled:n,"aria-label":l("skills.installSkill","Install {{name}}",{name:e.name}),children:[n?s.jsx(P,{size:14,className:"spin"}):null,n?l("skills.installing","Installing…"):l("skills.install","Install")]}):null]}),e.description&&s.jsx("p",{className:"skills-view-card-description",children:e.description}),e.tags&&e.tags.length>0&&s.jsx("div",{className:"skills-view-card-tags",children:e.tags.map(o=>s.jsx("span",{className:"badge badge--sm",children:o},o))}),e.installs!==void 0&&s.jsx("span",{className:"skills-view-card-installs",children:l("skills.installsCount","{{value}} installs",{value:e.installs.toLocaleString()})})]},e.id)})})]})]})}),s.jsxs("div",{className:"skills-view__detail","data-testid":"skill-detail",children:[s.jsxs("div",{className:"skills-view-detail-header",children:[s.jsx("button",{type:"button",className:"btn btn-sm btn-icon skills-view-detail-back",onClick:bs,"aria-label":l("skills.backToList","Back to skills"),title:l("skills.backToList","Back to skills"),"data-testid":"skills-detail-back",children:s.jsx(Ns,{size:14})}),s.jsx("span",{className:"skills-view-detail-title",children:Ks?.name??l("skills.detailTitle","Skill")}),s.jsxs("button",{className:"btn btn-sm skills-view-detail-close",onClick:bs,disabled:!c,"aria-label":l("skills.closeDetail","Close skill detail"),children:[s.jsx(fs,{size:14}),l("common.close","Close")]})]}),s.jsx("div",{className:"skills-view-detail-body",children:$s()})]})]}),s.jsx("div",{className:"skills-view-snippets-panel",role:"tabpanel",id:"skills-panel-snippets","aria-labelledby":"skills-tab-snippets",tabIndex:0,"data-testid":"skills-panel-snippets",hidden:r!=="snippets",children:s.jsxs("section",{className:"skills-view-section skills-view-snippets","aria-labelledby":"chat-snippets-title",children:[s.jsxs("div",{className:"skills-view-section-title skills-view-snippets__heading",children:[s.jsx("h3",{id:"chat-snippets-title",children:l("skills.snippetsTitle","Chat Snippets")}),s.jsx("span",{className:"skills-view-snippets__count",children:l("skills.snippetsCount","{{count}} saved",{count:m.length})})]}),s.jsx("p",{className:"skills-view-snippets__description",children:l("skills.snippetsDescription","Save reusable prompts, then type /name in any chat to insert one without sending it.")}),s.jsxs("div",{className:"skills-view-snippets__layout",children:[s.jsxs("form",{className:"skills-view-snippets__form",onSubmit:Ds,"aria-label":l("skills.snippetsFormLabel","Chat snippet editor"),children:[s.jsxs("label",{className:"skills-view-snippets__field",children:[s.jsx("span",{children:l("skills.snippetsNameLabel","Name")}),s.jsxs("div",{className:"skills-view-snippets__name-input",children:[s.jsx("span",{"aria-hidden":"true",children:"/"}),s.jsx("input",{type:"text",className:"form-input",value:f,onChange:e=>{X(e.target.value),v(null)},autoComplete:"off","aria-label":l("skills.snippetsNameLabel","Name"),"aria-describedby":"chat-snippet-name-help"})]}),s.jsx("span",{id:"chat-snippet-name-help",className:"skills-view-snippets__help",children:l("skills.snippetsNameHelp","Letters, numbers, underscores, or hyphens; up to 48 characters.")})]}),s.jsxs("label",{className:"skills-view-snippets__field",children:[s.jsx("span",{children:l("skills.snippetsPromptLabel","Prompt")}),s.jsx("textarea",{className:"form-input skills-view-snippets__prompt",value:g,"aria-label":l("skills.snippetsPromptLabel","Prompt"),onChange:e=>{U(e.target.value),v(null)},rows:4}),s.jsx("span",{className:"skills-view-snippets__help",children:l("skills.snippetsPromptHelp","{{count}} / {{max}} characters",{count:g.length,max:Z})})]}),os?s.jsx("p",{className:"skills-view-snippets__form-error",role:"alert",children:os}):null,s.jsxs("div",{className:"skills-view-snippets__form-actions",children:[s.jsxs("button",{type:"submit",className:"btn btn-sm",disabled:!h||u!==null,children:[u===(p??"create")?s.jsx(P,{size:14,className:"spin"}):s.jsx(le,{size:14}),u===(p??"create")?l("skills.snippetsSaving","Saving..."):p?l("skills.snippetsSaveChanges","Save changes"):l("skills.snippetsAdd","Add snippet")]}),p?s.jsx("button",{type:"button",className:"btn btn-sm",onClick:F,disabled:u!==null,children:l("common.cancel","Cancel")}):null]})]}),s.jsxs("div",{className:"skills-view-snippets__collection",children:[Q&&!h?s.jsxs("div",{className:"skills-view-loading","data-testid":"snippets-loading",children:[s.jsx("span",{className:"spinner"}),l("skills.snippetsLoading","Loading snippets...")]}):null,Es?s.jsxs("div",{className:"skills-view-error skills-view-snippets__error",role:"alert",children:[s.jsx("p",{children:l("skills.snippetsLoadError","Snippets could not be refreshed. Your last loaded list is still shown.")}),s.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void rs(),children:l("common.retry","Retry")})]}):null,h&&m.length===0?s.jsxs("div",{className:"skills-view-empty skills-view-snippets__empty","data-testid":"snippets-empty",children:[s.jsx("p",{children:l("skills.snippetsEmpty","No snippets saved yet.")}),s.jsx("p",{children:l("skills.snippetsEmptyHint","Create one here, then type /name in any chat to insert it.")})]}):m.length>0?s.jsx("div",{className:"skills-view-snippets__list","data-testid":"snippets-list",children:m.map(e=>s.jsxs("article",{className:"skills-view-snippets__item",children:[s.jsxs("div",{className:"skills-view-snippets__item-content",children:[s.jsxs("code",{className:"skills-view-snippets__trigger",children:["/",e.name]}),s.jsx("p",{className:"skills-view-snippets__preview",children:e.prompt})]}),s.jsxs("div",{className:"skills-view-snippets__item-actions",children:[u===e.name?s.jsxs("span",{className:"skills-view-snippets__pending",children:[s.jsx(P,{size:14,className:"spin"}),l("skills.snippetsSaving","Saving...")]}):null,s.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>Ts(e.name),disabled:!h||u!==null,"aria-label":l("skills.snippetsEdit","Edit /{{name}}",{name:e.name}),children:s.jsx(ie,{size:14})}),s.jsx("button",{type:"button",className:"btn-icon touch-target",onClick:()=>void Rs(e.name),disabled:!h||u!==null,"aria-label":l("skills.snippetsDelete","Delete /{{name}}",{name:e.name}),children:s.jsx(ae,{size:14})})]})]},e.name))}):null]})]})]})})]})}export{ue as SkillsView};
@@ -1,4 +1,4 @@
1
- import{r as a,j as e,b as ei}from"./vendor-react-SZ_qB27O.js";import{R as Bn,d as Gn,B as qn,e as ti,C as Vn,P as oi,g as si,f as ni,E as ai,H as it,h as lt,u as Hn,j as ii,k as li,l as ri,m as di,M as ci}from"./vendor-reactflow-BlIeoTu4.js";import{c as ui,dQ as pi,dR as Jt,dS as Vo,dT as ke,dU as Kn,dV as fi,dW as mi,dX as oo,dY as Et,dZ as At,d_ as rt,d$ as Pt,e0 as Ye,e1 as Un,e2 as Yn,e3 as Xn,e4 as Jn,e5 as Qn,e6 as wi,P as je,e7 as Zn,di as Jo,e8 as ea,e9 as ta,bV as Qo,ea as oa,eb as Zo,ec as Ft,ed as sa,ee as na,ef as aa,aY as ia,bc as es,eg as la,aZ as ts,eh as hi,bP as gi,aW as Te,ei as ki,ej as ra,K as da,X as os,az as bi,ek as ca,bF as le,bM as Qt,bZ as xi,a0 as vi,j as Me,T as Se,el as Ni,cl as Zt,em as Vs,cI as ua,en as eo,aA as ji,k as We,aU as yi,cq as Ho,l as Ci,eo as Si,ep as Ii,bW as Hs,eq as Ei,er as Ai,dC as Pi,es as Ks,a1 as Fi,et as Ko,eu as Mi,ev as Ri,ew as Oi,ex as Li,ey as Ti,ez as Di,bb as zi,eA as $i,eB as Wi,eC as Us,eD as Ys,eE as Xs,eF as Js,eG as Qs,eH as _i,eI as Bi,eJ as Gi,eK as qi,eL as Zs,eM as Vi,eN as en,eO as tn,eP as on,eQ as Hi,eR as Mo,eS as Ki,eT as sn,eU as nn,eV as Ui,f as an,aQ as Yi,d8 as ln,eW as Ro,bO as rn,L as Fe,eX as Xe,eY as Oo,eZ as Lo,aL as Xt,S as _e,e_ as Xi,d9 as dn,e$ as cn,f0 as Ji,df as Qi,f1 as Zi,f2 as el}from"./index-QU8sENvc.js";import{u as be}from"./vendor-i18n-Duky4gdQ.js";import{P as To}from"./puzzle-D4y4g-nb.js";import{S as tl,a as ol,b as sl,c as un,d as nl,e as al}from"./SettingsTextareaRow-B7FIDTtF.js";import{U as il}from"./upload-CzJ1o8Px.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-xterm-BNq00GSj.js";/**
1
+ import{r as a,j as e,b as ei}from"./vendor-react-SZ_qB27O.js";import{R as Bn,d as Gn,B as qn,e as ti,C as Vn,P as oi,g as si,f as ni,E as ai,H as it,h as lt,u as Hn,j as ii,k as li,l as ri,m as di,M as ci}from"./vendor-reactflow-BlIeoTu4.js";import{c as ui,dN as pi,dO as Jt,dP as Vo,dQ as ke,dR as Kn,dS as fi,dT as mi,dU as oo,dV as Et,dW as At,dX as rt,dY as Pt,dZ as Ye,d_ as Un,d$ as Yn,e0 as Xn,e1 as Jn,e2 as Qn,e3 as wi,P as je,e4 as Zn,df as Jo,e5 as ea,e6 as ta,c9 as Qo,e7 as oa,e8 as Zo,e9 as Ft,ea as sa,eb as na,ec as aa,aY as ia,bc as es,ed as la,aZ as ts,ee as hi,c4 as gi,aW as Te,ef as ki,eg as ra,K as da,X as os,az as bi,eh as ca,bW as le,c1 as Qt,cd as xi,a0 as vi,j as Me,T as Se,ei as Ni,bE as Zt,ej as Vs,bx as ua,ek as eo,aA as ji,k as We,aU as yi,bI as Ho,l as Ci,el as Si,em as Ii,ca as Hs,en as Ei,eo as Ai,dz as Pi,ep as Ks,a1 as Fi,eq as Ko,er as Mi,es as Ri,et as Oi,eu as Li,ev as Ti,ew as Di,bb as zi,ex as $i,ey as Wi,ez as Us,eA as Ys,eB as Xs,eC as Js,eD as Qs,eE as _i,eF as Bi,eG as Gi,eH as qi,eI as Zs,eJ as Vi,eK as en,eL as tn,eM as on,eN as Hi,eO as Mo,eP as Ki,eQ as sn,eR as nn,eS as Ui,f as an,aQ as Yi,d5 as ln,eT as Ro,c3 as rn,L as Fe,eU as Xe,eV as Oo,eW as Lo,aL as Xt,S as _e,eX as Xi,d6 as dn,eY as cn,eZ as Ji,dc as Qi,e_ as Zi,e$ as el}from"./index-CiVIbypZ.js";import{u as be}from"./vendor-i18n-Duky4gdQ.js";import{P as To}from"./puzzle-DLP4jrVO.js";import{S as tl,a as ol,b as sl,c as un,d as nl,e as al}from"./SettingsTextareaRow-B_iNwevV.js";import{U as il}from"./upload-C1hBXwxT.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-xterm-BNq00GSj.js";/**
2
2
  * @license lucide-react v1.7.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{a as n,w as o}from"./index-QU8sENvc.js";function c(){return n("/agents/companies")}function i(e,t){return n(o("/agents/generate/start",t),{method:"POST",body:JSON.stringify({role:e})})}function u(e,t){return n(o("/agents/generate/spec",t),{method:"POST",body:JSON.stringify({sessionId:e})})}function g(e,t){return n(o(`/agents/generate/${encodeURIComponent(e)}`,t),{method:"DELETE"})}function p(e){return n(o("/backups",e))}function f(e){return n(o("/backups",e),{method:"POST"})}function m(e,t){const r=o("/settings/export",t),s=`${r}${r.includes("?")?"&":"?"}scope=${encodeURIComponent(e)}`;return n(s)}function d(e,t,r){return n(o("/settings/import",r),{method:"POST",body:JSON.stringify({data:e,scope:t?.scope??"both",merge:t?.merge??!0})})}export{p as a,f as b,g as c,m as e,c as f,u as g,d as i,i as s};
1
+ import{a as n,w as o}from"./index-CiVIbypZ.js";function c(){return n("/agents/companies")}function i(e,t){return n(o("/agents/generate/start",t),{method:"POST",body:JSON.stringify({role:e})})}function u(e,t){return n(o("/agents/generate/spec",t),{method:"POST",body:JSON.stringify({sessionId:e})})}function g(e,t){return n(o(`/agents/generate/${encodeURIComponent(e)}`,t),{method:"DELETE"})}function p(e){return n(o("/backups",e))}function f(e){return n(o("/backups",e),{method:"POST"})}function m(e,t){const r=o("/settings/export",t),s=`${r}${r.includes("?")?"&":"?"}scope=${encodeURIComponent(e)}`;return n(s)}function d(e,t,r){return n(o("/settings/import",r),{method:"POST",body:JSON.stringify({data:e,scope:t?.scope??"both",merge:t?.merge??!0})})}export{p as a,f as b,g as c,m as e,c as f,u as g,d as i,i as s};
@@ -1 +1 @@
1
- import{a as p,aS as m}from"./index-QU8sENvc.js";async function M(t={},e){const n=new URLSearchParams(Object.entries(t).filter(r=>r[1]!==void 0).map(([r,o])=>[r,String(o)]));return p(`/agent-activity${n.size?`?${n}`:""}`,e)}const l=3e4,v=1e4,g={"task:started":"in-flight","task:handed-off":"delegation","task:completed":"terminal","agent:state-changed":"ignored","workflow:gate-passed":"terminal","workflow:gate-failed":"terminal","approval:requested":"in-flight"},O=new Set(["agent:state-changed"]);function L(t){return O.has(t)}function s(t){if(typeof t!="string")return null;const e=Date.parse(t);return Number.isFinite(e)?e:null}function y(t,e){const n=s(t.occurredAt),r=s(e.occurredAt);return n!==null&&r!==null&&n!==r?r-n:n===null&&r!==null?1:n!==null&&r===null?-1:t.eventId<e.eventId?1:t.eventId>e.eventId?-1:0}function f(t,e){return`${t}\0${e}`}function D(t,e){const n=s(t.occurredAt);return{...t,activityWindowOccurredAt:n===null?void 0:Math.min(n,e)}}function A(t,e){const n=s(t.occurredAt);if(n===null)return null;const r=typeof t.activityWindowOccurredAt=="number"?t.activityWindowOccurredAt:Math.min(n,e);return Math.max(0,e-r)}function T(t,e){return m(t,1,e).label==="Unresponsive"}function G(t,e,n,r){if(t.state==="error"||(r?.label??(T(t,n)?"Unresponsive":""))==="Unresponsive")return"error";if(t.state==="running")return"active";if(!e)return"unknown";const o=g[e.type],i=A(e,n);return i===null?"unknown":o==="terminal"?"idle":o==="in-flight"?i<l?"active":"idle":i>=l?"idle":"unknown"}function h(t,e){return e.fromAgentId===t.parentId&&e.toAgentId===t.childId?"down":e.fromAgentId===t.childId&&e.toAgentId===t.parentId?"up":null}function C(t,e,n){const r=new Map,o=new Map;for(const i of e){if(g[i.type]!=="delegation")continue;const a=A(i,n);if(!(a===null||a>=v))for(const c of t){if(!h(c,i))continue;const u=f(c.parentId,c.childId),d=o.get(u);(!d||y(i,d)<0)&&o.set(u,i)}}for(const i of t){const a=f(i.parentId,i.childId),c=o.get(a);r.set(a,c?h(i,c):null)}return r}const k="fn-agent-org-chart-layout";function P(t){return t==="auto"||t==="horizontal"||t==="vertical"}const W=768,_={nodeWidth:220,siblingGap:24,rootGap:24,chartPadding:24},E={nodeWidth:160,siblingGap:8,rootGap:8,chartPadding:8};function I(t){return t.children.length===0?1:t.children.reduce((e,n)=>e+I(n),0)}function S(t){return t<=W?E:_}function w(t,e){const n=I(t);return n*e.nodeWidth+Math.max(0,n-1)*e.siblingGap}function N(t,e=Number.POSITIVE_INFINITY){const n=S(e);if(t.length===0)return n.nodeWidth;const o=t.map(a=>w(a,n)).reduce((a,c)=>a+c,0),i=Math.max(0,t.length-1)*n.rootGap;return o+i+n.chartPadding*2}function F(t){const e=t.preference??"auto";if(e!=="auto")return e;const n=Number.isFinite(t.availableWidth)&&t.availableWidth>0?t.availableWidth:0;return n===0||t.tree.length<=1?"horizontal":N(t.tree,n)>n?"vertical":"horizontal"}export{l as A,v as F,k as O,A as a,P as b,y as c,G as d,C as e,M as g,L as i,f as o,s as p,F as r,D as w};
1
+ import{a as p,aS as m}from"./index-CiVIbypZ.js";async function M(t={},e){const n=new URLSearchParams(Object.entries(t).filter(r=>r[1]!==void 0).map(([r,o])=>[r,String(o)]));return p(`/agent-activity${n.size?`?${n}`:""}`,e)}const l=3e4,v=1e4,g={"task:started":"in-flight","task:handed-off":"delegation","task:completed":"terminal","agent:state-changed":"ignored","workflow:gate-passed":"terminal","workflow:gate-failed":"terminal","approval:requested":"in-flight"},O=new Set(["agent:state-changed"]);function L(t){return O.has(t)}function s(t){if(typeof t!="string")return null;const e=Date.parse(t);return Number.isFinite(e)?e:null}function y(t,e){const n=s(t.occurredAt),r=s(e.occurredAt);return n!==null&&r!==null&&n!==r?r-n:n===null&&r!==null?1:n!==null&&r===null?-1:t.eventId<e.eventId?1:t.eventId>e.eventId?-1:0}function f(t,e){return`${t}\0${e}`}function D(t,e){const n=s(t.occurredAt);return{...t,activityWindowOccurredAt:n===null?void 0:Math.min(n,e)}}function A(t,e){const n=s(t.occurredAt);if(n===null)return null;const r=typeof t.activityWindowOccurredAt=="number"?t.activityWindowOccurredAt:Math.min(n,e);return Math.max(0,e-r)}function T(t,e){return m(t,1,e).label==="Unresponsive"}function G(t,e,n,r){if(t.state==="error"||(r?.label??(T(t,n)?"Unresponsive":""))==="Unresponsive")return"error";if(t.state==="running")return"active";if(!e)return"unknown";const o=g[e.type],i=A(e,n);return i===null?"unknown":o==="terminal"?"idle":o==="in-flight"?i<l?"active":"idle":i>=l?"idle":"unknown"}function h(t,e){return e.fromAgentId===t.parentId&&e.toAgentId===t.childId?"down":e.fromAgentId===t.childId&&e.toAgentId===t.parentId?"up":null}function C(t,e,n){const r=new Map,o=new Map;for(const i of e){if(g[i.type]!=="delegation")continue;const a=A(i,n);if(!(a===null||a>=v))for(const c of t){if(!h(c,i))continue;const u=f(c.parentId,c.childId),d=o.get(u);(!d||y(i,d)<0)&&o.set(u,i)}}for(const i of t){const a=f(i.parentId,i.childId),c=o.get(a);r.set(a,c?h(i,c):null)}return r}const k="fn-agent-org-chart-layout";function P(t){return t==="auto"||t==="horizontal"||t==="vertical"}const W=768,_={nodeWidth:220,siblingGap:24,rootGap:24,chartPadding:24},E={nodeWidth:160,siblingGap:8,rootGap:8,chartPadding:8};function I(t){return t.children.length===0?1:t.children.reduce((e,n)=>e+I(n),0)}function S(t){return t<=W?E:_}function w(t,e){const n=I(t);return n*e.nodeWidth+Math.max(0,n-1)*e.siblingGap}function N(t,e=Number.POSITIVE_INFINITY){const n=S(e);if(t.length===0)return n.nodeWidth;const o=t.map(a=>w(a,n)).reduce((a,c)=>a+c,0),i=Math.max(0,t.length-1)*n.rootGap;return o+i+n.chartPadding*2}function F(t){const e=t.preference??"auto";if(e!=="auto")return e;const n=Number.isFinite(t.availableWidth)&&t.availableWidth>0?t.availableWidth:0;return n===0||t.tree.length<=1?"horizontal":N(t.tree,n)>n?"vertical":"horizontal"}export{l as A,v as F,k as O,A as a,P as b,y as c,G as d,C as e,M as g,L as i,f as o,s as p,F as r,D as w};