@runfusion/fusion 0.76.0-beta.3 → 0.77.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +13802 -9587
- package/dist/child-process-worker.js +6472 -4028
- package/dist/client/.vite/manifest.json +280 -269
- package/dist/client/assets/AgentDetailView-0G9qFd4j.js +13 -0
- package/dist/client/assets/{AgentDetailView-Cc3ATg8a.css → AgentDetailView-jzgy1BAS.css} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor--u9jyUf2.js → AgentPermissionPolicyEditor-BM68g7wo.js} +1 -1
- package/dist/client/assets/AgentsView-DkOUZWw4.js +24 -0
- package/dist/client/assets/ChatView-BPSm2JIH.js +13 -0
- package/dist/client/assets/{CommandCenter-CSRYoveB.js → CommandCenter-DxRSFWNc.js} +26 -26
- package/dist/client/assets/CommandCenter-ilm-DbtI.css +1 -0
- package/dist/client/assets/{DevServerView-B9So_oYx.js → DevServerView-DO-bqJFE.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BhyDL_2m.js → DirectoryPicker-Cp2gddTE.js} +1 -1
- package/dist/client/assets/DocumentsView-D0E-3G96.js +1 -0
- package/dist/client/assets/EvalsView-BoFVq5hw.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-CS1Sdogm.js +1 -0
- package/dist/client/assets/{GoalsView-B6X5_0Ve.js → GoalsView-sybf7JY4.js} +1 -1
- package/dist/client/assets/InsightsView-nHa7aShn.js +11 -0
- package/dist/client/assets/{MemoryView-DN_3IFmA.css → MemoryView-CdpQqPJJ.css} +1 -1
- package/dist/client/assets/MemoryView-D0IG44za.js +3 -0
- package/dist/client/assets/{PiExtensionsManager-B8At6fO8.js → PiExtensionsManager-CU76weJe.js} +2 -2
- package/dist/client/assets/PluginManager-DyT8XbcG.js +1 -0
- package/dist/client/assets/{PullRequestView-B1hZFrWo.js → PullRequestView-CnxWUSen.js} +2 -2
- package/dist/client/assets/{ReportModal-C46V_zEa.js → ReportModal-CMrmMQjD.js} +5 -5
- package/dist/client/assets/{ResearchView-D8G85BYN.js → ResearchView-BTytQSgy.js} +2 -2
- package/dist/client/assets/{SecretsView-CTri9LRK.js → SecretsView-BuSH5J87.js} +1 -1
- package/dist/client/assets/SessionTerminal-D04kYRrT.js +2 -0
- package/dist/client/assets/SettingsModal-C0FY8MPW.css +1 -0
- package/dist/client/assets/{SettingsModal-rUQcSTJp.js → SettingsModal-Dm-ngbRr.js} +1 -1
- package/dist/client/assets/{SettingsModal-DmfMotcd.css → SettingsModal-Ds0Yj47X.css} +1 -1
- package/dist/client/assets/SettingsModal-xSLhH7Tr.js +21 -0
- package/dist/client/assets/{SettingsTextareaRow-BirlBcem.js → SettingsTextareaRow-CHPgocEp.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-xnCBM9EL.js → SetupWizardModal-y88aXNIQ.js} +2 -2
- package/dist/client/assets/{SkillsView-O5U0ep50.js → SkillsView-CYyQW1Hv.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-BX4d2qqF.js → WorkflowNodeEditor-hYeoz1X8.js} +3 -3
- package/dist/client/assets/{agent-import-generation-DnqVkPkz.js → agent-import-generation-CjiYXzCr.js} +1 -1
- package/dist/client/assets/agentsOrgChartLayout-C0UP_X3z.js +1 -0
- package/dist/client/assets/app-BgpuMvTU.js +13 -0
- package/dist/client/assets/app-BlexHhbW.js +13 -0
- package/dist/client/assets/app-BsuUOR0P.js +13 -0
- package/dist/client/assets/app-DQVOujmO.js +13 -0
- package/dist/client/assets/app-DjyTRx1N.js +5 -0
- package/dist/client/assets/app-Dniggype.js +13 -0
- package/dist/client/assets/app-EV-lyZ0T.js +5 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-gi467xY0.js → architectureDiagram-3BPJPVTR-Dd6GPcqM.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-B_gpcYiR.js → blockDiagram-GPEHLZMM-CC6pLxlz.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DeylEYsQ.js → c4Diagram-AAUBKEIU-DxMP_l6y.js} +1 -1
- package/dist/client/assets/channel-DlCEMoEf.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BL2WY0HN.js → chunk-2J33WTMH-BKYToL43.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BkLExGMe.js → chunk-4BX2VUAB-Bg6rjQb3.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CSTvCF5T.js → chunk-55IACEB6-CPUwbbGa.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-9J8pKk4x.js → chunk-727SXJPM-DScQBCvv.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DXC1vPWr.js → chunk-AQP2D5EJ-DbX7uaXK.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CFRUb-zD.js → chunk-FMBD7UC4-DvYKea1c.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-B87HFYS8.js → chunk-ND2GUHAM-CH-Tvw7w.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CTjHiGbd.js → chunk-QZHKN3VN-CbyEvOoM.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Bc92O8Ks.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Bc92O8Ks.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-D3Edq3L9.js → cose-bilkent-S5V4N54A-BPB5fV3A.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-CwwbeQfN.js → dagre-BM42HDAG-CilYJ3rR.js} +1 -1
- package/dist/client/assets/{dashboard-view-QxQwJFLz.js → dashboard-view-BnGe8cWo.js} +1 -1
- package/dist/client/assets/{dashboard-view-BLAoW3D4.js → dashboard-view-DnVf3tmI.js} +1 -1
- package/dist/client/assets/{dashboard-view-DAlJxqiJ.js → dashboard-view-DoLU6FxZ.js} +1 -1
- package/dist/client/assets/{dashboard-view-aPzfv99T.js → dashboard-view-dChSM_So.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-koJWWXE4.js → diagram-2AECGRRQ-m9u1Qhyx.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-Yob5cOKT.js → diagram-5GNKFQAL-DVr7Kf0N.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DelvFSkK.js → diagram-KO2AKTUF-D7sgJDFx.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-CMput2h2.js → diagram-LMA3HP47-DNKNDS6r.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-04VXDl79.js → diagram-OG6HWLK6-1Bff4FWn.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-C9iP8Uyp.js → erDiagram-TEJ5UH35-DGua1UHN.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-DENQvu_t.js → flowDiagram-I6XJVG4X-UDfDtwsE.js} +1 -1
- package/dist/client/assets/{folder-open-D-554oji.js → folder-open-CteOypVk.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BqOttZAT.js → ganttDiagram-6RSMTGT7-COdmD328.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CDcydi-5.js → gitGraphDiagram-PVQCEYII-SUSls7Kw.js} +1 -1
- package/dist/client/assets/index-0ovTXt3t.css +1 -0
- package/dist/client/assets/index-DpCHwyiD.js +2818 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-B5LQQnxt.js → infoDiagram-5YYISTIA-e_DloXj7.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DpFEt7D2.js → ishikawaDiagram-YF4QCWOH-DVWqihXg.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-MELtgu22.js → journeyDiagram-JHISSGLW-BcPY-XP0.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-h33PLATd.js → kanban-definition-UN3LZRKU-BCFG2Jle.js} +1 -1
- package/dist/client/assets/{mermaid.core-Dk2mUPOq.js → mermaid.core-5yPje9Bi.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-B_T4O2-B.js → mindmap-definition-RKZ34NQL-DDApeT3K.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-B1YIFkRl.js → pieDiagram-4H26LBE5-N61_jyeP.js} +1 -1
- package/dist/client/assets/{puzzle-hvecxlpJ.js → puzzle-BkaCP30D.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BoGQR_hO.js → quadrantDiagram-W4KKPZXB-C5qHiApF.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BSDmUBIx.js → requirementDiagram-4Y6WPE33-C71okgzt.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Dz_GqOa5.js → sankeyDiagram-5OEKKPKP-B2iKyLjB.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B6twjYUH.js → sequenceDiagram-3UESZ5HK-DfdoYKKk.js} +1 -1
- package/dist/client/assets/{shield-alert-BX4WRJOv.js → shield-alert-BNSeDB8l.js} +1 -1
- package/dist/client/assets/standing-instructions-template-pZtzo1lK.js +20 -0
- package/dist/client/assets/standing-instructions-template-w7Ouw_37.css +1 -0
- package/dist/client/assets/{stateDiagram-AJRCARHV-DuwqWLx-.js → stateDiagram-AJRCARHV-lS-sUi12.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Bu8Sk187.js → stateDiagram-v2-BHNVJYJU-DXJNDrV9.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-BS6VnqSI.js → timeline-definition-PNZ67QCA-CCwvX81K.js} +1 -1
- package/dist/client/assets/{upload-CaDoyaMW.js → upload-CDovVbu2.js} +1 -1
- package/dist/client/assets/useDiscoveredSkillsCache-BYqP-afh.js +1 -0
- package/dist/client/assets/{users-C5uCLwVM.js → users-CTqECGLo.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CUbzqT5Y.js → vennDiagram-CIIHVFJN-DaiR5nv9.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-Mv-NotFS.js → wardley-L42UT6IY-hA5IHyPW.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DuYpvLZX.js → wardleyDiagram-YWT4CUSO-CILUNESc.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-24_7QXdw.js → xychartDiagram-2RQKCTM6-72eNMmjz.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +10671 -6904
- package/dist/migrations/0059_fn_9037_tasks_source_agent_index.sql +3 -0
- package/dist/migrations/0060_fn_9059_workspace_coordination_leases.sql +10 -0
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +190 -9
- package/dist/plugin-sdk/index.js +74 -28
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +1096 -73
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +302 -71
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +176 -46
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/references/extension-tools.md +2 -0
- package/dist/client/assets/AgentDetailView-T767kKTg.js +0 -13
- package/dist/client/assets/AgentsView-6Ifu7qDr.js +0 -24
- package/dist/client/assets/ChatView-BV3lixQi.js +0 -13
- package/dist/client/assets/CommandCenter-CE4rYjHn.css +0 -1
- package/dist/client/assets/DocumentsView-pbERA7O-.js +0 -1
- package/dist/client/assets/EvalsView-DJQ4ltCg.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-BwJuzkzB.js +0 -1
- package/dist/client/assets/InsightsView-CJgI0J7S.js +0 -11
- package/dist/client/assets/MemoryView-BHq1AHPu.js +0 -3
- package/dist/client/assets/PluginManager-k7hV7_9e.js +0 -1
- package/dist/client/assets/SessionTerminal-BRf6r4Vp.js +0 -2
- package/dist/client/assets/SettingsModal-B30rPfYC.css +0 -1
- package/dist/client/assets/SettingsModal-D0RBeZik.js +0 -21
- package/dist/client/assets/agentsOrgChartLayout-CKuzbhFf.js +0 -1
- package/dist/client/assets/app-B2FwULu2.js +0 -5
- package/dist/client/assets/app-B6nJaqAl.js +0 -13
- package/dist/client/assets/app-CGXZeIRc.js +0 -13
- package/dist/client/assets/app-CGtkeBF5.js +0 -13
- package/dist/client/assets/app-CNzN1Plu.js +0 -13
- package/dist/client/assets/app-DLs-f5yM.js +0 -13
- package/dist/client/assets/app-DsvtcRUG.js +0 -5
- package/dist/client/assets/channel-BoE8DeM4.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-qnbLX_9_.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-qnbLX_9_.js +0 -1
- package/dist/client/assets/index-CXTd3LAB.css +0 -1
- package/dist/client/assets/index-CtYRoouR.js +0 -2818
- package/dist/client/assets/standing-instructions-template-BJY317CC.js +0 -20
- package/dist/client/assets/standing-instructions-template-Ddi_4TIk.css +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,j as e}from"./vendor-react-SZ_qB27O.js";import{ap as Ue,aq as qe,ar as Ht,as as zt,at as Ot,au as Ye,av as $t,aw as It,ax as fe,ay as Bt,az as Ve,aA as _t,aB as Ut,aC as qt,aD as Vt,aE as Ae,aF as Qt,aG as Qe,V as Gt,aH as ce,E as Wt,p as Kt,aI as Yt,X as Xt,R as Jt,aJ as ke,A as Ge,v as We,aK as Ke,j as Ee,r as De,aL as Zt,aM as Xe,aN as es,aO as ts,aP as ss,aQ as ns,z as as,aR as cs,aS as os}from"./index-CtYRoouR.js";import{u as rs}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";function is(a){const{projectId:u,searchQuery:m,includeProjectFiles:T=!0}=a??{},g=u?`${Ht.DOCUMENTS_PREFIX}${u}`:null,[w,t]=n.useState(()=>{if(!g)return[];const N=Ue(g,{maxAgeMs:qe});return Array.isArray(N)?N:[]}),[l,i]=n.useState([]),[P,d]=n.useState(()=>w.length===0),[b,k]=n.useState(null),p=n.useRef(null),h=n.useRef(w.length>0),j=n.useRef(null),{capture:C}=zt(u,"useDocuments"),L=n.useCallback(async()=>{const N=C();p.current&&p.current.abort();const M=new AbortController;p.current=M;const J=!h.current;J&&d(!0),k(null);const q=Ot(m?{q:m}:void 0,u),Z=T?Ye(u):Promise.resolve({files:[]}),[S,y]=await Promise.allSettled([q,Z]);if(M.signal.aborted||N.isStale())return;let re=null;if(S.status==="fulfilled"){if(t(S.value),g){const A=S.value.length>500?S.value.slice(0,500):S.value;$t(g,A,{maxBytes:5e5})}h.current=!0}else re=S.reason instanceof Error?S.reason.message:String(S.reason);if(y.status==="fulfilled"){const A=y.value.files,W=m?.trim().toLowerCase(),ie=W?A.filter(ee=>ee.name.toLowerCase().includes(W)||ee.path.toLowerCase().includes(W)):A;i(ie)}k(re),J&&d(!1)},[g,C,T,u,m]);return n.useEffect(()=>{if(i([]),!g){h.current=!1,t([]),d(!0);return}const N=Ue(g,{maxAgeMs:qe});Array.isArray(N)?(t(N),h.current=!0,d(!1)):(h.current=!1,t([]),d(!0))},[g]),n.useEffect(()=>(j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{L()},300),()=>{j.current&&clearTimeout(j.current)}),[L]),n.useEffect(()=>(L(),()=>{p.current&&p.current.abort()}),[]),{documents:w,projectFiles:l,loading:P,error:b,refresh:L}}function ls(a,u){const[m,T]=n.useState([]),[g,w]=n.useState(!0),[t,l]=n.useState(null),i=n.useRef(null),P=n.useRef(!1),d=u?.showHidden??!1,b=n.useCallback(async k=>{i.current&&i.current.abort();const p=new AbortController;i.current=p;const h=!P.current;h&&w(!0),l(null);try{const j=await Ye(a,{showHidden:k?.showHidden??d});if(p.signal.aborted)return;T(j.files),P.current=!0}catch(j){if(p.signal.aborted)return;l(j instanceof Error?j.message:String(j))}finally{!p.signal.aborted&&h&&w(!1)}},[a,d]);return n.useEffect(()=>(P.current=!1,b({showHidden:d}),()=>{i.current&&i.current.abort()}),[b,d]),{files:m,loading:g,error:t,refresh:b}}const ds=768,us={image:ns,doc:ce,pdf:ss,video:ts,audio:es,other:Xe};function oe(a){return a?new Date(a).toLocaleString():""}function ms(a){return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(a>=10*1024?0:1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function hs(a,u){return u?u.archived?"status-dot status-dot--offline":u.complete?"status-dot status-dot--online":u.intake||u.hold?"status-dot status-dot--pending":"status-dot status-dot--connecting":a==="done"?"status-dot status-dot--online":a==="archived"?"status-dot status-dot--offline":fs.has(a)?"status-dot status-dot--pending":"status-dot status-dot--connecting"}const fs=new Set(["triage","todo"]);function Je(a,u){switch(u){case"image":return a("documents.artifactCategoryImage","Image");case"doc":return a("documents.artifactCategoryDoc","Document");case"pdf":return a("documents.artifactCategoryPdf","PDF");case"video":return a("documents.artifactCategoryVideo","Video");case"audio":return a("documents.artifactCategoryAudioSingle","Audio");case"other":return a("documents.artifactCategoryOtherSingle","Other")}}function ks(a,u){return u?[a.title,a.description,a.taskId,a.taskTitle,a.mimeType,a.authorId].some(m=>m?.toLowerCase().includes(u)):!0}function ps(a){const u=a.mimeType?.toLowerCase().split(";",1)[0]??"";return!!a.content||a.type==="document"||u.startsWith("text/")||u==="application/json"||u==="application/xml"}function js({artifact:a,projectId:u,content:m,loading:T,error:g,renderMarkdown:w,onToggleMarkdown:t,onOpenTask:l,t:i}){const[P,d]=n.useState(null),b=Ae(a),k=Je(i,b),p=a.title||i("documents.untitledArtifact","Untitled artifact"),h=as(a.id,u),j=b==="doc"&&ps(a);n.useEffect(()=>{d(null)},[a.id]);const C=P?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:P}):null,L=b==="image"?e.jsxs(e.Fragment,{children:[C,e.jsx("img",{className:"documents-task-artifact-media",src:h,alt:p,onError:()=>d(i("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):b==="video"?e.jsxs(e.Fragment,{children:[C,e.jsx("video",{className:"documents-task-artifact-media",controls:!0,src:h,"aria-label":i("documents.videoArtifactLabel","Video artifact: {{title}}",{title:p}),onError:()=>d(i("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):b==="audio"?e.jsxs(e.Fragment,{children:[C,e.jsx("audio",{className:"documents-task-artifact-audio",controls:!0,src:h,"aria-label":i("documents.audioArtifactLabel","Audio artifact: {{title}}",{title:p}),onError:()=>d(i("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):b==="pdf"?e.jsxs("div",{className:"documents-task-artifact-pdf",children:[e.jsx("iframe",{title:i("documents.pdfArtifactTitle","PDF artifact: {{title}}",{title:p}),src:h}),e.jsxs("a",{className:"btn btn-sm",href:h,target:"_blank",rel:"noreferrer",children:[e.jsx(cs,{size:14,"aria-hidden":"true"}),i("documents.openInNewTab","Open in new tab")]})]}):b==="doc"&&j?T?e.jsx("p",{className:"documents-content-state",children:e.jsx(ke,{label:i("documents.loadingArtifactContent","Loading artifact content…")})}):g?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:g}):w?e.jsx("div",{className:"documents-content-markdown documents-task-artifact-doc-content",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Ee,{remarkPlugins:[De],children:m??a.content??""})})}):e.jsx("pre",{className:"document-card-content-text documents-content-viewer-text documents-task-artifact-doc-content",children:m??a.content??""}):e.jsxs("div",{className:"documents-task-artifact-download",children:[e.jsx(Xe,{size:24,"aria-hidden":"true"}),e.jsx("p",{children:a.description||i("documents.binaryArtifactFallback","This artifact cannot be previewed inline.")}),e.jsxs("a",{className:"btn btn-sm",href:h,target:"_blank",rel:"noreferrer","data-testid":"task-artifact-open-link",children:[e.jsx(os,{size:14,"aria-hidden":"true"}),i("documents.openArtifact","Open artifact")]})]});return e.jsxs("div",{className:"documents-content-viewer documents-task-artifact-viewer",children:[e.jsxs("div",{className:"documents-content-header documents-task-document-header",children:[e.jsxs("p",{className:"documents-file-path-header",children:[a.taskId," / ",p]}),b==="doc"&&j?e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:t,"aria-label":w?i("documents.switchToPlainText","Switch to plain text"):i("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":w,title:w?i("documents.switchToPlainText","Switch to plain text"):i("documents.switchToMarkdown","Switch to markdown"),children:w?i("documents.markdown","Markdown"):i("documents.plain","Plain")}):null]}),e.jsxs("div",{className:"document-card-meta documents-task-document-meta documents-task-artifact-meta",children:[e.jsx("span",{children:k}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:a.authorId||i("documents.unknownAuthor","unknown")}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:oe(a.updatedAt)}),a.taskId?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("button",{className:"documents-task-artifact-open-task",onClick:()=>void l(a.taskId),children:i("documents.openTask","Open task")})]}):null]}),a.description?e.jsx("p",{className:"documents-task-artifact-description",children:a.description}):null,e.jsx("div",{className:`documents-task-artifact-preview documents-task-artifact-preview--${b}`,children:L})]})}function Ss({projectId:a,columnFlagsByTaskId:u,addToast:m,onOpenDetail:T,onOpenArtifactTaskDetail:g,onSendSelectionToTask:w}){const{t}=rs("app"),[l,i]=n.useState("artifacts"),P=It(),[d,b]=n.useState(""),[k,p]=n.useState(null),[h,j]=n.useState(null),[C,L]=n.useState(!1),[N,M]=n.useState(null),[J,q]=n.useState(!1),[Z,S]=n.useState(null),[y,re]=n.useState(!1),A=n.useRef(0),W=n.useRef(null),ie=n.useRef(null),ee=n.useRef(null),Le=n.useRef(null),[K,Me]=n.useState(!1),[Ze,Re]=n.useState(new Map),[et,R]=n.useState(null),[pe,E]=n.useState(""),[le,D]=n.useState(null),[V,F]=n.useState(null),[de,je]=n.useState(!1),[tt,H]=n.useState(null),[st,B]=n.useState(!1),[nt,z]=n.useState(null),[at,xe]=n.useState(!0),te=n.useRef(0),[be,Q]=n.useState(!1),[ue,_]=n.useState(""),[we,ve]=n.useState(!1),[me,He]=n.useState(!1),ct=fe(W,{locked:me}),ot=fe(ie,{locked:me}),rt=fe(ee,{locked:me}),it=fe(Le,{locked:me}),ge=K?ct:ot,Ne=l==="tasks"?d.trim():"",lt=l==="artifacts"?d.trim():"",{documents:se,loading:dt,error:ut,refresh:ne}=is({projectId:a,searchQuery:Ne||void 0,includeProjectFiles:!1}),{files:G,loading:mt,error:ht,refresh:ze}=ls(a,{showHidden:C}),{artifacts:O,loading:ft,error:kt,refresh:Se}=Bt({projectId:a,searchQuery:lt||void 0});n.useEffect(()=>{const s=()=>{re(window.innerWidth<=ds)};return s(),window.addEventListener("resize",s),()=>{window.removeEventListener("resize",s)}},[]),n.useEffect(()=>{i("artifacts"),p(null),j(null),L(!1),M(null),S(null),q(!1),Me(!1),Re(new Map),R(null),E(""),D(null),F(null),je(!1),H(null),B(!1),z(null),xe(!0),Q(!1),_(""),ve(!1)},[a]);const Y=n.useMemo(()=>{const s=Ne.toLowerCase(),c=new Map;for(const o of se){const x=c.get(o.taskId)??{documents:[],artifacts:[]};x.documents.push(o),c.set(o.taskId,x)}for(const o of O){if(!o.taskId||!ks(o,s))continue;const x=c.get(o.taskId)??{documents:[],artifacts:[]};x.artifacts.push(o),c.set(o.taskId,x)}return Array.from(c.entries()).map(([o,x])=>{const I=[...x.documents].sort((v,ae)=>ae.updatedAt.localeCompare(v.updatedAt)),U=[...x.artifacts].sort((v,ae)=>ae.updatedAt.localeCompare(v.updatedAt)),Pe=[I[0]?.updatedAt,U[0]?.updatedAt].filter(Boolean).sort().at(-1)??"",f=I.find(v=>v.taskTitle)?.taskTitle??U.find(v=>v.taskTitle)?.taskTitle;return{taskId:o,taskTitle:f,taskColumn:I.find(v=>v.taskColumn)?.taskColumn??U.find(v=>v.taskColumn)?.taskColumn,documents:I,artifacts:U,latestUpdated:Pe}}).filter(o=>o.documents.length>0||o.artifacts.length>0).sort((o,x)=>x.latestUpdated.localeCompare(o.latestUpdated))},[O,se,Ne]),r=n.useMemo(()=>h?.kind!=="document"?null:se.find(s=>s.id===h.id)??null,[se,h]),$=n.useMemo(()=>h?.kind!=="artifact"?null:O.find(s=>s.id===h.id)??null,[O,h]),he=r??$;n.useEffect(()=>{if(!h)return;Y.some(c=>h.kind==="document"?c.documents.some(o=>o.id===h.id):c.artifacts.some(o=>o.id===h.id))||(j(null),R(null),E(""),D(null),F(null),H(null),B(!1),z(null))},[Y,h]);const Ce=n.useMemo(()=>{const s=d.trim().toLowerCase();return s?G.filter(c=>{const o=c.path.toLowerCase(),x=c.name.toLowerCase();return o.includes(s)||x.includes(s)}):G},[G,d]);n.useEffect(()=>{if(!k)return;G.some(c=>c.path===k.path)||(p(null),M(null),S(null),q(!1))},[G,k]);const pt=n.useCallback(s=>{b(s.target.value)},[]),jt=n.useCallback(()=>{b("")},[]),ye=n.useCallback(s=>{i(s),s!=="tasks"&&(j(null),R(null),E(""),D(null),F(null),H(null),B(!1),z(null)),s!=="project"&&(Q(!1),_(""))},[]),xt=n.useCallback(async s=>{try{const c=await Ve(s,a);T(c)}catch{m(`Failed to open task ${s}`,"error")}},[a,T,m]),Oe=n.useCallback(async s=>{try{const c=await Ve(s,a);(g??T)(c)}catch{m(`Failed to open task ${s}`,"error")}},[a,g,T,m]),bt=n.useCallback(async s=>{p(s),q(!0),S(null),M(null),Q(!1),_("");const c=A.current+1;A.current=c;try{const o=await _t("project",s.path,a);if(A.current!==c)return;M(o.content)}catch(o){if(A.current!==c)return;const x=o instanceof Error?o.message:`Failed to open ${s.path}`;S(x),m(x,"error")}finally{A.current===c&&q(!1)}},[a,m]),wt=n.useCallback(()=>{p(null),M(null),S(null),q(!1),Q(!1),_("")},[]),vt=n.useCallback(()=>{N!==null&&(_(N),Q(!0))},[N]),gt=n.useCallback(()=>{Q(!1),_("")},[]),Nt=n.useCallback(async()=>{if(k){ve(!0);try{await Ut("project",k.path,ue,a),M(ue),Q(!1),_(""),m(t("documents.projectFileSaved","File saved"),"success")}catch(s){m(s instanceof Error?s.message:String(s),"error")}finally{ve(!1)}}},[k,ue,a,m,t]),St=n.useCallback(s=>{j({kind:"document",id:s}),R(null),E(""),D(null),F(null),H(null),B(!1),z(null)},[]),Ct=n.useCallback(s=>{j({kind:"artifact",id:s}),R(null),E(""),D(null),F(null),H(null),z(null),xe(!0)},[]),yt=n.useCallback(()=>{j(null),R(null),E(""),D(null),F(null),H(null),B(!1),z(null)},[]),Tt=n.useCallback(s=>{Re(c=>{const o=new Map(c),x=o.get(s)??!0;return o.set(s,!x),o})},[]),Ft=n.useCallback(()=>{r&&(E(r.content),R(r.id),D({revision:r.revision,contentHash:r.contentHash}),F(null))},[r]),Pt=n.useCallback(()=>{R(null),E(""),D(null),F(null)},[]),At=n.useCallback(()=>{V&&(D(V),F(null))},[V]),Et=n.useCallback(async()=>{if(!(!r||!le||V)){je(!0);try{await qt(r.taskId,r.key,pe,{expectedRevision:le.revision,expectedContentHash:le.contentHash},a),await ne(),R(null),E(""),D(null),F(null),m(t("documents.taskDocumentSaved","Document saved"),"success")}catch(s){if(typeof s=="object"&&s!==null&&"status"in s&&s.status===409)try{const c=await Vt(r.taskId,r.key,a);await ne(),F({revision:c.revision,contentHash:c.contentHash}),m(t("documents.taskDocumentStale","This document changed since you opened it. Your draft is preserved; review the latest revision, then choose Rebase draft before saving."),"error")}catch(c){m(c instanceof Error?c.message:String(c),"error")}else m(s instanceof Error?s.message:String(s),"error")}finally{je(!1)}}},[r,pe,le,V,a,ne,m,t]);n.useEffect(()=>{if(!$||Ae($)!=="doc"){H(null),B(!1),z(null);return}const s=te.current+1;te.current=s,B(!0),z(null),H(null),Qt($.id,a).then(c=>{te.current===s&&H(c.content??$.content??"")}).catch(c=>{te.current===s&&z(c instanceof Error?c.message:String(c))}).finally(()=>{te.current===s&&B(!1)})},[a,$]);const $e=l==="project"?ht:l==="tasks"?ut:kt,Dt=n.useCallback(async()=>{if(l==="project"){await ze();return}if(l==="tasks"){await ne();return}await Se()},[l,Se,ze,ne]),Ie=l==="project"?Ce.length:l==="tasks"?Y.length:O.length,X=r?Ze.get(r.id)??!0:!1,Te=X?rt:it,Fe=r!==null&&et===r.id,Lt=l==="project"&&k&&!be&&w&&ge?e.jsx(Qe,{selectedText:ge.selectedText,anchorRect:ge.anchorRect,filePath:k.path,onSubmit:w,onOpenChange:He}):null,Mt=l==="tasks"&&r&&!Fe&&w&&Te?e.jsx(Qe,{selectedText:Te.selectedText,anchorRect:Te.anchorRect,filePath:`${r.taskId}/${r.key}`,onSubmit:w,onOpenChange:He}):null,Be=l==="project"?t("documents.searchProjectFiles","Search project markdown files…"):l==="tasks"?t("documents.searchTaskDocuments","Search task documents…"):t("documents.searchArtifacts","Search artifacts…");return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsx(Gt,{icon:ce,title:t("documents.title","Artifacts"),actions:e.jsx("span",{className:"documents-view-count",children:t("documents.resultCount","{{count}} result{{plural}}",{count:Ie,plural:Ie!==1?"s":""})})}),e.jsxs("div",{className:"documents-controls-row",children:[e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":t("documents.sectionsLabel","Documents sections"),children:[e.jsxs("button",{className:`btn documents-tab${l==="artifacts"?" active":""}`,role:"tab","aria-selected":l==="artifacts","aria-label":t("documents.showArtifacts","Show artifacts"),onClick:()=>ye("artifacts"),children:[t("documents.artifactsTab","Artifacts"),e.jsx("span",{className:"documents-tab-count",children:O.length})]}),e.jsxs("button",{className:`btn documents-tab${l==="project"?" active":""}`,role:"tab","aria-selected":l==="project","aria-label":t("documents.showProjectFiles","Show project markdown files"),onClick:()=>ye("project"),children:[t("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:G.length})]}),e.jsxs("button",{className:`btn documents-tab${l==="tasks"?" active":""}`,role:"tab","aria-selected":l==="tasks","aria-label":t("documents.showTaskDocuments","Show task documents"),onClick:()=>ye("tasks"),children:[t("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:Y.length})]})]}),l==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>L(s=>!s),"aria-pressed":C,"aria-label":C?t("documents.hideHidden","Hide hidden project files"):t("documents.showHidden","Show hidden project files"),title:C?t("documents.hideHiddenFiles","Hide hidden files"):t("documents.showHiddenFiles","Show hidden files"),children:[C?e.jsx(Wt,{size:14}):e.jsx(Kt,{size:14}),C?t("documents.hideHiddenLabel","Hide Hidden"):t("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Yt,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:Be,value:d,onChange:pt,"aria-label":Be}),d&&e.jsx("button",{className:"documents-search-clear",onClick:jt,"aria-label":t("documents.clearSearch","Clear search"),children:e.jsx(Xt,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:$e?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:t("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:l==="project"?t("documents.projectFiles","project files"):l==="tasks"?t("documents.taskDocuments","task documents"):t("documents.artifacts","artifacts"),error:$e})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void Dt(),"aria-label":t("documents.retryLoading","Retry loading documents"),children:[e.jsx(Jt,{size:16}),t("documents.retry","Retry")]})]}):l==="project"?mt&&G.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(ke,{label:t("documents.loadingProjectFiles","Loading project markdown files…")})})}):Ce.length===0?e.jsx("div",{className:"documents-view-empty",children:d.trim()?e.jsx("p",{children:t("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:d.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(ce,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:t("documents.noMarkdownFiles","No Markdown files found in this project.")})]})}):e.jsxs("div",{className:`documents-project-layout${y?" documents-project-layout--mobile":""}`,children:[(!y||!k)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":t("documents.projectMarkdownFilesLabel","Project markdown files"),children:e.jsx("ul",{className:"markdown-file-list",children:Ce.map(s=>{const c=k?.path===s.path;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item${c?" markdown-file-item--selected":""}`,onClick:()=>void bt(s),"aria-label":`Open ${s.path}`,"aria-current":c?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:s.name}),e.jsx("span",{className:"markdown-file-item-path",children:s.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[ms(s.size)," · ",oe(s.mtime)]})]})},s.path)})})}),(!y||k)&&e.jsxs("section",{className:"documents-view-main","aria-label":t("documents.projectFilePreviewLabel","Project file content preview"),children:[y&&k&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:wt,"aria-label":t("documents.backToFilesList","Back to project files list"),children:[e.jsx(Ge,{size:14}),t("documents.backToFiles","Back to files")]}),k?e.jsxs("div",{className:"documents-content-viewer",children:[e.jsxs("div",{className:"documents-content-header",children:[e.jsx("p",{className:"documents-file-path-header",children:k.path}),e.jsx("div",{className:"documents-task-document-actions",children:be?e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm",onClick:gt,disabled:we,children:t("documents.cancelEdit","Cancel")}),e.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Nt(),disabled:we,children:we?t("documents.saving","Saving…"):t("documents.saveProjectFile","Save")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>Me(s=>!s),"aria-label":K?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":K,title:K?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:K?t("documents.markdown","Markdown"):t("documents.plain","Plain")}),e.jsxs("button",{className:"btn btn-sm",onClick:vt,disabled:J||Z!==null||N===null,"aria-label":t("documents.editProjectFile","Edit project file"),children:[e.jsx(We,{size:14,"aria-hidden":"true"}),t("documents.edit","Edit")]})]})})]}),J?e.jsx("p",{className:"documents-content-state",children:e.jsx(ke,{label:t("documents.loadingFileContent","Loading file content…")})}):Z?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:Z}):be?e.jsx("div",{className:"documents-task-document-editor","aria-label":t("documents.projectFileContentEditor","Project file content editor"),children:e.jsx(Ke,{content:ue,onChange:_,filePath:k.path,forceToolbarActionsVisible:!0})}):K?e.jsx("div",{ref:W,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Ee,{remarkPlugins:[De],children:N??""})})}):e.jsx("pre",{ref:ie,className:"document-card-content-text documents-content-viewer-text",children:N??""}),Lt]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:t("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):l==="artifacts"?ft&&O.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:t("documents.loadingArtifacts","Loading artifacts…")})}):O.length===0?e.jsx("div",{className:"documents-view-empty",children:d.trim()?e.jsx("p",{children:t("documents.noMatchArtifacts",'No artifacts match "{{query}}".',{query:d.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(ce,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:t("documents.noArtifacts","No artifacts yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:t("documents.artifactsCreatedBy","Agents register screenshots, wireframes, mockups, recordings, and documents here as they work on tasks.")})]})}):e.jsx(Zt,{artifacts:O,projectId:a,isMobile:y,addToast:m,onOpenTask:Oe,onArtifactUpdated:()=>void Se()}):dt&&se.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(ke,{label:t("documents.loadingTaskDocuments","Loading task documents…")})})}):Y.length===0?e.jsx("div",{className:"documents-view-empty",children:d.trim()?e.jsx("p",{children:t("documents.noMatchTask",'No task documents match "{{query}}".',{query:d.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(ce,{size:48,className:"documents-view-empty-icon"}),e.jsx("p",{children:t("documents.noTaskDocuments","No task documents yet.")}),e.jsx("p",{className:"documents-view-empty-hint",children:t("documents.documentsCreatedIn","Documents are created in task detail tabs.")})]})}):e.jsxs("div",{className:`documents-project-layout documents-task-documents-layout${y?" documents-project-layout--mobile":""}`,children:[(!y||!he)&&e.jsx("aside",{className:"documents-view-sidebar documents-task-documents-sidebar","aria-label":t("documents.taskDocumentsListLabel","Task documents"),children:Y.map(({taskId:s,taskTitle:c,taskColumn:o,documents:x,artifacts:I})=>{const U=o?P(o):null,Pe=o?hs(o,u?.get(s)):"status-dot";return e.jsxs("section",{className:"documents-task-sidebar-group","aria-labelledby":`documents-task-group-${s}`,children:[e.jsxs("div",{className:"documents-task-sidebar-group-header",children:[e.jsxs("div",{className:"documents-task-sidebar-title-wrap",children:[e.jsxs("h3",{id:`documents-task-group-${s}`,className:"documents-task-sidebar-title",children:[e.jsx("span",{className:"documents-group-task-id",children:s}),e.jsx("span",{className:"documents-group-task-title",children:c||t("documents.untitled","Untitled")})]}),U?e.jsxs("span",{className:"documents-group-status badge","aria-label":t("documents.taskStatusAria","Task status: {{status}}",{status:U}),children:[e.jsx("span",{className:Pe,"aria-hidden":"true"}),e.jsx("span",{children:U})]}):null]}),e.jsxs("div",{className:"documents-task-sidebar-actions",children:[e.jsx("span",{className:"documents-group-count",children:t("documents.taskOutputCount","{{docCount}} doc{{docPlural}} · {{artifactCount}} artifact{{artifactPlural}}",{docCount:x.length,docPlural:x.length!==1?"s":"",artifactCount:I.length,artifactPlural:I.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>void xt(s),"aria-label":t("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:s,title:c||t("documents.untitled","Untitled")}),children:t("documents.openTask","Open task")})]})]}),e.jsxs("ul",{className:"markdown-file-list documents-task-document-list",children:[x.map(f=>{const v=r?.id===f.id;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item documents-task-document-item${v?" markdown-file-item--selected":""}`,onClick:()=>St(f.id),"aria-label":t("documents.openTaskDocument","Open {{taskId}} {{key}}",{taskId:f.taskId,key:f.key}),"aria-current":v?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:f.key}),e.jsxs("span",{className:"markdown-file-item-path",children:[f.taskId," · ",f.taskTitle||t("documents.untitled","Untitled")]}),e.jsxs("span",{className:"markdown-file-item-meta",children:[t("documents.revisionShort","v{{revision}}",{revision:f.revision})," · ",f.author," · ",oe(f.updatedAt)]})]})},`document-${f.id}`)}),I.length>0?e.jsxs("li",{className:"documents-task-artifacts-subsection","aria-label":t("documents.taskArtifactsSubsection","Task artifacts"),children:[e.jsx("div",{className:"documents-task-artifacts-label",children:t("documents.taskArtifactsLabel","Artifacts")}),e.jsx("ul",{className:"markdown-file-list documents-task-artifact-list",children:I.map(f=>{const v=Ae(f),ae=us[v],Rt=Je(t,v),_e=$?.id===f.id;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item documents-task-document-item documents-task-artifact-item${_e?" markdown-file-item--selected":""}`,onClick:()=>Ct(f.id),"aria-label":t("documents.openTaskArtifact","Open {{taskId}} artifact {{title}}",{taskId:s,title:f.title||t("documents.untitledArtifact","Untitled artifact")}),"aria-current":_e?"true":void 0,children:[e.jsxs("span",{className:"documents-task-artifact-title-row",children:[e.jsx(ae,{size:14,"aria-hidden":"true"}),e.jsx("span",{className:"markdown-file-item-name",children:f.title||t("documents.untitledArtifact","Untitled artifact")})]}),e.jsxs("span",{className:"markdown-file-item-path",children:[Rt," · ",f.mimeType||f.type]}),e.jsxs("span",{className:"markdown-file-item-meta",children:[f.authorId||t("documents.unknownAuthor","unknown")," · ",oe(f.updatedAt)]})]})},`artifact-${f.id}`)})})]}):null]})]},s)})}),(!y||he)&&e.jsxs("section",{className:"documents-view-main","aria-label":t("documents.taskDocumentPreviewLabel","Task document content preview"),children:[y&&he&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:yt,"aria-label":t("documents.backToTaskDocumentsList","Back to task documents list"),children:[e.jsx(Ge,{size:14}),t("documents.backToTaskDocuments","Back to documents")]}),he?$?e.jsx(js,{artifact:$,projectId:a,content:tt,loading:st,error:nt,renderMarkdown:at,onToggleMarkdown:()=>xe(s=>!s),onOpenTask:Oe,t}):r?e.jsxs("div",{className:"documents-content-viewer documents-task-document-viewer",children:[e.jsxs("div",{className:"documents-content-header documents-task-document-header",children:[e.jsxs("p",{className:"documents-file-path-header",children:[r.taskId," / ",r.key]}),e.jsx("div",{className:"documents-task-document-actions",children:Fe?e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm",onClick:Pt,disabled:de,children:t("documents.cancelEdit","Cancel")}),V&&e.jsx("button",{className:"btn btn-sm",onClick:At,disabled:de,children:t("documents.rebaseTaskDocument","Rebase draft")}),e.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Et(),disabled:de||V!==null,children:de?t("documents.saving","Saving…"):t("documents.saveTaskDocument","Save")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>Tt(r.id),"aria-label":X?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":X,title:X?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:X?t("documents.markdown","Markdown"):t("documents.plain","Plain")}),e.jsxs("button",{className:"btn btn-sm",onClick:Ft,"aria-label":t("documents.editTaskDocument","Edit task document"),children:[e.jsx(We,{size:14,"aria-hidden":"true"}),t("documents.edit","Edit")]})]})})]}),e.jsxs("div",{className:"document-card-meta documents-task-document-meta",children:[e.jsx("span",{className:"document-card-author",children:r.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:t("documents.revisionShort","v{{revision}}",{revision:r.revision})}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:oe(r.updatedAt)})]}),Fe?e.jsx("div",{className:"documents-task-document-editor","aria-label":t("documents.taskDocumentContentEditor","Task document content editor"),children:e.jsx(Ke,{content:pe,onChange:E,filePath:r.key.includes(".")?r.key:`${r.key}.md`,forceToolbarActionsVisible:!0})}):X?e.jsx("div",{ref:ee,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Ee,{remarkPlugins:[De],children:r.content})})}):e.jsx("pre",{ref:Le,className:"document-card-content-text documents-content-viewer-text",children:r.content}),Mt]}):null:e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:t("documents.selectTaskDocument","Select a task document or artifact to view its content.")})})]})]})})]})}export{Ss as DocumentsView,hs as getTaskColumnStatusDotClass};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-SZ_qB27O.js";import{ap as P,aq as L,ar as $,aT as Y,aU as Q,av as O,aV as Z,aW as ee,aX as se,V as H,T as X,_ as ae,R as te,aJ as le,s as re,l as ne,aR as ie}from"./index-CtYRoouR.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";const oe=300,de=15e3;function B(r){if(!r.trim())return;const a=Number(r);return Number.isFinite(a)?a:void 0}function I(...r){for(const a of r)if(Array.isArray(a))return a;return[]}function f(r){return typeof r=="object"&&r!==null?r:{}}function K(r){const a=f(r),m=f(a.taskSnapshot);return{id:String(a.id??a.evalId??""),runId:String(a.runId??a.batchId??""),taskId:String(a.taskId??m.taskId??""),taskTitle:String(m.title??a.taskTitle??a.title??"Untitled task"),createdAt:String(a.createdAt??a.timestamp??a.updatedAt??new Date(0).toISOString()),overallScore:typeof a.overallScore=="number"?a.overallScore:null,maxScore:typeof a.maxScore=="number"?a.maxScore:null,categoryScores:I(a.categoryScores,f(a.scores).categories)}}function ue(r){const a=f(r);return{...K(a),rationale:String(a.rationale??a.summary??""),evidence:I(a.evidence,f(a.details).evidence),followUps:I(a.followUps,f(a.recommendations).followUps)}}function ve(r){const a=r?.projectId,m=a??"",t=`${$.EVALS_RUNS_PREFIX}${m}`,h=`${$.EVALS_RESULTS_PREFIX}${m}`,p=P(t,{maxAgeMs:L}),v=P(h,{maxAgeMs:L}),S=l.useRef(Array.isArray(p)&&p.length>0||Array.isArray(v)&&v.length>0),[o,g]=l.useState({q:"",runId:"",scoreMin:"",scoreMax:""}),[N,w]=l.useState(()=>Array.isArray(p)?p:[]),[d,C]=l.useState(()=>Array.isArray(v)?v:[]),[u,R]=l.useState(null),[F,A]=l.useState(null),[s,i]=l.useState(0),[y,j]=l.useState(!S.current),[W,V]=l.useState(null),M=l.useRef(0),q=l.useRef(a),T=l.useRef(u);T.current=u;const k=l.useCallback(async()=>{const c=++M.current;S.current||j(!0),V(null);try{const[n,x]=await Promise.all([Y({q:o.q||void 0,runId:o.runId||void 0,scoreMin:B(o.scoreMin),scoreMax:B(o.scoreMax),limit:100,offset:0},a),Q(a)]);if(c!==M.current)return;const E=I(n.results,n.evals,n.items).map(K);C(E),O(h,E.length>500?E.slice(0,500):E,{maxBytes:5e5}),i(typeof n.count=="number"?n.count:E.length);const z=I(x.runs,x.items).map(U=>{const b=f(U),D=f(b.counts);return{id:String(b.id??""),createdAt:String(b.createdAt??""),completedAt:typeof b.completedAt=="string"?b.completedAt:void 0,status:String(b.status??"pending"),evaluatedTaskCount:typeof D.totalTasks=="number"?D.totalTasks:0}});w(z),O(t,z,{maxBytes:5e5}),S.current=!0,T.current&&!E.some(U=>U.id===T.current)&&(R(null),A(null))}catch(n){if(c!==M.current)return;V(n instanceof Error?n.message:"Failed to load evals")}finally{c===M.current&&j(!1)}},[o.q,o.runId,o.scoreMax,o.scoreMin,a,h,t]),_=l.useCallback(async c=>{const n=await Z(c,a),x=n.result??n;A(ue(x))},[a]);l.useEffect(()=>{if(q.current===a)return;q.current=a;const c=P(t,{maxAgeMs:L}),n=P(h,{maxAgeMs:L}),x=Array.isArray(c)&&c.length>0||Array.isArray(n)&&n.length>0;w(Array.isArray(c)?c:[]),C(Array.isArray(n)?n:[]),j(!x),S.current=x},[a,h,t]),l.useEffect(()=>{const c=window.setTimeout(()=>{k()},oe);return()=>window.clearTimeout(c)},[k]),l.useEffect(()=>{if(!u){A(null);return}_(u)},[_,u]);const G=l.useCallback(()=>{k(),u&&_(u)},[_,k,u]);ee(G,de);const J=l.useCallback(c=>{T.current=c,R(c)},[]);return{loading:y,error:W,results:d,count:s,runs:N,filters:o,setFilters:g,refresh:k,selectedEvalId:u,setSelectedEvalId:J,selectedEval:F}}function je({projectId:r,onOpenSettings:a,onOpenTaskDetail:m}){const{t}=ce("app"),{loading:h,error:p,results:v,runs:S,filters:o,setFilters:g,selectedEvalId:N,setSelectedEvalId:w,selectedEval:d,refresh:C}=ve({projectId:r}),[u,R]=l.useState(!0);l.useEffect(()=>{let s=!1;return se(r).then(i=>{if(s)return;const y=i.evalSettings?.enabled;R(y??!1)}).catch(()=>{s||R(!1)}),()=>{s=!0}},[r]);const F=v.length>0,A=l.useMemo(()=>v.find(s=>s.id===N)??null,[v,N]);return u?e.jsxs("section",{className:"evals-view","data-testid":"evals-view",children:[e.jsx(H,{icon:X,title:t("evals.title","Evals")}),e.jsxs("div",{className:"evals-view__body",children:[e.jsxs("div",{className:"evals-list card",children:[e.jsxs("div",{className:"evals-toolbar",children:[e.jsx("input",{className:"input",placeholder:t("evals.searchPlaceholder","Search task or rationale"),value:o.q,onChange:s=>g(i=>({...i,q:s.target.value}))}),e.jsxs("select",{className:"select",value:o.runId,onChange:s=>g(i=>({...i,runId:s.target.value})),children:[e.jsx("option",{value:"",children:t("evals.allRuns","All runs")}),S.map(s=>e.jsx("option",{value:s.id,children:s.id},s.id))]}),e.jsx("input",{className:"input",placeholder:t("evals.minScorePlaceholder","Min score"),value:o.scoreMin,onChange:s=>g(i=>({...i,scoreMin:s.target.value}))}),e.jsx("input",{className:"input",placeholder:t("evals.maxScorePlaceholder","Max score"),value:o.scoreMax,onChange:s=>g(i=>({...i,scoreMax:s.target.value}))}),e.jsx("button",{className:"btn btn-icon",type:"button",onClick:()=>void C(),"aria-label":t("evals.refreshAria","Refresh evals"),children:e.jsx(te,{size:16})})]}),h&&e.jsx("p",{className:"evals-state","data-testid":"evals-loading",children:e.jsx(le,{label:t("evals.loading","Loading evals…")})}),p&&e.jsx("p",{className:"evals-state evals-state--error",children:p}),!h&&!p&&!F&&e.jsx("p",{className:"evals-state",children:t("evals.empty","No evals yet. Scheduled evals review tasks completed since the last run.")}),e.jsx("ul",{className:"evals-results","data-testid":"evals-results",children:v.map(s=>e.jsx("li",{children:e.jsxs("button",{className:`evals-result ${s.id===N?"evals-result--active":""}`,type:"button",onClick:()=>w(s.id),draggable:ne(),onDragStart:i=>{re(i.dataTransfer,{kind:"eval-result",id:s.id,projectId:r})},children:[e.jsx("span",{className:"evals-result-title",children:s.taskTitle}),e.jsxs("span",{className:"evals-result-meta",children:[s.taskId," · ",s.runId," · ",s.overallScore??t("evals.naPlaceholder","n/a")]})]})},s.id))})]}),e.jsxs("div",{className:"evals-detail card","data-testid":"evals-detail",children:[!d&&e.jsx("p",{className:"evals-state",children:t("evals.selectPrompt","Select an evaluation to inspect scores, rationale, and evidence.")}),d&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"evals-detail-title",children:A?.taskTitle??d.taskTitle}),e.jsxs("p",{className:"evals-result-meta",children:[d.taskId," · ",d.runId]}),e.jsx("p",{className:"evals-score",children:t("evals.overallScore","Overall score: {{score}}",{score:d.overallScore??t("evals.naPlaceholder","n/a")})}),e.jsx("ul",{className:"evals-categories",children:d.categoryScores.map(s=>e.jsxs("li",{children:[s.category,": ",s.finalScore]},s.category))}),e.jsx("p",{className:"evals-rationale",children:d.rationale||t("evals.noRationale","No rationale recorded.")}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.evidenceHeading","Evidence")}),e.jsx("ul",{className:"evals-links",children:d.evidence.map((s,i)=>{const y=typeof s.metadata?.taskId=="string"?s.metadata.taskId:void 0,j=typeof s.metadata?.url=="string"?s.metadata.url:void 0;return e.jsx("li",{children:y?e.jsx("button",{type:"button",className:"btn",onClick:()=>m?.(y),children:s.ref}):j?e.jsxs("a",{href:j,target:"_blank",rel:"noreferrer",className:"evals-external-link",children:[s.ref,e.jsx(ie,{size:14})]}):e.jsx("span",{children:s.ref})},`${s.ref}-${i}`)})})]}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.suggestedFollowupsHeading","Suggested follow-up tasks")}),e.jsxs("ul",{className:"evals-follow-ups",children:[d.followUps.length===0&&e.jsx("li",{children:t("evals.noFollowups","None")}),d.followUps.map(s=>e.jsxs("li",{children:[e.jsx("strong",{children:s.title}),e.jsx("p",{children:s.rationale})]},s.suggestionId))]})]})]})]})]})]}):e.jsxs("section",{className:"evals-view","data-testid":"evals-disabled",children:[e.jsx(H,{icon:X,title:t("evals.title","Evals")}),e.jsxs("div",{className:"evals-view__empty",children:[e.jsx("h2",{className:"evals-title",children:t("evals.disabledTitle","Scheduled evals are disabled")}),e.jsx("p",{className:"evals-empty-copy",children:t("evals.enablePrompt","Enable Scheduled Evals to review scored tasks, evidence, and follow-up recommendations.")}),e.jsxs("button",{className:"btn btn-primary",type:"button",onClick:()=>a?.("scheduled-evals"),children:[e.jsx(ae,{size:16}),t("evals.openSettings","Open Scheduled Evals Settings")]})]})]})}export{je as EvalsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as s,j as e}from"./vendor-react-SZ_qB27O.js";import{B as F,D as V,F as W,G as $,H as z,I as K,J as B}from"./index-CtYRoouR.js";import{u as J}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";function te({isOpen:l,onClose:R,onUseDraft:M,projectId:x,existingAgents:P,mode:w="create",existingAgentConfig:L}){const{t:n}=J("app"),[g,d]=s.useState("initial"),[f,_]=s.useState(""),[c,S]=s.useState(null),[C,I]=s.useState(""),[k,A]=s.useState("answer"),[p,v]=s.useState(""),[t,H]=s.useState(null),[T,h]=s.useState(null),[E,y]=s.useState([]),b=w==="edit",o=s.useRef(l),N=s.useCallback(()=>{d("initial"),_(""),S(null),I(""),A("answer"),v(""),H(null),h(null),y([])},[]),D=s.useMemo(()=>F.map(a=>({id:a.id,label:a.name,description:a.description})),[]);s.useEffect(()=>{if(o.current=l,!c)return;const a=V(c,x,{onThinking:r=>{o.current&&y(Q=>{const u=[...Q],j=u[u.length-1];return j&&!j.question?(u[u.length-1]={...j,thinkingOutput:`${j.thinkingOutput??""}${r}`},u):[...u,{response:{},thinkingOutput:r}]})},onQuestion:r=>{o.current&&(I(r.question),A(r.id),d("question"))},onSummary:r=>{o.current&&(H(r),d("summary"))},onError:r=>{o.current&&(h(r),d("error"))}});return()=>{o.current=!1,a.close()}},[l,c,x]);const m=async()=>{o.current=!1;try{c&&await z(c,x)}catch{}finally{N(),R()}};if(s.useEffect(()=>{o.current=l,l||N()},[l,N]),!l)return null;const i=a=>a==null||a===""?e.jsx("em",{className:"experimental-agent-onboarding-modal__summary-empty",children:n("agents.onboarding.notSet","Not set")}):e.jsx("span",{children:a}),O=async()=>{d("loading"),h(null);try{const a=await K(f,{mode:w,existingAgentConfig:L,existingAgents:P.map(r=>({id:r.id,name:r.name,role:r.role})),templates:D},x);if(!o.current)return;S(a.sessionId)}catch(a){if(!o.current)return;h(a.message),d("error")}},q=async()=>{if(c){d("loading"),h(null);try{const a={[k]:p};if(y(r=>[...r,{question:{id:k,type:"text",question:C},response:a}]),await B(c,a,x),!o.current)return;v("")}catch(a){if(!o.current)return;h(a.message),d("error")}}},G=async()=>{t&&(M(t),await m())};return e.jsx(W,{windowKey:"experimental-agent-onboarding",modal:!0,title:n("agents.onboarding.title","AI Interview"),ariaLabel:n("agents.onboarding.dialogLabel","AI Interview"),onClose:()=>void m(),hideHeader:!0,dragHandleSelector:".experimental-agent-onboarding-modal .modal-header",className:"floating-window--experimental-agent-onboarding",defaultSize:{width:720,height:620},minSize:{width:420,height:320},persistGeometryKey:"floating-window:experimental-agent-onboarding",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,children:e.jsxs("div",{className:"modal modal-lg experimental-agent-onboarding-modal",children:[e.jsxs("div",{className:"modal-header",children:[e.jsx("h3",{children:n("agents.onboarding.title","AI Interview")}),e.jsx("button",{className:"modal-close",onClick:()=>void m(),"aria-label":n("common.closeAriaLabel","Close"),children:"×"})]}),E.length>0&&e.jsx($,{entries:E}),g==="initial"&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"agent-onboarding-intent",children:b?n("agents.onboarding.intentLabelEdit","What should this agent change or improve?"):n("agents.onboarding.intentLabelCreate","What should this new agent own?")}),e.jsx("textarea",{id:"agent-onboarding-intent",className:"input experimental-agent-onboarding-modal__textarea",value:f,onChange:a=>_(a.target.value)}),e.jsxs("div",{className:"modal-actions",children:[e.jsx("button",{className:"btn",onClick:()=>void m(),children:n("common.cancel","Cancel")}),e.jsx("button",{className:"btn btn-primary",disabled:!f.trim(),onClick:()=>void O(),children:b?n("agents.onboarding.startInterview","Start interview"):n("agents.onboarding.startOnboarding","Start onboarding")})]})]}),(g==="loading"||g==="question")&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"agent-onboarding-answer",children:C||n("agents.onboarding.thinking","Thinking...")}),e.jsx("textarea",{id:"agent-onboarding-answer",className:"input experimental-agent-onboarding-modal__textarea",value:p,onChange:a=>v(a.target.value)}),e.jsxs("div",{className:"modal-actions",children:[e.jsx("button",{className:"btn",onClick:()=>void m(),children:n("common.cancel","Cancel")}),e.jsx("button",{className:"btn btn-primary",disabled:g==="loading"||!p.trim(),onClick:()=>void q(),children:n("agents.onboarding.continue","Continue")})]})]}),g==="summary"&&t&&e.jsxs("div",{className:"form-group",children:[e.jsx("label",{children:b?n("agents.onboarding.updatedDraftReady","Updated draft ready for review"):n("agents.onboarding.draftReady","Draft ready for review")}),e.jsx("p",{className:"experimental-agent-onboarding-modal__summary-intro",children:n("agents.onboarding.draftIntro","Review this generated draft. Nothing is applied until you confirm.")}),e.jsxs("div",{className:"experimental-agent-onboarding-modal__summary card",children:[e.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[e.jsx("h4",{children:n("agents.onboarding.sectionIdentity","Identity")}),e.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldName","Name")}),e.jsx("dd",{children:i(t.name)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldRole","Role")}),e.jsx("dd",{children:i(t.role)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldTitle","Title")}),e.jsx("dd",{children:i(t.title)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldIcon","Icon")}),e.jsx("dd",{children:i(t.icon)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldReportsTo","Reports To")}),e.jsx("dd",{children:i(t.reportsTo)})]})]})]}),e.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[e.jsx("h4",{children:n("agents.onboarding.sectionConfiguration","Configuration")}),e.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldInlineInstructions","Inline Instructions")}),e.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:i(t.instructionsText)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldSoul","Soul")}),e.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:i(t.soul)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldAgentMemory","Agent Memory")}),e.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:i(t.memory)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldSkills","Skills")}),e.jsx("dd",{children:i(t.skills?.join(", "))})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldThinkingLevel","Thinking Level")}),e.jsx("dd",{children:i(t.thinkingLevel)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldMaxTurns","Max Turns")}),e.jsx("dd",{children:i(t.maxTurns)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldTemplate","Template")}),e.jsx("dd",{children:i(t.templateId)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldPatternAgent","Pattern Agent")}),e.jsx("dd",{children:i(t.patternAgentId)})]})]})]}),(t.heartbeatProcedurePath||t.heartbeatIntervalMs||t.heartbeatEnabled!==void 0||t.modelHint||t.runtimeHint)&&e.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[e.jsx("h4",{children:n("agents.onboarding.sectionRuntimeHints","Runtime Hints")}),e.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldHeartbeatPath","Heartbeat Procedure Path")}),e.jsx("dd",{children:i(t.heartbeatProcedurePath)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldHeartbeatInterval","Heartbeat Interval")}),e.jsx("dd",{children:i(t.heartbeatIntervalMs?`${t.heartbeatIntervalMs}ms`:void 0)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldHeartbeatEnabled","Heartbeat Enabled")}),e.jsx("dd",{children:i(t.heartbeatEnabled===void 0?void 0:t.heartbeatEnabled?n("agents.onboarding.yes","yes"):n("agents.onboarding.no","no"))})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldModelHint","Model Hint")}),e.jsx("dd",{children:i(t.modelHint)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:n("agents.onboarding.fieldRuntimeHint","Runtime Hint")}),e.jsx("dd",{children:i(t.runtimeHint)})]})]})]}),t.rationale&&e.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[e.jsx("h4",{children:n("agents.onboarding.sectionRationale","Rationale")}),e.jsx("p",{className:"experimental-agent-onboarding-modal__summary-block",children:t.rationale})]})]}),e.jsxs("div",{className:"modal-actions",children:[e.jsx("button",{className:"btn",onClick:()=>void m(),children:n("common.cancel","Cancel")}),e.jsx("button",{className:"btn btn-primary",onClick:()=>void G(),children:b?n("agents.onboarding.applyDraftSettings","Apply draft to settings form"):n("agents.onboarding.applyDraftAgent","Apply draft to agent form")})]})]}),g==="error"&&T&&e.jsxs("div",{className:"form-group",children:[e.jsx("div",{className:"form-error",children:T}),e.jsx("div",{className:"modal-actions",children:e.jsx("button",{className:"btn",onClick:()=>void m(),children:n("common.close","Close")})})]})]})})}export{te as ExperimentalAgentOnboardingModal};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{r as i,j as e}from"./vendor-react-SZ_qB27O.js";import{c as ze,ap as le,aq as Ce,ar as je,cK as Me,cL as Je,av as Ne,cM as es,cN as ss,cO as ts,cP as is,cQ as ns,cR as as,cS as Re,cT as rs,cU as os,cV as cs,cr as ls,cW as Ie,V as hs,S as q,bW as ds,X as Ae,cX as fe,R as K,_ as gs,cw as us,an as $e,h as ae,bF as ve,bE as Te,P as De,aR as ms,b0 as Pe,cY as fs,s as vs,l as ys}from"./index-CtYRoouR.js";import{u as Ge}from"./vendor-i18n-Duky4gdQ.js";import{U as Ee}from"./users-C5uCLwVM.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";/**
|
|
2
|
-
* @license lucide-react v1.7.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const xs=[["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M16 6h.01",key:"1x0f13"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M8 6h.01",key:"1dz90k"}],["path",{d:"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3",key:"cabbwy"}],["rect",{x:"4",y:"2",width:"16",height:"20",rx:"2",key:"1uxh74"}]],ps=ze("building",xs);/**
|
|
7
|
-
* @license lucide-react v1.7.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const ks=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]],bs=ze("chart-line",ks),me=["architecture","quality","workflow","performance","reliability","security","ux","testability","documentation","dependency","features","competitive_analysis","research","trends","other"],Fe={quality:"Quality",performance:"Performance",architecture:"Architecture",security:"Security",reliability:"Reliability",ux:"User Experience",testability:"Testability",documentation:"Documentation",dependency:"Dependencies",workflow:"Workflow",other:"Other",features:"Features",competitive_analysis:"Competitive Analysis",research:"Research",trends:"Trends"};function Ss(u){const{t:f}=Ge("app"),D=u??"",I=`${je.INSIGHTS_PREFIX}${D}`,j=`${je.INSIGHT_LATEST_RUN_PREFIX}${D}`,s=le(I,{maxAgeMs:Ce}),Y=le(j,{maxAgeMs:Me}),P=i.useRef(Array.isArray(s)&&s.length>0),U=i.useCallback(r=>f(`insights.category.${r}`,Fe[r]??r),[f]),[y,C]=i.useState(()=>Array.isArray(s)?s:[]),[O,Q]=i.useState(()=>me.map(r=>({category:r,label:Fe[r]??r,items:[],isLoading:!1,error:null}))),[H,T]=i.useState(!(Array.isArray(s)&&s.length>0)),[Z,E]=i.useState(null),[G,M]=i.useState(Y??null),[F,_]=i.useState(!1),[b,L]=i.useState(null),[A,B]=i.useState(new Map),[J,l]=i.useState(new Map),[p,g]=i.useState(new Map),[x,h]=i.useState(new Map),[S,N]=i.useState(!1),v=i.useCallback(async()=>{P.current||T(!0),E(null);try{const n=(await Je({status:void 0,limit:1e3},u)).insights.filter(d=>d.status!=="dismissed");C(n),Ne(I,n.length>500?n.slice(0,500):n,{maxBytes:5e5});const o=await es(u);o.runs.length>0&&(M(o.runs[0]),Ne(j,o.runs[0],{maxBytes:5e5})),P.current=!0}catch(r){const n=r instanceof Error?r.message:"Failed to fetch insights";E(n)}finally{T(!1)}},[I,j,u]),ee=i.useCallback(()=>{N(r=>!r)},[]),w=i.useCallback(async(r,n,o)=>{_(!0),L(null);try{const d=await ss("manual",void 0,u,r,n,o);M(d),d.status==="completed"?await v():d.status==="failed"&&d.error&&L(d.error)}catch(d){if(d instanceof ts&&d.status===409&&d.details?.code==="ACTIVE_RUN_CONFLICT"){const re=typeof d.details.activeRunId=="string"?d.details.activeRunId:null;if(re)try{const ue=await is(re,u);M(ue)}catch{}throw L("Insight generation is already running"),d}const k=d instanceof Error?d.message:"Failed to generate insights";throw L(k),d}finally{_(!1)}},[u,v]),z=i.useCallback(async r=>{B(n=>{const o=new Map(n);return o.set(r,{running:!0,error:null}),o});try{await ns(r,u),C(n=>n.filter(o=>o.id!==r)),B(n=>{const o=new Map(n);return o.set(r,{running:!1,error:null}),o})}catch(n){const o=n instanceof Error?n.message:"Failed to dismiss insight";throw B(d=>{const k=new Map(d);return k.set(r,{running:!1,error:o}),k}),n}},[u]),X=i.useCallback(async r=>{l(n=>{const o=new Map(n);return o.set(r,{running:!0,error:null}),o});try{const n=await as(r,u);return await Re(r,u),C(o=>o.map(d=>d.id===r?{...d,status:"archived",updatedAt:new Date().toISOString()}:d)),l(o=>{const d=new Map(o);return d.set(r,{running:!1,error:null}),d}),{title:n.suggestedTitle,description:n.suggestedDescription}}catch(n){const o=n instanceof Error?n.message:"Failed to create task";throw l(d=>{const k=new Map(d);return k.set(r,{running:!1,error:o}),k}),n}},[u]);i.useEffect(()=>{const r=new Map;for(const n of me)r.set(n,[]);for(const n of y){if(!S&&n.status==="archived")continue;const o=r.get(n.category)??[];r.set(n.category,[...o,n])}Q(me.map(n=>({category:n,label:U(n),items:r.get(n)??[],isLoading:!1,error:null})))},[y,S,U]);const he=i.useCallback(async r=>{g(n=>{const o=new Map(n);return o.set(r,{running:!0,error:null}),o});try{await Re(r,u),C(n=>n.map(o=>o.id===r?{...o,status:"archived",updatedAt:new Date().toISOString()}:o)),g(n=>{const o=new Map(n);return o.set(r,{running:!1,error:null}),o})}catch(n){const o=n instanceof Error?n.message:"Failed to archive insight";throw g(d=>{const k=new Map(d);return k.set(r,{running:!1,error:o}),k}),n}},[u]),de=i.useCallback(async r=>{h(n=>{const o=new Map(n);return o.set(r,{running:!0,error:null}),o});try{await rs(r,u),C(n=>n.map(o=>o.id===r?{...o,status:"confirmed",updatedAt:new Date().toISOString()}:o)),h(n=>{const o=new Map(n);return o.set(r,{running:!1,error:null}),o})}catch(n){const o=n instanceof Error?n.message:"Failed to unarchive insight";throw h(d=>{const k=new Map(d);return k.set(r,{running:!1,error:o}),k}),n}},[u]),ge=i.useMemo(()=>O.reduce((r,n)=>r+n.items.length,0),[O]),R=i.useMemo(()=>0,[]),te=i.useMemo(()=>y.filter(r=>r.status==="archived").length,[y]);return i.useEffect(()=>{const r=le(I,{maxAgeMs:Ce}),n=le(j,{maxAgeMs:Me}),o=Array.isArray(r)&&r.length>0;C(Array.isArray(r)?r:[]),M(n??null),T(!o),P.current=o},[I,j]),i.useEffect(()=>{v()},[v]),{sections:O,loading:H,error:Z,latestRun:G,isRunInFlight:F,runError:b,refresh:v,runInsights:w,dismiss:z,createTask:X,archive:he,unarchive:de,toggleShowArchived:ee,dismissStates:A,createTaskStates:J,archiveStates:p,unarchiveStates:x,totalCount:ge,dismissedCount:R,archivedCount:te,showArchived:S}}const ws=20,Cs=50;function js(u){const[f,D]=i.useState([]),[I,j]=i.useState(!0),[s,Y]=i.useState(!1),[P,U]=i.useState(null),[y,C]=i.useState(!1),[O,Q]=i.useState(0),[H,T]=i.useState(!1),[Z,E]=i.useState(new Map),G=i.useRef(0),M=i.useRef(0),F=i.useRef(!1),_=i.useRef(new Set),b=i.useRef(0),L=i.useRef(u),A=i.useCallback(async p=>{if(F.current)return;F.current=!0;const g=b.current,x=p?0:G.current;p?j(!0):Y(!0),U(null);try{const h=await os(u,{limit:Cs,offset:x});if(g!==b.current)return;D(v=>{const ee=p?[]:v,w=new Set(ee.map(z=>`${z.taskId}:${z.recommendation.id}`));return[...ee,...h.items.filter(z=>{const X=`${z.taskId}:${z.recommendation.id}`;return w.has(X)?!1:(w.add(X),!0)})]}),G.current=h.rowOffset+h.returnedRowCount,M.current=p?1:M.current+1,Q(h.totalRowCount);const N=M.current>=ws&&h.hasMore;T(N),C(N?!1:h.hasMore)}catch(h){g===b.current&&U(h instanceof Error?h.message:"Failed to fetch task recommendations")}finally{g===b.current&&(j(!1),Y(!1)),F.current=!1}},[u]),B=i.useCallback(async()=>{G.current=0,M.current=0,T(!1),await A(!0)},[A]);i.useEffect(()=>{L.current=u,b.current+=1,F.current=!1,_.current.clear(),G.current=0,M.current=0,D([]),C(!1),Q(0),T(!1),E(new Map),A(!0)},[A,u]);const J=i.useCallback(async()=>{!y||H||F.current||await A(!1)},[A,y,H]),l=i.useCallback(async(p,g)=>{const x=`${p}:${g}`;if(_.current.has(x))return;_.current.add(x);const h=b.current;E(S=>new Map(S).set(x,{running:!0,error:null}));try{const S=await cs(p,g,L.current);if(h!==b.current)return;D(N=>N.map(v=>v.taskId===p&&v.recommendation.id===g?{...v,recommendation:{...v.recommendation,createdTaskId:S.task.id}}:v)),E(N=>new Map(N).set(x,{running:!1,error:null}))}catch(S){h===b.current&&E(N=>new Map(N).set(x,{running:!1,error:S instanceof Error?S.message:"Could not create task"}))}finally{h===b.current&&_.current.delete(x)}},[]);return{items:f,loading:I,loadingMore:s,error:P,hasMore:y,totalRowCount:O,truncated:H,refresh:B,loadMore:J,createTask:l,createStates:Z}}const Ue=["Backlog health:","Backlog pressure detected","Stale paused todo","Backlog health: dependency-blocked todos"];function _e(u){return Ue.some(f=>u.title.startsWith(f))}const Le={architecture:ps,quality:$e,workflow:Pe,performance:Te,reliability:K,security:ae,ux:Ee,testability:fe,documentation:ms,dependency:De,features:ve,competitive_analysis:Ee,research:bs,trends:Te,other:q};function Fs({projectId:u,addToast:f,onClose:D,onCreateTask:I,models:j}){const{t:s}=Ge("app"),{sections:Y,loading:P,error:U,latestRun:y,isRunInFlight:C,runError:O,refresh:Q,runInsights:H,dismiss:T,createTask:Z,archive:E=async()=>{},unarchive:G=async()=>{},toggleShowArchived:M=()=>{},dismissStates:F,createTaskStates:_,archiveStates:b=new Map,unarchiveStates:L=new Map,totalCount:A,archivedCount:B=0,showArchived:J=!1}=Ss(u),l=js(u),[p,g]=i.useState(null),[x,h]=i.useState("info"),[S,N]=i.useState(!1),[v,ee]=i.useState(!1),[w,z]=i.useState(()=>localStorage.getItem("fusion-insight-model")??""),[X,he]=i.useState(()=>localStorage.getItem("fusion-insight-thinking")??""),[de,ge]=i.useState([]),[R,te]=i.useState([]),[r,n]=i.useState([]),[o,d]=i.useState();i.useEffect(()=>{j||ls().then(t=>{ge(t.models),te(t.favoriteProviders),n(t.favoriteModels),d(t.resolvedPlanningProvider);const a=localStorage.getItem("fusion-insight-model");a&&(t.models.some(m=>`${m.provider}/${m.id}`===a)||(localStorage.removeItem("fusion-insight-model"),z("")))}).catch(()=>{})},[j]);const k=j??de,re=i.useMemo(()=>R.length>0?R:o?[o]:[],[R,o]),ue=i.useCallback(async t=>{const c=R.includes(t)?R.filter(m=>m!==t):[t,...R];te(c);try{await Ie({favoriteProviders:c,favoriteModels:r})}catch{te(R)}},[R,r]),Oe=i.useCallback(async t=>{const c=r.includes(t)?r.filter(m=>m!==t):[t,...r];n(c);try{await Ie({favoriteProviders:R,favoriteModels:c})}catch{n(r)}},[r,R]),He=i.useCallback(t=>{z(t),t?localStorage.setItem("fusion-insight-model",t):localStorage.removeItem("fusion-insight-model")},[]),Be=i.useCallback(t=>{he(t),t?localStorage.setItem("fusion-insight-thinking",t):localStorage.removeItem("fusion-insight-thinking")},[]),ie=i.useMemo(()=>Y.filter(t=>t.items.length>0),[Y]),ye=i.useMemo(()=>ie.reduce((t,a)=>t+a.items.filter(_e).length,0),[ie]),W=i.useMemo(()=>v?ie.map(t=>({...t,items:t.items.filter(_e)})).filter(t=>t.items.length>0):ie,[ie,v]),[$,ne]=i.useState(null);i.useEffect(()=>{if($==="recommendations"&&l.items.length>0)return;if(W.length===0){l.items.length>0?ne("recommendations"):$!==null&&ne(null);return}$&&W.some(a=>a.category===$&&a.items.length>0)||ne(W[0]?.category??(l.items.length>0?"recommendations":null))},[W,$,l.items.length]);const V=i.useMemo(()=>$==="recommendations"?void 0:W.find(t=>t.category===$)??W[0],[W,$]);i.useEffect(()=>{if(p){const t=setTimeout(()=>g(null),5e3);return()=>clearTimeout(t)}},[p]);const xe=i.useCallback(async()=>{try{g(s("insights.generatingInsights","Generating insights...")),h("info");let t,a;if(w){const c=w.indexOf("/");if(c!==-1){const m=w.slice(0,c),oe=w.slice(c+1);m&&oe&&(t=m,a=oe)}}await H(t,a,X||void 0),g(s("insights.generationStarted","Insight generation started")),h("success"),f(s("insights.generationStarted","Insight generation started"),"success")}catch(t){const a=t instanceof Error?t.message:s("insights.failedToStart","Failed to start generation");if(a==="Insight generation is already running"){g(s("insights.alreadyRunning","Insight generation is already running. Showing the active run.")),h("info"),f(s("insights.alreadyRunningShort","Insight generation is already running"),"info");return}g(a),h("error"),f(a,"error")}},[H,f,w,X,s]),Xe=i.useCallback(async(t,a)=>{try{g(s("insights.dismissing",'Dismissing "{{title}}"...',{title:a})),h("info"),await T(t),g(s("insights.dismissed",'Dismissed "{{title}}"',{title:a})),h("success"),f(s("insights.dismissedMsg","Insight dismissed: {{title}}",{title:a}),"success")}catch(c){const m=c instanceof Error?c.message:s("insights.failedToDismiss","Failed to dismiss insight");g(m),h("error"),f(m,"error")}},[T,f,s]),We=i.useCallback(async(t,a)=>{try{g(s("insights.archiving",'Archiving "{{title}}"...',{title:a})),h("info"),await E(t),g(s("insights.archived",'Archived "{{title}}"',{title:a})),h("success"),f(s("insights.archivedMsg","Insight archived: {{title}}",{title:a}),"success")}catch(c){const m=c instanceof Error?c.message:s("insights.failedToArchive","Failed to archive insight");g(m),h("error"),f(m,"error")}},[E,f,s]),Ve=i.useCallback(async(t,a)=>{try{g(s("insights.unarchiving",'Unarchiving "{{title}}"...',{title:a})),h("info"),await G(t),g(s("insights.unarchived",'Unarchived "{{title}}"',{title:a})),h("success"),f(s("insights.unarchivedMsg","Insight unarchived: {{title}}",{title:a}),"success")}catch(c){const m=c instanceof Error?c.message:s("insights.failedToUnarchive","Failed to unarchive insight");g(m),h("error"),f(m,"error")}},[G,f,s]),qe=i.useCallback(async(t,a)=>{try{if(g(s("insights.creatingTask",'Creating task from "{{title}}"...',{title:a})),h("info"),!I)throw new Error(s("insights.taskCreationUnavailable","Task creation is unavailable in this view"));const c=await Z(t);if(!c)throw new Error(s("insights.failedToPreparePayload","Failed to prepare task payload from insight"));await I({insightId:t,title:c.title,description:c.description}),g(s("insights.taskCreated",'Task created from "{{title}}"',{title:a})),h("success"),f(s("insights.taskCreatedMsg","Task created: {{title}}",{title:c.title}),"success")}catch(c){const m=c instanceof Error?c.message:s("insights.failedToCreateTask","Failed to create task");g(m),h("error"),f(m,"error")}},[Z,I,f,s]),Ke=t=>{const a=Le[t.category]??q,c=V?.category===t.category;return e.jsx("li",{children:e.jsxs("button",{type:"button",className:`insights-category-item${c?" insights-category-item--active":""}`,onClick:()=>ne(t.category),"aria-current":c?"true":void 0,"data-testid":`insights-category-${t.category}`,children:[e.jsx(a,{size:16,className:"insights-category-icon"}),e.jsx("span",{className:"insights-category-label",children:t.label}),e.jsx("span",{className:"insights-category-count",children:t.items.length})]})},t.category)},Ye=()=>e.jsxs("section",{className:"insights-section insights-recommendations","data-testid":"insights-section-recommendations",children:[e.jsx("div",{className:"insights-section-header",children:e.jsxs("div",{className:"insights-section-title",children:[e.jsx(ve,{size:18,className:"insights-section-icon"}),e.jsx("h3",{children:s("insights.recommendations.title","Task Recommendations")}),e.jsx("span",{className:"insights-section-count",children:l.items.length})]})}),e.jsx("p",{className:"insights-recommendations__count",children:s("insights.recommendations.count","Showing {{shown}} of {{total}} source tasks",{shown:l.items.length,total:l.totalRowCount})}),e.jsx("ul",{className:"insights-list",children:l.items.map(t=>{const a=`${t.taskId}:${t.recommendation.id}`,c=l.createStates.get(a),m=t.recommendation.createdTaskId;return e.jsxs("li",{className:"insight-item insights-recommendations__item","data-testid":`task-recommendation-${a}`,children:[e.jsxs("div",{className:"insight-item-header",children:[e.jsx("h4",{className:"insight-item-title",children:t.recommendation.title}),e.jsx("span",{className:"insights-category-count",children:t.recommendation.category})]}),e.jsx("p",{children:t.recommendation.description}),e.jsx("p",{className:"insights-recommendations__source",children:s("insights.recommendations.source","Source: {{task}}",{task:t.taskTitle?`${t.taskId} — ${t.taskTitle}`:t.taskId})}),m?e.jsx("span",{role:"status",children:s("taskDetail.recommendations.created","Created {{taskId}}",{taskId:m})}):e.jsxs("div",{children:[e.jsx("button",{className:"btn btn-primary",type:"button",disabled:c?.running,onClick:()=>void l.createTask(t.taskId,t.recommendation.id),children:c?.running?s("taskDetail.recommendations.creating","Creating…"):c?.error?s("taskDetail.recommendations.retry","Retry creating task"):s("taskDetail.recommendations.create","Create task")}),c?.error&&e.jsx("span",{role:"status",children:s("taskDetail.recommendations.error","Could not create task. Try again.")})]})]},a)})}),l.truncated?e.jsx("p",{role:"status",children:s("insights.recommendations.truncated","Showing the first 20 pages. Refresh to see the latest recommendations.")}):l.hasMore?e.jsx("button",{className:"btn",type:"button",disabled:l.loadingMore,onClick:()=>void l.loadMore(),children:l.loadingMore?s("insights.recommendations.loadingMore","Loading more…"):s("insights.recommendations.loadMore","Load more")}):null,l.error&&!l.loading&&e.jsxs("div",{role:"status",children:[e.jsx("span",{children:s("insights.recommendations.loadMoreFailed","Could not load more recommendations.")}),e.jsx("button",{className:"btn",type:"button",onClick:()=>void(l.hasMore?l.loadMore():l.refresh()),children:s("actions.retry","Retry")})]})]}),Qe=()=>{if(!V)return null;const t=Le[V.category]??q;return e.jsxs("section",{className:"insights-section","data-testid":`insights-section-${V.category}`,children:[e.jsx("div",{className:"insights-section-header",children:e.jsxs("div",{className:"insights-section-title",children:[e.jsx(t,{size:18,className:"insights-section-icon"}),e.jsx("h3",{children:V.label}),e.jsx("span",{className:"insights-section-count",children:V.items.length})]})}),e.jsx("div",{className:"insights-section-content",children:e.jsx("ul",{className:"insights-list",children:V.items.map(a=>{const c=F.get(a.id),m=_.get(a.id),oe=b.get(a.id),Ze=L.get(a.id),pe=c?.running??!1,ke=m?.running??!1,be=oe?.running??!1,Se=Ze?.running??!1,we=a.status==="archived",ce=V.items.some(se=>F.get(se.id)?.running||_.get(se.id)?.running||b.get(se.id)?.running||L.get(se.id)?.running);return e.jsxs("li",{className:`insight-item${we?" insight-item--archived":""}`,"data-insight-id":a.id,draggable:ys(),onDragStart:se=>{vs(se.dataTransfer,{kind:"research-finding",id:a.id,projectId:u})},children:[e.jsxs("div",{className:"insight-item-header",children:[e.jsx("h4",{className:"insight-item-title",children:a.title}),e.jsxs("div",{className:"insight-item-actions",children:[we?e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void Ve(a.id,a.title),disabled:Se||ce,title:s("insights.unarchiveTitle","Unarchive this insight"),"aria-label":s("insights.unarchiveLabel","Unarchive this insight"),"data-testid":`unarchive-${a.id}`,children:Se?e.jsx(K,{size:16,className:"spin"}):e.jsx(fs,{size:16})}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void qe(a.id,a.title),disabled:ke||ce,title:s("insights.createTaskTitle","Create task from this insight"),"aria-label":s("insights.createTaskLabel","Create task from this insight"),"data-testid":`create-task-${a.id}`,children:ke?e.jsx(K,{size:16,className:"spin"}):e.jsx(De,{size:16})}),e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void We(a.id,a.title),disabled:be||ce,title:s("insights.archiveTitle","Archive this insight"),"aria-label":s("insights.archiveLabel","Archive this insight"),"data-testid":`archive-${a.id}`,children:be?e.jsx(K,{size:16,className:"spin"}):e.jsx(fe,{size:16})})]}),e.jsx("button",{className:"insight-item-action-btn",onClick:()=>void Xe(a.id,a.title),disabled:pe||ce,title:s("insights.dismissTitle","Dismiss this insight"),"aria-label":s("insights.dismissLabel","Dismiss this insight"),"data-testid":`dismiss-${a.id}`,children:pe?e.jsx(K,{size:16,className:"spin"}):e.jsx(Ae,{size:16})})]})]}),a.content&&e.jsx("p",{className:"insight-item-content",children:a.content}),e.jsxs("div",{className:"insight-item-meta",children:[e.jsx("span",{className:`insight-item-status insight-item-status--${a.status}`,children:a.status}),a.createdAt&&e.jsxs("span",{className:"insight-item-date",children:[e.jsx(Pe,{size:12}),new Date(a.createdAt).toLocaleDateString()]})]})]},a.id)})})})]})};return e.jsxs("div",{className:"insights-view","data-testid":"insights-view",children:[e.jsx(hs,{icon:q,title:s("insights.title","Insights"),actions:e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"insights-view-count",children:[A," ",s("common.total","total")]}),ye>0&&e.jsxs("button",{className:`btn btn-sm insights-backlog-health-toggle${v?" btn-icon--active":""}`,onClick:()=>ee(t=>!t),"aria-pressed":v,"aria-label":v?s("insights.showAllInsights","Show all insights"):s("insights.showBacklogHealth","Show only backlog health insights"),"data-testid":"toggle-backlog-health",title:Ue.join(", "),children:[e.jsx(ds,{size:14}),v?s("insights.allInsights","All Insights"):s("insights.backlogHealth","Backlog")," ",e.jsxs("span",{children:["(",ye,")"]})]}),D&&e.jsx("button",{className:"btn btn-sm insights-view-close",onClick:D,"aria-label":s("actions.closeInsightsView","Close insights view"),title:s("actions.close","Close"),children:e.jsx(Ae,{size:16})}),B>0&&e.jsxs("button",{className:"btn btn-sm insights-show-archived-toggle",onClick:M,"aria-label":J?s("insights.hideArchived","Hide archived insights"):s("insights.showArchived","Show archived insights"),"data-testid":"toggle-archived-insights",children:[e.jsx(fe,{size:14}),J?s("insights.hideArchivedLabel","Archived"):s("insights.showArchivedLabel","Archived ({{count}})",{count:B})]}),e.jsx("button",{className:"btn btn-icon btn-sm insights-refresh-btn",onClick:()=>void Q(),disabled:P,"aria-label":s("actions.refreshInsights","Refresh insights"),title:s("actions.refreshInsights","Refresh insights"),"data-testid":"refresh-insights",children:e.jsx(K,{size:14,className:P?"spin":""})}),e.jsxs("button",{className:"btn btn-sm insights-model-toggle",onClick:()=>N(t=>!t),"aria-label":s("insights.configureModel","Configure insight generation model"),"aria-expanded":S,"data-testid":"toggle-model-config",title:w?s("insights.modelConfigured","Model: {{model}}",{model:w}):s("insights.configureModelTitle","Configure model"),children:[e.jsx(gs,{size:14}),w&&e.jsx("span",{className:"insights-model-indicator"})]}),e.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void xe(),disabled:C,"aria-label":s("insights.generateInsights","Generate new insights"),"data-testid":"run-insights",children:C?e.jsxs(e.Fragment,{children:[e.jsx(K,{size:14,className:"spin"}),s("insights.generating","Generating...")]}):e.jsxs(e.Fragment,{children:[e.jsx(q,{size:14}),s("insights.generateInsightsBtn","Generate Insights")]})})]})}),S&&e.jsxs("div",{className:"insights-model-config","data-testid":"model-config",children:[e.jsx("label",{htmlFor:"insight-model-select",className:"insights-model-label",children:s("insights.model","Model")}),e.jsx(us,{models:k,value:w,onChange:He,placeholder:s("insights.usePlanningDefault","Use planning default"),label:s("insights.generationModel","Insight generation model"),disabled:C,id:"insight-model-select",favoriteProviders:re,favoriteModels:r,onToggleFavorite:ue,onToggleModelFavorite:Oe,showThinkingLevel:!0,thinkingLevel:X,onThinkingLevelChange:Be,defaultThinkingLevel:"off"})]}),e.jsx("div",{className:"insights-status-region","aria-live":"polite","data-testid":"insights-status",children:p&&e.jsxs("div",{className:`insights-status-message insights-status-message--${x}`,role:x==="error"?"alert":void 0,children:[x==="success"&&e.jsx($e,{size:16}),x==="error"&&e.jsx(ae,{size:16}),x==="info"&&e.jsx(q,{size:16}),e.jsx("span",{children:p})]})}),O&&e.jsxs("div",{className:"insights-error-callout",role:"alert","data-testid":"run-error",children:[e.jsx(ae,{size:16}),e.jsx("span",{children:O})]}),y&&e.jsx("div",{className:"insights-run-info","data-testid":"latest-run",children:e.jsxs("span",{className:"insights-run-status",children:[s("insights.latestRun","Latest run:")," ",y.status,y.status==="completed"&&e.jsxs(e.Fragment,{children:[" — ",s("insights.runCompleted","{{created}} created, {{updated}} updated",{created:y.insightsCreated,updated:y.insightsUpdated})]}),y.status==="failed"&&y.error&&e.jsxs(e.Fragment,{children:[" — ",y.error]})]})}),l.error&&!l.loading&&l.items.length===0&&e.jsxs("div",{className:"insights-error-callout",role:"status","data-testid":"task-recommendations-error",children:[e.jsx(ae,{size:16}),e.jsx("span",{children:s("insights.recommendations.loadMoreFailed","Could not load more recommendations.")}),e.jsx("button",{className:"btn btn-sm",type:"button",onClick:()=>void l.refresh(),children:s("actions.retry","Retry")})]}),P?e.jsxs("div",{className:"insights-loading","data-testid":"insights-loading",children:[e.jsx(K,{size:24,className:"spin"}),e.jsx("p",{children:s("insights.loading","Loading insights...")})]}):U?e.jsxs("div",{className:"insights-error","data-testid":"insights-error",children:[e.jsx(ae,{size:24}),e.jsx("p",{children:U}),e.jsx("button",{className:"btn btn-sm",onClick:()=>void Q(),children:s("actions.retry","Retry")})]}):A===0&&l.items.length===0?e.jsxs("div",{className:"insights-empty","data-testid":"insights-empty",children:[e.jsx(q,{size:48}),e.jsx("h3",{children:s("insights.noInsightsYet","No insights yet")}),e.jsx("p",{children:s("insights.generateDescription","Generate insights to get AI-powered recommendations for your project.")}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void xe(),children:[e.jsx(q,{size:14}),s("insights.generateFirst","Generate First Insights")]})]}):e.jsxs("div",{className:"insights-body",children:[e.jsx("aside",{className:"insights-sidebar","aria-label":s("insights.categoriesLabel","Insight categories"),children:e.jsxs("ul",{className:"insights-category-list",children:[W.map(Ke),l.items.length>0&&e.jsx("li",{children:e.jsxs("button",{type:"button",className:`insights-category-item${$==="recommendations"?" insights-category-item--active":""}`,onClick:()=>ne("recommendations"),"data-testid":"insights-category-recommendations",children:[e.jsx(ve,{size:16,className:"insights-category-icon"}),e.jsx("span",{className:"insights-category-label",children:s("insights.recommendations.title","Task Recommendations")}),e.jsxs("span",{className:"insights-category-count",children:[l.items.length,l.hasMore?`/${l.totalRowCount}`:""]})]})})]})}),e.jsx("div",{className:"insights-detail",children:$==="recommendations"?Ye():Qe()})]})]})}export{Fs as InsightsView};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{r,j as e}from"./vendor-react-SZ_qB27O.js";import{u as Le,f as fe,a as Se,s as Re,i as qe,t as Te,b as je,c as ve,d as Pe,e as He,g as _e,h as Oe}from"./SettingsModal-rUQcSTJp.js";import{aY as Ue,aX as $e,V as Qe,aZ as Be,L as D,aK as Ne}from"./index-CtYRoouR.js";import{u as We}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";const O=".fusion/memory/MEMORY.md",Ve=5e4,Ye="0 3 * * *",Ze="0 4 * * *";function de(i){return{memoryEnabled:i.memoryEnabled!==!1,memoryAutoSummarizeEnabled:i.memoryAutoSummarizeEnabled??!1,memoryAutoSummarizeThresholdChars:i.memoryAutoSummarizeThresholdChars??Ve,memoryAutoSummarizeSchedule:i.memoryAutoSummarizeSchedule??Ye,memoryDreamsEnabled:i.memoryDreamsEnabled??!1,memoryDreamsSchedule:i.memoryDreamsSchedule??Ze}}function Ce(i,t){return i.some(h=>h.path===t)?t:i.find(h=>h.path===O)?.path??i[0]?.path??O}function Ge(i={}){const{projectId:t}=i,[h,s]=r.useState(null),[d,v]=r.useState(!0),[L,z]=r.useState(!1),[I,S]=r.useState(()=>de({})),[x,j]=r.useState(!0),[n,k]=r.useState(!1),[U,$]=r.useState([]),[X,R]=r.useState(!0),[y,M]=r.useState(O),[N,w]=r.useState(""),[ye,Q]=r.useState(!1),[l,u]=r.useState(!1),[J,B]=r.useState(!1),[g,W]=r.useState(!1),[ee,q]=r.useState(!1),[c,P]=r.useState(null),[he,V]=r.useState(!0),[se,Y]=r.useState(!1),[te,Z]=r.useState(!1),{status:G,loading:ue,refresh:A}=Le({projectId:t}),K=r.useCallback(m=>{w(m),u(!0)},[]),H=r.useCallback(async m=>{Q(!0);try{const{content:o}=await fe(m,t);M(m),w(o),u(!1)}finally{Q(!1)}},[t]),C=r.useCallback(async()=>{R(!0);try{const{files:m}=await Se(t);if($(m),m.length===0){M(O),w(""),u(!1);return}const o=Ce(m,y);o!==y&&await H(o)}finally{R(!1)}},[t,y,H]);r.useEffect(()=>{let m=!1;async function o(){try{const p=await ve(t);m||(s(p.content),z(p.exists),v(!1))}catch{m||(s(null),z(!1),v(!1))}}return o(),()=>{m=!0}},[t]),r.useEffect(()=>{let m=!1;async function o(){j(!0);try{const p=await $e(t);m||S(de(p))}catch{m||S(de({}))}finally{m||j(!1)}}return o(),()=>{m=!0}},[t]);const ae=r.useRef(y);r.useEffect(()=>{ae.current=y},[y]),r.useEffect(()=>{let m=!1;async function o(){R(!0);try{const{files:p}=await Se(t);if(m)return;if($(p),p.length===0){M(O),w(""),u(!1);return}const oe=Ce(p,ae.current),{content:xe}=await fe(oe,t);if(m)return;M(oe),w(xe),u(!1)}catch{m||($([]),M(O),w(""),u(!1))}finally{m||R(!1)}}return o(),()=>{m=!0}},[t]),r.useEffect(()=>{let m=!1;async function o(){try{const p=await je(t);m||(P(p),V(!1))}catch{m||(P(null),V(!1))}}return o(),()=>{m=!0}},[t]);const re=r.useCallback(async m=>{k(!0);try{const o=await Ue(m,t);S(de(o))}finally{k(!1)}},[t]),me=r.useCallback(async m=>{await H(m)},[H]),ne=r.useCallback(async()=>{if(l){B(!0);try{await Re(y,N,t),u(!1),await C()}finally{B(!1)}}},[N,l,y,t,C]),ie=r.useCallback(async()=>{Z(!0);try{const m=await qe(t);return await A(),m}finally{Z(!1)}},[t,A]),le=r.useCallback(async m=>Te(m,t),[t]),_=r.useCallback(async()=>{try{const m=await je(t);P(m)}catch{P(null)}},[t]),F=r.useCallback(async()=>{try{const m=await ve(t);s(m.content),z(m.exists)}catch{s(null),z(!1)}},[t]),f=r.useCallback(async m=>{await Pe(m,t),await F()},[t,F]),ge=r.useCallback(async()=>{W(!0);try{const m=await He(t);return await Promise.all([F(),_()]),{success:m.success,summary:m.summary}}finally{W(!1)}},[t,F,_]),T=r.useCallback(async()=>{q(!0);try{return await _e(t)}finally{q(!1)}},[t]),be=r.useCallback(async m=>{Y(!0);try{const o=await Oe(m,t),p=o.path??m;M(p),w(o.content),u(!1),await C()}finally{Y(!1)}},[t,C]);return{insightsContent:h,insightsLoading:d,insightsExists:L,refreshInsights:F,saveInsights:f,memorySettings:I,settingsLoading:x,savingMemorySettings:n,saveMemorySettings:re,memoryFiles:U,memoryFilesLoading:X,selectedFilePath:y,selectedFileContent:N,selectedFileLoading:ye,selectedFileDirty:l,setSelectedFileContent:K,selectFile:me,saveSelectedFile:ne,savingSelectedFile:J,reloadMemoryFiles:C,backendStatus:G,backendLoading:ue,extractInsights:ge,extracting:g,triggerDreamNow:T,dreamRunning:ee,auditReport:c,auditLoading:he,refreshAudit:_,compactMemory:be,compacting:se,installQmdAction:ie,installingQmd:te,testRetrieval:le}}const Ke={Patterns:"pattern",Principles:"principle",Conventions:"convention",Pitfalls:"pitfall",Context:"context"},Xe=72;function Je(i,t){if(i.length<=t)return i;const h=Math.max(1,t-1),s=Math.ceil(h/2),d=Math.floor(h/2);return`${i.slice(0,s)}…${i.slice(i.length-d)}`}function es(i){const t=`${i.label} — ${i.path}`;return Je(t,Xe)}function ss(i){if(!i)return[];const t=[],h=i.split(/(?=^## )/m);for(const s of h){const d=s.trim();if(!d)continue;const v=d.match(/^##\s+(.+?)(\n|$)/);if(v){const L=v[1].trim(),z=Ke[L]??L.toLowerCase(),I=d.slice(v[0].length).replace(/<!--[\s\S]*?-->/g,"").trim(),S=I.split(`
|
|
2
|
-
`).reduce((x,j)=>{const n=j.trim();return/^[-*]\s+/.test(j)?x.push(n.replace(/^[-*]\s+/,"")):n.length>0&&x.length>0&&(x[x.length-1]=`${x[x.length-1]}
|
|
3
|
-
${j.trimEnd()}`),x},[]);(S.length>0||I.length>0)&&t.push({name:L,key:z,items:S.length>0?S:I.length>0?[I]:[],expanded:!0})}}return t}function ts(i){if(!i)return null;const t=i.match(/##\s+Last\s+Updated:\s*(\d{4}-\d{2}-\d{2})/i);return t?t[1]:null}function as(i){return i.reduce((t,h)=>t+h.items.length,0)}function ds({projectId:i,addToast:t,onSendSelectionToTask:h}){const{t:s}=We("app"),[d,v]=r.useState("working"),[L,z]=r.useState(new Set),[I,S]=r.useState(!1),[x,j]=r.useState(null),[n,k]=r.useState({memoryEnabled:!0,memoryAutoSummarizeEnabled:!1,memoryAutoSummarizeThresholdChars:5e4,memoryAutoSummarizeSchedule:"0 3 * * *",memoryDreamsEnabled:!1,memoryDreamsSchedule:"0 4 * * *"}),[U,$]=r.useState(""),[X,R]=r.useState(!1),[y,M]=r.useState(null),{insightsContent:N,insightsLoading:w,insightsExists:ye,saveInsights:Q,memorySettings:l,settingsLoading:u,saveMemorySettings:J,savingMemorySettings:B,backendStatus:g,backendLoading:W,extractInsights:ee,extracting:q,auditReport:c,auditLoading:P,refreshAudit:he,compactMemory:V,compacting:se,installQmdAction:Y,installingQmd:te,testRetrieval:Z,memoryFiles:G,memoryFilesLoading:ue,selectedFilePath:A,selectedFileContent:K,selectedFileLoading:H,selectedFileDirty:C,setSelectedFileContent:ae,selectFile:re,saveSelectedFile:me,savingSelectedFile:ne,reloadMemoryFiles:ie,triggerDreamNow:le,dreamRunning:_}=Ge({projectId:i});r.useEffect(()=>{k(l)},[l]);const F=r.useMemo(()=>n.memoryEnabled!==l.memoryEnabled||n.memoryAutoSummarizeEnabled!==l.memoryAutoSummarizeEnabled||n.memoryAutoSummarizeThresholdChars!==l.memoryAutoSummarizeThresholdChars||n.memoryAutoSummarizeSchedule!==l.memoryAutoSummarizeSchedule||n.memoryDreamsEnabled!==l.memoryDreamsEnabled||n.memoryDreamsSchedule!==l.memoryDreamsSchedule,[n,l]),f=r.useMemo(()=>G.find(a=>a.path===A),[G,A]),ge=f?f.layer==="long-term"?s("memory.layerDescLongTerm","Curated durable decisions, conventions, constraints, and pitfalls promoted from dreams."):f.layer==="daily"?s("memory.layerDescDaily","Raw daily observations, open loops, and running context for dream processing."):s("memory.layerDescDreams","Synthesized patterns and open loops promoted from daily memory."):s("memory.editorDefaultDescription","Edits the selected memory file."),T=r.useMemo(()=>ss(N),[N]),be=r.useMemo(()=>as(T),[T]),m=r.useMemo(()=>ts(N),[N]),o=r.useCallback(a=>{z(b=>{const E=new Set(b);return E.has(a)?E.delete(a):E.add(a),E})},[]),p=r.useCallback(async a=>{try{await re(a)}catch{t(s("memory.loadFileFailed","Failed to load memory file"),"error")}},[re,t]),oe=r.useCallback(async()=>{try{await me(),t(s("memory.memorySaved","Memory saved"),"success")}catch{t(s("memory.saveMemoryFailed","Failed to save memory"),"error")}},[me,t]),xe=r.useCallback(async()=>{if(!F)return;const a={};n.memoryEnabled!==l.memoryEnabled&&(a.memoryEnabled=n.memoryEnabled),n.memoryAutoSummarizeEnabled!==l.memoryAutoSummarizeEnabled&&(a.memoryAutoSummarizeEnabled=n.memoryAutoSummarizeEnabled),n.memoryAutoSummarizeThresholdChars!==l.memoryAutoSummarizeThresholdChars&&(a.memoryAutoSummarizeThresholdChars=n.memoryAutoSummarizeThresholdChars),n.memoryAutoSummarizeSchedule!==l.memoryAutoSummarizeSchedule&&(a.memoryAutoSummarizeSchedule=n.memoryAutoSummarizeSchedule),n.memoryDreamsEnabled!==l.memoryDreamsEnabled&&(a.memoryDreamsEnabled=n.memoryDreamsEnabled),n.memoryDreamsSchedule!==l.memoryDreamsSchedule&&(a.memoryDreamsSchedule=n.memoryDreamsSchedule);try{await J(a),t(s("memory.settingsSaved","Memory settings saved"),"success")}catch{t(s("memory.saveSettingsFailed","Failed to save memory settings"),"error")}},[F,n,l,J,t]),Ee=r.useCallback(async()=>{try{const a=await Y();t(a.qmdAvailable?s("memory.qmdInstallSuccess","qmd installed successfully"):s("memory.qmdInstallUnavailable","qmd install finished, but qmd is still unavailable"),a.qmdAvailable?"success":"info")}catch{t(s("memory.installQmdFailed","Failed to install qmd"),"error")}},[Y,t]),ke=r.useCallback(async()=>{R(!0),M(null);try{const a=await Z(U);M(a),t(a.qmdAvailable?s("memory.retrievalTestComplete","Memory retrieval test complete"):s("memory.retrievalTestFallback","qmd is not installed; local fallback was used"),a.qmdAvailable?"success":"info")}catch{t(s("memory.retrievalTestFailed","Failed to test memory retrieval"),"error")}finally{R(!1)}},[U,Z,t]),Me=r.useCallback(async()=>{try{await le(),t(s("memory.dreamProcessingComplete","Dream processing completed"),"success"),await ie()}catch(a){t(a instanceof Error?a.message:s("memory.dreamProcessingFailed","Failed to run dream processing"),"error")}},[le,ie,t]),we=r.useCallback(async()=>{try{await V(A),t(s("memory.fileCompacted","Memory file compacted"),"success")}catch{t(s("memory.compactFailed","Failed to compact memory"),"error")}},[V,A,t]),pe=r.useCallback(async()=>{try{const a=await ee();t(a.summary,"success")}catch(a){t(a instanceof Error?a.message:s("memory.extractInsightsFailed","Failed to extract insights"),"error")}},[ee,t]),Ae=r.useCallback(async()=>{if(x!==null)try{await Q(x),S(!1),j(null),t(s("memory.insightsSaved","Insights saved"),"success")}catch{t(s("memory.saveInsightsFailed","Failed to save insights"),"error")}},[x,Q,t]),Fe=r.useCallback(()=>{j(N??""),S(!0)},[N]),De=r.useCallback(()=>{S(!1),j(null)},[]),ze=!W&&g!==null,ce=g?.capabilities?.writable??!1;return e.jsxs("div",{className:"memory-view",children:[e.jsx(Qe,{icon:Be,title:s("memory.title","Memory")}),e.jsxs("div",{className:"memory-view-tabs",role:"tablist",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":d==="working",className:`memory-view-tab${d==="working"?" memory-view-tab--active":""}`,onClick:()=>v("working"),"data-testid":"memory-tab-working",children:s("memory.tabWorking","Working Memory")}),e.jsx("button",{type:"button",role:"tab","aria-selected":d==="insights",className:`memory-view-tab${d==="insights"?" memory-view-tab--active":""}`,onClick:()=>v("insights"),"data-testid":"memory-tab-insights",children:s("memory.tabInsights","Insights")}),e.jsx("button",{type:"button",role:"tab","aria-selected":d==="engines",className:`memory-view-tab${d==="engines"?" memory-view-tab--active":""}`,onClick:()=>v("engines"),"data-testid":"memory-tab-engines",children:s("memory.tabEngines","Engines")})]}),e.jsxs("div",{className:"memory-view-content",children:[d==="working"&&e.jsxs("div",{className:"memory-working-tab",children:[ze&&!ce&&e.jsx("div",{className:"memory-readonly-banner",children:s("memory.readOnlyBanner","This memory backend is read-only. Changes cannot be saved.")}),ue||H?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(D,{size:20,className:"animate-spin"}),e.jsx("span",{children:s("memory.loadingFile","Loading memory file…")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"memory-editor-section",children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryViewFilePath",children:s("memory.fileLabel","Memory File")}),e.jsx("select",{id:"memoryViewFilePath",className:"select",value:A,onChange:a=>{p(a.target.value)},disabled:C,children:G.map(a=>e.jsx("option",{value:a.path,title:`${a.label} — ${a.path}`,children:es(a)},a.path))}),e.jsx("small",{children:C?s("memory.fileSwitchDirtyHint","Save or discard the current edits before switching files."):s("memory.fileSwitchHint","Choose any project memory file to view or edit.")})]}),f&&e.jsxs("div",{className:"memory-file-summary",children:[e.jsx("span",{children:f.layer==="long-term"?s("memory.layerLongTerm","Long-term"):f.layer==="daily"?s("memory.layerDaily","Daily"):s("memory.layerDreams","Dreams")}),e.jsx("strong",{children:f.path}),e.jsx("small",{children:s("memory.fileSummary","{{size}} bytes · updated {{updatedAt}}",{size:f.size.toLocaleString(),updatedAt:new Date(f.updatedAt).toLocaleString()})})]}),e.jsxs("div",{className:"form-group memory-editor-form-group",children:[e.jsx("label",{children:f?.label||s("memory.editorLabel","Memory Editor")}),e.jsx("small",{children:ge}),e.jsx("div",{className:"memory-editor-container",children:e.jsx(Ne,{content:K,onChange:ae,readOnly:!ce,filePath:A,forceToolbarActionsVisible:!0,onSendSelectionToTask:h})})]})]}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsx("span",{className:"memory-char-count",children:s("memory.charCount","{{count}} characters",{count:K.length})}),e.jsx("div",{className:"memory-flex-spacer"}),ce&&K.length>0&&e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:we,disabled:se||C,children:se?e.jsxs(e.Fragment,{children:[e.jsx(D,{size:14,className:"animate-spin"}),s("memory.compacting","Compacting…")]}):s("memory.compactSelectedFile","Compact Selected File")}),C&&ce&&e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:oe,disabled:ne,children:ne?e.jsxs(e.Fragment,{children:[e.jsx(D,{size:14,className:"animate-spin"}),s("memory.saving","Saving…")]}):s("memory.save","Save")})]}),e.jsxs("div",{className:"memory-config-section",children:[e.jsxs("div",{className:"memory-settings-group",children:[e.jsxs("div",{className:"form-group memory-toggle-row",children:[e.jsxs("label",{htmlFor:"memoryDreamsEnabled",className:"checkbox-label",title:s("memory.dreamsEnabledTooltip","Daily notes are distilled into DREAMS.md and reusable lessons are promoted into MEMORY.md."),children:[e.jsx("input",{id:"memoryDreamsEnabled",type:"checkbox",checked:n.memoryDreamsEnabled,onChange:a=>{k(b=>({...b,memoryDreamsEnabled:a.target.checked}))},disabled:!n.memoryEnabled||u}),s("memory.dreamsEnabledLabel","Process dreams from daily memory")]}),e.jsx("small",{children:s("memory.dreamsEnabledHint","Turns daily notes into DREAMS.md and promotes reusable lessons into MEMORY.md.")})]}),n.memoryEnabled&&n.memoryDreamsEnabled&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryDreamsSchedule",children:s("memory.dreamsScheduleLabel","Dream Schedule")}),e.jsx("input",{id:"memoryDreamsSchedule",type:"text",className:"input",value:n.memoryDreamsSchedule,onChange:a=>{k(b=>({...b,memoryDreamsSchedule:a.target.value}))},placeholder:"0 4 * * *",disabled:u}),e.jsx("small",{children:s("memory.dreamsScheduleHint","Cron expression for dream processing.")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("button",{type:"button",className:"btn btn-sm",onClick:Me,disabled:_||!n.memoryDreamsEnabled,children:_?e.jsxs(e.Fragment,{children:[e.jsx(D,{size:14,className:"animate-spin"}),s("memory.dreaming","Dreaming…")]}):s("memory.dreamNow","Dream Now")}),e.jsx("small",{children:s("memory.dreamNowHint","Manually trigger dream processing now.")})]})]})]}),e.jsxs("div",{className:"memory-settings-group",children:[e.jsxs("div",{className:"form-group memory-toggle-row",children:[e.jsxs("label",{htmlFor:"memoryAutoSummarizeEnabled",className:"checkbox-label",children:[e.jsx("input",{id:"memoryAutoSummarizeEnabled",type:"checkbox",checked:n.memoryAutoSummarizeEnabled,onChange:a=>{k(b=>({...b,memoryAutoSummarizeEnabled:a.target.checked}))},disabled:!n.memoryEnabled||u}),s("memory.autoSummarizeLabel","Auto-summarize memory")]}),e.jsx("small",{children:s("memory.autoSummarizeHint","Automatically compacts memory when it exceeds the threshold on a schedule.")})]}),n.memoryEnabled&&n.memoryAutoSummarizeEnabled&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryAutoSummarizeThresholdChars",children:s("memory.compactionThresholdLabel","Compaction Threshold (chars)")}),e.jsx("input",{id:"memoryAutoSummarizeThresholdChars",type:"number",className:"input",value:n.memoryAutoSummarizeThresholdChars,onChange:a=>{k(b=>({...b,memoryAutoSummarizeThresholdChars:parseInt(a.target.value,10)||5e4}))},min:1e3,disabled:u}),e.jsx("small",{children:s("memory.compactionThresholdHint","Memory will be compacted when it exceeds this character count")})]}),e.jsxs("div",{className:"form-group",children:[e.jsx("label",{htmlFor:"memoryAutoSummarizeSchedule",children:s("memory.autoSummarizeScheduleLabel","Schedule (cron)")}),e.jsx("input",{id:"memoryAutoSummarizeSchedule",type:"text",className:"input",value:n.memoryAutoSummarizeSchedule,onChange:a=>{k(b=>({...b,memoryAutoSummarizeSchedule:a.target.value}))},placeholder:"0 3 * * *",disabled:u}),e.jsx("small",{children:s("memory.autoSummarizeScheduleHint","Cron expression for auto-summarize schedule (default: daily at 3 AM)")})]})]})]}),!n.memoryEnabled&&e.jsx("div",{className:"settings-empty-state memory-status-message",children:s("memory.disabledMessage","Memory is currently disabled. Enable memory tools in Settings to edit these automations.")}),F&&e.jsx("div",{className:"memory-action-bar",children:e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:xe,disabled:B||u,children:B?e.jsxs(e.Fragment,{children:[e.jsx(D,{size:14,className:"animate-spin"}),s("memory.saving","Saving…")]}):s("memory.saveSettings","Save Settings")})})]})]})]}),d==="insights"&&e.jsx("div",{className:"memory-insights-tab",children:w?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(D,{size:20,className:"animate-spin"}),e.jsx("span",{children:s("memory.loadingInsights","Loading insights…")})]}):I?e.jsxs("div",{className:"memory-insights-editor-layout",children:[e.jsx("div",{className:"memory-editor-container",children:e.jsx(Ne,{content:x??"",onChange:j,readOnly:!1,filePath:".fusion/memory/memory-insights.md",forceToolbarActionsVisible:!0,onSendSelectionToTask:h})}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:De,children:s("memory.cancel","Cancel")}),e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ae,children:s("memory.saveInsights","Save Insights")})]})]}):!ye||T.length===0?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx("p",{children:s("memory.noInsights","No insights extracted yet.")}),e.jsx("p",{children:s("memory.noInsightsHint",'Insights are automatically extracted from working memory. Click "Extract Now" to trigger extraction manually.')}),e.jsx("button",{type:"button",className:"btn btn-primary btn-sm memory-empty-extract-button",onClick:pe,disabled:q,children:q?e.jsxs(e.Fragment,{children:[e.jsx(D,{size:14,className:"animate-spin"}),s("memory.extracting","Extracting…")]}):s("memory.extractNow","Extract Now")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"memory-stats-row",children:[e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value",children:be}),e.jsx("div",{className:"memory-stat-label",children:s("memory.totalInsights","Total Insights")})]}),e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value",children:T.length}),e.jsx("div",{className:"memory-stat-label",children:s("memory.categories","Categories")})]}),m&&e.jsxs("div",{className:"memory-stat-card",children:[e.jsx("div",{className:"memory-stat-value memory-stat-value--updated",children:m}),e.jsx("div",{className:"memory-stat-label",children:s("memory.lastUpdated","Last Updated")})]})]}),e.jsxs("div",{className:"memory-action-bar",children:[e.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:pe,disabled:q,children:q?e.jsxs(e.Fragment,{children:[e.jsx(D,{size:14,className:"animate-spin"}),s("memory.extracting","Extracting…")]}):s("memory.extractNow","Extract Now")}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:Fe,children:s("memory.editRaw","Edit Raw")})]}),e.jsx("div",{className:"memory-categories-list",children:T.map(a=>{const b=!L.has(a.key);return e.jsxs("div",{className:"memory-category-section",children:[e.jsxs("div",{className:"memory-category-header",onClick:()=>o(a.key),role:"button",tabIndex:0,onKeyDown:E=>{(E.key==="Enter"||E.key===" ")&&(E.preventDefault(),o(a.key))},children:[e.jsx("h4",{children:a.name}),e.jsx("span",{className:"memory-category-count",children:a.items.length})]}),b&&e.jsx("div",{className:"memory-category-items",children:a.items.map((E,Ie)=>e.jsx("div",{className:"memory-insight-item",children:E.replace(/^-\s+/,"").replace(/^\*\s+/,"")},Ie))})]},a.key)})})]})}),d==="engines"&&e.jsx("div",{className:"memory-engines-tab",children:W||P?e.jsxs("div",{className:"memory-empty-state",children:[e.jsx(D,{size:20,className:"animate-spin"}),e.jsx("span",{children:s("memory.loadingEngineStatus","Loading engine status…")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"memory-engine-card memory-qmd-card",children:[e.jsx("h3",{children:s("memory.qmdIntegrationTitle","QMD Integration")}),g?.qmdAvailable===!0?e.jsxs("div",{className:"memory-engine-status",children:[e.jsx("span",{className:"memory-health-badge memory-health-badge--healthy",children:s("memory.qmdInstalled","Installed")}),e.jsx("span",{className:"memory-char-count",children:s("memory.qmdAvailableOnPath","qmd is available on PATH.")})]}):g?.qmdAvailable===!1?e.jsxs("div",{className:"settings-empty-state memory-status-message",children:[e.jsxs("span",{children:[s("memory.qmdNotInstalled","qmd is not installed. Search will use local files. Install indexed retrieval:")," ",e.jsx("code",{children:g.qmdInstallCommand||"bun install -g @tobilu/qmd"})]}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:Ee,disabled:te,children:te?s("memory.installing","Installing…"):s("memory.installQmd","Install qmd")})]}):e.jsxs("div",{className:"memory-engine-status",children:[e.jsx("span",{className:"memory-health-badge",children:s("memory.qmdChecking","Checking")}),e.jsx("span",{className:"memory-char-count",children:s("memory.qmdCheckingAvailability","Checking qmd availability…")})]})]}),e.jsxs("div",{className:"memory-engine-card memory-retrieval-card",children:[e.jsx("h3",{children:s("memory.testMemorySearchTitle","Test Memory Search")}),e.jsxs("div",{className:"memory-retrieval-input-row",children:[e.jsx("input",{type:"text",className:"input",value:U,onChange:a=>$(a.target.value),placeholder:s("memory.searchPlaceholder","Search memory with qmd")}),e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:ke,disabled:X,children:X?s("memory.testing","Testing…"):s("memory.testRetrieval","Test Retrieval")})]}),e.jsx("small",{className:"settings-muted",children:s("memory.testSearchHint","Runs the same qmd-backed memory_search path agents use.")}),y&&e.jsxs("div",{className:"memory-test-result",children:[e.jsx("strong",{children:s("memory.testResultCount",'{{count}} result for "{{query}}"',{count:y.results.length,query:y.query,defaultValue_one:'{{count}} result for "{{query}}"',defaultValue_other:'{{count}} results for "{{query}}"'})}),e.jsx("small",{children:s("memory.testResultStatus","qmd {{qmdStatus}} · {{fallbackStatus}}",{qmdStatus:y.qmdAvailable?s("memory.qmdStatusAvailable","available"):s("memory.qmdStatusMissing","missing"),fallbackStatus:y.usedFallback?s("memory.localFallbackUsed","local fallback used"):s("memory.qmdPathUsed","qmd path used")})}),y.results.length>0?e.jsx("ul",{children:y.results.map((a,b)=>e.jsxs("li",{children:[e.jsxs("span",{children:[a.path,":",a.lineStart]}),e.jsx("p",{children:a.snippet})]},`${a.path}-${a.lineStart}-${b}`))}):e.jsx("small",{children:s("memory.noMatchingMemory","No matching memory found.")})]})]}),e.jsxs("div",{className:"memory-engine-card",children:[e.jsx("h3",{children:s("memory.currentBackendTitle","Current Backend")}),e.jsx("div",{className:"memory-engine-status",children:e.jsx("span",{className:"memory-emphasis-text",children:g?.currentBackend==="file"?s("memory.backendFile","File (.fusion/memory/, agent/<agent-name>/memory/)"):g?.currentBackend==="readonly"?s("memory.backendReadonly","Read-Only"):g?.currentBackend==="qmd"?s("memory.backendQmd","QMD (Quantized Memory Distillation)"):g?.currentBackend??"unknown"})}),e.jsxs("div",{className:"memory-capability-row",children:[g?.capabilities?.readable&&e.jsx("span",{className:"memory-capability-badge",children:s("memory.capReadable","Readable")}),g?.capabilities?.writable&&e.jsx("span",{className:"memory-capability-badge",children:s("memory.capWritable","Writable")}),g?.capabilities?.supportsAtomicWrite&&e.jsx("span",{className:"memory-capability-badge",children:s("memory.capAtomicWrites","Atomic Writes")}),g?.capabilities?.persistent&&e.jsx("span",{className:"memory-capability-badge",children:s("memory.capPersistent","Persistent")})]})]}),c&&e.jsxs("div",{className:"memory-engine-card",children:[e.jsxs("div",{className:"memory-health-header",children:[e.jsx("h3",{children:s("memory.healthStatusTitle","Health Status")}),e.jsx("span",{className:`memory-health-badge memory-health-badge--${c.health}`,children:c.health==="healthy"?s("memory.healthHealthy","Healthy"):c.health==="warning"?s("memory.healthWarning","Warning"):s("memory.healthIssues","Issues Found")})]}),e.jsxs("div",{className:"memory-health-grid",children:[e.jsxs("div",{children:[e.jsx("div",{className:"memory-health-label",children:s("memory.workingMemoryLabel","Working Memory")}),e.jsx("div",{className:"memory-emphasis-text",children:s("memory.sizeChars","{{size}} chars",{size:c.workingMemory.size})}),e.jsx("div",{className:"memory-health-detail",children:s("memory.sectionCount","{{count}} sections",{count:c.workingMemory.sectionCount})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"memory-health-label",children:s("memory.insightsMemoryLabel","Insights Memory")}),e.jsx("div",{className:"memory-emphasis-text",children:s("memory.sizeChars","{{size}} chars",{size:c.insightsMemory.size})}),e.jsx("div",{className:"memory-health-detail",children:s("memory.insightCount","{{count}} insights",{count:c.insightsMemory.insightCount})})]})]}),e.jsxs("div",{className:"memory-health-section",children:[e.jsx("div",{className:"memory-health-label",children:s("memory.lastExtractionLabel","Last Extraction")}),e.jsx("div",{className:"memory-emphasis-text",children:c.extraction.success?e.jsx("span",{className:"memory-status-text memory-status-text--success",children:s("memory.extractionSuccess","Success")}):e.jsx("span",{className:"memory-status-text memory-status-text--error",children:s("memory.extractionFailed","Failed")})}),e.jsx("div",{className:"memory-health-detail",children:c.extraction.summary||s("memory.insightsExtracted","{{count}} insights extracted",{count:c.extraction.insightCount})})]}),e.jsxs("div",{className:"memory-health-section",children:[e.jsx("div",{className:"memory-health-label",children:s("memory.pruningLabel","Pruning")}),e.jsx("div",{className:"memory-emphasis-text",children:c.pruning.applied?e.jsx("span",{className:"memory-status-text memory-status-text--warning",children:s("memory.pruningApplied","Applied")}):e.jsx("span",{className:"memory-status-text memory-status-text--muted",children:s("memory.pruningNotNeeded","Not needed")})}),c.pruning.applied&&e.jsx("div",{className:"memory-health-detail",children:c.pruning.reason})]})]}),c&&c.checks.length>0&&e.jsxs("div",{className:"memory-engine-card",children:[e.jsx("h3",{children:s("memory.auditChecksTitle","Audit Checks")}),e.jsx("div",{children:c.checks.map(a=>e.jsxs("div",{className:"memory-audit-check",children:[e.jsx("span",{className:a.passed?"memory-audit-check-passed":"memory-audit-check-failed",children:a.passed?"✓":"✗"}),e.jsxs("div",{className:"memory-audit-check-content",children:[e.jsx("div",{className:"memory-emphasis-text",children:a.name}),e.jsx("div",{className:"memory-health-detail",children:a.details})]})]},a.id))})]}),e.jsx("div",{className:"memory-action-bar",children:e.jsx("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:()=>he(),children:s("memory.runAudit","Run Audit")})}),e.jsxs("div",{className:"memory-settings-note",children:[e.jsx("span",{children:s("memory.settingsNote","Note: Change backend type in")}),e.jsx("button",{type:"button",className:"memory-settings-note-button",onClick:()=>{t(s("memory.settingsNoteToast","Open Settings → Memory to change backend type"),"info")},children:s("memory.settingsNoteLink","Settings → Memory")})]})]})})]})]})}export{ds as MemoryView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as d,j as e}from"./vendor-react-SZ_qB27O.js";import{ab as _e,be as ze,bf as He,bg as ge,bh as Ve,X as me,aR as Qe,bi as Je,aJ as he,P as be,b1 as ye,x as xe,R as fe,aM as Ke,_ as Ye,bj as Xe,bk as Ze,bl as es,bm as ss,bn as ns,bo as is,bp as ts,bq as Q,br as as,bs as ls}from"./index-CtYRoouR.js";import{D as rs}from"./DirectoryPicker-BhyDL_2m.js";import{u as os}from"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";import"./folder-open-D-554oji.js";const us="/api/plugins/fusion-plugin-whatsapp-chat",cs=/^\d+$/;function J(l,c){const g=c?`?projectId=${encodeURIComponent(c)}`:"";return`${us}${l}${g}`}function ds({projectId:l,settings:c}){const[g,n]=d.useState(null),[x,f]=d.useState(null),[A,q]=d.useState(()=>String(c?.pairingPhoneNumber??"")),[G,w]=d.useState(null),[C,E]=d.useState(null),P=d.useCallback(async()=>{try{const m=await fetch(J("/status",l)),o=await m.json();if(!m.ok)throw new Error(o.error??"WhatsApp pairing is unavailable. Enable the plugin and try again.");n(o),f(null)}catch(m){f(m instanceof Error?m.message:String(m))}},[l]);d.useEffect(()=>{P();const m=window.setInterval(()=>void P(),5e3);return()=>window.clearInterval(m)},[P]);const O=async()=>{const m=A.trim();if(!m||!cs.test(m)){w("Enter an E.164 phone number using digits only, without +.");return}E("code"),w(null);try{const o=await fetch(J("/pair-code",l),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({phoneNumber:m,...l?{projectId:l}:{}})}),B=await o.json();if(!o.ok)throw new Error(B.error??"Could not request a pairing code.");n(h=>({status:"awaiting-code",...h,pairingCode:B.pairingCode})),await P()}catch(o){w(o instanceof Error?o.message:String(o))}finally{E(null)}},U=async()=>{E("logout"),w(null);try{const m=await fetch(J("/logout",l),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l?{projectId:l}:{})});if(!m.ok){const o=await m.json();throw new Error(o.error??"Could not log out from WhatsApp.")}await P()}catch(m){w(m instanceof Error?m.message:String(m))}finally{E(null)}},$=c?.pairingMode==="code"?"code":"qr",N=g?.status??"starting";return e.jsxs("section",{className:"whatsapp-pairing-panel","aria-labelledby":"whatsapp-pairing-heading",children:[e.jsxs("div",{className:"whatsapp-pairing-heading-row",children:[e.jsxs("div",{children:[e.jsx("h5",{id:"whatsapp-pairing-heading",className:"plugin-detail-section-heading",children:"WhatsApp pairing"}),e.jsx("p",{className:"whatsapp-pairing-description",children:"Pair and monitor this project's WhatsApp connection here."})]}),e.jsx("button",{className:"btn btn-secondary btn-sm",type:"button",onClick:()=>void P(),children:"Refresh status"})]}),e.jsxs("div",{className:`whatsapp-pairing-status whatsapp-pairing-status--${N}`,role:"status","data-testid":"whatsapp-pairing-status",children:[e.jsxs("strong",{children:["Status: ",N]}),g?.jid&&e.jsxs("span",{children:["Connected as ",g.jid]}),(g?.lastError||x)&&e.jsx("span",{className:"field-error",children:g?.lastError??x})]}),N==="awaiting-qr"&&e.jsx("div",{className:"whatsapp-pairing-qr","data-testid":"whatsapp-pairing-qr",children:g?.qrDataUrl?e.jsx("img",{src:g.qrDataUrl,alt:"WhatsApp pairing QR code",className:"whatsapp-pairing-qr-image"}):e.jsx("p",{className:"text-muted",children:"Waiting for a fresh QR code. Keep this panel open and refresh if needed."})}),($==="code"||N==="awaiting-code")&&e.jsxs("div",{className:"whatsapp-pairing-code",children:[e.jsx("label",{htmlFor:"whatsapp-pairing-phone",children:"Phone number (E.164 digits without +)"}),e.jsxs("div",{className:"whatsapp-pairing-code-controls",children:[e.jsx("input",{id:"whatsapp-pairing-phone",className:"input",value:A,onChange:m=>q(m.target.value),inputMode:"numeric"}),e.jsx("button",{className:"btn btn-secondary",type:"button",onClick:()=>void O(),disabled:C!==null,children:C==="code"?"Requesting code...":"Request pairing code"})]}),g?.pairingCode&&e.jsx("output",{className:"whatsapp-pairing-code-output",children:g.pairingCode})]}),N==="connected"&&e.jsx("p",{className:"whatsapp-pairing-success",children:"WhatsApp is paired and ready to receive messages from allowed senders."}),G&&e.jsx("p",{className:"field-error",children:G}),e.jsx("button",{className:"btn btn-danger",type:"button",onClick:()=>void U(),disabled:C!==null,"data-testid":"whatsapp-pairing-logout",children:C==="logout"?"Logging out...":"Logout and re-pair"}),e.jsxs("aside",{className:"whatsapp-pairing-instructions","aria-label":"WhatsApp pairing instructions","data-testid":"whatsapp-pairing-instructions",children:[e.jsx("h6",{children:"Pairing and configuration"}),e.jsxs("ol",{children:[e.jsx("li",{children:"Install and enable this plugin, then keep this settings panel open."}),e.jsxs("li",{children:["Set ",e.jsx("strong",{children:"Allowed WhatsApp Senders"}),"; an empty list blocks all inbound messages."]}),e.jsxs("li",{children:["Choose ",e.jsx("strong",{children:"QR"})," to scan in WhatsApp Linked Devices, or ",e.jsx("strong",{children:"code"})," to enter a phone number and request a pairing code."]}),e.jsxs("li",{children:["Wait for the status above to become ",e.jsx("strong",{children:"connected"}),"."]}),e.jsx("li",{children:"Use Logout and re-pair to start over. If QR is still pending, wait briefly or refresh status for a new code."})]})]})]})}const Ce="fusion-plugin-agent-browser",je={enabled:{type:"boolean",label:"Enable Agent Browser",group:"General"},installChannel:{type:"enum",label:"Install Channel",enumValues:["stable","beta","nightly"],defaultValue:"stable",group:"General"},commandTimeoutMs:{type:"number",label:"Command Timeout (ms)",defaultValue:12e4,group:"General"},headlessMode:{type:"boolean",label:"Headless Mode",defaultValue:!0,group:"Browser"},allowedDomains:{type:"array",label:"Allowed Domains",itemType:"string",group:"Browser"},promptExecutorSystem:{type:"string",label:"Executor System Prompt",multiline:!0,group:"Prompt Contributions"},promptExecutorTask:{type:"string",label:"Executor Task Prompt",multiline:!0,group:"Prompt Contributions"},promptTriage:{type:"string",label:"Triage Prompt",multiline:!0,group:"Prompt Contributions"},promptReviewer:{type:"string",label:"Reviewer Prompt",multiline:!0,group:"Prompt Contributions"},promptHeartbeat:{type:"string",label:"Heartbeat Prompt",multiline:!0,group:"Prompt Contributions"},skillExposure:{type:"enum",label:"Skill Exposure",enumValues:["none","selected","all"],defaultValue:"selected",group:"Skills"}},Ne={General:"plugins.agentBrowser.groupGeneral",Browser:"plugins.agentBrowser.groupBrowser","Prompt Contributions":"plugins.agentBrowser.groupPromptContributions",Skills:"plugins.agentBrowser.groupSkills"},Se={"Enable Agent Browser":"plugins.agentBrowser.labelEnabled","Install Channel":"plugins.agentBrowser.labelInstallChannel","Command Timeout (ms)":"plugins.agentBrowser.labelCommandTimeoutMs","Headless Mode":"plugins.agentBrowser.labelHeadlessMode","Allowed Domains":"plugins.agentBrowser.labelAllowedDomains","Executor System Prompt":"plugins.agentBrowser.labelPromptExecutorSystem","Executor Task Prompt":"plugins.agentBrowser.labelPromptExecutorTask","Triage Prompt":"plugins.agentBrowser.labelPromptTriage","Reviewer Prompt":"plugins.agentBrowser.labelPromptReviewer","Heartbeat Prompt":"plugins.agentBrowser.labelPromptHeartbeat","Skill Exposure":"plugins.agentBrowser.labelSkillExposure"},ve=[{id:"fusion-plugin-hermes-runtime",name:"Hermes Runtime",description:"Runtime provider for Hermes CLI-backed execution.",category:"runtime",path:"./plugins/fusion-plugin-hermes-runtime",experimental:!0},{id:"fusion-plugin-paperclip-runtime",name:"Paperclip Runtime",description:"Runtime provider for Paperclip agent connections.",category:"runtime",path:"./plugins/fusion-plugin-paperclip-runtime"},{id:"fusion-plugin-openclaw-runtime",name:"OpenClaw Runtime",description:"Runtime provider for OpenClaw execution.",category:"runtime",path:"./plugins/fusion-plugin-openclaw-runtime",experimental:!0},{id:"fusion-plugin-droid-runtime",name:"Droid Runtime",description:"Runtime provider for Droid CLI execution.",category:"runtime",path:"./plugins/fusion-plugin-droid-runtime",experimental:!0},{id:"fusion-plugin-dependency-graph",name:"Dependency Graph",description:"Dashboard plugin for task dependency graph visualization.",category:"integration",path:"./plugins/fusion-plugin-dependency-graph"},{id:"fusion-plugin-reports",name:"Reports",description:"View report history, compare runs side-by-side, and export standalone HTML summaries.",category:"integration",path:"./plugins/fusion-plugin-reports"},{id:"fusion-plugin-whatsapp-chat",name:"WhatsApp Chat",description:"Pairs to WhatsApp Web (multi-device) with QR or pairing code, then bridges direct chats to a Fusion agent.",category:"integration",path:"./plugins/fusion-plugin-whatsapp-chat"},{id:"fusion-plugin-cli-printing-press",name:"CLI Printing Press",description:"Guided wizard for drafting external service CLI definitions.",category:"integration",path:"./plugins/fusion-plugin-cli-printing-press"},{id:"fusion-plugin-compound-engineering",name:"Compound Engineering",description:"A dedicated dashboard surface for compound-engineering artifacts and interactive ce-* sessions.",category:"integration",path:"./plugins/fusion-plugin-compound-engineering"},{id:"fusion-plugin-quality",name:"Quality",description:"Task QA tab and Quality hub: preview servers, test runs, reports, screenshots, and suggested cases.",category:"integration",path:"./plugins/fusion-plugin-quality"},{id:"fusion-plugin-linear-import",name:"Linear Import",description:"Browse Linear issues and import selected issues as Fusion triage tasks through plugin-owned settings.",category:"integration",path:"./plugins/fusion-plugin-linear-import"},{id:Ce,name:"Agent Browser",description:"Built-in integration metadata. Package install support lands in FN-3101.",category:"integration",hasSetup:!0}],_={started:"var(--color-success)",loaded:"var(--color-warning)",error:"var(--color-error)",stopped:"var(--color-muted)",installed:"var(--color-info)"};function ps(l){const c=l.settingsSchema,g=c&&Object.keys(c).length>0;return l.id!==Ce?g?c:void 0:g?{...je,...c}:je}function gs(l){const c=new Map,g=[];for(const[n,x]of Object.entries(l))if(x.group){const f=c.get(x.group)??[];f.push([n,x]),c.set(x.group,f)}else g.push([n,x]);return{grouped:c,ungrouped:g}}function we(l,c="plugin-error-text"){return l.state!=="error"||!l.error?null:e.jsx("p",{className:c,title:l.error,children:l.error})}function vs({addToast:l,projectId:c,onPluginsChanged:g}){const{t:n}=os("app"),[x,f]=d.useState([]),[A,q]=d.useState(!0),[G,w]=d.useState(!1),[C,E]=d.useState(""),[P,O]=d.useState(!1),[U,$]=d.useState(!1),[N,m]=d.useState(null),[o,B]=d.useState(null),[h,S]=d.useState({}),[Pe,K]=d.useState(!1),[Y,X]=d.useState(null),[Z,Re]=d.useState([]),[Ee,ee]=d.useState(!0),[se,ne]=d.useState(null),[j,Ie]=d.useState(""),[v,ke]=d.useState(""),[Be,ie]=d.useState(null),F=d.useRef(null),[Ae,z]=d.useState({}),[Fe,te]=d.useState(null),[W,ae]=d.useState(null),{confirm:Le}=_e(),y=d.useCallback(async(s=!1,i)=>{try{s||q(!0);const a=await ze(c);f(i?a.some(r=>r.id===i.id)?a.map(r=>r.id===i.id?i:r):[...a,i]:a)}catch(a){l(n("plugins.loadFailed","Failed to load plugins: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}finally{s||q(!1)}},[c,l]),I=d.useCallback(async(s=j,i=v)=>{try{ee(!0),ne(null);const a=await He(s,i||void 0,c);Re(a)}catch(a){const r=a instanceof Error?a.message:String(a);ne(r)}finally{ee(!1)}},[c,v,j]);d.useEffect(()=>{y()},[y]),d.useEffect(()=>(F.current&&clearTimeout(F.current),F.current=setTimeout(()=>{I(j,v)},300),()=>{F.current&&clearTimeout(F.current)}),[I,v,j]),d.useEffect(()=>{const s=ve.filter(a=>a.hasSetup&&x.some(r=>r.id===a.id));if(s.length===0)return;let i=!1;return Promise.all(s.map(async a=>{try{const r=await ge(a.id,c);if(i)return;z(p=>({...p,[a.id]:r}))}catch{if(i)return;z(r=>({...r,[a.id]:{hasSetup:!0,setupCheckDeferred:!0,deferredReason:"plugin-not-started",pluginState:"installed"}}))}})),()=>{i=!0}},[x,c]);const De=d.useRef([]);De.current=x,d.useEffect(()=>{const s=c?`?projectId=${encodeURIComponent(c)}`:"",i=a=>{try{const r=JSON.parse(a.data);if(r.scope==="project"&&(r.projectId??c)!==c)return;switch(r.transition){case"installing":case"enabled":case"disabled":case"settings-updated":I(j,v),f(p=>{const u=p.findIndex(t=>t.id===r.pluginId);if(u>=0){const t=[...p];return t[u]={...t[u],enabled:r.enabled,state:r.state,settings:r.settings,error:r.error},t}else return y(),p});break;case"state-changed":f(p=>{const u=p.findIndex(t=>t.id===r.pluginId);if(u>=0){const t=[...p];return t[u]={...t[u],state:r.state,error:r.error},t}return p});break;case"uninstalled":f(p=>p.filter(u=>u.id!==r.pluginId)),I(j,v);break;case"error":f(p=>{const u=p.findIndex(t=>t.id===r.pluginId);if(u>=0){const t=[...p];return t[u]={...t[u],state:r.state,error:r.error},t}return p});break}}catch{}};return Ve(`/api/events${s}`,{events:{"plugin:lifecycle":i},onReconnect:()=>{y(),I(j,v)}})},[c,y,I,v,j]);const le=async()=>{if(!C.trim()){l(n("plugins.installPathRequired","Please enter a plugin path"),"error");return}try{O(!0),await Q({path:C,...U?{aiScanOnLoad:!0}:{}},c),l(n("plugins.installedGlobally","Plugin installed globally"),"success"),w(!1),E(""),$(!1),await y(),g?.()}catch(s){l(n("plugins.installFailed","Failed to install plugin: {{error}}",{error:s instanceof Error?s.message:String(s)}),"error")}finally{O(!1)}},qe=async s=>{if(!s.path){l(n("plugins.builtinNoPackage","{{name}} is built in and does not have an installable package yet",{name:s.name}),"warning");return}try{X(s.id),await Q({path:s.path},c),l(n("plugins.builtinInstalledGlobally","{{name}} installed globally",{name:s.name}),"success"),await y(),g?.()}catch(i){l(n("plugins.builtinInstallFailed","Failed to install {{name}}: {{error}}",{name:s.name,error:i instanceof Error?i.message:String(i)}),"error")}finally{X(null)}},Ge=async s=>{if(!s.path){l(n("plugins.registryNotInstallable","{{name}} is not available for one-click install yet",{name:s.name}),"warning");return}try{ie(s.id),await Q({path:s.path},c),l(n("plugins.registryInstalled","{{name}} installed and enabled",{name:s.name}),"success"),await y(),g?.(),await I(j,v)}catch(i){l(n("plugins.registryInstallFailed","Failed to install {{name}}: {{error}}",{name:s.name,error:i instanceof Error?i.message:String(i)}),"error")}finally{ie(null)}},re=async s=>{try{ae(s.id);const i=await ls(s.id,c);if(!i.success){l(n("plugins.setupInstallFailed","Failed to install {{name}} setup: {{error}}",{name:s.name,error:i.error??n("plugins.unknownError","unknown error")}),"error");return}l(n("plugins.setupInstalled","{{name}} setup installed",{name:s.name}),"success"),te(s.id);const a=await ge(s.id,c);z(r=>({...r,[s.id]:a}))}catch(i){l(n("plugins.setupInstallFailed","Failed to install {{name}} setup: {{error}}",{name:s.name,error:i instanceof Error?i.message:String(i)}),"error")}finally{ae(null),te(null)}},H=async s=>{try{const i=await is(s.id,c);if(f(a=>a.map(r=>r.id===i.id?i:r)),i.state==="error"){l(n("plugins.enableFailed","Failed to enable {{name}}: {{error}}",{name:s.name,error:i.error??n("plugins.unknownError","unknown error")}),"error"),await y();return}l(n("plugins.enabledForProject","{{name}} enabled for this project",{name:s.name}),"success"),await y(!0,i),g?.()}catch(i){l(n("plugins.enablePluginFailed","Failed to enable plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}},V=async s=>{try{const i=await ns(s.id,c);f(a=>a.map(r=>r.id===i.id?i:r)),l(n("plugins.disabledForProject","{{name}} disabled for this project",{name:s.name}),"success"),await y(!0,i),g?.()}catch(i){l(n("plugins.disablePluginFailed","Failed to disable plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}},Oe=async s=>{s.enabled?await V(s):await H(s)},oe=async s=>{try{m(s.id),await ss(s.id,c),l(n("plugins.reloaded","{{name}} reloaded",{name:s.name}),"success"),await y()}catch(i){l(n("plugins.reloadFailed","Failed to reload plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}finally{m(null)}},ue=async s=>{if(await Le({title:n("plugins.uninstallTitle","Uninstall Plugin Globally"),message:n("plugins.uninstallConfirm",'Are you sure you want to uninstall "{{name}}" globally (all projects)?',{name:s.name}),danger:!0}))try{await ts(s.id,c),l(n("plugins.uninstalledGlobally","{{name}} uninstalled globally",{name:s.name}),"success"),await y(),g?.(),B(null)}catch(a){l(n("plugins.uninstallFailed","Failed to uninstall plugin: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}},Ue=async(s,i)=>{try{await Xe(s.id,{aiScanOnLoad:i},c),l(i?n("plugins.aiScanEnabled","AI scan on load enabled"):n("plugins.aiScanDisabled","AI scan on load disabled"),"success"),await y()}catch(a){l(n("plugins.updateFailed","Failed to update plugin: {{error}}",{error:a instanceof Error?a.message:String(a)}),"error")}},$e=async s=>{try{await Ze(s.id,c),l(n("plugins.rescanned","{{name}} rescanned",{name:s.name}),"success"),await y()}catch(i){l(n("plugins.rescanFailed","Failed to rescan plugin: {{error}}",{error:i instanceof Error?i.message:String(i)}),"error")}},M=async s=>{B(s);try{K(!0);const i=await as(s.id,c);S(i)}catch{S({})}finally{K(!1)}},We=async()=>{if(o)try{await es(o.id,h,c),l(n("plugins.settingsSaved","Settings saved"),"success")}catch(s){l(n("plugins.saveSettingsFailed","Failed to save settings: {{error}}",{error:s instanceof Error?s.message:String(s)}),"error")}};if(o)return e.jsxs("div",{className:"plugin-manager-detail","data-testid":"plugin-manager-detail",children:[e.jsxs("div",{className:"plugin-manager-detail-header",children:[e.jsx("button",{className:"btn-icon",onClick:()=>B(null),"aria-label":n("plugins.backToList","Back to plugin list"),children:e.jsx(me,{size:16})}),e.jsxs("div",{className:"plugin-detail-title",children:[e.jsxs("div",{className:"plugin-detail-title-copy",children:[e.jsx("h4",{className:"plugin-detail-name",children:o.name}),we(o,"plugin-error-text plugin-error-text--detail")]}),e.jsx("span",{className:"plugin-state-badge",style:{color:_[o.state]||_.installed},children:o.state})]})]}),e.jsxs("div",{className:"plugin-detail-content",children:[e.jsxs("div",{className:"plugin-detail-card",children:[o.description&&e.jsx("p",{className:"plugin-description",children:o.description}),o.author&&e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:n("plugins.author","Author:")}),o.author]}),o.homepage&&e.jsxs("p",{className:"plugin-detail-meta-row plugin-homepage",children:[e.jsx("span",{className:"text-muted",children:n("plugins.homepage","Homepage:")}),e.jsxs("a",{href:o.homepage,target:"_blank",rel:"noopener noreferrer",children:[o.homepage,e.jsx(Qe,{size:12})]})]}),e.jsxs("p",{className:"plugin-detail-meta-row",children:[e.jsx("span",{className:"text-muted",children:n("plugins.version","Version:")}),o.version]})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h5",{className:"plugin-detail-section-heading",children:n("plugins.securityScan","Security Scan")}),e.jsxs("div",{className:"plugin-security-row",children:[e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:!!o.aiScanOnLoad,onChange:s=>void Ue(o,s.target.checked)}),n("plugins.enableAiScanBeforeLoad","Enable AI scan before load/reload")]}),e.jsxs("button",{className:"btn btn-secondary btn-sm",onClick:()=>void $e(o),children:[e.jsx(Je,{size:14})," ",n("plugins.rescanAndReload","Rescan and Reload")]})]}),e.jsx("p",{className:"text-muted",children:n("plugins.aiScanHint","Turning this on only updates configuration. Use Rescan and Reload to run it now.")}),o.lastSecurityScan?e.jsxs("div",{className:"plugin-security-results",children:[e.jsxs("div",{className:"plugin-security-header",children:[e.jsx("span",{className:`plugin-state-badge plugin-security-badge plugin-security-badge--${o.lastSecurityScan.verdict}`,children:o.lastSecurityScan.verdict}),e.jsx("span",{className:"text-muted",children:o.lastSecurityScan.scannedAt})]}),e.jsx("p",{className:"plugin-security-summary",children:o.lastSecurityScan.summary}),e.jsxs("details",{children:[e.jsx("summary",{children:n("plugins.findings","Findings ({{count}})",{count:o.lastSecurityScan.findings.length})}),e.jsx("ul",{className:"plugin-security-findings",children:o.lastSecurityScan.findings.map((s,i)=>e.jsxs("li",{children:[e.jsx("strong",{children:s.severity})," ",s.category," — ",s.file,": ",s.reason]},`${s.file}-${i}`))})]})]}):e.jsx("p",{className:"text-muted",children:n("plugins.noSecurityScan","No security scan has been run yet.")})]}),e.jsxs("div",{className:"plugin-detail-card",children:[e.jsx("h5",{className:"plugin-detail-section-heading",children:n("plugins.settings","Settings")}),o.id==="fusion-plugin-whatsapp-chat"&&e.jsx(ds,{projectId:c,settings:h}),Pe?e.jsx("p",{className:"text-muted",children:e.jsx(he,{label:n("plugins.loading","Loading...")})}):(()=>{const s=ps(o);return s&&Object.keys(s).length>0?e.jsxs("div",{className:"plugin-settings-form",children:[(()=>{const{grouped:i,ungrouped:a}=gs(s),r=[];a.length>0&&r.push({title:null,entries:a});for(const[p,u]of i.entries())r.push({title:p,entries:u});return r.map(p=>e.jsxs("div",{className:p.title?"plugin-settings-group":void 0,children:[p.title&&e.jsx("h6",{className:"plugin-settings-group-heading",children:Ne[p.title]?n(Ne[p.title],p.title):p.title}),p.entries.map(([u,t])=>{const k=`setting-${u}-help`,L=t.label?Se[t.label]?n(Se[t.label],t.label):t.label:u;return e.jsxs("div",{className:"form-group",children:[e.jsxs("label",{htmlFor:`setting-${u}`,children:[L,t.required&&" *"]}),t.type==="string"&&!t.multiline&&e.jsx("input",{className:"input",type:"text",id:`setting-${u}`,value:h[u]??"",onChange:b=>S({...h,[u]:b.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?k:void 0}),t.type==="string"&&t.multiline&&e.jsx("textarea",{className:"input",id:`setting-${u}`,rows:4,value:h[u]??"",onChange:b=>S({...h,[u]:b.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?k:void 0}),t.type==="password"&&e.jsx("input",{className:"input",type:"password",id:`setting-${u}`,value:h[u]??"",onChange:b=>S({...h,[u]:b.target.value}),placeholder:t.description,"aria-describedby":t.description&&!t.required?k:void 0}),t.type==="number"&&e.jsx("input",{className:"input",type:"number",id:`setting-${u}`,value:h[u]??"",onChange:b=>S({...h,[u]:Number(b.target.value)}),"aria-describedby":t.description&&!t.required?k:void 0}),t.type==="boolean"&&e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:h[u]??!1,onChange:b=>S({...h,[u]:b.target.checked})}),t.description]}),t.type==="enum"&&e.jsxs("select",{className:"select",id:`setting-${u}`,value:h[u]??"",onChange:b=>S({...h,[u]:b.target.value}),"aria-describedby":t.description&&!t.required?k:void 0,children:[e.jsx("option",{value:"",children:n("plugins.selectOption","Select...")}),t.enumValues?.map(b=>e.jsx("option",{value:b,children:b},b))]}),t.type==="array"&&e.jsxs("div",{className:"plugin-settings-array",children:[h[u]?.map((b,R)=>e.jsxs("div",{className:"plugin-settings-array-item",children:[e.jsx("input",{className:"input",type:t.itemType==="number"?"number":"text",value:b??"",onChange:T=>{const D=T.target.value,pe=[...h[u]||[]];pe[R]=t.itemType==="number"?Number(D):D,S({...h,[u]:pe})}}),e.jsx("button",{className:"btn-icon",onClick:()=>{const D=[...h[u]||[]];D.splice(R,1),S({...h,[u]:D})},"aria-label":n("plugins.removeItem","Remove item"),children:e.jsx(me,{size:14})})]},R)),e.jsxs("button",{className:"btn btn-secondary",onClick:()=>{const b=h[u]||[],R=t.itemType==="number"?0:"";S({...h,[u]:[...b,R]})},children:[e.jsx(be,{size:14})," ",n("plugins.addItem","Add Item")]})]}),t.description&&!t.required&&!t.multiline&&e.jsx("span",{id:k,className:"form-help",children:t.description})]},u)})]},p.title??"ungrouped"))})(),e.jsx("button",{className:"btn btn-primary",onClick:We,children:n("plugins.saveSettings","Save Settings")})]}):e.jsx("p",{className:"text-muted",children:n("plugins.noConfigurableSettings","No configurable settings.")})})()]}),e.jsxs("div",{className:"plugin-detail-actions",children:[o.state==="started"&&e.jsxs("button",{className:"btn btn-secondary",onClick:()=>oe(o),disabled:N===o.id,children:[e.jsx(ye,{size:14,className:N===o.id?"spin":""}),N===o.id?n("plugins.reloading","Reloading..."):n("plugins.reload","Reload")]}),o.enabled?e.jsx("button",{className:"btn btn-secondary",onClick:()=>V(o),children:n("plugins.disableInProject","Disable in Project")}):e.jsx("button",{className:"btn btn-primary",onClick:()=>H(o),children:n("plugins.enableInProject","Enable in Project")}),e.jsxs("button",{className:"btn btn-danger",onClick:()=>ue(o),children:[e.jsx(xe,{size:14})," ",n("plugins.uninstallGlobally","Uninstall Globally")]})]})]})]});const ce=new Map(x.map(s=>[s.id,s])),de=x,Me=()=>e.jsxs("section",{className:"plugin-registry-section","aria-label":n("plugins.browseRegistry","Browse Registry"),children:[e.jsxs("div",{className:"plugin-registry-header",children:[e.jsxs("div",{className:"plugin-registry-heading-copy",children:[e.jsx("h4",{className:"plugin-registry-heading",children:n("plugins.browseRegistry","Browse Registry")}),e.jsx("p",{className:"plugin-registry-description",children:n("plugins.registryDescription","Discover curated runtimes and integrations that can be added to this Fusion workspace.")})]}),e.jsxs("div",{className:"plugin-registry-controls",children:[e.jsxs("label",{className:"plugin-registry-category-label",children:[e.jsx("span",{className:"sr-only",children:n("plugins.registryCategory","Registry category")}),e.jsxs("select",{className:"select plugin-registry-category-select",value:v,onChange:s=>ke(s.target.value),"aria-label":n("plugins.registryCategory","Registry category"),children:[e.jsx("option",{value:"",children:n("plugins.registryCategoryAll","All Categories")}),e.jsx("option",{value:"runtime",children:n("plugins.registryCategoryRuntime","Runtime")}),e.jsx("option",{value:"integration",children:n("plugins.registryCategoryIntegration","Integration")})]})]}),e.jsxs("label",{className:"plugin-registry-search-label",children:[e.jsx("span",{className:"sr-only",children:n("plugins.searchRegistry","Search registry")}),e.jsx("input",{className:"input plugin-registry-search-input",type:"search",value:j,onChange:s=>Ie(s.target.value),placeholder:n("plugins.searchRegistryPlaceholder","Search registry plugins")})]})]})]}),Ee?e.jsxs("div",{className:"plugin-registry-state",role:"status",children:[e.jsx(fe,{size:14,className:"spin"}),n("plugins.registryLoading","Loading registry...")]}):se?e.jsxs("div",{className:"plugin-registry-state plugin-registry-state--error",role:"alert",children:[e.jsx("span",{children:n("plugins.registryLoadFailed","Failed to load registry: {{error}}",{error:se})}),e.jsx("button",{className:"btn btn-secondary btn-sm plugin-registry-retry",onClick:()=>void I(j,v),children:n("plugins.retry","Retry")})]}):Z.length===0?e.jsx("div",{className:"plugin-registry-state",children:j.trim()?n("plugins.registryEmptySearch","No registry plugins match your search."):n("plugins.registryEmpty","No registry plugins are available.")}):e.jsx("div",{className:"plugin-registry-list","aria-label":n("plugins.registryPluginResults","Registry plugin results"),children:Z.map(s=>{const i=ce.get(s.id),a=Be===s.id;return e.jsxs("div",{className:"plugin-registry-item",children:[e.jsxs("div",{className:"plugin-registry-meta",children:[e.jsxs("div",{className:"plugin-registry-title-row",children:[e.jsx("span",{className:"plugin-registry-name",children:s.name}),e.jsxs("span",{className:"plugin-registry-version",children:["v",s.version]}),e.jsx("span",{className:"plugin-registry-badge",children:s.category}),s.installed&&e.jsxs("span",{className:"plugin-registry-status plugin-registry-status--installed",children:[n("plugins.statusInstalled","Installed"),s.installedVersion&&s.installedVersion!==s.version?` · v${s.installedVersion}`:""]})]}),e.jsx("span",{className:"plugin-registry-description-text",children:s.description}),e.jsx("span",{className:"plugin-registry-author",children:n("plugins.registryByAuthor","By {{author}}",{author:s.author})})]}),e.jsx("div",{className:"plugin-registry-actions",children:s.installed?e.jsx("button",{className:"btn btn-secondary btn-sm plugin-registry-action",onClick:()=>{i?M(i):y()},children:n("plugins.manage","Manage")}):s.canInstall?e.jsx("button",{className:"btn btn-primary btn-sm plugin-registry-action",onClick:()=>void Ge(s),disabled:a,children:a?n("plugins.installing","Installing..."):n("plugins.installFromRegistry","Install")}):e.jsx("span",{className:"plugin-registry-coming-soon",children:n("plugins.registryComingSoon","Coming Soon")})})]},s.id)})})]}),Te=()=>e.jsxs("section",{className:"plugin-builtins-section","aria-label":n("plugins.builtinPlugins","Built-in Plugins"),children:[e.jsxs("div",{className:"plugin-builtins-header",children:[e.jsx("h4",{className:"plugin-builtins-heading",children:n("plugins.builtinPlugins","Built-in Plugins")}),e.jsx("p",{className:"plugin-builtins-description",children:n("plugins.builtinPluginsCatalog","Built-in plugin catalog for runtimes and integrations.")})]}),e.jsx("div",{className:"plugin-builtins-list","aria-label":n("plugins.builtinPluginRecommendations","Built-in plugin recommendations"),children:ve.map(s=>{const i=ce.get(s.id),a=!!i,r=Ae[s.id],p=!!(r&&"setupCheckDeferred"in r&&r.setupCheckDeferred),u=r&&"status"in r?r.status:void 0,t=a&&s.hasSetup&&r?.hasSetup&&!p&&i?.state==="started"&&(u==="not-installed"||u==="error"),k=a&&r?.hasSetup&&u==="installed",L=Fe===s.id,b=!s.path,R=s.category==="runtime",T=i?.enabled;return e.jsxs("div",{className:"plugin-builtins-item",children:[e.jsxs("div",{className:"plugin-builtins-meta",children:[e.jsx("span",{className:"plugin-builtins-name",children:s.name}),s.experimental&&e.jsx("span",{className:"plugin-builtins-runtime-badge",children:n("plugins.experimental","Experimental")}),e.jsx("span",{className:"plugin-builtins-runtime-badge",children:s.category}),e.jsx("span",{className:`plugin-builtins-status ${a?"plugin-builtins-status--installed":"plugin-builtins-status--available"}`,children:a?n("plugins.statusInstalled","Installed"):b?n("plugins.statusBuiltIn","Built in"):n("plugins.statusNotInstalled","Not installed")}),R&&T===!1&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--warning",children:n("plugins.builtinDisabled","Disabled")}),t&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--warning",children:n("plugins.setupRequired","Setup required")}),k&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--ready",children:n("plugins.setupReady","Setup ready")}),L&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--pending",children:n("plugins.checkingSetup","Checking setup...")}),p&&e.jsx("span",{className:"plugin-builtins-setup-status plugin-builtins-setup-status--deferred",children:n("plugins.startPluginToCheckSetup","Start plugin to check setup")}),e.jsx("span",{className:"plugin-builtins-description-text",children:s.description})]}),e.jsxs("div",{className:"plugin-builtins-actions",children:[R&&i&&e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:i.enabled,onChange:()=>void Oe(i),"aria-label":i.enabled?n("plugins.disablePlugin","Disable {{name}}",{name:s.name}):n("plugins.enablePlugin","Enable {{name}}",{name:s.name})}),e.jsx("span",{className:"toggle-slider"})]}),b?a&&t?e.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void re(s),disabled:W===s.id||L,children:W===s.id?n("plugins.settingUp","Setting up..."):n("plugins.installSetup","Install Setup")}):a&&i?e.jsx("button",{className:"btn btn-secondary btn-sm",onClick:()=>void M(i),children:n("plugins.manage","Manage")}):R?null:e.jsx("span",{className:"plugin-builtins-metadata-only",children:n("plugins.builtinMetadataOnly","Built-in metadata only")}):e.jsx("button",{className:`btn ${a&&!t?"btn-secondary":"btn-primary"} btn-sm`,onClick:()=>{if(!a){qe(s);return}if(t){re(s);return}i&&M(i)},disabled:Y===s.id||W===s.id||L,children:a?t?W===s.id?n("plugins.settingUp","Setting up..."):n("plugins.installSetup","Install Setup"):n("plugins.manage","Manage"):Y===s.id?n("plugins.installing","Installing..."):n("plugins.installNamed","Install {{name}}",{name:s.name})})]})]},s.id)})})]});return e.jsxs("div",{className:"plugin-manager","data-testid":"plugin-manager",children:[e.jsxs("div",{className:"plugin-manager-header",children:[e.jsx("span",{className:"plugin-manager-header-title",children:n("plugins.installedPlugins","Installed Plugins")}),e.jsxs("div",{className:"plugin-manager-actions",children:[e.jsxs("button",{className:"btn btn-sm",onClick:()=>void y(),title:n("plugins.refresh","Refresh"),"aria-label":n("plugins.refreshPluginList","Refresh plugin list"),children:[e.jsx(fe,{size:14,className:A?"spin":""}),n("plugins.refresh","Refresh")]}),e.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>w(!0),children:[e.jsx(be,{size:14})," ",n("plugins.install","Install")]})]})]}),G&&e.jsxs("div",{className:"plugin-install-form",children:[e.jsx("p",{className:"plugin-install-hint",children:n("plugins.installHint","Browse to a plugin package root (contains manifest.json) or a built dist directory.")}),e.jsx(rs,{value:C,onChange:E,placeholder:n("plugins.installPathPlaceholder","Absolute path to plugin directory or dist folder"),onInputKeyDown:s=>{s.key==="Enter"&&(s.preventDefault(),le())}}),e.jsxs("label",{className:"checkbox-label",children:[e.jsx("input",{type:"checkbox",checked:U,onChange:s=>$(s.target.checked)}),n("plugins.enableAiSecurityScan","Enable AI security scan on load")]}),e.jsxs("div",{className:"plugin-install-actions",children:[e.jsx("button",{className:"btn btn-primary",onClick:le,disabled:P||!C.trim(),children:P?n("plugins.installing","Installing..."):n("plugins.installPluginGlobally","Install Plugin Globally")}),e.jsx("button",{className:"btn btn-secondary",onClick:()=>{w(!1),E("")},children:n("plugins.cancel","Cancel")})]})]}),A?e.jsx("div",{className:"settings-empty-state",children:e.jsx(he,{label:n("plugins.loadingPlugins","Loading plugins...")})}):e.jsxs(e.Fragment,{children:[de.length===0?e.jsxs("div",{className:"settings-empty-state",children:[e.jsx(Ke,{size:32,className:"text-muted"}),e.jsx("p",{children:n("plugins.noPluginsInstalled","No plugins installed.")}),e.jsx("p",{className:"text-muted",children:n("plugins.noPluginsHint","Install a plugin to get started, or use the built-in catalog below.")})]}):e.jsx("div",{className:"plugin-list",children:de.map(s=>e.jsxs("div",{className:"plugin-item",children:[e.jsx("div",{className:"plugin-info",children:e.jsxs("div",{className:"plugin-copy",children:[e.jsxs("div",{className:"plugin-copy-header",children:[e.jsx("span",{className:"plugin-name",children:s.name}),e.jsxs("span",{className:"plugin-version text-muted",children:["v",s.version]}),e.jsx("span",{className:"plugin-state-badge",style:{color:_[s.state]||_.installed},children:s.state})]}),we(s)]})}),e.jsxs("div",{className:"plugin-actions",children:[s.state==="started"&&e.jsx("button",{className:"btn-icon",onClick:()=>oe(s),disabled:N===s.id,title:n("plugins.reload","Reload"),children:e.jsx(ye,{size:14,className:N===s.id?"spin":""})}),e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:()=>s.enabled?V(s):H(s),"aria-label":s.enabled?n("plugins.disablePlugin","Disable {{name}}",{name:s.name}):n("plugins.enablePlugin","Enable {{name}}",{name:s.name})}),e.jsx("span",{className:"toggle-slider"})]}),e.jsx("button",{className:"btn-icon",onClick:()=>M(s),title:n("plugins.settings","Settings"),children:e.jsx(Ye,{size:14})}),e.jsx("button",{className:"btn-icon",onClick:()=>ue(s),title:n("plugins.uninstallGloballyTitle","Uninstall globally"),children:e.jsx(xe,{size:14})})]})]},s.id))}),Te(),Me()]})]})}export{je as AGENT_BROWSER_SETTINGS_SCHEMA,Ce as BUILTIN_AGENT_BROWSER_PLUGIN_ID,ve as BUILTIN_PLUGINS,vs as PluginManager,_ as STATE_COLORS};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-xterm-BNq00GSj.js","assets/vendor-react-SZ_qB27O.js","assets/vendor-xterm-LZoznX6r.css","assets/addon-fit-C1WQXRvu.js","assets/addon-webgl-uLc0RKcC.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{K as Pe,N as z,O as de,Q as J,U as ue,W as F,Y as je,_ as Me,p as Le,$ as De,a0 as Y,a1 as Oe,a2 as Ae,a as ze,a3 as K,a4 as Fe,a5 as Be}from"./index-CtYRoouR.js";import{r as i,j as t}from"./vendor-react-SZ_qB27O.js";import"./vendor-xterm-BNq00GSj.js";import{u as Ie}from"./vendor-i18n-Duky4gdQ.js";import{S as Ke}from"./shield-alert-BX4WRJOv.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";const We=32*1024,$e=1e4,Ue=100,Qe="\x1B",Ve=" ",Je="",Ye="\x1B[A",Ge="\x1B[B",He="\x1B[C",qe="\x1B[D",W={ctrl:"Ctrl",escape:"Esc",tab:"Tab",ctrlC:"^C"};function me(m){if(m.length!==1)return null;const o=m.toUpperCase().charCodeAt(0);return o>=64&&o<=95?String.fromCharCode(o&31):null}function Ze(){const[m,f]=i.useState(()=>Y());return i.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const o=window.matchMedia(Oe),r=window.visualViewport,y=()=>f(Y());return y(),typeof r?.addEventListener=="function"&&r.addEventListener("resize",y),typeof o.addEventListener=="function"?(o.addEventListener("change",y),()=>{o.removeEventListener("change",y),typeof r?.removeEventListener=="function"&&r.removeEventListener("resize",y)}):(o.addListener(y),()=>{o.removeListener(y),typeof r?.removeEventListener=="function"&&r.removeEventListener("resize",y)})},[]),m}function Xe(m,f){if(typeof window>"u")return"";const r=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/cli-sessions/ws?sessionId=${encodeURIComponent(m)}&ticket=${encodeURIComponent(f)}`;return Be(r)}function et(){return/Mac|iPhone|iPad|iPod/i.test(navigator.platform)}function tt(m){if(typeof window<"u"&&typeof window.atob=="function"){const f=window.atob(m),o=new Uint8Array(f.length);for(let r=0;r<f.length;r++)o[r]=f.charCodeAt(r);return new TextDecoder("utf-8").decode(o)}return Buffer.from(m,"base64").toString("utf8")}function ut({sessionId:m,readOnly:f=!1,posture:o,mode:r="live",projectId:y,onConfirmAdvance:g,showConfirmAdvance:$=!1,onOpenAdapterSettings:G,active:H=!0}){const{t:a}=Ie("app"),x=i.useRef(null),v=i.useRef(null),N=i.useRef(null),R=i.useRef(null),h=i.useRef(null),[q,Z]=i.useState(!1),[fe,U]=i.useState(!1),[X,ee]=i.useState(!1),P=Ze(),{keyboardOpen:B,keyboardOverlap:pe}=Pe({enabled:P}),ye=i.useRef(null),[_,te]=i.useState(""),[j,D]=i.useState(!1),[be,he]=i.useState(()=>z().customShortcuts),[ne,ie]=i.useState(null),se=f||ne===!0,O=!f&&ne===!1&&r==="live",b=i.useCallback(e=>{if(!e||!O)return;const n=h.current;n?.readyState===WebSocket.OPEN&&n.send(JSON.stringify({type:"input",data:e}))},[O]),M=i.useCallback(e=>{if(j){const n=me(e);if(D(!1),n){b(n);return}}b(e)},[j,b]),c=i.useCallback(e=>{e.preventDefault()},[]),we=i.useCallback(e=>{e?.preventDefault?.(),_&&b(_),b("\r"),te("")},[_,b]),Se=i.useCallback(e=>{if(j&&e.length>_.length){const n=e.slice(_.length,_.length+1),l=me(n);if(D(!1),l){b(l);return}}te(e)},[j,_,b]);i.useEffect(()=>{$&&U(!1)},[$,m]);const E=i.useCallback((e,n)=>{const l=h.current;l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"resize",cols:e,rows:n}))},[]),oe=i.useCallback(()=>{const e=v.current;if(!e)return;const n=z(),l=de(n.fontFamily);e.options.fontFamily=l,x.current?.style.setProperty("--terminal-glyph-font-family",J(n.fontFamily)),e.options.fontSize=n.fontSize,e.options.cursorStyle=n.cursorStyle,e.options.cursorBlink=n.cursorBlink&&O;try{N.current?.fit?.(),E(e.cols,e.rows)}catch{}ue(n.fontSize,l).then(k=>{if(!(!k||v.current!==e||e.options.fontSize!==n.fontSize||e.options.fontFamily!==l)){F(e,l),e.options.fontSize=n.fontSize;try{N.current?.fit?.(),E(e.cols,e.rows),F(e,l),e.refresh(0,Math.max(0,e.rows-1))}catch{}}},()=>{})},[O,E]);i.useEffect(()=>{if(typeof window>"u")return;const e=n=>{n.key===Ae&&(oe(),he(z().customShortcuts))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[oe]);const[_e,ke]=i.useState(0);i.useEffect(()=>{if(!H)return;const e=v.current,n=N.current;if(e&&n?.fit)try{n.fit(),E(e.cols,e.rows),F(e,String(e.options.fontFamily??"")),e.refresh(0,Math.max(0,e.rows-1))}catch{}const l=h.current;l&&l.readyState!==WebSocket.OPEN&&l.readyState!==WebSocket.CONNECTING&&ke(k=>k+1)},[H,E]),i.useEffect(()=>{if(!m||typeof window>"u")return;let e=!1,n=null,l=null,k=0;ie(null);const Q=E,Te=p=>{if(k+=p,k<We)return;const w=h.current;w?.readyState===WebSocket.OPEN&&w.send(JSON.stringify({type:"ack",bytes:k})),k=0};return(async()=>{let p;try{p=await ze(`/cli-sessions/${encodeURIComponent(m)}/attach-ticket`,{method:"POST",body:JSON.stringify(y?{projectId:y}:{})})}catch{return}if(e)return;ie(p.readOnly);const w=!f&&!p.readOnly&&r==="live",[{Terminal:ge},{FitAddon:xe},{Unicode11Addon:Ne}]=await Promise.all([K(()=>import("./vendor-xterm-BNq00GSj.js").then(d=>d.x),__vite__mapDeps([0,1,2])),K(()=>import("./addon-fit-C1WQXRvu.js").then(d=>d.a),__vite__mapDeps([3,1])),K(()=>import("./addon-unicode11-D3Fsv-Po.js"),[])]);if(e||!x.current)return;const S=z(),A=de(S.fontFamily);x.current.style.setProperty("--terminal-glyph-font-family",J(S.fontFamily));const s=new ge({convertEol:!1,cursorBlink:S.cursorBlink&&w,cursorStyle:S.cursorStyle,disableStdin:!w,scrollback:$e,fontFamily:A,fontSize:S.fontSize}),L=new xe;s.loadAddon(L);const Re=new Ne;if(s.loadAddon(Re),s.unicode.activeVersion="11",Fe(()=>{s.open(x.current)}),v.current=s,N.current=L,S.renderer==="auto"&&!Y())try{const{WebglAddon:d}=await K(async()=>{const{WebglAddon:u}=await import("./addon-webgl-uLc0RKcC.js").then(C=>C.a);return{WebglAddon:u}},__vite__mapDeps([4,1]));if(!e){const u=new d;u.onContextLoss(()=>{try{u.dispose()}catch{}R.current===u&&(R.current=null)}),s.loadAddon(u),R.current=u}}catch{}try{L.fit()}catch{}(async()=>{if(!(!await ue(S.fontSize,A)||e||v.current!==s||N.current!==L||s.options.fontSize!==S.fontSize||s.options.fontFamily!==A))try{F(s,A),s.options.fontSize=S.fontSize,L.fit(),Q(s.cols,s.rows),F(s,A),s.refresh(0,Math.max(0,s.rows-1))}catch{}})(),w&&(s.onData(d=>{const u=h.current;u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:"input",data:d}))}),s.attachCustomKeyEventHandler(d=>{if(d.type!=="keydown"||!(et()?d.metaKey:d.ctrlKey)||d.altKey||d.shiftKey)return!0;const C=d.key.toLowerCase();if(C==="c"){const T=s.hasSelection()?s.getSelection():"";return T?(navigator.clipboard?.writeText(T).catch(()=>{}),!1):!0}if(C==="v"){const T=navigator.clipboard?.readText;return T&&T.call(navigator.clipboard).then(le=>{if(!le)return;const ce=h.current;ce?.readyState===WebSocket.OPEN&&ce.send(JSON.stringify({type:"input",data:le}))}).catch(()=>{}),!1}return!0})),n=new ResizeObserver(()=>{l&&clearTimeout(l),l=setTimeout(()=>{try{L.fit(),Q(s.cols,s.rows),s.refresh(0,Math.max(0,s.rows-1))}catch{}},Ue)}),n.observe(x.current);const V=new WebSocket(Xe(m,p.ticket));h.current=V,V.onopen=()=>{Q(s.cols,s.rows)},V.onmessage=d=>{let u;try{u=JSON.parse(typeof d.data=="string"?d.data:"")}catch{return}switch(u.type){case"scrollback":case"data":{if(typeof u.data!="string")return;const C=tt(u.data),T=C.length;s.write(C,()=>Te(T));break}}}})(),()=>{e=!0,l&&clearTimeout(l),n&&n.disconnect();const p=h.current;if(p){p.onopen=null,p.onmessage=null,p.onclose=null,p.onerror=null;try{p.close()}catch{}h.current=null}if(R.current){try{R.current.dispose()}catch{}R.current=null}const w=v.current;if(w){try{w.dispose()}catch{}v.current=null}N.current=null}},[m,f,r,y,E,_e]);const re=i.useMemo(()=>r==="idle"?a("cliTerminal.replayIdle","Session idle"):r==="ended"?a("cliTerminal.replayEnded","Session ended"):null,[r,a]),ve=i.useCallback(async()=>{if(g){ee(!0);try{await g("advance"),U(!0)}finally{ee(!1)}}},[g]),Ee=i.useCallback(async()=>{g&&await g("not-yet"),U(!0)},[g]),I=!!o?.elevated,ae=o?.elevatedFlags?.join(", "),Ce={"--terminal-glyph-font-family":J(z().fontFamily)};return t.jsxs("div",{className:`cli-session-terminal${P?" cli-session-terminal--mobile":""}${P&&B?" cli-session-terminal--keyboard-open":""}`,"data-mode":r,"data-read-only":se,"data-mobile":P,"data-keyboard-open":P&&B,children:[t.jsxs("header",{className:"cli-session-terminal__header",children:[o&&t.jsxs("div",{className:"cli-session-terminal__posture-wrap",children:[t.jsxs("button",{type:"button",className:`cli-posture-chip${I?" cli-posture-chip--elevated":""}`,"data-elevated":I,"aria-expanded":q,onClick:()=>Z(e=>!e),children:[I?t.jsx(Ke,{size:13,"aria-hidden":"true"}):t.jsx(je,{size:13,"aria-hidden":"true"}),t.jsx("span",{className:"cli-posture-chip__name",children:o.adapterName}),o.mode&&t.jsx("span",{className:"cli-posture-chip__mode",children:o.mode}),I&&ae&&t.jsx("span",{className:"cli-posture-chip__flag",children:ae})]}),q&&t.jsxs("div",{className:"cli-posture-tooltip",role:"tooltip",children:[t.jsx("p",{className:"cli-posture-tooltip__title",children:a("cliTerminal.postureResolved","Resolved posture")}),t.jsxs("ul",{className:"cli-posture-tooltip__list",children:[(o.resolved??[]).map((e,n)=>t.jsx("li",{children:e},n)),(o.resolved??[]).length===0&&t.jsx("li",{children:o.mode??a("cliTerminal.postureBaseline","Baseline")})]}),G&&t.jsxs("button",{type:"button",className:"cli-posture-tooltip__settings",onClick:()=>{Z(!1),G()},children:[t.jsx(Me,{size:12,"aria-hidden":"true"}),a("cliTerminal.adapterSettings","Adapter settings")]})]})]}),se&&t.jsxs("span",{className:"cli-session-terminal__readonly-badge",children:[t.jsx(Le,{size:12,"aria-hidden":"true"}),a("cliTerminal.readOnly","Read-only")]}),re&&t.jsx("span",{className:"cli-session-terminal__replay-badge","data-replay-mode":r,children:re})]}),t.jsx("div",{className:"cli-session-terminal__viewport-shell",children:t.jsx("div",{className:"cli-session-terminal__viewport",ref:x,"data-testid":"cli-terminal-viewport",style:Ce})}),$&&!fe&&t.jsxs("div",{className:"cli-session-terminal__advance-strip",role:"region",children:[t.jsx("span",{className:"cli-session-terminal__advance-copy",children:a("cliTerminal.advancePrompt","This session looks idle — advance to review?")}),t.jsxs("div",{className:"cli-session-terminal__advance-actions",children:[t.jsx("button",{type:"button",className:"cli-session-terminal__advance-btn",disabled:X,onClick:ve,children:a("cliTerminal.advance","Advance")}),t.jsx("button",{type:"button",className:"cli-session-terminal__advance-btn cli-session-terminal__advance-btn--secondary",disabled:X,onClick:Ee,children:a("cliTerminal.notYet","Not yet")})]})]}),P&&O&&t.jsxs("div",{className:`cli-session-terminal__mobile-bar${B?" cli-session-terminal__mobile-bar--keyboard-open":""}`,"data-testid":"cli-terminal-mobile-bar",style:B?{bottom:`${pe}px`}:void 0,children:[t.jsxs("div",{className:"cli-session-terminal__key-row","data-testid":"cli-terminal-key-bar",children:[t.jsx("button",{type:"button",className:`cli-terminal-key cli-terminal-key--ctrl${j?" cli-terminal-key--active":""}`,"data-testid":"cli-key-ctrl","aria-label":a("cliTerminal.mobileKeyCtrl","Sticky Ctrl modifier"),"aria-pressed":j,onPointerDown:c,onMouseDown:c,onClick:()=>D(e=>!e),children:W.ctrl}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-esc","aria-label":a("cliTerminal.mobileKeyEsc","Send Escape"),onPointerDown:c,onMouseDown:c,onClick:()=>M(Qe),children:W.escape}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-tab","aria-label":a("cliTerminal.mobileKeyTab","Send Tab"),onPointerDown:c,onMouseDown:c,onClick:()=>M(Ve),children:W.tab}),t.jsx("button",{type:"button",className:"cli-terminal-key cli-terminal-key--ctrlc","data-testid":"cli-key-ctrl-c","aria-label":a("cliTerminal.mobileKeyCtrlC","Send Ctrl-C"),onPointerDown:c,onMouseDown:c,onClick:()=>{D(!1),b(Je)},children:W.ctrlC}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-up","aria-label":a("cliTerminal.mobileKeyArrowUp","Cursor up"),onPointerDown:c,onMouseDown:c,onClick:()=>M(Ye),children:"↑"}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-down","aria-label":a("cliTerminal.mobileKeyArrowDown","Cursor down"),onPointerDown:c,onMouseDown:c,onClick:()=>M(Ge),children:"↓"}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-left","aria-label":a("cliTerminal.mobileKeyArrowLeft","Cursor left"),onPointerDown:c,onMouseDown:c,onClick:()=>M(qe),children:"←"}),t.jsx("button",{type:"button",className:"cli-terminal-key","data-testid":"cli-key-arrow-right","aria-label":a("cliTerminal.mobileKeyArrowRight","Cursor right"),onPointerDown:c,onMouseDown:c,onClick:()=>M(He),children:"→"}),be.map(e=>t.jsx("button",{type:"button",className:"cli-terminal-key cli-terminal-key--custom","data-testid":`cli-terminal-custom-shortcut-${e.id}`,title:e.label,"aria-label":e.label,onPointerDown:c,onMouseDown:c,onClick:()=>{D(!1),b(De(e.value))},children:e.label},e.id))]}),t.jsxs("form",{className:"cli-session-terminal__input-row",onSubmit:we,children:[t.jsx("input",{ref:ye,type:"text",className:"cli-session-terminal__mobile-input","data-testid":"cli-terminal-mobile-input",value:_,placeholder:a("cliTerminal.mobileInputPlaceholder","Type to send to the session…"),autoCapitalize:"off",autoCorrect:"off",autoComplete:"off",spellCheck:!1,onChange:e=>Se(e.target.value)}),t.jsx("button",{type:"submit",className:"cli-session-terminal__mobile-send","data-testid":"cli-terminal-mobile-send","aria-label":a("cliTerminal.mobileSend","Send"),onPointerDown:c,onMouseDown:c,children:a("cliTerminal.mobileSend","Send")})]})]})]})}export{ut as SessionTerminal};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.language-selector{display:flex;flex-direction:column;gap:8px}.language-selector-title{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted, #888)}.language-options{display:flex;flex-wrap:wrap;gap:8px}.language-option{display:inline-flex;align-items:center;padding:6px 12px;border:1px solid var(--border);border-radius:6px;background:var(--bg-secondary, transparent);color:var(--text);font-size:.875rem;cursor:pointer;transition:border-color .15s ease,background .15s ease}.language-option:hover{border-color:var(--accent)}.language-option.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);font-weight:600}.mcp-servers-card{display:flex;flex-direction:column;gap:var(--space-md)}.mcp-servers-card__header,.mcp-server-row,.mcp-discovery__header,.mcp-discovery-row,.mcp-import-export,.mcp-sensitive-row,.mcp-inline-actions{display:flex;gap:var(--space-md)}.mcp-servers-card__header,.mcp-server-row,.mcp-discovery__header,.mcp-discovery-row{align-items:flex-start;justify-content:space-between}.mcp-servers-card__title,.mcp-server-row p,.mcp-discovery p,.mcp-discovery h6,.mcp-import-export h6{margin:0}.mcp-servers-card__description,.mcp-server-row p,.mcp-discovery p,.mcp-empty,.mcp-empty-inline,.mcp-effective-count{color:var(--text-muted)}.mcp-server-list,.mcp-discovery,.mcp-discovery__group,.mcp-editor,.mcp-sensitive-list,.mcp-import-export__pane,.mcp-server-row__main{display:flex;flex-direction:column;gap:var(--space-sm)}.mcp-server-row,.mcp-discovery,.mcp-discovery-row,.mcp-editor,.mcp-import-export__pane{padding:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.mcp-discovery-row{background:var(--surface-hover)}.mcp-discovery__notes,.mcp-discovery-row__note{color:var(--color-warning)}.mcp-server-row__titleline,.mcp-validation-status,.mcp-server-row__actions{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.mcp-state-badge,.mcp-transport-badge{display:inline-flex;align-items:center;border-radius:var(--radius-full);padding:var(--space-xs) var(--space-xs);font-size:var(--font-size-xs);line-height:var(--line-height-tight);border:var(--border-width) solid var(--border);color:var(--text-muted)}.mcp-state-badge--disabled,.mcp-state-badge--disabled-global{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 12%,transparent)}.mcp-state-badge--overridden,.mcp-state-badge--project-local{color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent)}.mcp-state-badge--inherited{color:var(--color-warning);background:color-mix(in srgb,var(--color-warning) 12%,transparent)}.mcp-state-badge--configured{color:var(--color-success);background:color-mix(in srgb,var(--color-success) 12%,transparent)}.mcp-state-badge--required{color:var(--color-warning);background:color-mix(in srgb,var(--color-warning) 12%,transparent)}.mcp-validation-status{color:var(--text-muted)}.mcp-validation-status__badge{display:inline-flex;align-items:center;border-radius:var(--radius-full);padding:var(--space-xs) var(--space-xs);border:var(--border-width) solid var(--border);color:inherit}.mcp-validation-status--pending{color:var(--color-warning)}.mcp-validation-status--valid{color:var(--color-success)}.mcp-validation-status--unreachable,.mcp-validation-status--error{color:var(--color-error)}.mcp-editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.mcp-editor-grid__wide,.mcp-import-export__pane,.mcp-server-row__main{flex:1 1 auto;min-width:0}.mcp-sensitive-row{align-items:center;flex-wrap:wrap}.mcp-sensitive-row .input,.mcp-sensitive-row .select{flex:1 1 var(--settings-field-min-width, 12rem);min-width:0}.mcp-subheading{font-weight:var(--font-weight-semibold)}.mcp-json-textarea{min-height:calc(var(--space-xl) * 4);resize:vertical;font-family:var(--font-mono)}.mcp-enabled-toggle{align-self:flex-start}@media(max-width:768px){.mcp-servers-card__header,.mcp-server-row,.mcp-discovery__header,.mcp-discovery-row,.mcp-import-export,.mcp-server-row__actions,.mcp-sensitive-row,.mcp-inline-actions{flex-direction:column;align-items:stretch}.mcp-editor-grid{grid-template-columns:1fr}.mcp-server-row__actions .btn,.mcp-inline-actions .btn,.mcp-sensitive-row .btn{justify-content:center}}.model-pricing-section{display:flex;flex-direction:column;gap:var(--space-md)}.model-pricing-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}.model-pricing-section__meta{margin:var(--space-xs) 0 0}.model-pricing-summary{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-md);border:thin solid var(--border);border-radius:var(--radius-md);background:var(--surface-secondary)}.model-pricing-summary__empty,.model-pricing-modal__subtitle{margin:var(--space-xs) 0 0}.model-pricing-modal__body{overflow-x:auto}.model-pricing-table{display:flex;flex-direction:column;gap:var(--space-xs);min-width:min-content}.model-pricing-row{display:grid;grid-template-columns:minmax(12rem,1.4fr) minmax(7rem,1fr) minmax(7rem,1fr) minmax(7rem,1fr) minmax(7rem,1fr) minmax(10rem,1.2fr) minmax(5rem,auto);gap:var(--space-xs);align-items:center}.model-pricing-row--head{color:var(--text-muted);font-size:var(--font-size-xs);font-weight:600}.model-pricing-row--add{padding-top:var(--space-xs);border-top:thin solid var(--border)}.model-pricing-key{overflow-wrap:anywhere;color:var(--text)}.model-pricing-empty{grid-column:1 / -1}@media(max-width:768px){.model-pricing-section__header,.model-pricing-summary{flex-direction:column}.model-pricing-section__header .btn,.model-pricing-summary .btn{width:100%}.model-pricing-modal__body{overflow-x:visible}.model-pricing-table{min-width:0}.model-pricing-row{grid-template-columns:minmax(14rem,1fr);padding:var(--space-sm);border:thin solid var(--border);border-radius:var(--radius-md)}.model-pricing-row--head{display:none}.model-pricing-row--add{border-top:thin solid var(--border)}}.grok-cli-provider-card .auth-provider-cli-actions,.grok-cli-provider-card .onboarding-provider-card__actions{display:flex;gap:var(--space-sm);align-items:center}.grok-cli-provider-card__body{display:flex;flex-direction:column;gap:var(--space-sm);padding:0 var(--space-md) var(--space-sm)}.grok-cli-provider-card__key-hint{opacity:.75}.grok-cli-binary-path-control{display:grid;gap:var(--space-xs);margin-top:var(--space-sm)}.grok-cli-binary-path-label{color:var(--text-muted);font-size:.78rem;font-weight:600}.grok-cli-binary-path-row{display:flex;gap:var(--space-sm);align-items:center}.grok-cli-binary-path-input{min-width:0;flex:1 1 18rem;height:2rem;border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--surface-elevated);color:var(--text-primary);padding:0 var(--space-sm)}@media(max-width:768px){.grok-cli-provider-card .auth-provider-cli-actions,.grok-cli-provider-card .onboarding-provider-card__actions,.grok-cli-binary-path-row{flex-wrap:wrap}.grok-cli-binary-path-row .btn,.grok-cli-binary-path-input{width:100%}.grok-cli-provider-card__body{padding:0 var(--space-sm) var(--space-sm)}}.omp-cli-provider-card .auth-provider-cli-actions,.omp-cli-provider-card .onboarding-provider-card__actions{display:flex;gap:var(--space-sm);align-items:center}.omp-cli-provider-card__body{display:flex;flex-direction:column;gap:var(--space-sm);padding:0 var(--space-md) var(--space-sm)}.omp-cli-provider-card__hint{opacity:.75}.omp-cli-binary-path-control{display:grid;gap:var(--space-xs);margin-top:var(--space-sm)}.omp-cli-binary-path-label{color:var(--text-muted);font-size:.78rem;font-weight:600}.omp-cli-binary-path-row{display:flex;gap:var(--space-sm);align-items:center}.omp-cli-binary-path-input{min-width:0;flex:1 1 18rem;height:2rem;border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--surface-elevated);color:var(--text-primary);padding:0 var(--space-sm)}@media(max-width:768px){.omp-cli-provider-card .auth-provider-cli-actions,.omp-cli-provider-card .onboarding-provider-card__actions,.omp-cli-binary-path-row{flex-wrap:wrap}.omp-cli-binary-path-row .btn,.omp-cli-binary-path-input{width:100%}.omp-cli-provider-card__body{padding:0 var(--space-sm) var(--space-sm)}}@keyframes custom-provider-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.custom-providers-section .onboarding-disclosure-content{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.custom-provider-list{display:flex;flex-direction:column;gap:var(--space-sm)}.custom-provider-item{display:flex;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.custom-provider-item:hover{border-color:var(--text-dim)}.custom-provider-item-info{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.custom-provider-item-name{font-weight:600;color:var(--text)}.custom-provider-item-meta{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.custom-provider-item-actions{display:flex;align-items:center;gap:var(--space-xs);flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.custom-provider-refresh-btn{white-space:nowrap}.custom-provider-detect-actions{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-xs)}.custom-provider-row-message{display:flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-xs);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.custom-provider-row-message--success{color:var(--color-success);background:color-mix(in srgb,var(--color-success) 10%,transparent)}.custom-provider-row-message--error{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.custom-provider-badge{display:inline-flex;align-items:center;padding:var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.custom-provider-empty{color:var(--text-muted);padding:var(--space-sm) 0}.custom-provider-add-btn{margin-top:var(--space-sm)}.custom-provider-form{padding:var(--space-md);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-top:var(--space-sm)}.custom-provider-form-row{margin-bottom:var(--space-sm)}.custom-provider-form-actions{display:flex;gap:var(--space-sm);margin-top:var(--space-md)}.custom-provider-form-error{display:flex;align-items:center;gap:var(--space-xs);color:var(--color-error);margin-top:var(--space-xs);background:color-mix(in srgb,var(--color-error) 10%,transparent);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.custom-provider-item-edit-form{margin-top:var(--space-xs)}.custom-provider-form-checkbox-row{display:flex;flex-direction:column;gap:var(--space-xs)}.custom-provider-form-checkbox-row label{display:flex;align-items:center;gap:var(--space-xs)}.custom-provider-form-hint{color:var(--text-muted);font-size:var(--font-size-xs);margin:0}.custom-provider-spin{animation:custom-provider-spin calc(var(--duration-slow) * 4) linear infinite}@media(max-width:768px){.custom-provider-item{flex-direction:column;align-items:flex-start;gap:var(--space-xs)}.custom-provider-item-meta{max-width:100%}.custom-provider-form{padding:var(--space-sm)}.custom-provider-item-actions{align-self:stretch;justify-content:flex-start;margin-top:var(--space-xs)}.custom-provider-refresh-btn{flex:1 1 auto;justify-content:center}}.auth-instance-controls{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.auth-instance-list{display:flex;flex-direction:column;gap:var(--space-xs)}.auth-instance-row,.auth-instance-pending{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs)}.auth-instance-pending{gap:var(--space-sm);padding:var(--space-sm)}.auth-pending-instance-field{display:flex;flex:1 1 var(--space-2xl);flex-direction:column;gap:var(--space-xs)}.auth-pending-instance-label{color:var(--text-muted);font-size:var(--font-size-xs);font-weight:600}.auth-instance-row>span{flex:1;min-width:0}@media(max-width:768px){.auth-instance-row,.auth-instance-pending{align-items:stretch}.auth-instance-row>.btn,.auth-instance-pending>.btn{flex:1}.auth-pending-instance-field{flex-basis:100%}}.prompt-manager{display:flex;flex-direction:column;gap:var(--space-md);padding:0 var(--space-xl);margin-top:var(--space-md)}.prompt-manager-tabs{display:flex;gap:var(--space-xs);border-bottom:1px solid var(--border);padding-bottom:var(--space-sm)}.prompt-manager-tab{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);background:none;border:1px solid transparent;border-radius:var(--radius-md);color:var(--text-muted);font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.prompt-manager-tab:hover{color:var(--text);background:var(--surface)}.prompt-manager-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-color:var(--todo)}.prompt-manager-tab.active{color:var(--text);background:var(--surface);border-color:var(--border)}.prompt-manager-content{min-height:200px}.prompt-manager-templates-tab,.prompt-manager-assignments-tab,.prompt-manager-overrides-tab{display:flex;flex-direction:column;gap:var(--space-lg)}.prompt-template-section{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-section-title{font-size:14px;font-weight:600;color:var(--text);margin:0}.prompt-template-section-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-template-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-card{padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color var(--transition-fast)}.prompt-template-card:hover{border-color:var(--text-dim)}.prompt-template-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}.prompt-template-card-info{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm)}.prompt-template-card-name{font-weight:600;color:var(--text);font-size:14px}.prompt-template-badge-built-in,.prompt-template-badge-custom,.prompt-template-badge-override{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) calc(var(--space-xs) * 1.5);font-size:10px;font-weight:500;border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.02em}.prompt-template-badge-built-in{background:var(--surface);color:var(--text-muted);border:1px solid var(--border)}.prompt-template-badge-custom{background:color-mix(in srgb,var(--color-info) 15%,transparent);color:var(--color-info)}.prompt-template-badge-override{background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.prompt-template-badge-role{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) calc(var(--space-xs) * 1.5);font-size:10px;font-weight:500;border-radius:var(--radius-sm)}.prompt-template-badge-built-in,.prompt-template-badge-role,.prompt-role-badge{--prompt-role-color: var(--color-muted)}.prompt-role-tone--executor{--prompt-role-color: var(--todo)}.prompt-role-tone--triage{--prompt-role-color: var(--triage)}.prompt-role-tone--reviewer{--prompt-role-color: var(--in-review)}.prompt-role-tone--merger{--prompt-role-color: var(--done)}.prompt-role-tone--scheduler{--prompt-role-color: var(--color-info)}.prompt-role-tone--engineer{--prompt-role-color: var(--color-warning)}.prompt-role-tone--custom{--prompt-role-color: var(--color-muted)}.prompt-template-badge-role,.prompt-role-badge{background:color-mix(in srgb,var(--prompt-role-color) 15%,transparent);color:var(--prompt-role-color)}.prompt-template-badge-built-in.prompt-role-tone--executor,.prompt-template-badge-built-in.prompt-role-tone--triage,.prompt-template-badge-built-in.prompt-role-tone--reviewer,.prompt-template-badge-built-in.prompt-role-tone--merger,.prompt-template-badge-built-in.prompt-role-tone--scheduler,.prompt-template-badge-built-in.prompt-role-tone--engineer,.prompt-template-badge-built-in.prompt-role-tone--custom{border-color:var(--prompt-role-color)}.prompt-template-card-actions{display:flex;gap:var(--space-xs)}.prompt-template-card-actions .btn-icon{padding:var(--space-xs)}.prompt-template-card-description{font-size:12px;color:var(--text-muted);margin:0 0 var(--space-sm) 0;line-height:1.4}.prompt-template-card-preview{background:var(--surface);border-radius:var(--radius-sm);padding:var(--space-sm);overflow:hidden}.prompt-template-card-preview code{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word;display:block;max-height:120px;overflow-y:auto}.prompt-template-empty{padding:var(--space-lg);text-align:center;color:var(--text-muted);font-size:13px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius-md)}.prompt-template-add-btn{align-self:flex-start;margin-top:var(--space-sm)}.prompt-template-editor{padding:var(--space-lg);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-lg)}.prompt-template-editor-title{font-size:14px;font-weight:600;color:var(--text);margin:0 0 var(--space-md) 0}.prompt-template-editor-fields{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-template-field{display:flex;flex-direction:column;gap:var(--space-xs)}.prompt-template-field label{font-size:12px;font-weight:500;color:var(--text-muted)}.prompt-template-field input,.prompt-template-field select,.prompt-template-prompt-textarea{padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:13px;transition:border-color var(--transition-fast)}.prompt-template-field input:focus,.prompt-template-field select:focus,.prompt-template-prompt-textarea:focus{outline:none;border-color:var(--todo)}.prompt-template-prompt-textarea{font-family:var(--font-mono);font-size:12px;line-height:1.5;resize:vertical;min-height:120px}.prompt-template-error{padding:var(--space-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid var(--color-error);border-radius:var(--radius-sm);color:var(--color-error);font-size:12px}.prompt-template-editor-actions{display:flex;gap:var(--space-sm);justify-content:flex-end;margin-top:var(--space-sm)}.prompt-template-delete-confirm{padding:var(--space-md);background:color-mix(in srgb,var(--color-error) 10%,transparent);border:1px solid var(--color-error);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:var(--space-sm)}.prompt-template-delete-confirm p{margin:0;font-size:13px;color:var(--text)}.prompt-template-delete-actions{display:flex;gap:var(--space-sm)}.prompt-assignments-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-role-assignment-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-role-assignment-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);padding:var(--space-md);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md)}.prompt-role-assignment-label{display:flex;align-items:center;gap:var(--space-md)}.prompt-role-badge{display:inline-flex;align-items:center;padding:var(--space-xs) var(--space-sm);font-size:12px;font-weight:600;border-radius:var(--radius-sm)}.prompt-role-assignment-status{font-size:12px;color:var(--text-muted)}.prompt-role-select{min-width:200px;padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:13px;cursor:pointer}.prompt-role-select:focus{outline:none;border-color:var(--todo)}.prompt-role-select:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.prompt-assignments-note{margin-top:var(--space-md);padding:var(--space-md);background:var(--surface);border-radius:var(--radius-md);font-size:12px;color:var(--text-muted);line-height:1.5}.prompt-assignments-note strong{color:var(--text)}.prompt-overrides-desc{font-size:12px;color:var(--text-muted);margin:0}.prompt-overrides-list{display:flex;flex-direction:column;gap:var(--space-md)}.prompt-override-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden}.prompt-override-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);cursor:pointer;transition:background var(--transition-fast)}.prompt-override-header:hover{background:var(--card-hover)}.prompt-override-info{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm);flex:1;min-width:0;border:none;background:none;color:inherit;padding:0;text-align:left;font:inherit;cursor:pointer;border-radius:var(--radius-sm)}.prompt-override-info:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.prompt-override-name{font-weight:600;color:var(--text);font-size:13px}.prompt-override-key{font-size:11px;font-family:var(--font-mono);color:var(--text-muted);padding:calc(var(--space-xs) * .5) var(--space-xs);background:var(--surface);border-radius:var(--radius-sm)}.prompt-override-badge{display:inline-flex;align-items:center;padding:calc(var(--space-xs) * .5) calc(var(--space-xs) * 1.5);font-size:10px;font-weight:500;background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning);border-radius:var(--radius-sm)}.prompt-override-expand-btn{display:flex;align-items:center;justify-content:center;width:var(--space-xl);height:var(--space-xl);background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.prompt-override-expand-btn:hover{color:var(--text);background:var(--surface)}.prompt-override-expand-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);color:var(--text);background:var(--surface)}.prompt-override-description{font-size:12px;color:var(--text-muted);margin:0;padding:0 var(--space-md) var(--space-md);line-height:1.4}.prompt-override-editor{padding:var(--space-md);border-top:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column;gap:var(--space-sm)}.prompt-override-textarea{padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);font-size:12px;font-family:var(--font-mono);line-height:1.5;resize:vertical;min-height:calc(var(--space-xl) * 3 + var(--space-sm));transition:border-color var(--transition-fast)}.prompt-override-textarea:focus{outline:none;border-color:var(--todo)}.prompt-override-footer{display:flex;align-items:center;gap:var(--space-md)}.prompt-override-hint{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted)}.prompt-override-header-actions{display:flex;align-items:center;gap:var(--space-xs)}.prompt-override-fullscreen-btn{display:flex;align-items:center;justify-content:center;width:var(--space-xl);height:var(--space-xl);background:none;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.prompt-override-fullscreen-btn:hover{color:var(--text);background:var(--surface)}.prompt-override-fullscreen-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);color:var(--text);background:var(--surface)}.prompt-override-fullscreen{position:fixed;inset:0;z-index:10000;background:var(--surface);padding:max(var(--space-lg),env(safe-area-inset-top,0px)) max(var(--space-lg),env(safe-area-inset-right,0px)) max(var(--space-lg),env(safe-area-inset-bottom,0px)) max(var(--space-lg),env(safe-area-inset-left,0px));display:flex;flex-direction:column}.prompt-override-fullscreen-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);flex-shrink:0}.prompt-override-fullscreen-title{font-size:13px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:var(--space-sm)}.prompt-override-fullscreen-close{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:none;border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-muted);cursor:pointer;font-size:12px;transition:all var(--transition-fast)}.prompt-override-fullscreen-close:hover{color:var(--text);border-color:var(--text-muted)}.prompt-override-fullscreen-close:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.prompt-override-fullscreen textarea{flex:1;min-height:unset;resize:none;border-radius:var(--radius-md);font-size:14px;line-height:1.6}.prompt-template-fullscreen-pre{flex:1;font-family:var(--font-mono);font-size:13px;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-word;overflow-y:auto;padding:var(--space-md);background:var(--bg);border-radius:var(--radius-md);border:1px solid var(--border);margin:0}.prompt-override-fullscreen .prompt-override-footer{flex-shrink:0;padding-top:var(--space-sm)}.prompt-template-prompt-label-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}.prompt-template-prompt-label-row label{display:block}.prompt-template-fullscreen-btn{vertical-align:middle}.prompt-template-prompt-label-row .prompt-template-fullscreen-btn{margin-left:var(--space-xs)}@media(max-width:768px){.prompt-manager{padding:0 var(--space-lg)}.prompt-manager-tabs{flex-wrap:wrap}.prompt-manager-tab{flex:1;justify-content:center;min-width:calc(50% - var(--space-xs))}.prompt-role-assignment-row{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.prompt-role-select{width:100%}.prompt-template-editor-actions{flex-direction:column}.prompt-template-editor-actions .btn{width:100%}.prompt-override-fullscreen{padding:max(var(--space-md),env(safe-area-inset-top,0px)) max(var(--space-md),env(safe-area-inset-right,0px)) max(var(--space-md),env(safe-area-inset-bottom,0px)) max(var(--space-md),env(safe-area-inset-left,0px))}.prompt-override-fullscreen textarea{font-size:16px}.prompt-override-expand-btn,.prompt-override-fullscreen-btn{width:calc(var(--space-lg) * 2 + var(--space-xs));height:calc(var(--space-lg) * 2 + var(--space-xs))}}.settings-moved-stub{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-2, var(--surface))}.settings-moved-stub__message{margin:0;font-size:var(--font-size-sm);color:var(--text-muted)}.settings-moved-stub__action{align-self:flex-start;padding:var(--space-xs) var(--space-md);font-size:var(--font-size-sm);font-weight:600;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:background-color var(--duration-fast) ease,border-color var(--duration-fast) ease}.settings-moved-stub__action:hover:not(:disabled){background:var(--surface-hover, var(--surface-2, var(--surface)));border-color:var(--accent, var(--border))}.settings-moved-stub__action:disabled{opacity:.6;cursor:not-allowed}.cli-binary-panel{display:flex;flex-direction:column;gap:12px;padding:0 var(--space-xl);margin-top:var(--space-lg);border:0;background:transparent}.cli-binary-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.cli-binary-header .settings-section-heading{margin:0}.cli-binary-pill{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.cli-binary-pill--ok{background:color-mix(in srgb,var(--color-success) 18%,transparent);color:var(--color-success);border:1px solid color-mix(in srgb,var(--color-success) 40%,transparent)}.cli-binary-pill--warn{background:color-mix(in srgb,var(--color-warning) 18%,transparent);color:var(--color-warning);border:1px solid color-mix(in srgb,var(--color-warning) 40%,transparent)}.cli-binary-pill--err{background:color-mix(in srgb,var(--color-error) 18%,transparent);color:var(--color-error);border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent)}.cli-binary-help{color:var(--text-muted);line-height:1.4}.cli-binary-help code{background:color-mix(in srgb,var(--text) 6%,transparent);padding:1px 6px;border-radius:4px;font-size:.92em}.cli-binary-status-line{margin:0;color:var(--text-muted)}.cli-binary-status-line code{background:color-mix(in srgb,var(--text) 6%,transparent);padding:1px 6px;border-radius:4px}.cli-binary-detail{display:flex;flex-direction:column;gap:12px}.cli-binary-info-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:13px}.cli-binary-info-list li{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.cli-binary-info-list span{color:var(--text-muted);min-width:64px}.cli-binary-info-list code{background:color-mix(in srgb,var(--text) 6%,transparent);padding:1px 6px;border-radius:4px;word-break:break-all}.cli-binary-expected{color:var(--text-muted);font-size:12px}.cli-binary-actions{display:flex;gap:8px;flex-wrap:wrap}.cli-binary-install-btn,.cli-binary-refresh-btn,.cli-binary-copy-btn{cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px;border:1px solid transparent;transition:background .15s ease,border-color .15s ease}.cli-binary-install-btn{background:var(--accent, #3b82f6);color:var(--accent-text)}.cli-binary-install-btn:hover:not(:disabled){background:color-mix(in srgb,var(--accent) 88%,var(--text) 12%)}.cli-binary-install-btn:disabled,.cli-binary-refresh-btn:disabled{opacity:.55;cursor:not-allowed}.cli-binary-refresh-btn,.cli-binary-copy-btn{background:color-mix(in srgb,var(--text) 4%,transparent);color:var(--text);border-color:color-mix(in srgb,var(--text) 12%,transparent)}.cli-binary-refresh-btn:hover:not(:disabled),.cli-binary-copy-btn:hover{background:color-mix(in srgb,var(--text) 8%,transparent)}.cli-binary-commands{display:flex;flex-direction:column;gap:6px}.cli-binary-commands label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.cli-binary-command-row{display:flex;align-items:center;gap:8px;background:color-mix(in srgb,var(--bg) 25%,transparent);border:1px solid color-mix(in srgb,var(--text) 6%,transparent);border-radius:6px;padding:6px 8px 6px 12px}.cli-binary-command-row code{flex:1;font-family:var(--font-mono, ui-monospace, "SFMono-Regular", monospace);font-size:12.5px;color:var(--text);white-space:nowrap;overflow-x:auto}.cli-binary-install-log{border-top:1px solid color-mix(in srgb,var(--text) 6%,transparent);padding-top:10px;font-size:12.5px}.cli-binary-install-log summary{cursor:pointer;color:var(--text-muted)}.cli-binary-install-output{margin:6px 0 0;padding:8px 10px;background:color-mix(in srgb,var(--bg) 35%,transparent);border-radius:4px;max-height:220px;overflow:auto;white-space:pre-wrap;font-size:12px;line-height:1.4}.cli-binary-install-output--err{color:var(--color-error)}.cli-binary-permissions-hint{margin:6px 0;padding:8px 10px;background:color-mix(in srgb,var(--color-error) 10%,transparent);border-left:3px solid color-mix(in srgb,var(--color-error) 55%,transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--color-error);font-size:12.5px;line-height:1.5}.tracking-repo-select{display:flex;flex-direction:column;gap:var(--space-sm)}.tracking-repo-select__custom-input{margin-top:0}.tracking-repo-select__hint{color:var(--text-muted)}.tracking-repo-select__hint--error{color:var(--color-error)}@media(max-width:768px){.tracking-repo-select{gap:var(--space-xs)}}.agent-provisioning-policy-editor{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-lg)}.agent-provisioning-policy-help{color:var(--text-muted);font-size:.75rem;margin:0}.agent-provisioning-policy-help code{font-family:var(--font-mono)}.agent-provisioning-policy-textarea{min-height:calc(var(--space-2xl) + var(--space-xl));resize:vertical}@media(max-width:768px){.agent-provisioning-policy-editor{padding:var(--space-md)}}.voice-input-section{display:grid;gap:var(--space-xs)}.voice-input-section__message{margin:0;color:var(--color-warning);font-size:var(--font-size-xs)}.voice-input-section__status{color:var(--text-muted);font-size:var(--font-size-sm)}.voice-input-section__status--installed{color:var(--color-success)}.voice-input-section__status--error,.voice-input-section__status--unknown{color:var(--color-error)}.voice-input-section__status--downloading,.voice-input-section__status--queued{color:var(--color-warning)}.voice-input-section__actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}@media(max-width:768px){.voice-input-section__actions .btn{inline-size:100%;justify-content:center}}.configuration-versions-section{display:grid;gap:var(--space-sm)}.configuration-versions-section__list{display:grid;gap:var(--space-sm);margin:0;padding:0;list-style:none}.configuration-versions-section__item{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding-block:var(--space-sm);border-block-end:1px solid var(--border-subtle)}.configuration-versions-section__item span{display:grid;gap:var(--space-xs);min-inline-size:0}.configuration-versions-section__item strong{color:var(--text)}.configuration-versions-section__item small{color:var(--text-muted)}.configuration-versions-section__error{color:var(--color-error)}@media(max-width:768px){.configuration-versions-section__item{align-items:stretch;flex-direction:column}.configuration-versions-section__item .btn{inline-size:100%;justify-content:center}}
|