@runfusion/fusion 0.73.0-beta.1 → 0.73.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/bin.js +12 -37
  2. package/dist/client/.vite/manifest.json +243 -243
  3. package/dist/client/assets/{AgentDetailView-Dyvt9FXO.js → AgentDetailView-CUoHZPZr.js} +1 -1
  4. package/dist/client/assets/{AgentPermissionPolicyEditor-DN5DFqEr.js → AgentPermissionPolicyEditor-DKoHJIlF.js} +1 -1
  5. package/dist/client/assets/{AgentsView-itLEj7y0.js → AgentsView-CaBo-FHV.js} +3 -3
  6. package/dist/client/assets/{ChatView-vwQ2Nz5l.js → ChatView-Bv0J5p5U.js} +1 -1
  7. package/dist/client/assets/{CommandCenter-B1JtGXyK.js → CommandCenter-wgiEIVuC.js} +1 -1
  8. package/dist/client/assets/{DevServerView-DpeJ_8pF.js → DevServerView-Ue9XG_4H.js} +1 -1
  9. package/dist/client/assets/{DirectoryPicker-BEl21R4w.js → DirectoryPicker-B7YwgF53.js} +1 -1
  10. package/dist/client/assets/{DocumentsView-BEJfHare.js → DocumentsView-C1Ptwcv5.js} +1 -1
  11. package/dist/client/assets/{EvalsView-Bje4cRnA.js → EvalsView-BjyqxMS_.js} +1 -1
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-CIgYDqig.js → ExperimentalAgentOnboardingModal-_PMSa_gN.js} +1 -1
  13. package/dist/client/assets/{GoalsView-ByM0z2VT.js → GoalsView-BzLA8GX9.js} +1 -1
  14. package/dist/client/assets/{InsightsView-DQj1eakn.js → InsightsView-Cb_tUr1V.js} +1 -1
  15. package/dist/client/assets/{MemoryView-B1ep_ciN.js → MemoryView-CRxOPCQq.js} +1 -1
  16. package/dist/client/assets/{PiExtensionsManager-CeNIYTAh.js → PiExtensionsManager-XQ5rWJT3.js} +1 -1
  17. package/dist/client/assets/{PluginManager-Dtse5QoX.js → PluginManager-CXPSlWxs.js} +1 -1
  18. package/dist/client/assets/{PullRequestView-DoPJLqbP.js → PullRequestView-CX6fScVe.js} +1 -1
  19. package/dist/client/assets/{ReportModal-D_TX9ynC.js → ReportModal-JhZZXZlj.js} +1 -1
  20. package/dist/client/assets/{ResearchView-BwebXKcl.js → ResearchView-DgKzxRUL.js} +1 -1
  21. package/dist/client/assets/{SecretsView-4P6plzFx.js → SecretsView-C83SIrjR.js} +1 -1
  22. package/dist/client/assets/{SessionTerminal-Eyn67HCs.js → SessionTerminal-BrK3psiC.js} +1 -1
  23. package/dist/client/assets/{SettingsModal-DDTj91IW.js → SettingsModal-Bby9vLGx.js} +3 -3
  24. package/dist/client/assets/{SettingsModal-JH75-PwL.js → SettingsModal-DVLqY1-7.js} +1 -1
  25. package/dist/client/assets/{SettingsTextareaRow-CU5vykyH.js → SettingsTextareaRow-BKGsmZ7C.js} +1 -1
  26. package/dist/client/assets/{SetupWizardModal-Bwi2iCeU.js → SetupWizardModal-DIb4q-VT.js} +2 -2
  27. package/dist/client/assets/{SkillsView-DW2ppm8T.js → SkillsView-D1Zxh1iX.js} +1 -1
  28. package/dist/client/assets/{TodoView-xb5SqfVh.js → TodoView-CGIcE6Yr.js} +1 -1
  29. package/dist/client/assets/{WorkflowNodeEditor-BXuR78ZU.js → WorkflowNodeEditor-BXUC0lim.js} +1 -1
  30. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BicZInpZ.js → architectureDiagram-3BPJPVTR-Dv83GkUE.js} +1 -1
  31. package/dist/client/assets/{blockDiagram-GPEHLZMM-7oQ_nzsT.js → blockDiagram-GPEHLZMM-B_j-RJOz.js} +1 -1
  32. package/dist/client/assets/{c4Diagram-AAUBKEIU-DhEBLzue.js → c4Diagram-AAUBKEIU-Cy3f-SD1.js} +1 -1
  33. package/dist/client/assets/channel-BuhC8kaT.js +1 -0
  34. package/dist/client/assets/{chunk-2J33WTMH-D7I0rM7f.js → chunk-2J33WTMH-CPolddUJ.js} +1 -1
  35. package/dist/client/assets/{chunk-4BX2VUAB-DzkSSYL2.js → chunk-4BX2VUAB-BAGPgwkc.js} +1 -1
  36. package/dist/client/assets/{chunk-55IACEB6-R31lGmhe.js → chunk-55IACEB6-dzYFOH0q.js} +1 -1
  37. package/dist/client/assets/{chunk-727SXJPM-CIMqUk3H.js → chunk-727SXJPM-ul9hGhiR.js} +1 -1
  38. package/dist/client/assets/{chunk-AQP2D5EJ-9N92ezbm.js → chunk-AQP2D5EJ-C75yqe4-.js} +1 -1
  39. package/dist/client/assets/{chunk-FMBD7UC4-BhVx0rTt.js → chunk-FMBD7UC4-BwiLAyup.js} +1 -1
  40. package/dist/client/assets/{chunk-ND2GUHAM-DQ2CeXsK.js → chunk-ND2GUHAM-CVv1sLhy.js} +1 -1
  41. package/dist/client/assets/{chunk-QZHKN3VN-CrM1mDTY.js → chunk-QZHKN3VN-D1c-k3xL.js} +1 -1
  42. package/dist/client/assets/classDiagram-4FO5ZUOK-vpRR5WOg.js +1 -0
  43. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-vpRR5WOg.js +1 -0
  44. package/dist/client/assets/{cose-bilkent-S5V4N54A-D5HlnHn5.js → cose-bilkent-S5V4N54A-DosMsFd6.js} +1 -1
  45. package/dist/client/assets/{dagre-BM42HDAG-ClK1GX_T.js → dagre-BM42HDAG-9os-QBXe.js} +1 -1
  46. package/dist/client/assets/{dashboard-view-B4nyrH01.js → dashboard-view-Bn7iL770.js} +1 -1
  47. package/dist/client/assets/{dashboard-view-BnNTdZOQ.js → dashboard-view-CNVTxyWE.js} +1 -1
  48. package/dist/client/assets/{dashboard-view-Dm55pX_8.js → dashboard-view-iwAS1HTp.js} +1 -1
  49. package/dist/client/assets/{diagram-2AECGRRQ-4_qdwWxL.js → diagram-2AECGRRQ-ChjuJgA6.js} +1 -1
  50. package/dist/client/assets/{diagram-5GNKFQAL-GUP4hsrt.js → diagram-5GNKFQAL-Cq10aB4z.js} +1 -1
  51. package/dist/client/assets/{diagram-KO2AKTUF-DpuZrsNs.js → diagram-KO2AKTUF-CKjyrzjg.js} +1 -1
  52. package/dist/client/assets/{diagram-LMA3HP47-JKCnuHJY.js → diagram-LMA3HP47-DxCc1BsH.js} +1 -1
  53. package/dist/client/assets/{diagram-OG6HWLK6-DjoTZI7B.js → diagram-OG6HWLK6-DJWEkDsR.js} +1 -1
  54. package/dist/client/assets/{erDiagram-TEJ5UH35-jup60eWL.js → erDiagram-TEJ5UH35-gVkDYC92.js} +1 -1
  55. package/dist/client/assets/{flowDiagram-I6XJVG4X-CAkZ1K2D.js → flowDiagram-I6XJVG4X-1lw1mQRQ.js} +1 -1
  56. package/dist/client/assets/{folder-open-CVnbHAlV.js → folder-open-Nmr7nRmN.js} +1 -1
  57. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BIJMUCKC.js → ganttDiagram-6RSMTGT7-Yzq4WZRo.js} +1 -1
  58. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CQ737MVe.js → gitGraphDiagram-PVQCEYII-cFR9Gv8n.js} +1 -1
  59. package/dist/client/assets/{index-DTPYepvh.js → index-Cg9ahVtV.js} +9 -9
  60. package/dist/client/assets/{infoDiagram-5YYISTIA-SYQtUZaP.js → infoDiagram-5YYISTIA-BbRiTnD3.js} +1 -1
  61. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-wh4Bkxt7.js → ishikawaDiagram-YF4QCWOH-DD4i2Znk.js} +1 -1
  62. package/dist/client/assets/{journeyDiagram-JHISSGLW-DF2fFxpR.js → journeyDiagram-JHISSGLW-qHPO2M-C.js} +1 -1
  63. package/dist/client/assets/{kanban-definition-UN3LZRKU-C-Mdwtg_.js → kanban-definition-UN3LZRKU-EuFfgxUv.js} +1 -1
  64. package/dist/client/assets/{mermaid.core-DN1HJcSR.js → mermaid.core-Cru9Vzsy.js} +4 -4
  65. package/dist/client/assets/{mindmap-definition-RKZ34NQL-PIiYvjAH.js → mindmap-definition-RKZ34NQL-mCvtfapj.js} +1 -1
  66. package/dist/client/assets/{pieDiagram-4H26LBE5-BEKpYzOc.js → pieDiagram-4H26LBE5-BSc_a5Dz.js} +1 -1
  67. package/dist/client/assets/{puzzle-dehVLUf6.js → puzzle-Cz66CEWW.js} +1 -1
  68. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-bktvpLnT.js → quadrantDiagram-W4KKPZXB-Um2SLb_d.js} +1 -1
  69. package/dist/client/assets/{requirementDiagram-4Y6WPE33-HMBDdOdV.js → requirementDiagram-4Y6WPE33-B94evN7g.js} +1 -1
  70. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CskRm2Gx.js → sankeyDiagram-5OEKKPKP-BH7NLX-K.js} +1 -1
  71. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DzHgbcIj.js → sequenceDiagram-3UESZ5HK-DusrBGQp.js} +1 -1
  72. package/dist/client/assets/{shield-alert-DsESQNJt.js → shield-alert-CcQuaRHN.js} +1 -1
  73. package/dist/client/assets/{standing-instructions-template-DM2DT5pv.js → standing-instructions-template-CVnY93Xy.js} +1 -1
  74. package/dist/client/assets/{stateDiagram-AJRCARHV-B79K6uwK.js → stateDiagram-AJRCARHV-GRjL9YlX.js} +1 -1
  75. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BAXYPMdJ.js → stateDiagram-v2-BHNVJYJU-BBsv6ppQ.js} +1 -1
  76. package/dist/client/assets/{timeline-definition-PNZ67QCA-DnprS2QO.js → timeline-definition-PNZ67QCA-DC6UeqjY.js} +1 -1
  77. package/dist/client/assets/{upload-CP469dwA.js → upload-CjJp7lEX.js} +1 -1
  78. package/dist/client/assets/{users-CV13MaDV.js → users-DgimRYHz.js} +1 -1
  79. package/dist/client/assets/{vennDiagram-CIIHVFJN-BzYx9MP6.js → vennDiagram-CIIHVFJN-C272zK9h.js} +1 -1
  80. package/dist/client/assets/{wardley-L42UT6IY-Bnrq_cbQ.js → wardley-L42UT6IY-KkRF-2j9.js} +1 -1
  81. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BnCqi5CX.js → wardleyDiagram-YWT4CUSO-B4brtKRt.js} +1 -1
  82. package/dist/client/assets/{xychartDiagram-2RQKCTM6-fDD0jw9P.js → xychartDiagram-2RQKCTM6--PFSKt1s.js} +1 -1
  83. package/dist/client/index.html +1 -1
  84. package/dist/client/version.json +1 -1
  85. package/dist/extension.js +1 -0
  86. package/package.json +1 -1
  87. package/dist/client/assets/channel-wiu7B96H.js +0 -1
  88. package/dist/client/assets/classDiagram-4FO5ZUOK-CC2IVRlp.js +0 -1
  89. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CC2IVRlp.js +0 -1
@@ -1 +1 @@
1
- import{r as t,j as r}from"./vendor-react-SZ_qB27O.js";import{cU as Ge,cV as je,cW as Nr,cX as Ce,bb as Je,cY as Oe,cZ as ze,c_ as Fe,c$ as $e,d0 as Sr,d1 as be,d2 as kr,d3 as jr,d4 as Cr,d5 as Er,d6 as Lr,cK as se,d7 as xe,L as ve,aF as Rr,d8 as Dr,d9 as _r,da as Mr,C as Pr,aX as Qe,db as Tr,V as Ur,dc as Ar,c1 as Or,c3 as zr,dd as Fr,o as Be,X as $r,aO as Br,R as Hr}from"./index-DTPYepvh.js";import{u as ue}from"./vendor-i18n-GF3RlKbq.js";import{S as Ze}from"./shield-alert-DsESQNJt.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";const Ee=500,Vr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function er(e){return e.length<=Ee?e:e.slice(-Ee)}function ye(e,i){return er([...e,i])}function Z(e){try{return JSON.parse(e)}catch{return null}}function oe(e){const i=e.text??"";return e.stream==="stderr"?`[stderr] ${i}`:i}function Wr(e){return e?.previewUrl??null}async function He(e){return kr(e)}async function Ve(e,i){return jr(e,i)}async function Ir(e){return Cr(e)}async function Xr(e){return Er(e)}async function We(e){return Lr(e)}function q(e){try{return e()}catch{return null}}function Ne(){return typeof q(()=>je)=="function"&&typeof q(()=>Ge)=="function"}function J(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}function qr(e){const{t:i}=ue("app"),[f,s]=t.useState(null),[g,d]=t.useState([]),[x,m]=t.useState([]),[k,C]=t.useState([]),[z,E]=t.useState(!0),[j,p]=t.useState(null),o=t.useRef(0),[v,_]=t.useState(null),O=t.useCallback(a=>{if(s(a),a?.logHistory){const n=a.logHistory.slice(-Ee).map(oe);m(n)}},[]),L=t.useCallback(async()=>{const a=o.current;try{if(Ne())if(v){const n=await Ge(v,e);if(o.current!==a)return;O(n)}else{const n=await je(e);if(o.current!==a)return;d(n),n.length>0&&(_(n[0].config.id),O(n[0]))}else{const n=await He(e);if(o.current!==a)return;const h=J(n);d([h]),O(h)}p(null)}catch(n){if(o.current!==a)return;p(W(n))}},[O,e,v]);t.useEffect(()=>{o.current+=1;const a=o.current;s(null),d([]),m([]),C([]),E(!0),p(null),_(null),(async()=>{try{const[h,c]=await Promise.allSettled([Ne()?je(e):He(e).then(y=>[J(y)]),typeof q(()=>be)=="function"?be(e):We(e).then(y=>y.map(D=>({name:D.name,command:D.command,cwd:D.cwd,scriptName:D.scriptName,packagePath:D.packagePath})))]);if(o.current!==a)return;let w=null;if(h.status==="fulfilled"){const y=h.value;if(d(y),y.length>0){const D=y[0];Ne()&&_(D.config.id),O(D)}}else w=W(h.reason);c.status==="fulfilled"&&C(c.value),w&&p(w)}catch(h){if(o.current!==a)return;p(W(h))}finally{o.current===a&&E(!1)}})()},[O,e]),t.useEffect(()=>{const a=v?Nr(v,e):typeof q(()=>Ce)=="function"?Ce(e):null;if(!a)return;const n=o.current,h=Je(a,{events:{history:c=>{if(o.current!==n)return;const w=Z(c.data);if(w?.lines){const y=w.lines.map(oe);m(er(y))}},log:c=>{if(o.current!==n)return;const w=Z(c.data);if(w){const y=typeof w.line=="string"?w.line:oe(w);m(D=>ye(D,y))}},"dev-server:log":c=>{if(o.current!==n)return;const w=Z(c.data);if(w){const y=typeof w.line=="string"?w.line:oe(w);m(D=>ye(D,y))}},"dev-server:output":c=>{if(o.current!==n)return;const w=Z(c.data);w?.line&&m(y=>ye(y,w.line))},status:c=>{if(o.current!==n)return;const w=Z(c.data),y=w?.status;y&&s(D=>D&&{...D,status:y,runtime:w.pid?{...D.runtime??{startedAt:new Date().toISOString()},pid:w.pid}:D.runtime})},"dev-server:status":c=>{if(o.current!==n)return;const w=Z(c.data);if(w?.status){const y=J(w);s(y),d([y])}},stopped:()=>{o.current},failed:()=>{o.current}},onReconnect:()=>{o.current===n&&L()},onError:()=>{o.current===n&&p(c=>c??i("devserver.lostConnection","Lost log stream connection."))}});return()=>{h()}},[e,L,v]),t.useEffect(()=>{if(f?.status!=="running"&&f?.status!=="starting")return;const a=setInterval(()=>{L()},Vr);return()=>{clearInterval(a)}},[L,f?.status]);const T=t.useCallback(async(a,n)=>{o.current+=1;const h=o.current;try{let c;const w=typeof n=="string"&&n.length>0,y=f?.config?.cwd??".";if(!(w&&n!==y)&&v&&typeof q(()=>Oe)=="function")c=await Oe(v,e);else{const V=await Ve({command:a,cwd:n},e);c=J(V)}if(o.current!==h)return;s(c),p(null)}catch(c){if(o.current!==h)return;throw p(W(c)),c}},[e,f?.config?.cwd,v]),R=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(v&&typeof q(()=>ze)=="function")n=await ze(v,e);else{const h=await Ir(e);n=J(h)}if(o.current!==a)return;s(n),p(null)}catch(n){if(o.current!==a)return;throw p(W(n)),n}},[e,v]),$=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(v&&typeof q(()=>Fe)=="function")n=await Fe(v,e);else{const h=await Xr(e);n=J(h)}if(o.current!==a)return;s(n),p(null)}catch(n){if(o.current!==a)return;throw p(W(n)),n}},[e,v]),B=t.useCallback(async a=>{o.current+=1;const n=o.current;try{let h;if(v&&typeof q(()=>$e)=="function")h=await $e(v,a,e);else{const c=await Sr({url:a},e);h={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(o.current!==n)return;s(c=>c?{...c,previewUrl:h.url??void 0}:null),p(null)}catch(h){if(o.current!==n)return;throw p(W(h)),h}},[e,v]),F=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;try{n=await be(e)}catch{n=(await We(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(o.current!==a)return;C(n),p(null)}catch(n){if(o.current!==a)return;throw p(W(n)),n}},[e]),M=t.useCallback(async(a,n)=>{if(typeof a!="string"&&!v)try{const w=a,y=await Ve({command:w.command,cwd:w.cwd,scriptName:w.scriptName,packagePath:w.packagePath??w.cwd},e),D=J(y);s(D),d([D]),p(null);return}catch(w){throw p(W(w)),w}const h=typeof a=="string"?a:a.command,c=typeof a=="string"?n:a.cwd;await T(h,c)},[e,T,v]),b=t.useCallback(async()=>{await R()},[R]),u=t.useCallback(async()=>{await $()},[$]),U=t.useCallback(async a=>{await B(a)},[B]),A=t.useCallback(async()=>{await F()},[F]),I=t.useCallback(async()=>{await L()},[L]),S=Wr(f),N=f?{...f,pid:f.runtime?.pid}:null;return{session:f,sessions:g,logs:x,detectedCommands:k,previewUrl:S,isLoading:z,error:j,startServer:T,stopServer:R,restartServer:$,setPreviewUrl:B,detectCommands:F,refresh:L,candidates:k,serverState:N,loading:z,start:M,stop:b,restart:u,setManualUrl:U,detect:A,refreshStatus:I}}const Ie=500,Xe=100;function rr(e){return e.length>Ie?e.slice(-Ie):e}function tr(e){return e==="stderr"?"stderr":"stdout"}function ce(e){try{return JSON.parse(e.data)}catch{return null}}function de(e,i){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:i,text:typeof e.text=="string"?e.text:"",stream:tr(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Kr(e,i){return{id:i,text:e,stream:"stdout",timestamp:""}}function Se(e,i){if(i.length===0)return e;const f=[...e],s=new Set(e.map(g=>g.id));for(const g of i)s.has(g.id)||(s.add(g.id),f.push(g));return f.sort((g,d)=>g.id-d.id),rr(f)}function Yr(e,i){const[f,s]=t.useState([]),[g,d]=t.useState(!1),[x,m]=t.useState(!1),[k,C]=t.useState(!1),[z,E]=t.useState(null),j=t.useRef(null),p=t.useRef(!1),o=t.useRef(0),v=t.useRef(0),_=t.useRef(e),O=t.useRef(i),L=t.useRef(0),T=t.useRef(1);(_.current!==e||O.current!==i)&&(_.current=e,O.current=i,o.current++,se({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),p.current=!0,L.current=0,T.current=1,s([]),d(!1),m(!1),C(!1),E(null),j.current&&(j.current(),j.current=null)),t.useEffect(()=>{if(!i){j.current&&(j.current(),j.current=null);return}const M=o.current,b=++v.current;p.current=!1,d(!0);const u=(S,N)=>{const a=rr(S);s(a),E(N),C(N!==null?N>a.length:!1);const n=a.length>0?a[a.length-1].id:0;L.current=n,T.current=n+1},U=S=>{if(p.current||o.current!==M||!S||typeof S!="object")return;const N=S.lines;if(!Array.isArray(N))return;if(N.length>0&&typeof N[0]=="string"){const n=N.filter(h=>typeof h=="string").map((h,c)=>Kr(h,c+1));u(n,n.length);return}const a=N.filter(n=>!!n&&typeof n=="object").map((n,h)=>de(n,h+1));u(a,a.length)},A=S=>{if(p.current||o.current!==M)return;const N=typeof S.text=="string"?S.text:typeof S.line=="string"?S.line:null;if(!N)return;const a=T.current,n=typeof S.id=="number"&&Number.isFinite(S.id)?S.id:a,h={id:n,text:N,stream:tr(S.stream),timestamp:typeof S.timestamp=="string"?S.timestamp:""};L.current=Math.max(L.current,n),T.current=Math.max(T.current,n+1),s(c=>Se(c,[h])),E(c=>c===null?c:Math.max(c+1,h.id))};async function I(){try{const N=await xe({maxLines:Xe},e);if(p.current||o.current!==M||v.current!==b)return;const a=N.lines.map((n,h)=>de(n,h+1));u(a,N.totalLines)}catch{if(p.current||o.current!==M||v.current!==b)return;u([],null)}finally{!p.current&&o.current===M&&v.current===b&&d(!1)}const S=Ce(e);j.current=Je(S,{events:{"dev-server:log":N=>{const a=ce(N);a&&A(a)},log:N=>{const a=ce(N);a&&A(a)},history:N=>{const a=ce(N);U(a)},"dev-server:history":N=>{const a=ce(N);U(a)}},onReconnect:()=>{se({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:L.current??null,sseChannel:S,reason:"history-replay"}),!(p.current||o.current!==M)&&xe({lastEventId:L.current,maxLines:50},e).then(N=>{if(p.current||o.current!==M)return;const a=N.lines.map((n,h)=>de(n,T.current+h));if(a.length>0){const n=a[a.length-1].id;L.current=Math.max(L.current,n),T.current=Math.max(T.current,n+1)}s(n=>Se(n,a)),E(N.totalLines)}).catch(()=>{})}}),se({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:S})}return I(),()=>{p.current=!0,j.current&&(j.current(),j.current=null)}},[i,e]);const $=t.useCallback(async()=>{if(!i||x)return;const M=o.current,b=f.length;m(!0);try{const u=await xe({maxLines:Xe,offset:b},e);if(p.current||o.current!==M)return;const U=u.lines.map((A,I)=>de(A,I+1));s(A=>Se(U,A)),C(u.totalLines>b+U.length),E(u.totalLines)}catch{}finally{m(!1)}},[i,f.length,x,e]),B=t.useCallback(()=>{s([])},[]),F=j.current!==null&&!g&&!p.current;return{entries:f,loading:g,loadingMore:x,hasMore:k,total:z,loadMore:$,clear:B,logs:f,isStreaming:F,clearLogs:B}}const Gr="This preview appears to block iframe embedding. Open it in a new tab instead.",Jr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",Qr="Preview is taking longer than expected and may block iframe embedding.";function Zr(e){return e==="blocked"?Gr:e==="error"?Jr:null}function et(e,i={}){const{loadTimeoutMs:f=1e4,detectionMethod:s=null}=i,g=t.useRef(null),d=t.useRef(null),[x,m]=t.useState("unknown"),[k,C]=t.useState(null),[z]=t.useState(s),E=t.useCallback(()=>{d.current!==null&&(window.clearTimeout(d.current),d.current=null)},[]),j=t.useCallback(R=>{m(R),C(Zr(R))},[]),p=t.useCallback(()=>{m("blocked"),C(Qr)},[]);t.useEffect(()=>{if(E(),!e){m("unknown"),C(null);return}m("unknown"),C(null);let R=!1;return queueMicrotask(()=>{R||(m("loading"),C(null))}),()=>{R=!0,E()}},[E,e]),t.useEffect(()=>{if(x!=="loading"){E();return}const R=setTimeout(()=>{d.current=null,p()},f);return d.current=R,()=>{clearTimeout(R),d.current===R&&(d.current=null)}},[E,x,f,p]);const o=t.useCallback(()=>{const R=g.current;if(!R){j("embedded");return}try{if(R.contentWindow?.location?.href==="about:blank"&&R.src!=="about:blank"){j("blocked");return}}catch{}j("embedded")},[j]),v=t.useCallback(()=>{j("error")},[j]);t.useEffect(()=>{if(E(),!e){m("unknown"),C(null);return}m("unknown"),C(null)},[E]);const _=t.useCallback(()=>{E(),m("unknown"),C(null)},[E]),O=_,L=t.useMemo(()=>x==="embedded",[x]),T=t.useMemo(()=>x==="blocked"||x==="error",[x]);return{embedStatus:x,isEmbedded:L,isBlocked:T,blockReason:k,detectionMethod:z,iframeRef:g,resetEmbedStatus:_,setEmbedStatus:j,retry:O,embedContext:k,handleIframeLoad:o,handleIframeError:v}}const rt=/\x1b\[[0-9;]*m/g,tt=50;function st(e){return e.scrollHeight-(e.scrollTop+e.clientHeight)<=tt}function Le(e){return e.replace(rt,"")}function nt(e){if(!e)return"";const i=new Date(e);return Number.isNaN(i.getTime())?"":i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function it(e){if(e.stream==="stderr")return"error";const i=Le(e.text).toLowerCase();return/\b(warn|warning)\b/.test(i)?"warn":/\b(error|fatal)\b/.test(i)?"error":"info"}function lt(e,i){if(!i)return e;const f=new RegExp(`(${at(i)})`,"ig"),s=e.split(f),g=i.toLowerCase();return r.jsx(r.Fragment,{children:s.map((d,x)=>d.toLowerCase()===g?r.jsx("mark",{children:d},`${d}-${x}`):r.jsx("span",{children:d},`${d}-${x}`))})}function ot({entries:e,loading:i,loadingMore:f,hasMore:s,total:g,onLoadMore:d,isRunning:x}){const{t:m}=ue("app"),k=t.useRef(null),C=t.useRef(e.length),z=t.useRef(x),[E,j]=t.useState(!1),[p,o]=t.useState(!1),v=t.useRef(!1),[_,O]=t.useState(""),[L,T]=t.useState("all"),R=t.useMemo(()=>L==="all"?e:e.filter(u=>it(u)===L),[e,L]),$=t.useMemo(()=>{const u=_.trim().toLowerCase();return u?R.filter(U=>Le(U.text).toLowerCase().includes(u)):R},[R,_]),B=$.length,F=t.useCallback(u=>{v.current=u,o(u)},[]),M=t.useCallback(()=>{const u=k.current;u&&(u.scrollTop=u.scrollHeight,F(!1))},[F]);t.useEffect(()=>{const u=z.current,U=C.current,A=e.length>U;x&&(!u||!p&&A)&&M(),z.current=x,C.current=e.length},[e.length,x,p,M]);const b=t.useCallback(()=>{const u=k.current;u&&F(!st(u))},[F]);return t.useEffect(()=>{i||e.length===0||!p&&x&&M()},[e,x,p,i,M]),t.useEffect(()=>{const u=k.current;if(!u||!x||typeof MutationObserver>"u")return;const U=new MutationObserver(()=>{v.current||M()});return U.observe(u,{childList:!0,characterData:!0,subtree:!0}),()=>U.disconnect()},[x,M]),i&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(ve,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:m("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${E?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:m("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[g!==null?`${e.length}/${g}`:`${e.length}`," ",m("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:m("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:L,onChange:u=>T(u.target.value),"data-testid":"devserver-log-severity-filter","aria-label":m("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:m("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:m("devserver.info","Info")}),r.jsx("option",{value:"warn",children:m("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:m("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:m("devserver.searchLogs","Search logs")}),r.jsx(Rr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:_,onChange:u=>O(u.target.value),placeholder:m("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":m("devserver.searchLogs","Search logs")})]}),_.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:m("devserver.matchCount",{count:B,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>j(u=>!u),"data-testid":"devserver-log-fullscreen-toggle","aria-label":E?m("devserver.exitFullscreen","Exit fullscreen logs"):m("devserver.enterFullscreen","Enter fullscreen logs"),children:E?r.jsx(Dr,{size:14}):r.jsx(_r,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[s&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:d,disabled:f,"data-testid":"devserver-log-load-more-button",children:f?r.jsxs(r.Fragment,{children:[r.jsx(ve,{size:14,className:"devserver-log-viewer__spinner"}),m("devserver.loadingOlderLogs","Loading older logs…")]}):m("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:k,className:"devserver-log-viewer__content",onScroll:b,"data-testid":"devserver-log-content",children:[!i&&$.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?m("devserver.noLogsYet","No logs yet. Start the dev server to see output."):R.length===0?m("devserver.noMatchesSeverity","No log lines match the selected severity."):m("devserver.noMatchesSearch","No log lines match your search.")}),$.map(u=>{const U=Le(u.text),A=nt(u.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[A&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:A}),u.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:m("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:Mr(lt(U,_.trim()))})]},u.id)})]}),p&&x&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:M,"data-testid":"devserver-log-jump-button",children:[r.jsx(Pr,{size:14}),m("devserver.newLogs","New logs")]})]})]})}const ct="devserver-preview-iframe";function dt({url:e,embedStatus:i,onEmbedStatusChange:f,iframeRef:s,blockReason:g,onRetry:d,className:x=ct,embedContext:m}){const{t:k}=ue("app"),C=g??m??null,[z,E]=t.useState(0);t.useEffect(()=>{!e||i!=="unknown"||(E(v=>v+1),f("loading"))},[i,f,e]);const j=t.useCallback(()=>{const v=s.current;if(!v){f("embedded");return}try{if(v.contentWindow?.location?.href==="about:blank"&&v.src!=="about:blank"){f("blocked");return}}catch{}f("embedded")},[s,f]),p=t.useCallback(v=>{v.stopPropagation(),f("error")},[f]),o=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:s,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:x,title:"Dev server preview",onLoad:j,onError:p,onErrorCapture:p,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),i==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:k("preview.loading","Loading preview...")})]}),i==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:k("preview.blockedTitle","Preview cannot be embedded")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:k("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:k("preview.openInNewTab","Open in new tab")}),d&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:d,children:k("actions.retry","Retry")})]})]}),i==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:k("preview.errorTitle","Unable to load preview")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:k("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:k("preview.openInNewTab","Open in new tab")}),d&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:d,children:k("actions.retry","Retry")})]})]})]}):null}function vt(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}const ut=480;function mt(){return typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(max-width: 768px)").matches}function sr(e){if(e.closest(".right-dock-expand-modal__body"))return null;const i=e.parentElement;return i?.classList.contains("right-dock__body")?i:null}function pt(e){return e.clientWidth>0?e.clientWidth:e.getBoundingClientRect().width}function ft(e){if(!e||mt())return!1;const i=sr(e);return i?pt(i)<=ut:!1}function ht(e){const[i,f]=t.useState(!1);return t.useEffect(()=>{const s=e.current;if(!s){f(!1);return}const g=sr(s),d=()=>f(ft(s));if(d(),!g||typeof ResizeObserver>"u")return window.addEventListener("resize",d),()=>window.removeEventListener("resize",d);const x=new ResizeObserver(d);return x.observe(g),window.addEventListener("resize",d),()=>{x.disconnect(),window.removeEventListener("resize",d)}},[e]),i}let ke=!1;function qe(e){return e instanceof Error?e.message:String(e)}function nr(e){return e==="."?"root":e}function Ke(e){return e?e==="root"?".":e:null}function Ye(e,i,f){return!i||e.scriptName!==i?!1:f?nr(e.cwd)===f:!0}function gt(e){return e.cwd==="."?"root":e.cwd}function wt(e){return e.length<=60?e:`${e.slice(0,60)}…`}function Ct({addToast:e,projectId:i,tasks:f}){const{t:s}=ue("app");t.useEffect(()=>(se({view:"DevServerView",trigger:ke?"route-active":"remount",projectId:i,replayAttempted:!1}),ke=!1,()=>{ke=!0,se({view:"DevServerView",trigger:"route-inactive",projectId:i,replayAttempted:!1})}),[i]);const{session:g,detectedCommands:d,previewUrl:x,isLoading:m,error:k,startServer:C,stopServer:z,restartServer:E,setPreviewUrl:j,detectCommands:p,refresh:o}=qr(i),v=g?.status??"stopped",_=v==="running"||v==="starting",O=vt(s),L=O[v]??O.stopped,{entries:T,loading:R,loadingMore:$,hasMore:B,total:F,loadMore:M}=Yr(i,!!i),b=x,u=g?.config?.cwd??null,U=t.useRef(null),A=ht(U),[I,S]=t.useState(!0),[N,a]=t.useState(""),[n,h]=t.useState(""),[c,w]=t.useState(null),[y,D]=t.useState(null),[V,Re]=t.useState(null),K=t.useMemo(()=>(f??[]).filter(l=>l.column==="in-progress"&&typeof l.worktree=="string"&&l.worktree.length>0),[f]),X=t.useMemo(()=>K.find(l=>l.id===y)??null,[K,y]);t.useEffect(()=>{y&&!K.some(l=>l.id===y)&&D(null)},[K,y]);const[ee,ar]=t.useState("embedded"),[re,me]=t.useState(!1),De=t.useRef(null),pe=t.useRef(null),ir=ee==="embedded"?b:null,{embedStatus:H,setEmbedStatus:lr,resetEmbedStatus:ne,iframeRef:Q,isEmbedded:or,isBlocked:fe,blockReason:he,retry:_e}=et(ir),[Me,Y]=t.useState(!1),Pe=t.useRef(H);t.useEffect(()=>{const l=Pe.current!==H;fe&&l&&Y(!0),H==="embedded"&&Y(!1),Pe.current=H},[H,fe]),t.useEffect(()=>{Y(!1)},[b]);const ae=t.useMemo(()=>{if(!c)return null;const l=Ke(u);return d.find(P=>!(P.scriptName!==c||l&&P.cwd!==l||g?.config?.command&&P.command!==g.config.command))??d.find(P=>Ye(P,c,u))??null},[d,g?.config?.command,c,u]);t.useEffect(()=>{typeof p=="function"&&p().catch(l=>{e(qe(l),"error")})},[e,p]),t.useEffect(()=>{if(c){S(!1);return}S(!0)},[c]),t.useEffect(()=>{if(g?.status==="running"||g?.status==="starting"){g.config?.command?.trim().length>0&&a(g.config.command);return}if(ae){a(ae.command);return}d.length>0&&a(l=>l.trim().length>0?l:d[0]?.command??"")},[d,ae,g?.config?.command,g?.status]),t.useEffect(()=>{h(b??"")},[b]);const ie=t.useCallback(()=>{me(!1),window.requestAnimationFrame(()=>De.current?.focus())},[]),cr=Tr(ie);t.useEffect(()=>{if(!re)return;pe.current?.focus();const l=P=>{if(P.key==="Escape"){ie();return}if(P.key!=="Tab")return;const te=Array.from(pe.current?.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')??[]).filter(Ae=>!Ae.hasAttribute("disabled")&&Ae.getAttribute("aria-hidden")!=="true"),G=te[0],we=te.at(-1);!G||!we||(P.shiftKey&&document.activeElement===G?(P.preventDefault(),we.focus()):!P.shiftKey&&document.activeElement===we&&(P.preventDefault(),G.focus()))};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[ie,re]),t.useEffect(()=>{!A&&re&&me(!1)},[A,re]);const ge=t.useCallback(()=>{b&&window.open(b,"_blank","noopener,noreferrer")},[b]),Te=t.useCallback(()=>{Y(!1),_e()},[_e]),dr=t.useCallback(()=>{try{const l=Q.current;if(l?.contentWindow){l.contentWindow.location.reload(),Y(!1),ne();return}}catch{}if(!(!b||!Q.current))try{const l=new URL(b);l.searchParams.set("_t",Date.now().toString()),Q.current.src=l.toString(),Y(!1),ne()}catch{Q.current.src=b,Y(!1),ne()}},[b,Q,ne]),le=t.useCallback(async(l,P,te)=>{Re(l);try{await P(),e(te,"success")}catch(G){e(qe(G),"error")}finally{Re(null)}},[e]),vr=t.useCallback(l=>{w(l.scriptName),S(!1),a(l.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:l.scriptName}),"success")},[e]),ur=t.useCallback(()=>{w(null),S(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),mr=t.useCallback(l=>{_&&l&&l!==y&&e(s("devserver.restartToApplyTask","Restart the dev server to apply the selected task's worktree."),"info"),D(l)},[e,_,y,s]),pr=()=>{const l=N.trim();if(l.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const P=Ke(u)??".",G=X?.worktree??null??ae?.cwd??P;le("start",()=>C(l,G),s("devserver.toast.started","Dev server started."))},fr=()=>{le("stop",z,s("devserver.toast.stopped","Dev server stopped."))},hr=()=>{le("restart",E,s("devserver.toast.restarted","Dev server restarted."))},gr=()=>{const l=n.trim(),P=l.length>0?l:null;le("preview",()=>j(P),P?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},wr=t.useCallback(()=>{k&&o()},[k,o]),br=v==="starting"||v==="running"||V!==null,xr=v==="stopped"||V!==null,yr=v==="stopped"||v==="starting"||V!==null,Ue=()=>r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:b??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),b?` · ${b}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ar(l=>l==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:ee==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:ge,disabled:!b,"data-testid":"devserver-preview-open-tab",children:r.jsx(Br,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:dr,disabled:!b,"data-testid":"devserver-preview-refresh",children:r.jsx(Hr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":or?"true":"false",children:[!b&&!_&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!b&&_&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),b&&ee==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:ge,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),b&&ee==="embedded"&&Me&&fe&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),he&&r.jsx("p",{className:"devserver-preview-blocked-context",children:he})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:ge,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Te,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),b&&ee==="embedded"&&!Me&&r.jsx(dt,{url:b,embedStatus:H,onEmbedStatusChange:lr,iframeRef:Q,blockReason:he,onRetry:Te})]})]});return r.jsxs("div",{ref:U,className:"dev-server-view","data-testid":"dev-server-view","data-narrow-right-dock-preview":A?"true":"false",children:[r.jsx(Ur,{icon:Ar,title:s("devserver.title","Dev Server"),actions:r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"dev-server-header-title",children:r.jsx("span",{className:`dev-server-status-badge ${L.className}`,"data-testid":"dev-server-status-badge",children:L.label})}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:pr,disabled:br,"data-testid":"dev-server-start-button",children:[r.jsx(Or,{size:14}),r.jsx("span",{children:V==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:fr,disabled:xr,"data-testid":"dev-server-stop-button",children:[r.jsx(zr,{size:14}),r.jsx("span",{children:V==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:hr,disabled:yr,"data-testid":"dev-server-restart-button",children:[r.jsx(Fr,{size:14}),r.jsx("span",{children:V==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]})}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":s("devserver.configurationLabel","Dev server configuration"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),m&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),m&&!g&&d.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),k&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:k}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:wr,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),c&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:c}),r.jsx("span",{className:"dev-server-candidate-source",children:u??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:ur,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),I&&d.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),I&&d.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:d.map(l=>{const P=Ye(l,c,u);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${P?"dev-server-candidate--selected":""}`,onClick:()=>vr(l),"data-testid":`dev-server-candidate-${l.scriptName}-${nr(l.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:l.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:wt(l.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:gt(l)})]},`${l.cwd}::${l.scriptName}::${l.command}`)})})]}),r.jsxs("div",{className:"dev-server-section dev-server-executing-task-section",children:[r.jsx("h3",{children:s("devserver.executingTask","Executing Task")}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-task-picker",className:"dev-server-label",children:s("devserver.executingTask","Executing Task")}),r.jsxs("select",{id:"dev-server-task-picker",className:"input dev-server-task-picker",value:y??"",onChange:l=>mr(l.target.value.length>0?l.target.value:null),disabled:K.length===0,"aria-label":s("devserver.executingTask","Executing Task"),"data-testid":"dev-server-task-picker",children:[r.jsx("option",{value:"",children:s("devserver.projectRootNoTask","Project root (no task)")}),K.map(l=>r.jsx("option",{value:l.id,children:l.title?`${l.id} — ${l.title}`:l.id},l.id))]}),K.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-no-executing-tasks",children:s("devserver.noExecutingTasks","No executing tasks with a worktree available. Start a task to target its worktree.")}),X&&r.jsxs("div",{className:"dev-server-task-descriptor","data-testid":"dev-server-task-descriptor",children:[r.jsx("div",{className:"dev-server-task-descriptor-header",children:r.jsx("span",{className:"dev-server-candidate-name",children:X.title?`${X.id} — ${X.title}`:X.id})}),r.jsx("p",{className:"dev-server-task-description",children:X.description}),r.jsxs("div",{className:"dev-server-task-worktree",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.targetWorktree","Target worktree")}),r.jsx("code",{children:X.worktree})]})]})]})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:N,onChange:l=>a(l.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:v==="running"||v==="starting"})]}),(v==="running"||v==="starting")&&g&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:g.config?.command??N})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:n,onChange:l=>h(l.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:gr,disabled:V==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),b&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:b})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":s("devserver.logsLabel","Dev server logs"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:F??T.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(ot,{entries:T,loading:R,loadingMore:$,hasMore:B,total:F,onLoadMore:M,isRunning:_})})]})}),A?r.jsxs("section",{className:"dev-server-panel devserver-preview-modal-launcher","data-testid":"devserver-preview-modal-launcher","aria-label":s("devserver.previewLabel","Dev server preview"),children:[r.jsxs("div",{className:"devserver-preview-modal-launcher__copy",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsx("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:b??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:b||s("devserver.notAvailable","Not available")})]}),r.jsx("p",{className:"devserver-preview-modal-launcher__description",children:b?s("devserver.previewModalLauncherDescription","Open the live preview in a modal so logs and configuration stay usable in this narrow dock."):s("devserver.previewModalLauncherUnavailable","Start the dev server or set a preview URL to open the preview modal.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",ref:De,onClick:()=>me(!0),"data-testid":"devserver-preview-modal-open",children:s("devserver.openPreview","Open preview")})]}):r.jsx("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":s("devserver.previewLabel","Dev server preview"),children:Ue()}),A&&re&&r.jsx("div",{className:"modal-overlay open devserver-preview-modal-overlay",...cr,children:r.jsxs("div",{className:"modal devserver-preview-modal",role:"dialog","aria-modal":"true","aria-labelledby":"devserver-preview-modal-title",tabIndex:-1,ref:pe,"data-testid":"devserver-preview-modal",children:[r.jsxs("div",{className:"devserver-preview-modal__titlebar",children:[r.jsx("h2",{id:"devserver-preview-modal-title",children:s("devserver.preview","Preview")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:ie,"aria-label":s("devserver.closePreviewModal","Close preview modal"),"data-testid":"devserver-preview-modal-close",children:r.jsx($r,{})})]}),r.jsx("div",{className:"devserver-preview-modal__body",children:Ue()})]})})]})}export{Ct as DevServerView};
1
+ import{r as t,j as r}from"./vendor-react-SZ_qB27O.js";import{cU as Ge,cV as je,cW as Nr,cX as Ce,bb as Je,cY as Oe,cZ as ze,c_ as Fe,c$ as $e,d0 as Sr,d1 as be,d2 as kr,d3 as jr,d4 as Cr,d5 as Er,d6 as Lr,cK as se,d7 as xe,L as ve,aF as Rr,d8 as Dr,d9 as _r,da as Mr,C as Pr,aX as Qe,db as Tr,V as Ur,dc as Ar,c1 as Or,c3 as zr,dd as Fr,o as Be,X as $r,aO as Br,R as Hr}from"./index-Cg9ahVtV.js";import{u as ue}from"./vendor-i18n-GF3RlKbq.js";import{S as Ze}from"./shield-alert-CcQuaRHN.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";const Ee=500,Vr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function er(e){return e.length<=Ee?e:e.slice(-Ee)}function ye(e,i){return er([...e,i])}function Z(e){try{return JSON.parse(e)}catch{return null}}function oe(e){const i=e.text??"";return e.stream==="stderr"?`[stderr] ${i}`:i}function Wr(e){return e?.previewUrl??null}async function He(e){return kr(e)}async function Ve(e,i){return jr(e,i)}async function Ir(e){return Cr(e)}async function Xr(e){return Er(e)}async function We(e){return Lr(e)}function q(e){try{return e()}catch{return null}}function Ne(){return typeof q(()=>je)=="function"&&typeof q(()=>Ge)=="function"}function J(e){return{config:{id:e.id??"default",name:e.name??"Dev Server",command:e.command??"",cwd:e.cwd??"."},status:e.status,runtime:e.pid?{pid:e.pid,startedAt:e.startedAt??new Date().toISOString(),exitCode:e.exitCode??void 0,previewUrl:e.previewUrl}:void 0,previewUrl:e.previewUrl??e.detectedUrl??e.manualUrl??void 0,logHistory:(e.logs??[]).map(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}function qr(e){const{t:i}=ue("app"),[f,s]=t.useState(null),[g,d]=t.useState([]),[x,m]=t.useState([]),[k,C]=t.useState([]),[z,E]=t.useState(!0),[j,p]=t.useState(null),o=t.useRef(0),[v,_]=t.useState(null),O=t.useCallback(a=>{if(s(a),a?.logHistory){const n=a.logHistory.slice(-Ee).map(oe);m(n)}},[]),L=t.useCallback(async()=>{const a=o.current;try{if(Ne())if(v){const n=await Ge(v,e);if(o.current!==a)return;O(n)}else{const n=await je(e);if(o.current!==a)return;d(n),n.length>0&&(_(n[0].config.id),O(n[0]))}else{const n=await He(e);if(o.current!==a)return;const h=J(n);d([h]),O(h)}p(null)}catch(n){if(o.current!==a)return;p(W(n))}},[O,e,v]);t.useEffect(()=>{o.current+=1;const a=o.current;s(null),d([]),m([]),C([]),E(!0),p(null),_(null),(async()=>{try{const[h,c]=await Promise.allSettled([Ne()?je(e):He(e).then(y=>[J(y)]),typeof q(()=>be)=="function"?be(e):We(e).then(y=>y.map(D=>({name:D.name,command:D.command,cwd:D.cwd,scriptName:D.scriptName,packagePath:D.packagePath})))]);if(o.current!==a)return;let w=null;if(h.status==="fulfilled"){const y=h.value;if(d(y),y.length>0){const D=y[0];Ne()&&_(D.config.id),O(D)}}else w=W(h.reason);c.status==="fulfilled"&&C(c.value),w&&p(w)}catch(h){if(o.current!==a)return;p(W(h))}finally{o.current===a&&E(!1)}})()},[O,e]),t.useEffect(()=>{const a=v?Nr(v,e):typeof q(()=>Ce)=="function"?Ce(e):null;if(!a)return;const n=o.current,h=Je(a,{events:{history:c=>{if(o.current!==n)return;const w=Z(c.data);if(w?.lines){const y=w.lines.map(oe);m(er(y))}},log:c=>{if(o.current!==n)return;const w=Z(c.data);if(w){const y=typeof w.line=="string"?w.line:oe(w);m(D=>ye(D,y))}},"dev-server:log":c=>{if(o.current!==n)return;const w=Z(c.data);if(w){const y=typeof w.line=="string"?w.line:oe(w);m(D=>ye(D,y))}},"dev-server:output":c=>{if(o.current!==n)return;const w=Z(c.data);w?.line&&m(y=>ye(y,w.line))},status:c=>{if(o.current!==n)return;const w=Z(c.data),y=w?.status;y&&s(D=>D&&{...D,status:y,runtime:w.pid?{...D.runtime??{startedAt:new Date().toISOString()},pid:w.pid}:D.runtime})},"dev-server:status":c=>{if(o.current!==n)return;const w=Z(c.data);if(w?.status){const y=J(w);s(y),d([y])}},stopped:()=>{o.current},failed:()=>{o.current}},onReconnect:()=>{o.current===n&&L()},onError:()=>{o.current===n&&p(c=>c??i("devserver.lostConnection","Lost log stream connection."))}});return()=>{h()}},[e,L,v]),t.useEffect(()=>{if(f?.status!=="running"&&f?.status!=="starting")return;const a=setInterval(()=>{L()},Vr);return()=>{clearInterval(a)}},[L,f?.status]);const T=t.useCallback(async(a,n)=>{o.current+=1;const h=o.current;try{let c;const w=typeof n=="string"&&n.length>0,y=f?.config?.cwd??".";if(!(w&&n!==y)&&v&&typeof q(()=>Oe)=="function")c=await Oe(v,e);else{const V=await Ve({command:a,cwd:n},e);c=J(V)}if(o.current!==h)return;s(c),p(null)}catch(c){if(o.current!==h)return;throw p(W(c)),c}},[e,f?.config?.cwd,v]),R=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(v&&typeof q(()=>ze)=="function")n=await ze(v,e);else{const h=await Ir(e);n=J(h)}if(o.current!==a)return;s(n),p(null)}catch(n){if(o.current!==a)return;throw p(W(n)),n}},[e,v]),$=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;if(v&&typeof q(()=>Fe)=="function")n=await Fe(v,e);else{const h=await Xr(e);n=J(h)}if(o.current!==a)return;s(n),p(null)}catch(n){if(o.current!==a)return;throw p(W(n)),n}},[e,v]),B=t.useCallback(async a=>{o.current+=1;const n=o.current;try{let h;if(v&&typeof q(()=>$e)=="function")h=await $e(v,a,e);else{const c=await Sr({url:a},e);h={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(o.current!==n)return;s(c=>c?{...c,previewUrl:h.url??void 0}:null),p(null)}catch(h){if(o.current!==n)return;throw p(W(h)),h}},[e,v]),F=t.useCallback(async()=>{o.current+=1;const a=o.current;try{let n;try{n=await be(e)}catch{n=(await We(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(o.current!==a)return;C(n),p(null)}catch(n){if(o.current!==a)return;throw p(W(n)),n}},[e]),M=t.useCallback(async(a,n)=>{if(typeof a!="string"&&!v)try{const w=a,y=await Ve({command:w.command,cwd:w.cwd,scriptName:w.scriptName,packagePath:w.packagePath??w.cwd},e),D=J(y);s(D),d([D]),p(null);return}catch(w){throw p(W(w)),w}const h=typeof a=="string"?a:a.command,c=typeof a=="string"?n:a.cwd;await T(h,c)},[e,T,v]),b=t.useCallback(async()=>{await R()},[R]),u=t.useCallback(async()=>{await $()},[$]),U=t.useCallback(async a=>{await B(a)},[B]),A=t.useCallback(async()=>{await F()},[F]),I=t.useCallback(async()=>{await L()},[L]),S=Wr(f),N=f?{...f,pid:f.runtime?.pid}:null;return{session:f,sessions:g,logs:x,detectedCommands:k,previewUrl:S,isLoading:z,error:j,startServer:T,stopServer:R,restartServer:$,setPreviewUrl:B,detectCommands:F,refresh:L,candidates:k,serverState:N,loading:z,start:M,stop:b,restart:u,setManualUrl:U,detect:A,refreshStatus:I}}const Ie=500,Xe=100;function rr(e){return e.length>Ie?e.slice(-Ie):e}function tr(e){return e==="stderr"?"stderr":"stdout"}function ce(e){try{return JSON.parse(e.data)}catch{return null}}function de(e,i){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:i,text:typeof e.text=="string"?e.text:"",stream:tr(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Kr(e,i){return{id:i,text:e,stream:"stdout",timestamp:""}}function Se(e,i){if(i.length===0)return e;const f=[...e],s=new Set(e.map(g=>g.id));for(const g of i)s.has(g.id)||(s.add(g.id),f.push(g));return f.sort((g,d)=>g.id-d.id),rr(f)}function Yr(e,i){const[f,s]=t.useState([]),[g,d]=t.useState(!1),[x,m]=t.useState(!1),[k,C]=t.useState(!1),[z,E]=t.useState(null),j=t.useRef(null),p=t.useRef(!1),o=t.useRef(0),v=t.useRef(0),_=t.useRef(e),O=t.useRef(i),L=t.useRef(0),T=t.useRef(1);(_.current!==e||O.current!==i)&&(_.current=e,O.current=i,o.current++,se({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),p.current=!0,L.current=0,T.current=1,s([]),d(!1),m(!1),C(!1),E(null),j.current&&(j.current(),j.current=null)),t.useEffect(()=>{if(!i){j.current&&(j.current(),j.current=null);return}const M=o.current,b=++v.current;p.current=!1,d(!0);const u=(S,N)=>{const a=rr(S);s(a),E(N),C(N!==null?N>a.length:!1);const n=a.length>0?a[a.length-1].id:0;L.current=n,T.current=n+1},U=S=>{if(p.current||o.current!==M||!S||typeof S!="object")return;const N=S.lines;if(!Array.isArray(N))return;if(N.length>0&&typeof N[0]=="string"){const n=N.filter(h=>typeof h=="string").map((h,c)=>Kr(h,c+1));u(n,n.length);return}const a=N.filter(n=>!!n&&typeof n=="object").map((n,h)=>de(n,h+1));u(a,a.length)},A=S=>{if(p.current||o.current!==M)return;const N=typeof S.text=="string"?S.text:typeof S.line=="string"?S.line:null;if(!N)return;const a=T.current,n=typeof S.id=="number"&&Number.isFinite(S.id)?S.id:a,h={id:n,text:N,stream:tr(S.stream),timestamp:typeof S.timestamp=="string"?S.timestamp:""};L.current=Math.max(L.current,n),T.current=Math.max(T.current,n+1),s(c=>Se(c,[h])),E(c=>c===null?c:Math.max(c+1,h.id))};async function I(){try{const N=await xe({maxLines:Xe},e);if(p.current||o.current!==M||v.current!==b)return;const a=N.lines.map((n,h)=>de(n,h+1));u(a,N.totalLines)}catch{if(p.current||o.current!==M||v.current!==b)return;u([],null)}finally{!p.current&&o.current===M&&v.current===b&&d(!1)}const S=Ce(e);j.current=Je(S,{events:{"dev-server:log":N=>{const a=ce(N);a&&A(a)},log:N=>{const a=ce(N);a&&A(a)},history:N=>{const a=ce(N);U(a)},"dev-server:history":N=>{const a=ce(N);U(a)}},onReconnect:()=>{se({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:L.current??null,sseChannel:S,reason:"history-replay"}),!(p.current||o.current!==M)&&xe({lastEventId:L.current,maxLines:50},e).then(N=>{if(p.current||o.current!==M)return;const a=N.lines.map((n,h)=>de(n,T.current+h));if(a.length>0){const n=a[a.length-1].id;L.current=Math.max(L.current,n),T.current=Math.max(T.current,n+1)}s(n=>Se(n,a)),E(N.totalLines)}).catch(()=>{})}}),se({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:S})}return I(),()=>{p.current=!0,j.current&&(j.current(),j.current=null)}},[i,e]);const $=t.useCallback(async()=>{if(!i||x)return;const M=o.current,b=f.length;m(!0);try{const u=await xe({maxLines:Xe,offset:b},e);if(p.current||o.current!==M)return;const U=u.lines.map((A,I)=>de(A,I+1));s(A=>Se(U,A)),C(u.totalLines>b+U.length),E(u.totalLines)}catch{}finally{m(!1)}},[i,f.length,x,e]),B=t.useCallback(()=>{s([])},[]),F=j.current!==null&&!g&&!p.current;return{entries:f,loading:g,loadingMore:x,hasMore:k,total:z,loadMore:$,clear:B,logs:f,isStreaming:F,clearLogs:B}}const Gr="This preview appears to block iframe embedding. Open it in a new tab instead.",Jr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",Qr="Preview is taking longer than expected and may block iframe embedding.";function Zr(e){return e==="blocked"?Gr:e==="error"?Jr:null}function et(e,i={}){const{loadTimeoutMs:f=1e4,detectionMethod:s=null}=i,g=t.useRef(null),d=t.useRef(null),[x,m]=t.useState("unknown"),[k,C]=t.useState(null),[z]=t.useState(s),E=t.useCallback(()=>{d.current!==null&&(window.clearTimeout(d.current),d.current=null)},[]),j=t.useCallback(R=>{m(R),C(Zr(R))},[]),p=t.useCallback(()=>{m("blocked"),C(Qr)},[]);t.useEffect(()=>{if(E(),!e){m("unknown"),C(null);return}m("unknown"),C(null);let R=!1;return queueMicrotask(()=>{R||(m("loading"),C(null))}),()=>{R=!0,E()}},[E,e]),t.useEffect(()=>{if(x!=="loading"){E();return}const R=setTimeout(()=>{d.current=null,p()},f);return d.current=R,()=>{clearTimeout(R),d.current===R&&(d.current=null)}},[E,x,f,p]);const o=t.useCallback(()=>{const R=g.current;if(!R){j("embedded");return}try{if(R.contentWindow?.location?.href==="about:blank"&&R.src!=="about:blank"){j("blocked");return}}catch{}j("embedded")},[j]),v=t.useCallback(()=>{j("error")},[j]);t.useEffect(()=>{if(E(),!e){m("unknown"),C(null);return}m("unknown"),C(null)},[E]);const _=t.useCallback(()=>{E(),m("unknown"),C(null)},[E]),O=_,L=t.useMemo(()=>x==="embedded",[x]),T=t.useMemo(()=>x==="blocked"||x==="error",[x]);return{embedStatus:x,isEmbedded:L,isBlocked:T,blockReason:k,detectionMethod:z,iframeRef:g,resetEmbedStatus:_,setEmbedStatus:j,retry:O,embedContext:k,handleIframeLoad:o,handleIframeError:v}}const rt=/\x1b\[[0-9;]*m/g,tt=50;function st(e){return e.scrollHeight-(e.scrollTop+e.clientHeight)<=tt}function Le(e){return e.replace(rt,"")}function nt(e){if(!e)return"";const i=new Date(e);return Number.isNaN(i.getTime())?"":i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function at(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function it(e){if(e.stream==="stderr")return"error";const i=Le(e.text).toLowerCase();return/\b(warn|warning)\b/.test(i)?"warn":/\b(error|fatal)\b/.test(i)?"error":"info"}function lt(e,i){if(!i)return e;const f=new RegExp(`(${at(i)})`,"ig"),s=e.split(f),g=i.toLowerCase();return r.jsx(r.Fragment,{children:s.map((d,x)=>d.toLowerCase()===g?r.jsx("mark",{children:d},`${d}-${x}`):r.jsx("span",{children:d},`${d}-${x}`))})}function ot({entries:e,loading:i,loadingMore:f,hasMore:s,total:g,onLoadMore:d,isRunning:x}){const{t:m}=ue("app"),k=t.useRef(null),C=t.useRef(e.length),z=t.useRef(x),[E,j]=t.useState(!1),[p,o]=t.useState(!1),v=t.useRef(!1),[_,O]=t.useState(""),[L,T]=t.useState("all"),R=t.useMemo(()=>L==="all"?e:e.filter(u=>it(u)===L),[e,L]),$=t.useMemo(()=>{const u=_.trim().toLowerCase();return u?R.filter(U=>Le(U.text).toLowerCase().includes(u)):R},[R,_]),B=$.length,F=t.useCallback(u=>{v.current=u,o(u)},[]),M=t.useCallback(()=>{const u=k.current;u&&(u.scrollTop=u.scrollHeight,F(!1))},[F]);t.useEffect(()=>{const u=z.current,U=C.current,A=e.length>U;x&&(!u||!p&&A)&&M(),z.current=x,C.current=e.length},[e.length,x,p,M]);const b=t.useCallback(()=>{const u=k.current;u&&F(!st(u))},[F]);return t.useEffect(()=>{i||e.length===0||!p&&x&&M()},[e,x,p,i,M]),t.useEffect(()=>{const u=k.current;if(!u||!x||typeof MutationObserver>"u")return;const U=new MutationObserver(()=>{v.current||M()});return U.observe(u,{childList:!0,characterData:!0,subtree:!0}),()=>U.disconnect()},[x,M]),i&&e.length===0?r.jsx("section",{className:"devserver-log-viewer","data-testid":"devserver-log-viewer",children:r.jsxs("div",{className:"devserver-log-viewer__loading","data-testid":"devserver-log-loading",children:[r.jsx(ve,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:m("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${E?" devserver-log-viewer--fullscreen":""}`,"data-testid":"devserver-log-viewer",children:[r.jsxs("header",{className:"devserver-log-viewer__toolbar",children:[r.jsxs("div",{className:"devserver-log-viewer__toolbar-meta",children:[r.jsx("span",{className:"devserver-log-viewer__title",children:m("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[g!==null?`${e.length}/${g}`:`${e.length}`," ",m("devserver.lines","lines")]})]}),r.jsxs("div",{className:"devserver-log-viewer__toolbar-actions",children:[r.jsxs("label",{className:"devserver-log-viewer__severity",htmlFor:"devserver-log-severity-filter",children:[r.jsx("span",{className:"visually-hidden",children:m("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:L,onChange:u=>T(u.target.value),"data-testid":"devserver-log-severity-filter","aria-label":m("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:m("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:m("devserver.info","Info")}),r.jsx("option",{value:"warn",children:m("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:m("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:m("devserver.searchLogs","Search logs")}),r.jsx(Rr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:_,onChange:u=>O(u.target.value),placeholder:m("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":m("devserver.searchLogs","Search logs")})]}),_.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:m("devserver.matchCount",{count:B,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>j(u=>!u),"data-testid":"devserver-log-fullscreen-toggle","aria-label":E?m("devserver.exitFullscreen","Exit fullscreen logs"):m("devserver.enterFullscreen","Enter fullscreen logs"),children:E?r.jsx(Dr,{size:14}):r.jsx(_r,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[s&&r.jsx("div",{className:"devserver-log-viewer__load-more","data-testid":"devserver-log-load-more",children:r.jsx("button",{type:"button",className:"btn btn-sm touch-target",onClick:d,disabled:f,"data-testid":"devserver-log-load-more-button",children:f?r.jsxs(r.Fragment,{children:[r.jsx(ve,{size:14,className:"devserver-log-viewer__spinner"}),m("devserver.loadingOlderLogs","Loading older logs…")]}):m("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:k,className:"devserver-log-viewer__content",onScroll:b,"data-testid":"devserver-log-content",children:[!i&&$.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?m("devserver.noLogsYet","No logs yet. Start the dev server to see output."):R.length===0?m("devserver.noMatchesSeverity","No log lines match the selected severity."):m("devserver.noMatchesSearch","No log lines match your search.")}),$.map(u=>{const U=Le(u.text),A=nt(u.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[A&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:A}),u.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:m("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:Mr(lt(U,_.trim()))})]},u.id)})]}),p&&x&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:M,"data-testid":"devserver-log-jump-button",children:[r.jsx(Pr,{size:14}),m("devserver.newLogs","New logs")]})]})]})}const ct="devserver-preview-iframe";function dt({url:e,embedStatus:i,onEmbedStatusChange:f,iframeRef:s,blockReason:g,onRetry:d,className:x=ct,embedContext:m}){const{t:k}=ue("app"),C=g??m??null,[z,E]=t.useState(0);t.useEffect(()=>{!e||i!=="unknown"||(E(v=>v+1),f("loading"))},[i,f,e]);const j=t.useCallback(()=>{const v=s.current;if(!v){f("embedded");return}try{if(v.contentWindow?.location?.href==="about:blank"&&v.src!=="about:blank"){f("blocked");return}}catch{}f("embedded")},[s,f]),p=t.useCallback(v=>{v.stopPropagation(),f("error")},[f]),o=t.useCallback(()=>{e&&window.open(e,"_blank","noopener,noreferrer")},[e]);return e?r.jsxs("div",{className:"devserver-preview-iframe-shell",children:[r.jsx("iframe",{src:e,ref:s,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:x,title:"Dev server preview",onLoad:j,onError:p,onErrorCapture:p,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),i==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:k("preview.loading","Loading preview...")})]}),i==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:k("preview.blockedTitle","Preview cannot be embedded")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:k("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:k("preview.openInNewTab","Open in new tab")}),d&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:d,children:k("actions.retry","Retry")})]})]}),i==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-panel",children:[r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:k("preview.errorTitle","Unable to load preview")}),C&&r.jsx("p",{className:"devserver-preview-blocked-context",children:C})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:k("preview.blockedDescription","You can view the preview in a separate browser tab.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:o,children:k("preview.openInNewTab","Open in new tab")}),d&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:d,children:k("actions.retry","Retry")})]})]})]}):null}function vt(e){return{stopped:{className:"dev-server-status-badge--stopped",label:e("devserver.status.stopped","Stopped")},starting:{className:"dev-server-status-badge--starting",label:e("devserver.status.starting","Starting...")},running:{className:"dev-server-status-badge--running",label:e("devserver.status.running","Running")},stopping:{className:"dev-server-status-badge--starting",label:e("devserver.status.stopping","Stopping...")},failed:{className:"dev-server-status-badge--failed",label:e("devserver.status.failed","Failed")}}}const ut=480;function mt(){return typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(max-width: 768px)").matches}function sr(e){if(e.closest(".right-dock-expand-modal__body"))return null;const i=e.parentElement;return i?.classList.contains("right-dock__body")?i:null}function pt(e){return e.clientWidth>0?e.clientWidth:e.getBoundingClientRect().width}function ft(e){if(!e||mt())return!1;const i=sr(e);return i?pt(i)<=ut:!1}function ht(e){const[i,f]=t.useState(!1);return t.useEffect(()=>{const s=e.current;if(!s){f(!1);return}const g=sr(s),d=()=>f(ft(s));if(d(),!g||typeof ResizeObserver>"u")return window.addEventListener("resize",d),()=>window.removeEventListener("resize",d);const x=new ResizeObserver(d);return x.observe(g),window.addEventListener("resize",d),()=>{x.disconnect(),window.removeEventListener("resize",d)}},[e]),i}let ke=!1;function qe(e){return e instanceof Error?e.message:String(e)}function nr(e){return e==="."?"root":e}function Ke(e){return e?e==="root"?".":e:null}function Ye(e,i,f){return!i||e.scriptName!==i?!1:f?nr(e.cwd)===f:!0}function gt(e){return e.cwd==="."?"root":e.cwd}function wt(e){return e.length<=60?e:`${e.slice(0,60)}…`}function Ct({addToast:e,projectId:i,tasks:f}){const{t:s}=ue("app");t.useEffect(()=>(se({view:"DevServerView",trigger:ke?"route-active":"remount",projectId:i,replayAttempted:!1}),ke=!1,()=>{ke=!0,se({view:"DevServerView",trigger:"route-inactive",projectId:i,replayAttempted:!1})}),[i]);const{session:g,detectedCommands:d,previewUrl:x,isLoading:m,error:k,startServer:C,stopServer:z,restartServer:E,setPreviewUrl:j,detectCommands:p,refresh:o}=qr(i),v=g?.status??"stopped",_=v==="running"||v==="starting",O=vt(s),L=O[v]??O.stopped,{entries:T,loading:R,loadingMore:$,hasMore:B,total:F,loadMore:M}=Yr(i,!!i),b=x,u=g?.config?.cwd??null,U=t.useRef(null),A=ht(U),[I,S]=t.useState(!0),[N,a]=t.useState(""),[n,h]=t.useState(""),[c,w]=t.useState(null),[y,D]=t.useState(null),[V,Re]=t.useState(null),K=t.useMemo(()=>(f??[]).filter(l=>l.column==="in-progress"&&typeof l.worktree=="string"&&l.worktree.length>0),[f]),X=t.useMemo(()=>K.find(l=>l.id===y)??null,[K,y]);t.useEffect(()=>{y&&!K.some(l=>l.id===y)&&D(null)},[K,y]);const[ee,ar]=t.useState("embedded"),[re,me]=t.useState(!1),De=t.useRef(null),pe=t.useRef(null),ir=ee==="embedded"?b:null,{embedStatus:H,setEmbedStatus:lr,resetEmbedStatus:ne,iframeRef:Q,isEmbedded:or,isBlocked:fe,blockReason:he,retry:_e}=et(ir),[Me,Y]=t.useState(!1),Pe=t.useRef(H);t.useEffect(()=>{const l=Pe.current!==H;fe&&l&&Y(!0),H==="embedded"&&Y(!1),Pe.current=H},[H,fe]),t.useEffect(()=>{Y(!1)},[b]);const ae=t.useMemo(()=>{if(!c)return null;const l=Ke(u);return d.find(P=>!(P.scriptName!==c||l&&P.cwd!==l||g?.config?.command&&P.command!==g.config.command))??d.find(P=>Ye(P,c,u))??null},[d,g?.config?.command,c,u]);t.useEffect(()=>{typeof p=="function"&&p().catch(l=>{e(qe(l),"error")})},[e,p]),t.useEffect(()=>{if(c){S(!1);return}S(!0)},[c]),t.useEffect(()=>{if(g?.status==="running"||g?.status==="starting"){g.config?.command?.trim().length>0&&a(g.config.command);return}if(ae){a(ae.command);return}d.length>0&&a(l=>l.trim().length>0?l:d[0]?.command??"")},[d,ae,g?.config?.command,g?.status]),t.useEffect(()=>{h(b??"")},[b]);const ie=t.useCallback(()=>{me(!1),window.requestAnimationFrame(()=>De.current?.focus())},[]),cr=Tr(ie);t.useEffect(()=>{if(!re)return;pe.current?.focus();const l=P=>{if(P.key==="Escape"){ie();return}if(P.key!=="Tab")return;const te=Array.from(pe.current?.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')??[]).filter(Ae=>!Ae.hasAttribute("disabled")&&Ae.getAttribute("aria-hidden")!=="true"),G=te[0],we=te.at(-1);!G||!we||(P.shiftKey&&document.activeElement===G?(P.preventDefault(),we.focus()):!P.shiftKey&&document.activeElement===we&&(P.preventDefault(),G.focus()))};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[ie,re]),t.useEffect(()=>{!A&&re&&me(!1)},[A,re]);const ge=t.useCallback(()=>{b&&window.open(b,"_blank","noopener,noreferrer")},[b]),Te=t.useCallback(()=>{Y(!1),_e()},[_e]),dr=t.useCallback(()=>{try{const l=Q.current;if(l?.contentWindow){l.contentWindow.location.reload(),Y(!1),ne();return}}catch{}if(!(!b||!Q.current))try{const l=new URL(b);l.searchParams.set("_t",Date.now().toString()),Q.current.src=l.toString(),Y(!1),ne()}catch{Q.current.src=b,Y(!1),ne()}},[b,Q,ne]),le=t.useCallback(async(l,P,te)=>{Re(l);try{await P(),e(te,"success")}catch(G){e(qe(G),"error")}finally{Re(null)}},[e]),vr=t.useCallback(l=>{w(l.scriptName),S(!1),a(l.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:l.scriptName}),"success")},[e]),ur=t.useCallback(()=>{w(null),S(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),mr=t.useCallback(l=>{_&&l&&l!==y&&e(s("devserver.restartToApplyTask","Restart the dev server to apply the selected task's worktree."),"info"),D(l)},[e,_,y,s]),pr=()=>{const l=N.trim();if(l.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const P=Ke(u)??".",G=X?.worktree??null??ae?.cwd??P;le("start",()=>C(l,G),s("devserver.toast.started","Dev server started."))},fr=()=>{le("stop",z,s("devserver.toast.stopped","Dev server stopped."))},hr=()=>{le("restart",E,s("devserver.toast.restarted","Dev server restarted."))},gr=()=>{const l=n.trim(),P=l.length>0?l:null;le("preview",()=>j(P),P?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},wr=t.useCallback(()=>{k&&o()},[k,o]),br=v==="starting"||v==="running"||V!==null,xr=v==="stopped"||V!==null,yr=v==="stopped"||v==="starting"||V!==null,Ue=()=>r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:b??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),b?` · ${b}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ar(l=>l==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:ee==="embedded"?s("devserver.externalOnly","External only"):s("devserver.embedded","Embedded")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.openInNewTab","Open in new tab"),onClick:ge,disabled:!b,"data-testid":"devserver-preview-open-tab",children:r.jsx(Br,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:dr,disabled:!b,"data-testid":"devserver-preview-refresh",children:r.jsx(Hr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":or?"true":"false",children:[!b&&!_&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!b&&_&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.noPreviewDetected","No preview URL detected. Start the dev server or set a manual URL to preview your app.")}),b&&ee==="external"&&r.jsxs("div",{className:"devserver-preview-external-only","data-testid":"devserver-preview-external-only",children:[r.jsx("p",{children:s("devserver.embeddedPreviewDisabled","Embedded preview is disabled. Open your app in a separate browser tab.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm touch-target",onClick:ge,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),b&&ee==="embedded"&&Me&&fe&&r.jsxs("div",{className:H==="error"?"devserver-preview-error-panel":"devserver-preview-blocked-panel","data-testid":"devserver-preview-fallback",role:"alert",children:[H==="error"?r.jsx(Qe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(Ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:H==="error"?s("devserver.previewFailed","Preview failed"):s("devserver.previewBlocked","Preview blocked")}),he&&r.jsx("p",{className:"devserver-preview-blocked-context",children:he})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:s("devserver.openPreviewOrRetry","Open the preview in a new tab, or retry embedded mode after checking your server settings.")}),r.jsxs("div",{className:"devserver-preview-blocked-actions",children:[r.jsx("button",{type:"button",className:"btn btn-primary",onClick:ge,"data-testid":"devserver-preview-fallback-open-tab",children:s("devserver.openPreviewInNewTab","Open preview in new tab")}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Te,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),b&&ee==="embedded"&&!Me&&r.jsx(dt,{url:b,embedStatus:H,onEmbedStatusChange:lr,iframeRef:Q,blockReason:he,onRetry:Te})]})]});return r.jsxs("div",{ref:U,className:"dev-server-view","data-testid":"dev-server-view","data-narrow-right-dock-preview":A?"true":"false",children:[r.jsx(Ur,{icon:Ar,title:s("devserver.title","Dev Server"),actions:r.jsxs(r.Fragment,{children:[r.jsx("span",{className:"dev-server-header-title",children:r.jsx("span",{className:`dev-server-status-badge ${L.className}`,"data-testid":"dev-server-status-badge",children:L.label})}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:pr,disabled:br,"data-testid":"dev-server-start-button",children:[r.jsx(Or,{size:14}),r.jsx("span",{children:V==="start"?s("devserver.starting","Starting..."):s("devserver.start","Start")})]}),r.jsxs("button",{type:"button",className:"btn btn-danger btn-sm",onClick:fr,disabled:xr,"data-testid":"dev-server-stop-button",children:[r.jsx(zr,{size:14}),r.jsx("span",{children:V==="stop"?s("devserver.stopping","Stopping..."):s("devserver.stop","Stop")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm",onClick:hr,disabled:yr,"data-testid":"dev-server-restart-button",children:[r.jsx(Fr,{size:14}),r.jsx("span",{children:V==="restart"?s("devserver.restarting","Restarting..."):s("devserver.restart","Restart")})]})]})]})}),r.jsxs("section",{className:"dev-server-panel dev-server-config","aria-label":s("devserver.configurationLabel","Dev server configuration"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),m&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),m&&!g&&d.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(ve,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),k&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:k}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:wr,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),c&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:c}),r.jsx("span",{className:"dev-server-candidate-source",children:u??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>S(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:ur,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),I&&d.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-empty-candidates",children:s("devserver.noScriptsDetected","No dev server scripts detected. Check that your project has a package.json with a dev, start, or similar script.")}),I&&d.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:d.map(l=>{const P=Ye(l,c,u);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${P?"dev-server-candidate--selected":""}`,onClick:()=>vr(l),"data-testid":`dev-server-candidate-${l.scriptName}-${nr(l.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:l.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:wt(l.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:gt(l)})]},`${l.cwd}::${l.scriptName}::${l.command}`)})})]}),r.jsxs("div",{className:"dev-server-section dev-server-executing-task-section",children:[r.jsx("h3",{children:s("devserver.executingTask","Executing Task")}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-task-picker",className:"dev-server-label",children:s("devserver.executingTask","Executing Task")}),r.jsxs("select",{id:"dev-server-task-picker",className:"input dev-server-task-picker",value:y??"",onChange:l=>mr(l.target.value.length>0?l.target.value:null),disabled:K.length===0,"aria-label":s("devserver.executingTask","Executing Task"),"data-testid":"dev-server-task-picker",children:[r.jsx("option",{value:"",children:s("devserver.projectRootNoTask","Project root (no task)")}),K.map(l=>r.jsx("option",{value:l.id,children:l.title?`${l.id} — ${l.title}`:l.id},l.id))]}),K.length===0&&r.jsx("p",{className:"dev-server-empty-state","data-testid":"dev-server-no-executing-tasks",children:s("devserver.noExecutingTasks","No executing tasks with a worktree available. Start a task to target its worktree.")}),X&&r.jsxs("div",{className:"dev-server-task-descriptor","data-testid":"dev-server-task-descriptor",children:[r.jsx("div",{className:"dev-server-task-descriptor-header",children:r.jsx("span",{className:"dev-server-candidate-name",children:X.title?`${X.id} — ${X.title}`:X.id})}),r.jsx("p",{className:"dev-server-task-description",children:X.description}),r.jsxs("div",{className:"dev-server-task-worktree",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.targetWorktree","Target worktree")}),r.jsx("code",{children:X.worktree})]})]})]})]}),r.jsxs("div",{className:"dev-server-field-group",children:[r.jsx("label",{htmlFor:"dev-server-command",className:"dev-server-label",children:s("devserver.command","Command")}),r.jsx("input",{id:"dev-server-command",className:"input",value:N,onChange:l=>a(l.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:v==="running"||v==="starting"})]}),(v==="running"||v==="starting")&&g&&r.jsxs("div",{className:"dev-server-current-command","data-testid":"dev-server-current-command",children:[r.jsx("span",{className:"dev-server-label",children:s("devserver.runningCommand","Running command")}),r.jsx("code",{children:g.config?.command??N})]}),r.jsxs("div",{className:"dev-server-preview-override",children:[r.jsx("label",{htmlFor:"dev-server-preview-input",className:"dev-server-label",children:s("devserver.previewUrlOverride","Preview URL Override")}),r.jsx("input",{id:"dev-server-preview-input",className:"input",type:"url",value:n,onChange:l=>h(l.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:gr,disabled:V==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),b&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:b})})]}),r.jsx("div",{className:"dev-server-content",children:r.jsxs("section",{className:"dev-server-panel dev-server-logs-panel","data-testid":"dev-server-logs-panel","aria-label":s("devserver.logsLabel","Dev server logs"),children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.logs","Logs")}),r.jsx("span",{className:"dev-server-muted",children:s("devserver.lines","{{count}} lines",{count:F??T.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(ot,{entries:T,loading:R,loadingMore:$,hasMore:B,total:F,onLoadMore:M,isRunning:_})})]})}),A?r.jsxs("section",{className:"dev-server-panel devserver-preview-modal-launcher","data-testid":"devserver-preview-modal-launcher","aria-label":s("devserver.previewLabel","Dev server preview"),children:[r.jsxs("div",{className:"devserver-preview-modal-launcher__copy",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(Be,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsx("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:b??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:b||s("devserver.notAvailable","Not available")})]}),r.jsx("p",{className:"devserver-preview-modal-launcher__description",children:b?s("devserver.previewModalLauncherDescription","Open the live preview in a modal so logs and configuration stay usable in this narrow dock."):s("devserver.previewModalLauncherUnavailable","Start the dev server or set a preview URL to open the preview modal.")}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",ref:De,onClick:()=>me(!0),"data-testid":"devserver-preview-modal-open",children:s("devserver.openPreview","Open preview")})]}):r.jsx("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":s("devserver.previewLabel","Dev server preview"),children:Ue()}),A&&re&&r.jsx("div",{className:"modal-overlay open devserver-preview-modal-overlay",...cr,children:r.jsxs("div",{className:"modal devserver-preview-modal",role:"dialog","aria-modal":"true","aria-labelledby":"devserver-preview-modal-title",tabIndex:-1,ref:pe,"data-testid":"devserver-preview-modal",children:[r.jsxs("div",{className:"devserver-preview-modal__titlebar",children:[r.jsx("h2",{id:"devserver-preview-modal-title",children:s("devserver.preview","Preview")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:ie,"aria-label":s("devserver.closePreviewModal","Close preview modal"),"data-testid":"devserver-preview-modal-close",children:r.jsx($r,{})})]}),r.jsx("div",{className:"devserver-preview-modal__body",children:Ue()})]})})]})}export{Ct as DevServerView};
@@ -1 +1 @@
1
- import{r as n,j as r}from"./vendor-react-SZ_qB27O.js";import{a4 as z,a5 as D,a6 as S,a7 as f,e as j,a8 as T,E as B,o as A,P as L,L as K,g as N}from"./index-DTPYepvh.js";import{u as R}from"./vendor-i18n-GF3RlKbq.js";import{F as U}from"./folder-open-CVnbHAlV.js";function M({value:b,onChange:h,placeholder:F,onInputKeyDown:g,nodeId:k,localNodeId:m,selectCreatedDirectory:x=!1}){const{t:i}=R("app"),[e,s]=n.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1,createFolderOpen:!1,createFolderError:null}),[p,u]=n.useState(""),d=n.useCallback(async(t,c=!1)=>{s(o=>({...o,loading:!0,error:null}));try{const o=await z(t,c,k,m);s(a=>({...a,loading:!1,currentPath:o.currentPath,parentPath:o.parentPath,entries:o.entries}))}catch(o){s(a=>({...a,loading:!1,error:o instanceof Error?o.message:"Failed to browse directory"}))}},[k,m]),C=n.useCallback(()=>{s(t=>t.isOpen?{...t,isOpen:!1}:{...t,isOpen:!0})},[]);n.useEffect(()=>{e.isOpen&&!e.loading&&!e.currentPath&&!e.error&&d(b||void 0,e.showHidden)},[e.isOpen,e.loading,e.currentPath,e.error,b,e.showHidden,d,k,m]);const y=n.useCallback(t=>{d(t,e.showHidden)},[d,e.showHidden]),H=n.useCallback(()=>{h(e.currentPath),s(t=>({...t,isOpen:!1}))},[e.currentPath,h]),E=n.useCallback(()=>{s(t=>{const c=!t.showHidden;return{...t,showHidden:c}})},[]);n.useEffect(()=>{e.isOpen&&e.currentPath&&d(e.currentPath,e.showHidden)},[e.showHidden,d]);const w=n.useCallback(()=>{s(t=>({...t,createFolderOpen:!t.createFolderOpen,createFolderError:null})),u("")},[]),P=n.useCallback(async()=>{if(!p.trim()||!e.currentPath)return;const t=p.trim();if(t.includes("/")||t.includes("\\")||t.includes("..")){s(a=>({...a,createFolderError:i("dirPicker.createFolderError","Folder name cannot contain path separators or '..'")}));return}const c=e.currentPath.includes("\\")?"\\":"/",o=e.currentPath.endsWith(c)?e.currentPath+t:e.currentPath+c+t;s(a=>({...a,loading:!0,createFolderError:null}));try{const a=await D(o);u(""),s(l=>({...l,createFolderOpen:!1})),x?(h(a.path),await d(a.path,e.showHidden),s(l=>l.error?{...l,isOpen:!1,error:null}:l)):await d(e.currentPath,e.showHidden)}catch(a){s(l=>({...l,loading:!1,createFolderError:a instanceof Error?a.message:"Failed to create folder"}))}},[p,e.currentPath,e.showHidden,d,h,x]),O=n.useCallback(t=>{t.key==="Enter"?(t.preventDefault(),P()):t.key==="Escape"&&(s(c=>({...c,createFolderOpen:!1,createFolderError:null})),u(""))},[P]),v=e.currentPath?S(e.currentPath):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"input directory-picker-input",value:b,onChange:t=>h(t.target.value),onKeyDown:g,placeholder:F||i("dirPicker.defaultPlaceholder","/path/to/your/project")}),r.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm directory-picker-browse-btn",onClick:C,"aria-label":e.isOpen?i("dirPicker.closeBrowser","Close directory browser"):i("dirPicker.openBrowser","Browse directories"),children:[e.isOpen?r.jsx(U,{size:16}):r.jsx(f,{size:16}),r.jsx("span",{children:i("dirPicker.browse","Browse")})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":i("dirPicker.ariaLabel","Directory browser"),children:[r.jsx("div",{className:"directory-picker-breadcrumbs",children:v.map((t,c)=>r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[c>0&&r.jsx(j,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{type:"button",className:"directory-picker-breadcrumb",onClick:()=>y(t.path),title:t.path,children:t.label})]},t.path))}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-up-btn",onClick:()=>y(e.parentPath),"aria-label":i("dirPicker.parentDir","Go to parent directory"),title:i("dirPicker.parentDirTitle","Parent directory"),children:[r.jsx(T,{size:14}),r.jsx("span",{children:i("dirPicker.up","Up")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-hidden-toggle",onClick:E,"aria-label":e.showHidden?i("dirPicker.hideHiddenAria","Hide hidden directories"):i("dirPicker.showHiddenAria","Show hidden directories"),title:e.showHidden?i("dirPicker.hideHiddenTitle","Hide hidden"):i("dirPicker.showHiddenTitle","Show hidden"),children:[e.showHidden?r.jsx(B,{size:14}):r.jsx(A,{size:14}),r.jsx("span",{children:e.showHidden?i("dirPicker.hideHidden","Hide hidden"):i("dirPicker.showHidden","Show hidden")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-create-folder-toggle",onClick:w,"aria-label":i("dirPicker.createFolderAria","Create new folder"),title:i("dirPicker.createFolderTitle","Create folder"),children:[r.jsx(L,{size:14}),r.jsx("span",{children:i("dirPicker.createFolder","New folder")})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(K,{size:20,className:"animate-spin"}),r.jsx("span",{children:i("dirPicker.loading","Loading…")})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(N,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:i("dirPicker.noSubdirs","No subdirectories")}):e.entries.map(t=>r.jsxs("button",{type:"button",className:"directory-picker-entry",onClick:()=>y(t.path),role:"treeitem",title:t.path,children:[r.jsx(f,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:t.name}),t.hasChildren&&r.jsx(j,{size:14,className:"directory-picker-entry-arrow"})]},t.path))}),e.createFolderOpen&&r.jsxs("div",{className:"directory-picker-create-folder",children:[r.jsx("input",{type:"text",className:"input directory-picker-create-folder-input",value:p,onChange:t=>u(t.target.value),onKeyDown:O,placeholder:i("dirPicker.newFolderPlaceholder","Folder name"),autoFocus:!0}),r.jsxs("div",{className:"directory-picker-create-folder-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:P,disabled:!p.trim()||e.loading||!e.currentPath,children:i("dirPicker.createFolderConfirm","Create")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-secondary",onClick:w,children:i("dirPicker.cancel","Cancel")})]}),e.createFolderError&&r.jsxs("div",{className:"directory-picker-create-folder-error",children:[r.jsx(N,{size:14}),r.jsx("span",{children:e.createFolderError})]})]}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:H,children:i("dirPicker.select","Select")})]})]})]})}export{M as D};
1
+ import{r as n,j as r}from"./vendor-react-SZ_qB27O.js";import{a4 as z,a5 as D,a6 as S,a7 as f,e as j,a8 as T,E as B,o as A,P as L,L as K,g as N}from"./index-Cg9ahVtV.js";import{u as R}from"./vendor-i18n-GF3RlKbq.js";import{F as U}from"./folder-open-Nmr7nRmN.js";function M({value:b,onChange:h,placeholder:F,onInputKeyDown:g,nodeId:k,localNodeId:m,selectCreatedDirectory:x=!1}){const{t:i}=R("app"),[e,s]=n.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1,createFolderOpen:!1,createFolderError:null}),[p,u]=n.useState(""),d=n.useCallback(async(t,c=!1)=>{s(o=>({...o,loading:!0,error:null}));try{const o=await z(t,c,k,m);s(a=>({...a,loading:!1,currentPath:o.currentPath,parentPath:o.parentPath,entries:o.entries}))}catch(o){s(a=>({...a,loading:!1,error:o instanceof Error?o.message:"Failed to browse directory"}))}},[k,m]),C=n.useCallback(()=>{s(t=>t.isOpen?{...t,isOpen:!1}:{...t,isOpen:!0})},[]);n.useEffect(()=>{e.isOpen&&!e.loading&&!e.currentPath&&!e.error&&d(b||void 0,e.showHidden)},[e.isOpen,e.loading,e.currentPath,e.error,b,e.showHidden,d,k,m]);const y=n.useCallback(t=>{d(t,e.showHidden)},[d,e.showHidden]),H=n.useCallback(()=>{h(e.currentPath),s(t=>({...t,isOpen:!1}))},[e.currentPath,h]),E=n.useCallback(()=>{s(t=>{const c=!t.showHidden;return{...t,showHidden:c}})},[]);n.useEffect(()=>{e.isOpen&&e.currentPath&&d(e.currentPath,e.showHidden)},[e.showHidden,d]);const w=n.useCallback(()=>{s(t=>({...t,createFolderOpen:!t.createFolderOpen,createFolderError:null})),u("")},[]),P=n.useCallback(async()=>{if(!p.trim()||!e.currentPath)return;const t=p.trim();if(t.includes("/")||t.includes("\\")||t.includes("..")){s(a=>({...a,createFolderError:i("dirPicker.createFolderError","Folder name cannot contain path separators or '..'")}));return}const c=e.currentPath.includes("\\")?"\\":"/",o=e.currentPath.endsWith(c)?e.currentPath+t:e.currentPath+c+t;s(a=>({...a,loading:!0,createFolderError:null}));try{const a=await D(o);u(""),s(l=>({...l,createFolderOpen:!1})),x?(h(a.path),await d(a.path,e.showHidden),s(l=>l.error?{...l,isOpen:!1,error:null}:l)):await d(e.currentPath,e.showHidden)}catch(a){s(l=>({...l,loading:!1,createFolderError:a instanceof Error?a.message:"Failed to create folder"}))}},[p,e.currentPath,e.showHidden,d,h,x]),O=n.useCallback(t=>{t.key==="Enter"?(t.preventDefault(),P()):t.key==="Escape"&&(s(c=>({...c,createFolderOpen:!1,createFolderError:null})),u(""))},[P]),v=e.currentPath?S(e.currentPath):[];return r.jsxs("div",{className:"directory-picker",children:[r.jsxs("div",{className:"directory-picker-input-row",children:[r.jsx("input",{type:"text",className:"input directory-picker-input",value:b,onChange:t=>h(t.target.value),onKeyDown:g,placeholder:F||i("dirPicker.defaultPlaceholder","/path/to/your/project")}),r.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm directory-picker-browse-btn",onClick:C,"aria-label":e.isOpen?i("dirPicker.closeBrowser","Close directory browser"):i("dirPicker.openBrowser","Browse directories"),children:[e.isOpen?r.jsx(U,{size:16}):r.jsx(f,{size:16}),r.jsx("span",{children:i("dirPicker.browse","Browse")})]})]}),e.isOpen&&r.jsxs("div",{className:"directory-picker-browser",role:"tree","aria-label":i("dirPicker.ariaLabel","Directory browser"),children:[r.jsx("div",{className:"directory-picker-breadcrumbs",children:v.map((t,c)=>r.jsxs("span",{className:"directory-picker-breadcrumb-item",children:[c>0&&r.jsx(j,{size:12,className:"directory-picker-breadcrumb-sep"}),r.jsx("button",{type:"button",className:"directory-picker-breadcrumb",onClick:()=>y(t.path),title:t.path,children:t.label})]},t.path))}),r.jsxs("div",{className:"directory-picker-toolbar",children:[e.parentPath&&r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-up-btn",onClick:()=>y(e.parentPath),"aria-label":i("dirPicker.parentDir","Go to parent directory"),title:i("dirPicker.parentDirTitle","Parent directory"),children:[r.jsx(T,{size:14}),r.jsx("span",{children:i("dirPicker.up","Up")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-hidden-toggle",onClick:E,"aria-label":e.showHidden?i("dirPicker.hideHiddenAria","Hide hidden directories"):i("dirPicker.showHiddenAria","Show hidden directories"),title:e.showHidden?i("dirPicker.hideHiddenTitle","Hide hidden"):i("dirPicker.showHiddenTitle","Show hidden"),children:[e.showHidden?r.jsx(B,{size:14}):r.jsx(A,{size:14}),r.jsx("span",{children:e.showHidden?i("dirPicker.hideHidden","Hide hidden"):i("dirPicker.showHidden","Show hidden")})]}),r.jsxs("button",{type:"button",className:"btn btn-sm btn-secondary directory-picker-create-folder-toggle",onClick:w,"aria-label":i("dirPicker.createFolderAria","Create new folder"),title:i("dirPicker.createFolderTitle","Create folder"),children:[r.jsx(L,{size:14}),r.jsx("span",{children:i("dirPicker.createFolder","New folder")})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(K,{size:20,className:"animate-spin"}),r.jsx("span",{children:i("dirPicker.loading","Loading…")})]}):e.error?r.jsxs("div",{className:"directory-picker-error",children:[r.jsx(N,{size:16}),r.jsx("span",{children:e.error})]}):r.jsx("div",{className:"directory-picker-entries",children:e.entries.length===0?r.jsx("div",{className:"directory-picker-empty",children:i("dirPicker.noSubdirs","No subdirectories")}):e.entries.map(t=>r.jsxs("button",{type:"button",className:"directory-picker-entry",onClick:()=>y(t.path),role:"treeitem",title:t.path,children:[r.jsx(f,{size:16,className:"directory-picker-entry-icon"}),r.jsx("span",{className:"directory-picker-entry-name",children:t.name}),t.hasChildren&&r.jsx(j,{size:14,className:"directory-picker-entry-arrow"})]},t.path))}),e.createFolderOpen&&r.jsxs("div",{className:"directory-picker-create-folder",children:[r.jsx("input",{type:"text",className:"input directory-picker-create-folder-input",value:p,onChange:t=>u(t.target.value),onKeyDown:O,placeholder:i("dirPicker.newFolderPlaceholder","Folder name"),autoFocus:!0}),r.jsxs("div",{className:"directory-picker-create-folder-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:P,disabled:!p.trim()||e.loading||!e.currentPath,children:i("dirPicker.createFolderConfirm","Create")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-secondary",onClick:w,children:i("dirPicker.cancel","Cancel")})]}),e.createFolderError&&r.jsxs("div",{className:"directory-picker-create-folder-error",children:[r.jsx(N,{size:14}),r.jsx("span",{children:e.createFolderError})]})]}),r.jsxs("div",{className:"directory-picker-actions",children:[r.jsx("span",{className:"directory-picker-selected-path",title:e.currentPath,children:e.currentPath}),r.jsx("button",{type:"button",className:"btn btn-primary directory-picker-select-btn",onClick:H,children:i("dirPicker.select","Select")})]})]})]})}export{M as D};
@@ -1 +1 @@
1
- import{r as s,j as e}from"./vendor-react-SZ_qB27O.js";import{an as Oe,ao as He,ap as Pt,aq as Et,ar as Dt,as as Ve,at as Lt,au as Mt,av as le,aw as Rt,ax as Ie,ay as zt,az as $t,aA as Ot,aB as ye,aC as Ht,aD as Be,V as It,aE as te,E as Bt,o as qt,aF as Ut,X as _t,R as Vt,aG as de,A as qe,u as Ue,aH as _e,h as Te,r as Fe,aI as Qt,aJ as Qe,aK as Wt,aL as Gt,aM as Kt,aN as Xt,x as Yt,aO as Jt,aP as Zt}from"./index-DTPYepvh.js";import{u as es}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";function ts(n){const{projectId:r,searchQuery:v,includeProjectFiles:T=!0}=n??{},x=r?`${Pt.DOCUMENTS_PREFIX}${r}`:null,[t,i]=s.useState(()=>{if(!x)return[];const N=Oe(x,{maxAgeMs:He});return Array.isArray(N)?N:[]}),[F,l]=s.useState([]),[k,w]=s.useState(()=>t.length===0),[d,C]=s.useState(null),m=s.useRef(null),f=s.useRef(t.length>0),p=s.useRef(null),{capture:A}=Et(r,"useDocuments"),S=s.useCallback(async()=>{const N=A();m.current&&m.current.abort();const K=new AbortController;m.current=K;const z=!f.current;z&&w(!0),C(null);const X=Dt(v?{q:v}:void 0,r),B=T?Ve(r):Promise.resolve({files:[]}),[b,ae]=await Promise.allSettled([X,B]);if(K.signal.aborted||N.isStale())return;let $=null;if(b.status==="fulfilled"){if(i(b.value),x){const q=b.value.length>500?b.value.slice(0,500):b.value;Lt(x,q,{maxBytes:5e5})}f.current=!0}else $=b.reason instanceof Error?b.reason.message:String(b.reason);if(ae.status==="fulfilled"){const q=ae.value.files,V=v?.trim().toLowerCase(),ne=V?q.filter(Y=>Y.name.toLowerCase().includes(V)||Y.path.toLowerCase().includes(V)):q;l(ne)}C($),z&&w(!1)},[x,A,T,r,v]);return s.useEffect(()=>{if(l([]),!x){f.current=!1,i([]),w(!0);return}const N=Oe(x,{maxAgeMs:He});Array.isArray(N)?(i(N),f.current=!0,w(!1)):(f.current=!1,i([]),w(!0))},[x]),s.useEffect(()=>(p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{S()},300),()=>{p.current&&clearTimeout(p.current)}),[S]),s.useEffect(()=>(S(),()=>{m.current&&m.current.abort()}),[]),{documents:t,projectFiles:F,loading:k,error:d,refresh:S}}function ss(n,r){const[v,T]=s.useState([]),[x,t]=s.useState(!0),[i,F]=s.useState(null),l=s.useRef(null),k=s.useRef(!1),w=r?.showHidden??!1,d=s.useCallback(async C=>{l.current&&l.current.abort();const m=new AbortController;l.current=m;const f=!k.current;f&&t(!0),F(null);try{const p=await Ve(n,{showHidden:C?.showHidden??w});if(m.signal.aborted)return;T(p.files),k.current=!0}catch(p){if(m.signal.aborted)return;F(p instanceof Error?p.message:String(p))}finally{!m.signal.aborted&&f&&t(!1)}},[n,w]);return s.useEffect(()=>(k.current=!1,d({showHidden:w}),()=>{l.current&&l.current.abort()}),[d,w]),{files:v,loading:x,error:i,refresh:d}}const as=768,ns={image:Xt,doc:te,pdf:Kt,video:Gt,audio:Wt,other:Qe};function se(n){return n?new Date(n).toLocaleString():""}function cs(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(n>=10*1024?0:1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function os(n){return n==="done"?"status-dot status-dot--online":n==="archived"?"status-dot status-dot--offline":n==="todo"||n==="triage"?"status-dot status-dot--pending":"status-dot status-dot--connecting"}function We(n,r){switch(r){case"image":return n("documents.artifactCategoryImage","Image");case"doc":return n("documents.artifactCategoryDoc","Document");case"pdf":return n("documents.artifactCategoryPdf","PDF");case"video":return n("documents.artifactCategoryVideo","Video");case"audio":return n("documents.artifactCategoryAudioSingle","Audio");case"other":return n("documents.artifactCategoryOtherSingle","Other")}}function rs(n,r){return r?[n.title,n.description,n.taskId,n.taskTitle,n.mimeType,n.authorId].some(v=>v?.toLowerCase().includes(r)):!0}function is(n){const r=n.mimeType?.toLowerCase().split(";",1)[0]??"";return!!n.content||n.type==="document"||r.startsWith("text/")||r==="application/json"||r==="application/xml"}function ls({artifact:n,projectId:r,content:v,loading:T,error:x,renderMarkdown:t,onToggleMarkdown:i,onOpenTask:F,t:l}){const[k,w]=s.useState(null),d=ye(n),C=We(l,d),m=n.title||l("documents.untitledArtifact","Untitled artifact"),f=Yt(n.id,r),p=d==="doc"&&is(n);s.useEffect(()=>{w(null)},[n.id]);const A=k?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:k}):null,S=d==="image"?e.jsxs(e.Fragment,{children:[A,e.jsx("img",{className:"documents-task-artifact-media",src:f,alt:m,onError:()=>w(l("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):d==="video"?e.jsxs(e.Fragment,{children:[A,e.jsx("video",{className:"documents-task-artifact-media",controls:!0,src:f,"aria-label":l("documents.videoArtifactLabel","Video artifact: {{title}}",{title:m}),onError:()=>w(l("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):d==="audio"?e.jsxs(e.Fragment,{children:[A,e.jsx("audio",{className:"documents-task-artifact-audio",controls:!0,src:f,"aria-label":l("documents.audioArtifactLabel","Audio artifact: {{title}}",{title:m}),onError:()=>w(l("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):d==="pdf"?e.jsxs("div",{className:"documents-task-artifact-pdf",children:[e.jsx("iframe",{title:l("documents.pdfArtifactTitle","PDF artifact: {{title}}",{title:m}),src:f}),e.jsxs("a",{className:"btn btn-sm",href:f,target:"_blank",rel:"noreferrer",children:[e.jsx(Jt,{size:14,"aria-hidden":"true"}),l("documents.openInNewTab","Open in new tab")]})]}):d==="doc"&&p?T?e.jsx("p",{className:"documents-content-state",children:e.jsx(de,{label:l("documents.loadingArtifactContent","Loading artifact content…")})}):x?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:x}):t?e.jsx("div",{className:"documents-content-markdown documents-task-artifact-doc-content",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Te,{remarkPlugins:[Fe],children:v??n.content??""})})}):e.jsx("pre",{className:"document-card-content-text documents-content-viewer-text documents-task-artifact-doc-content",children:v??n.content??""}):e.jsxs("div",{className:"documents-task-artifact-download",children:[e.jsx(Qe,{size:24,"aria-hidden":"true"}),e.jsx("p",{children:n.description||l("documents.binaryArtifactFallback","This artifact cannot be previewed inline.")}),e.jsxs("a",{className:"btn btn-sm",href:f,target:"_blank",rel:"noreferrer","data-testid":"task-artifact-open-link",children:[e.jsx(Zt,{size:14,"aria-hidden":"true"}),l("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:[n.taskId," / ",m]}),d==="doc"&&p?e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:i,"aria-label":t?l("documents.switchToPlainText","Switch to plain text"):l("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":t,title:t?l("documents.switchToPlainText","Switch to plain text"):l("documents.switchToMarkdown","Switch to markdown"),children:t?l("documents.markdown","Markdown"):l("documents.plain","Plain")}):null]}),e.jsxs("div",{className:"document-card-meta documents-task-document-meta documents-task-artifact-meta",children:[e.jsx("span",{children:C}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:n.authorId||l("documents.unknownAuthor","unknown")}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:se(n.updatedAt)}),n.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 F(n.taskId),children:l("documents.openTask","Open task")})]}):null]}),n.description?e.jsx("p",{className:"documents-task-artifact-description",children:n.description}):null,e.jsx("div",{className:`documents-task-artifact-preview documents-task-artifact-preview--${d}`,children:S})]})}function ps({projectId:n,addToast:r,onOpenDetail:v,onOpenArtifactTaskDetail:T,onSendSelectionToTask:x}){const{t}=es("app"),[i,F]=s.useState("artifacts"),l=Mt(),[k,w]=s.useState(""),[d,C]=s.useState(null),[m,f]=s.useState(null),[p,A]=s.useState(!1),[S,N]=s.useState(null),[K,z]=s.useState(!1),[X,B]=s.useState(null),[b,ae]=s.useState(!1),$=s.useRef(0),q=s.useRef(null),V=s.useRef(null),ne=s.useRef(null),Y=s.useRef(null),[Q,Ae]=s.useState(!1),[Ge,Pe]=s.useState(new Map),[Ke,P]=s.useState(null),[ue,y]=s.useState(""),[me,he]=s.useState(!1),[Xe,E]=s.useState(null),[Ye,O]=s.useState(!1),[Je,D]=s.useState(null),[Ze,fe]=s.useState(!0),J=s.useRef(0),[ke,U]=s.useState(!1),[ce,H]=s.useState(""),[pe,je]=s.useState(!1),[oe,Ee]=s.useState(!1),et=le(q,{locked:oe}),tt=le(V,{locked:oe}),st=le(ne,{locked:oe}),at=le(Y,{locked:oe}),xe=Q?et:tt,we=i==="tasks"?k.trim():"",nt=i==="artifacts"?k.trim():"",{documents:Z,loading:ct,error:ot,refresh:re}=ts({projectId:n,searchQuery:we||void 0,includeProjectFiles:!1}),{files:_,loading:rt,error:it,refresh:De}=ss(n,{showHidden:p}),{artifacts:L,loading:lt,error:dt,refresh:be}=Rt({projectId:n,searchQuery:nt||void 0});s.useEffect(()=>{const a=()=>{ae(window.innerWidth<=as)};return a(),window.addEventListener("resize",a),()=>{window.removeEventListener("resize",a)}},[]),s.useEffect(()=>{F("artifacts"),C(null),f(null),A(!1),N(null),B(null),z(!1),Ae(!1),Pe(new Map),P(null),y(""),he(!1),E(null),O(!1),D(null),fe(!0),U(!1),H(""),je(!1)},[n]);const W=s.useMemo(()=>{const a=we.toLowerCase(),c=new Map;for(const o of Z){const j=c.get(o.taskId)??{documents:[],artifacts:[]};j.documents.push(o),c.set(o.taskId,j)}for(const o of L){if(!o.taskId||!rs(o,a))continue;const j=c.get(o.taskId)??{documents:[],artifacts:[]};j.artifacts.push(o),c.set(o.taskId,j)}return Array.from(c.entries()).map(([o,j])=>{const R=[...j.documents].sort((g,ee)=>ee.updatedAt.localeCompare(g.updatedAt)),I=[...j.artifacts].sort((g,ee)=>ee.updatedAt.localeCompare(g.updatedAt)),Ce=[R[0]?.updatedAt,I[0]?.updatedAt].filter(Boolean).sort().at(-1)??"",h=R.find(g=>g.taskTitle)?.taskTitle??I.find(g=>g.taskTitle)?.taskTitle;return{taskId:o,taskTitle:h,taskColumn:R.find(g=>g.taskColumn)?.taskColumn??I.find(g=>g.taskColumn)?.taskColumn,documents:R,artifacts:I,latestUpdated:Ce}}).filter(o=>o.documents.length>0||o.artifacts.length>0).sort((o,j)=>j.latestUpdated.localeCompare(o.latestUpdated))},[L,Z,we]),u=s.useMemo(()=>m?.kind!=="document"?null:Z.find(a=>a.id===m.id)??null,[Z,m]),M=s.useMemo(()=>m?.kind!=="artifact"?null:L.find(a=>a.id===m.id)??null,[L,m]),ie=u??M;s.useEffect(()=>{if(!m)return;W.some(c=>m.kind==="document"?c.documents.some(o=>o.id===m.id):c.artifacts.some(o=>o.id===m.id))||(f(null),P(null),y(""),E(null),O(!1),D(null))},[W,m]);const ge=s.useMemo(()=>{const a=k.trim().toLowerCase();return a?_.filter(c=>{const o=c.path.toLowerCase(),j=c.name.toLowerCase();return o.includes(a)||j.includes(a)}):_},[_,k]);s.useEffect(()=>{if(!d)return;_.some(c=>c.path===d.path)||(C(null),N(null),B(null),z(!1))},[_,d]);const ut=s.useCallback(a=>{w(a.target.value)},[]),mt=s.useCallback(()=>{w("")},[]),ve=s.useCallback(a=>{F(a),a!=="tasks"&&(f(null),P(null),y(""),E(null),O(!1),D(null)),a!=="project"&&(U(!1),H(""))},[]),ht=s.useCallback(async a=>{try{const c=await Ie(a,n);v(c)}catch{r(`Failed to open task ${a}`,"error")}},[n,v,r]),Le=s.useCallback(async a=>{try{const c=await Ie(a,n);(T??v)(c)}catch{r(`Failed to open task ${a}`,"error")}},[n,T,v,r]),ft=s.useCallback(async a=>{C(a),z(!0),B(null),N(null),U(!1),H("");const c=$.current+1;$.current=c;try{const o=await zt("project",a.path,n);if($.current!==c)return;N(o.content)}catch(o){if($.current!==c)return;const j=o instanceof Error?o.message:`Failed to open ${a.path}`;B(j),r(j,"error")}finally{$.current===c&&z(!1)}},[n,r]),kt=s.useCallback(()=>{C(null),N(null),B(null),z(!1),U(!1),H("")},[]),pt=s.useCallback(()=>{S!==null&&(H(S),U(!0))},[S]),jt=s.useCallback(()=>{U(!1),H("")},[]),xt=s.useCallback(async()=>{if(d){je(!0);try{await $t("project",d.path,ce,n),N(ce),U(!1),H(""),r(t("documents.projectFileSaved","File saved"),"success")}catch(a){r(a instanceof Error?a.message:String(a),"error")}finally{je(!1)}}},[d,ce,n,r,t]),wt=s.useCallback(a=>{f({kind:"document",id:a}),P(null),y(""),E(null),O(!1),D(null)},[]),bt=s.useCallback(a=>{f({kind:"artifact",id:a}),P(null),y(""),E(null),D(null),fe(!0)},[]),gt=s.useCallback(()=>{f(null),P(null),y(""),E(null),O(!1),D(null)},[]),vt=s.useCallback(a=>{Pe(c=>{const o=new Map(c),j=o.get(a)??!0;return o.set(a,!j),o})},[]),Nt=s.useCallback(()=>{u&&(y(u.content),P(u.id))},[u]),St=s.useCallback(()=>{P(null),y("")},[]),Ct=s.useCallback(async()=>{if(u){he(!0);try{await Ot(u.taskId,u.key,ue,{},n),await re(),P(null),y(""),r(t("documents.taskDocumentSaved","Document saved"),"success")}catch(a){r(a instanceof Error?a.message:String(a),"error")}finally{he(!1)}}},[u,ue,n,re,r,t]);s.useEffect(()=>{if(!M||ye(M)!=="doc"){E(null),O(!1),D(null);return}const a=J.current+1;J.current=a,O(!0),D(null),E(null),Ht(M.id,n).then(c=>{J.current===a&&E(c.content??M.content??"")}).catch(c=>{J.current===a&&D(c instanceof Error?c.message:String(c))}).finally(()=>{J.current===a&&O(!1)})},[n,M]);const Me=i==="project"?it:i==="tasks"?ot:dt,yt=s.useCallback(async()=>{if(i==="project"){await De();return}if(i==="tasks"){await re();return}await be()},[i,be,De,re]),Re=i==="project"?ge.length:i==="tasks"?W.length:L.length,G=u?Ge.get(u.id)??!0:!1,Ne=G?st:at,Se=u!==null&&Ke===u.id,Tt=i==="project"&&d&&!ke&&x&&xe?e.jsx(Be,{selectedText:xe.selectedText,anchorRect:xe.anchorRect,filePath:d.path,onSubmit:x,onOpenChange:Ee}):null,Ft=i==="tasks"&&u&&!Se&&x&&Ne?e.jsx(Be,{selectedText:Ne.selectedText,anchorRect:Ne.anchorRect,filePath:`${u.taskId}/${u.key}`,onSubmit:x,onOpenChange:Ee}):null,ze=i==="project"?t("documents.searchProjectFiles","Search project markdown files…"):i==="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(It,{icon:te,title:t("documents.title","Artifacts"),actions:e.jsx("span",{className:"documents-view-count",children:t("documents.resultCount","{{count}} result{{plural}}",{count:Re,plural:Re!==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${i==="artifacts"?" active":""}`,role:"tab","aria-selected":i==="artifacts","aria-label":t("documents.showArtifacts","Show artifacts"),onClick:()=>ve("artifacts"),children:[t("documents.artifactsTab","Artifacts"),e.jsx("span",{className:"documents-tab-count",children:L.length})]}),e.jsxs("button",{className:`btn documents-tab${i==="project"?" active":""}`,role:"tab","aria-selected":i==="project","aria-label":t("documents.showProjectFiles","Show project markdown files"),onClick:()=>ve("project"),children:[t("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:_.length})]}),e.jsxs("button",{className:`btn documents-tab${i==="tasks"?" active":""}`,role:"tab","aria-selected":i==="tasks","aria-label":t("documents.showTaskDocuments","Show task documents"),onClick:()=>ve("tasks"),children:[t("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:W.length})]})]}),i==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>A(a=>!a),"aria-pressed":p,"aria-label":p?t("documents.hideHidden","Hide hidden project files"):t("documents.showHidden","Show hidden project files"),title:p?t("documents.hideHiddenFiles","Hide hidden files"):t("documents.showHiddenFiles","Show hidden files"),children:[p?e.jsx(Bt,{size:14}):e.jsx(qt,{size:14}),p?t("documents.hideHiddenLabel","Hide Hidden"):t("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Ut,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:ze,value:k,onChange:ut,"aria-label":ze}),k&&e.jsx("button",{className:"documents-search-clear",onClick:mt,"aria-label":t("documents.clearSearch","Clear search"),children:e.jsx(_t,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:Me?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:t("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:i==="project"?t("documents.projectFiles","project files"):i==="tasks"?t("documents.taskDocuments","task documents"):t("documents.artifacts","artifacts"),error:Me})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void yt(),"aria-label":t("documents.retryLoading","Retry loading documents"),children:[e.jsx(Vt,{size:16}),t("documents.retry","Retry")]})]}):i==="project"?rt&&_.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(de,{label:t("documents.loadingProjectFiles","Loading project markdown files…")})})}):ge.length===0?e.jsx("div",{className:"documents-view-empty",children:k.trim()?e.jsx("p",{children:t("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:k.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(te,{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${b?" documents-project-layout--mobile":""}`,children:[(!b||!d)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":t("documents.projectMarkdownFilesLabel","Project markdown files"),children:e.jsx("ul",{className:"markdown-file-list",children:ge.map(a=>{const c=d?.path===a.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 ft(a),"aria-label":`Open ${a.path}`,"aria-current":c?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:a.name}),e.jsx("span",{className:"markdown-file-item-path",children:a.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[cs(a.size)," · ",se(a.mtime)]})]})},a.path)})})}),(!b||d)&&e.jsxs("section",{className:"documents-view-main","aria-label":t("documents.projectFilePreviewLabel","Project file content preview"),children:[b&&d&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:kt,"aria-label":t("documents.backToFilesList","Back to project files list"),children:[e.jsx(qe,{size:14}),t("documents.backToFiles","Back to files")]}),d?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:d.path}),e.jsx("div",{className:"documents-task-document-actions",children:ke?e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm",onClick:jt,disabled:pe,children:t("documents.cancelEdit","Cancel")}),e.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void xt(),disabled:pe,children:pe?t("documents.saving","Saving…"):t("documents.saveProjectFile","Save")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>Ae(a=>!a),"aria-label":Q?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":Q,title:Q?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:Q?t("documents.markdown","Markdown"):t("documents.plain","Plain")}),e.jsxs("button",{className:"btn btn-sm",onClick:pt,disabled:K||X!==null||S===null,"aria-label":t("documents.editProjectFile","Edit project file"),children:[e.jsx(Ue,{size:14,"aria-hidden":"true"}),t("documents.edit","Edit")]})]})})]}),K?e.jsx("p",{className:"documents-content-state",children:e.jsx(de,{label:t("documents.loadingFileContent","Loading file content…")})}):X?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:X}):ke?e.jsx("div",{className:"documents-task-document-editor","aria-label":t("documents.projectFileContentEditor","Project file content editor"),children:e.jsx(_e,{content:ce,onChange:H,filePath:d.path,forceToolbarActionsVisible:!0})}):Q?e.jsx("div",{ref:q,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Te,{remarkPlugins:[Fe],children:S??""})})}):e.jsx("pre",{ref:V,className:"document-card-content-text documents-content-viewer-text",children:S??""}),Tt]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:t("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):i==="artifacts"?lt&&L.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:t("documents.loadingArtifacts","Loading artifacts…")})}):L.length===0?e.jsx("div",{className:"documents-view-empty",children:k.trim()?e.jsx("p",{children:t("documents.noMatchArtifacts",'No artifacts match "{{query}}".',{query:k.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(te,{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(Qt,{artifacts:L,projectId:n,isMobile:b,addToast:r,onOpenTask:Le,onArtifactUpdated:()=>void be()}):ct&&Z.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(de,{label:t("documents.loadingTaskDocuments","Loading task documents…")})})}):W.length===0?e.jsx("div",{className:"documents-view-empty",children:k.trim()?e.jsx("p",{children:t("documents.noMatchTask",'No task documents match "{{query}}".',{query:k.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(te,{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${b?" documents-project-layout--mobile":""}`,children:[(!b||!ie)&&e.jsx("aside",{className:"documents-view-sidebar documents-task-documents-sidebar","aria-label":t("documents.taskDocumentsListLabel","Task documents"),children:W.map(({taskId:a,taskTitle:c,taskColumn:o,documents:j,artifacts:R})=>{const I=o?l(o):null,Ce=o?os(o):"status-dot";return e.jsxs("section",{className:"documents-task-sidebar-group","aria-labelledby":`documents-task-group-${a}`,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-${a}`,className:"documents-task-sidebar-title",children:[e.jsx("span",{className:"documents-group-task-id",children:a}),e.jsx("span",{className:"documents-group-task-title",children:c||t("documents.untitled","Untitled")})]}),I?e.jsxs("span",{className:"documents-group-status badge","aria-label":t("documents.taskStatusAria","Task status: {{status}}",{status:I}),children:[e.jsx("span",{className:Ce,"aria-hidden":"true"}),e.jsx("span",{children:I})]}):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:j.length,docPlural:j.length!==1?"s":"",artifactCount:R.length,artifactPlural:R.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>void ht(a),"aria-label":t("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:a,title:c||t("documents.untitled","Untitled")}),children:t("documents.openTask","Open task")})]})]}),e.jsxs("ul",{className:"markdown-file-list documents-task-document-list",children:[j.map(h=>{const g=u?.id===h.id;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item documents-task-document-item${g?" markdown-file-item--selected":""}`,onClick:()=>wt(h.id),"aria-label":t("documents.openTaskDocument","Open {{taskId}} {{key}}",{taskId:h.taskId,key:h.key}),"aria-current":g?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:h.key}),e.jsxs("span",{className:"markdown-file-item-path",children:[h.taskId," · ",h.taskTitle||t("documents.untitled","Untitled")]}),e.jsxs("span",{className:"markdown-file-item-meta",children:[t("documents.revisionShort","v{{revision}}",{revision:h.revision})," · ",h.author," · ",se(h.updatedAt)]})]})},`document-${h.id}`)}),R.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:R.map(h=>{const g=ye(h),ee=ns[g],At=We(t,g),$e=M?.id===h.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:()=>bt(h.id),"aria-label":t("documents.openTaskArtifact","Open {{taskId}} artifact {{title}}",{taskId:a,title:h.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(ee,{size:14,"aria-hidden":"true"}),e.jsx("span",{className:"markdown-file-item-name",children:h.title||t("documents.untitledArtifact","Untitled artifact")})]}),e.jsxs("span",{className:"markdown-file-item-path",children:[At," · ",h.mimeType||h.type]}),e.jsxs("span",{className:"markdown-file-item-meta",children:[h.authorId||t("documents.unknownAuthor","unknown")," · ",se(h.updatedAt)]})]})},`artifact-${h.id}`)})})]}):null]})]},a)})}),(!b||ie)&&e.jsxs("section",{className:"documents-view-main","aria-label":t("documents.taskDocumentPreviewLabel","Task document content preview"),children:[b&&ie&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:gt,"aria-label":t("documents.backToTaskDocumentsList","Back to task documents list"),children:[e.jsx(qe,{size:14}),t("documents.backToTaskDocuments","Back to documents")]}),ie?M?e.jsx(ls,{artifact:M,projectId:n,content:Xe,loading:Ye,error:Je,renderMarkdown:Ze,onToggleMarkdown:()=>fe(a=>!a),onOpenTask:Le,t}):u?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:[u.taskId," / ",u.key]}),e.jsx("div",{className:"documents-task-document-actions",children:Se?e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm",onClick:St,disabled:me,children:t("documents.cancelEdit","Cancel")}),e.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Ct(),disabled:me,children:me?t("documents.saving","Saving…"):t("documents.saveTaskDocument","Save")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>vt(u.id),"aria-label":G?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":G,title:G?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:G?t("documents.markdown","Markdown"):t("documents.plain","Plain")}),e.jsxs("button",{className:"btn btn-sm",onClick:Nt,"aria-label":t("documents.editTaskDocument","Edit task document"),children:[e.jsx(Ue,{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:u.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:t("documents.revisionShort","v{{revision}}",{revision:u.revision})}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:se(u.updatedAt)})]}),Se?e.jsx("div",{className:"documents-task-document-editor","aria-label":t("documents.taskDocumentContentEditor","Task document content editor"),children:e.jsx(_e,{content:ue,onChange:y,filePath:u.key.includes(".")?u.key:`${u.key}.md`,forceToolbarActionsVisible:!0})}):G?e.jsx("div",{ref:ne,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Te,{remarkPlugins:[Fe],children:u.content})})}):e.jsx("pre",{ref:Y,className:"document-card-content-text documents-content-viewer-text",children:u.content}),Ft]}):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{ps as DocumentsView};
1
+ import{r as s,j as e}from"./vendor-react-SZ_qB27O.js";import{an as Oe,ao as He,ap as Pt,aq as Et,ar as Dt,as as Ve,at as Lt,au as Mt,av as le,aw as Rt,ax as Ie,ay as zt,az as $t,aA as Ot,aB as ye,aC as Ht,aD as Be,V as It,aE as te,E as Bt,o as qt,aF as Ut,X as _t,R as Vt,aG as de,A as qe,u as Ue,aH as _e,h as Te,r as Fe,aI as Qt,aJ as Qe,aK as Wt,aL as Gt,aM as Kt,aN as Xt,x as Yt,aO as Jt,aP as Zt}from"./index-Cg9ahVtV.js";import{u as es}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";function ts(n){const{projectId:r,searchQuery:v,includeProjectFiles:T=!0}=n??{},x=r?`${Pt.DOCUMENTS_PREFIX}${r}`:null,[t,i]=s.useState(()=>{if(!x)return[];const N=Oe(x,{maxAgeMs:He});return Array.isArray(N)?N:[]}),[F,l]=s.useState([]),[k,w]=s.useState(()=>t.length===0),[d,C]=s.useState(null),m=s.useRef(null),f=s.useRef(t.length>0),p=s.useRef(null),{capture:A}=Et(r,"useDocuments"),S=s.useCallback(async()=>{const N=A();m.current&&m.current.abort();const K=new AbortController;m.current=K;const z=!f.current;z&&w(!0),C(null);const X=Dt(v?{q:v}:void 0,r),B=T?Ve(r):Promise.resolve({files:[]}),[b,ae]=await Promise.allSettled([X,B]);if(K.signal.aborted||N.isStale())return;let $=null;if(b.status==="fulfilled"){if(i(b.value),x){const q=b.value.length>500?b.value.slice(0,500):b.value;Lt(x,q,{maxBytes:5e5})}f.current=!0}else $=b.reason instanceof Error?b.reason.message:String(b.reason);if(ae.status==="fulfilled"){const q=ae.value.files,V=v?.trim().toLowerCase(),ne=V?q.filter(Y=>Y.name.toLowerCase().includes(V)||Y.path.toLowerCase().includes(V)):q;l(ne)}C($),z&&w(!1)},[x,A,T,r,v]);return s.useEffect(()=>{if(l([]),!x){f.current=!1,i([]),w(!0);return}const N=Oe(x,{maxAgeMs:He});Array.isArray(N)?(i(N),f.current=!0,w(!1)):(f.current=!1,i([]),w(!0))},[x]),s.useEffect(()=>(p.current&&clearTimeout(p.current),p.current=setTimeout(()=>{S()},300),()=>{p.current&&clearTimeout(p.current)}),[S]),s.useEffect(()=>(S(),()=>{m.current&&m.current.abort()}),[]),{documents:t,projectFiles:F,loading:k,error:d,refresh:S}}function ss(n,r){const[v,T]=s.useState([]),[x,t]=s.useState(!0),[i,F]=s.useState(null),l=s.useRef(null),k=s.useRef(!1),w=r?.showHidden??!1,d=s.useCallback(async C=>{l.current&&l.current.abort();const m=new AbortController;l.current=m;const f=!k.current;f&&t(!0),F(null);try{const p=await Ve(n,{showHidden:C?.showHidden??w});if(m.signal.aborted)return;T(p.files),k.current=!0}catch(p){if(m.signal.aborted)return;F(p instanceof Error?p.message:String(p))}finally{!m.signal.aborted&&f&&t(!1)}},[n,w]);return s.useEffect(()=>(k.current=!1,d({showHidden:w}),()=>{l.current&&l.current.abort()}),[d,w]),{files:v,loading:x,error:i,refresh:d}}const as=768,ns={image:Xt,doc:te,pdf:Kt,video:Gt,audio:Wt,other:Qe};function se(n){return n?new Date(n).toLocaleString():""}function cs(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(n>=10*1024?0:1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function os(n){return n==="done"?"status-dot status-dot--online":n==="archived"?"status-dot status-dot--offline":n==="todo"||n==="triage"?"status-dot status-dot--pending":"status-dot status-dot--connecting"}function We(n,r){switch(r){case"image":return n("documents.artifactCategoryImage","Image");case"doc":return n("documents.artifactCategoryDoc","Document");case"pdf":return n("documents.artifactCategoryPdf","PDF");case"video":return n("documents.artifactCategoryVideo","Video");case"audio":return n("documents.artifactCategoryAudioSingle","Audio");case"other":return n("documents.artifactCategoryOtherSingle","Other")}}function rs(n,r){return r?[n.title,n.description,n.taskId,n.taskTitle,n.mimeType,n.authorId].some(v=>v?.toLowerCase().includes(r)):!0}function is(n){const r=n.mimeType?.toLowerCase().split(";",1)[0]??"";return!!n.content||n.type==="document"||r.startsWith("text/")||r==="application/json"||r==="application/xml"}function ls({artifact:n,projectId:r,content:v,loading:T,error:x,renderMarkdown:t,onToggleMarkdown:i,onOpenTask:F,t:l}){const[k,w]=s.useState(null),d=ye(n),C=We(l,d),m=n.title||l("documents.untitledArtifact","Untitled artifact"),f=Yt(n.id,r),p=d==="doc"&&is(n);s.useEffect(()=>{w(null)},[n.id]);const A=k?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:k}):null,S=d==="image"?e.jsxs(e.Fragment,{children:[A,e.jsx("img",{className:"documents-task-artifact-media",src:f,alt:m,onError:()=>w(l("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):d==="video"?e.jsxs(e.Fragment,{children:[A,e.jsx("video",{className:"documents-task-artifact-media",controls:!0,src:f,"aria-label":l("documents.videoArtifactLabel","Video artifact: {{title}}",{title:m}),onError:()=>w(l("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):d==="audio"?e.jsxs(e.Fragment,{children:[A,e.jsx("audio",{className:"documents-task-artifact-audio",controls:!0,src:f,"aria-label":l("documents.audioArtifactLabel","Audio artifact: {{title}}",{title:m}),onError:()=>w(l("documents.artifactMediaFailed","Failed to load artifact preview."))})]}):d==="pdf"?e.jsxs("div",{className:"documents-task-artifact-pdf",children:[e.jsx("iframe",{title:l("documents.pdfArtifactTitle","PDF artifact: {{title}}",{title:m}),src:f}),e.jsxs("a",{className:"btn btn-sm",href:f,target:"_blank",rel:"noreferrer",children:[e.jsx(Jt,{size:14,"aria-hidden":"true"}),l("documents.openInNewTab","Open in new tab")]})]}):d==="doc"&&p?T?e.jsx("p",{className:"documents-content-state",children:e.jsx(de,{label:l("documents.loadingArtifactContent","Loading artifact content…")})}):x?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:x}):t?e.jsx("div",{className:"documents-content-markdown documents-task-artifact-doc-content",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Te,{remarkPlugins:[Fe],children:v??n.content??""})})}):e.jsx("pre",{className:"document-card-content-text documents-content-viewer-text documents-task-artifact-doc-content",children:v??n.content??""}):e.jsxs("div",{className:"documents-task-artifact-download",children:[e.jsx(Qe,{size:24,"aria-hidden":"true"}),e.jsx("p",{children:n.description||l("documents.binaryArtifactFallback","This artifact cannot be previewed inline.")}),e.jsxs("a",{className:"btn btn-sm",href:f,target:"_blank",rel:"noreferrer","data-testid":"task-artifact-open-link",children:[e.jsx(Zt,{size:14,"aria-hidden":"true"}),l("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:[n.taskId," / ",m]}),d==="doc"&&p?e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:i,"aria-label":t?l("documents.switchToPlainText","Switch to plain text"):l("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":t,title:t?l("documents.switchToPlainText","Switch to plain text"):l("documents.switchToMarkdown","Switch to markdown"),children:t?l("documents.markdown","Markdown"):l("documents.plain","Plain")}):null]}),e.jsxs("div",{className:"document-card-meta documents-task-document-meta documents-task-artifact-meta",children:[e.jsx("span",{children:C}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:n.authorId||l("documents.unknownAuthor","unknown")}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:se(n.updatedAt)}),n.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 F(n.taskId),children:l("documents.openTask","Open task")})]}):null]}),n.description?e.jsx("p",{className:"documents-task-artifact-description",children:n.description}):null,e.jsx("div",{className:`documents-task-artifact-preview documents-task-artifact-preview--${d}`,children:S})]})}function ps({projectId:n,addToast:r,onOpenDetail:v,onOpenArtifactTaskDetail:T,onSendSelectionToTask:x}){const{t}=es("app"),[i,F]=s.useState("artifacts"),l=Mt(),[k,w]=s.useState(""),[d,C]=s.useState(null),[m,f]=s.useState(null),[p,A]=s.useState(!1),[S,N]=s.useState(null),[K,z]=s.useState(!1),[X,B]=s.useState(null),[b,ae]=s.useState(!1),$=s.useRef(0),q=s.useRef(null),V=s.useRef(null),ne=s.useRef(null),Y=s.useRef(null),[Q,Ae]=s.useState(!1),[Ge,Pe]=s.useState(new Map),[Ke,P]=s.useState(null),[ue,y]=s.useState(""),[me,he]=s.useState(!1),[Xe,E]=s.useState(null),[Ye,O]=s.useState(!1),[Je,D]=s.useState(null),[Ze,fe]=s.useState(!0),J=s.useRef(0),[ke,U]=s.useState(!1),[ce,H]=s.useState(""),[pe,je]=s.useState(!1),[oe,Ee]=s.useState(!1),et=le(q,{locked:oe}),tt=le(V,{locked:oe}),st=le(ne,{locked:oe}),at=le(Y,{locked:oe}),xe=Q?et:tt,we=i==="tasks"?k.trim():"",nt=i==="artifacts"?k.trim():"",{documents:Z,loading:ct,error:ot,refresh:re}=ts({projectId:n,searchQuery:we||void 0,includeProjectFiles:!1}),{files:_,loading:rt,error:it,refresh:De}=ss(n,{showHidden:p}),{artifacts:L,loading:lt,error:dt,refresh:be}=Rt({projectId:n,searchQuery:nt||void 0});s.useEffect(()=>{const a=()=>{ae(window.innerWidth<=as)};return a(),window.addEventListener("resize",a),()=>{window.removeEventListener("resize",a)}},[]),s.useEffect(()=>{F("artifacts"),C(null),f(null),A(!1),N(null),B(null),z(!1),Ae(!1),Pe(new Map),P(null),y(""),he(!1),E(null),O(!1),D(null),fe(!0),U(!1),H(""),je(!1)},[n]);const W=s.useMemo(()=>{const a=we.toLowerCase(),c=new Map;for(const o of Z){const j=c.get(o.taskId)??{documents:[],artifacts:[]};j.documents.push(o),c.set(o.taskId,j)}for(const o of L){if(!o.taskId||!rs(o,a))continue;const j=c.get(o.taskId)??{documents:[],artifacts:[]};j.artifacts.push(o),c.set(o.taskId,j)}return Array.from(c.entries()).map(([o,j])=>{const R=[...j.documents].sort((g,ee)=>ee.updatedAt.localeCompare(g.updatedAt)),I=[...j.artifacts].sort((g,ee)=>ee.updatedAt.localeCompare(g.updatedAt)),Ce=[R[0]?.updatedAt,I[0]?.updatedAt].filter(Boolean).sort().at(-1)??"",h=R.find(g=>g.taskTitle)?.taskTitle??I.find(g=>g.taskTitle)?.taskTitle;return{taskId:o,taskTitle:h,taskColumn:R.find(g=>g.taskColumn)?.taskColumn??I.find(g=>g.taskColumn)?.taskColumn,documents:R,artifacts:I,latestUpdated:Ce}}).filter(o=>o.documents.length>0||o.artifacts.length>0).sort((o,j)=>j.latestUpdated.localeCompare(o.latestUpdated))},[L,Z,we]),u=s.useMemo(()=>m?.kind!=="document"?null:Z.find(a=>a.id===m.id)??null,[Z,m]),M=s.useMemo(()=>m?.kind!=="artifact"?null:L.find(a=>a.id===m.id)??null,[L,m]),ie=u??M;s.useEffect(()=>{if(!m)return;W.some(c=>m.kind==="document"?c.documents.some(o=>o.id===m.id):c.artifacts.some(o=>o.id===m.id))||(f(null),P(null),y(""),E(null),O(!1),D(null))},[W,m]);const ge=s.useMemo(()=>{const a=k.trim().toLowerCase();return a?_.filter(c=>{const o=c.path.toLowerCase(),j=c.name.toLowerCase();return o.includes(a)||j.includes(a)}):_},[_,k]);s.useEffect(()=>{if(!d)return;_.some(c=>c.path===d.path)||(C(null),N(null),B(null),z(!1))},[_,d]);const ut=s.useCallback(a=>{w(a.target.value)},[]),mt=s.useCallback(()=>{w("")},[]),ve=s.useCallback(a=>{F(a),a!=="tasks"&&(f(null),P(null),y(""),E(null),O(!1),D(null)),a!=="project"&&(U(!1),H(""))},[]),ht=s.useCallback(async a=>{try{const c=await Ie(a,n);v(c)}catch{r(`Failed to open task ${a}`,"error")}},[n,v,r]),Le=s.useCallback(async a=>{try{const c=await Ie(a,n);(T??v)(c)}catch{r(`Failed to open task ${a}`,"error")}},[n,T,v,r]),ft=s.useCallback(async a=>{C(a),z(!0),B(null),N(null),U(!1),H("");const c=$.current+1;$.current=c;try{const o=await zt("project",a.path,n);if($.current!==c)return;N(o.content)}catch(o){if($.current!==c)return;const j=o instanceof Error?o.message:`Failed to open ${a.path}`;B(j),r(j,"error")}finally{$.current===c&&z(!1)}},[n,r]),kt=s.useCallback(()=>{C(null),N(null),B(null),z(!1),U(!1),H("")},[]),pt=s.useCallback(()=>{S!==null&&(H(S),U(!0))},[S]),jt=s.useCallback(()=>{U(!1),H("")},[]),xt=s.useCallback(async()=>{if(d){je(!0);try{await $t("project",d.path,ce,n),N(ce),U(!1),H(""),r(t("documents.projectFileSaved","File saved"),"success")}catch(a){r(a instanceof Error?a.message:String(a),"error")}finally{je(!1)}}},[d,ce,n,r,t]),wt=s.useCallback(a=>{f({kind:"document",id:a}),P(null),y(""),E(null),O(!1),D(null)},[]),bt=s.useCallback(a=>{f({kind:"artifact",id:a}),P(null),y(""),E(null),D(null),fe(!0)},[]),gt=s.useCallback(()=>{f(null),P(null),y(""),E(null),O(!1),D(null)},[]),vt=s.useCallback(a=>{Pe(c=>{const o=new Map(c),j=o.get(a)??!0;return o.set(a,!j),o})},[]),Nt=s.useCallback(()=>{u&&(y(u.content),P(u.id))},[u]),St=s.useCallback(()=>{P(null),y("")},[]),Ct=s.useCallback(async()=>{if(u){he(!0);try{await Ot(u.taskId,u.key,ue,{},n),await re(),P(null),y(""),r(t("documents.taskDocumentSaved","Document saved"),"success")}catch(a){r(a instanceof Error?a.message:String(a),"error")}finally{he(!1)}}},[u,ue,n,re,r,t]);s.useEffect(()=>{if(!M||ye(M)!=="doc"){E(null),O(!1),D(null);return}const a=J.current+1;J.current=a,O(!0),D(null),E(null),Ht(M.id,n).then(c=>{J.current===a&&E(c.content??M.content??"")}).catch(c=>{J.current===a&&D(c instanceof Error?c.message:String(c))}).finally(()=>{J.current===a&&O(!1)})},[n,M]);const Me=i==="project"?it:i==="tasks"?ot:dt,yt=s.useCallback(async()=>{if(i==="project"){await De();return}if(i==="tasks"){await re();return}await be()},[i,be,De,re]),Re=i==="project"?ge.length:i==="tasks"?W.length:L.length,G=u?Ge.get(u.id)??!0:!1,Ne=G?st:at,Se=u!==null&&Ke===u.id,Tt=i==="project"&&d&&!ke&&x&&xe?e.jsx(Be,{selectedText:xe.selectedText,anchorRect:xe.anchorRect,filePath:d.path,onSubmit:x,onOpenChange:Ee}):null,Ft=i==="tasks"&&u&&!Se&&x&&Ne?e.jsx(Be,{selectedText:Ne.selectedText,anchorRect:Ne.anchorRect,filePath:`${u.taskId}/${u.key}`,onSubmit:x,onOpenChange:Ee}):null,ze=i==="project"?t("documents.searchProjectFiles","Search project markdown files…"):i==="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(It,{icon:te,title:t("documents.title","Artifacts"),actions:e.jsx("span",{className:"documents-view-count",children:t("documents.resultCount","{{count}} result{{plural}}",{count:Re,plural:Re!==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${i==="artifacts"?" active":""}`,role:"tab","aria-selected":i==="artifacts","aria-label":t("documents.showArtifacts","Show artifacts"),onClick:()=>ve("artifacts"),children:[t("documents.artifactsTab","Artifacts"),e.jsx("span",{className:"documents-tab-count",children:L.length})]}),e.jsxs("button",{className:`btn documents-tab${i==="project"?" active":""}`,role:"tab","aria-selected":i==="project","aria-label":t("documents.showProjectFiles","Show project markdown files"),onClick:()=>ve("project"),children:[t("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:_.length})]}),e.jsxs("button",{className:`btn documents-tab${i==="tasks"?" active":""}`,role:"tab","aria-selected":i==="tasks","aria-label":t("documents.showTaskDocuments","Show task documents"),onClick:()=>ve("tasks"),children:[t("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:W.length})]})]}),i==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>A(a=>!a),"aria-pressed":p,"aria-label":p?t("documents.hideHidden","Hide hidden project files"):t("documents.showHidden","Show hidden project files"),title:p?t("documents.hideHiddenFiles","Hide hidden files"):t("documents.showHiddenFiles","Show hidden files"),children:[p?e.jsx(Bt,{size:14}):e.jsx(qt,{size:14}),p?t("documents.hideHiddenLabel","Hide Hidden"):t("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Ut,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:ze,value:k,onChange:ut,"aria-label":ze}),k&&e.jsx("button",{className:"documents-search-clear",onClick:mt,"aria-label":t("documents.clearSearch","Clear search"),children:e.jsx(_t,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:Me?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:t("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:i==="project"?t("documents.projectFiles","project files"):i==="tasks"?t("documents.taskDocuments","task documents"):t("documents.artifacts","artifacts"),error:Me})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void yt(),"aria-label":t("documents.retryLoading","Retry loading documents"),children:[e.jsx(Vt,{size:16}),t("documents.retry","Retry")]})]}):i==="project"?rt&&_.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(de,{label:t("documents.loadingProjectFiles","Loading project markdown files…")})})}):ge.length===0?e.jsx("div",{className:"documents-view-empty",children:k.trim()?e.jsx("p",{children:t("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:k.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(te,{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${b?" documents-project-layout--mobile":""}`,children:[(!b||!d)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":t("documents.projectMarkdownFilesLabel","Project markdown files"),children:e.jsx("ul",{className:"markdown-file-list",children:ge.map(a=>{const c=d?.path===a.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 ft(a),"aria-label":`Open ${a.path}`,"aria-current":c?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:a.name}),e.jsx("span",{className:"markdown-file-item-path",children:a.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[cs(a.size)," · ",se(a.mtime)]})]})},a.path)})})}),(!b||d)&&e.jsxs("section",{className:"documents-view-main","aria-label":t("documents.projectFilePreviewLabel","Project file content preview"),children:[b&&d&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:kt,"aria-label":t("documents.backToFilesList","Back to project files list"),children:[e.jsx(qe,{size:14}),t("documents.backToFiles","Back to files")]}),d?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:d.path}),e.jsx("div",{className:"documents-task-document-actions",children:ke?e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm",onClick:jt,disabled:pe,children:t("documents.cancelEdit","Cancel")}),e.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void xt(),disabled:pe,children:pe?t("documents.saving","Saving…"):t("documents.saveProjectFile","Save")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>Ae(a=>!a),"aria-label":Q?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":Q,title:Q?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:Q?t("documents.markdown","Markdown"):t("documents.plain","Plain")}),e.jsxs("button",{className:"btn btn-sm",onClick:pt,disabled:K||X!==null||S===null,"aria-label":t("documents.editProjectFile","Edit project file"),children:[e.jsx(Ue,{size:14,"aria-hidden":"true"}),t("documents.edit","Edit")]})]})})]}),K?e.jsx("p",{className:"documents-content-state",children:e.jsx(de,{label:t("documents.loadingFileContent","Loading file content…")})}):X?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:X}):ke?e.jsx("div",{className:"documents-task-document-editor","aria-label":t("documents.projectFileContentEditor","Project file content editor"),children:e.jsx(_e,{content:ce,onChange:H,filePath:d.path,forceToolbarActionsVisible:!0})}):Q?e.jsx("div",{ref:q,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Te,{remarkPlugins:[Fe],children:S??""})})}):e.jsx("pre",{ref:V,className:"document-card-content-text documents-content-viewer-text",children:S??""}),Tt]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:t("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):i==="artifacts"?lt&&L.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:t("documents.loadingArtifacts","Loading artifacts…")})}):L.length===0?e.jsx("div",{className:"documents-view-empty",children:k.trim()?e.jsx("p",{children:t("documents.noMatchArtifacts",'No artifacts match "{{query}}".',{query:k.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(te,{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(Qt,{artifacts:L,projectId:n,isMobile:b,addToast:r,onOpenTask:Le,onArtifactUpdated:()=>void be()}):ct&&Z.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:e.jsx(de,{label:t("documents.loadingTaskDocuments","Loading task documents…")})})}):W.length===0?e.jsx("div",{className:"documents-view-empty",children:k.trim()?e.jsx("p",{children:t("documents.noMatchTask",'No task documents match "{{query}}".',{query:k.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(te,{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${b?" documents-project-layout--mobile":""}`,children:[(!b||!ie)&&e.jsx("aside",{className:"documents-view-sidebar documents-task-documents-sidebar","aria-label":t("documents.taskDocumentsListLabel","Task documents"),children:W.map(({taskId:a,taskTitle:c,taskColumn:o,documents:j,artifacts:R})=>{const I=o?l(o):null,Ce=o?os(o):"status-dot";return e.jsxs("section",{className:"documents-task-sidebar-group","aria-labelledby":`documents-task-group-${a}`,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-${a}`,className:"documents-task-sidebar-title",children:[e.jsx("span",{className:"documents-group-task-id",children:a}),e.jsx("span",{className:"documents-group-task-title",children:c||t("documents.untitled","Untitled")})]}),I?e.jsxs("span",{className:"documents-group-status badge","aria-label":t("documents.taskStatusAria","Task status: {{status}}",{status:I}),children:[e.jsx("span",{className:Ce,"aria-hidden":"true"}),e.jsx("span",{children:I})]}):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:j.length,docPlural:j.length!==1?"s":"",artifactCount:R.length,artifactPlural:R.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>void ht(a),"aria-label":t("documents.openTaskAria","Open task {{taskId}}: {{title}}",{taskId:a,title:c||t("documents.untitled","Untitled")}),children:t("documents.openTask","Open task")})]})]}),e.jsxs("ul",{className:"markdown-file-list documents-task-document-list",children:[j.map(h=>{const g=u?.id===h.id;return e.jsx("li",{className:"markdown-file-list-item",children:e.jsxs("button",{className:`markdown-file-item documents-task-document-item${g?" markdown-file-item--selected":""}`,onClick:()=>wt(h.id),"aria-label":t("documents.openTaskDocument","Open {{taskId}} {{key}}",{taskId:h.taskId,key:h.key}),"aria-current":g?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:h.key}),e.jsxs("span",{className:"markdown-file-item-path",children:[h.taskId," · ",h.taskTitle||t("documents.untitled","Untitled")]}),e.jsxs("span",{className:"markdown-file-item-meta",children:[t("documents.revisionShort","v{{revision}}",{revision:h.revision})," · ",h.author," · ",se(h.updatedAt)]})]})},`document-${h.id}`)}),R.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:R.map(h=>{const g=ye(h),ee=ns[g],At=We(t,g),$e=M?.id===h.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:()=>bt(h.id),"aria-label":t("documents.openTaskArtifact","Open {{taskId}} artifact {{title}}",{taskId:a,title:h.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(ee,{size:14,"aria-hidden":"true"}),e.jsx("span",{className:"markdown-file-item-name",children:h.title||t("documents.untitledArtifact","Untitled artifact")})]}),e.jsxs("span",{className:"markdown-file-item-path",children:[At," · ",h.mimeType||h.type]}),e.jsxs("span",{className:"markdown-file-item-meta",children:[h.authorId||t("documents.unknownAuthor","unknown")," · ",se(h.updatedAt)]})]})},`artifact-${h.id}`)})})]}):null]})]},a)})}),(!b||ie)&&e.jsxs("section",{className:"documents-view-main","aria-label":t("documents.taskDocumentPreviewLabel","Task document content preview"),children:[b&&ie&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:gt,"aria-label":t("documents.backToTaskDocumentsList","Back to task documents list"),children:[e.jsx(qe,{size:14}),t("documents.backToTaskDocuments","Back to documents")]}),ie?M?e.jsx(ls,{artifact:M,projectId:n,content:Xe,loading:Ye,error:Je,renderMarkdown:Ze,onToggleMarkdown:()=>fe(a=>!a),onOpenTask:Le,t}):u?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:[u.taskId," / ",u.key]}),e.jsx("div",{className:"documents-task-document-actions",children:Se?e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm",onClick:St,disabled:me,children:t("documents.cancelEdit","Cancel")}),e.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Ct(),disabled:me,children:me?t("documents.saving","Saving…"):t("documents.saveTaskDocument","Save")})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>vt(u.id),"aria-label":G?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":G,title:G?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:G?t("documents.markdown","Markdown"):t("documents.plain","Plain")}),e.jsxs("button",{className:"btn btn-sm",onClick:Nt,"aria-label":t("documents.editTaskDocument","Edit task document"),children:[e.jsx(Ue,{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:u.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{children:t("documents.revisionShort","v{{revision}}",{revision:u.revision})}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:se(u.updatedAt)})]}),Se?e.jsx("div",{className:"documents-task-document-editor","aria-label":t("documents.taskDocumentContentEditor","Task document content editor"),children:e.jsx(_e,{content:ue,onChange:y,filePath:u.key.includes(".")?u.key:`${u.key}.md`,forceToolbarActionsVisible:!0})}):G?e.jsx("div",{ref:ne,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(Te,{remarkPlugins:[Fe],children:u.content})})}):e.jsx("pre",{ref:Y,className:"document-card-content-text documents-content-viewer-text",children:u.content}),Ft]}):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{ps as DocumentsView};
@@ -1 +1 @@
1
- import{r as l,j as e}from"./vendor-react-SZ_qB27O.js";import{an as L,ao as P,ap as V,aQ as Q,aR as Y,at as $,aS as J,aT as Z,V as H,T as B,U as ee,R as se,aG as ae,s as te,k as le,aO as re}from"./index-DTPYepvh.js";import{u as ne}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";const ie=300,ce=15e3;function K(r){if(!r.trim())return;const a=Number(r);return Number.isFinite(a)?a:void 0}function k(...r){for(const a of r)if(Array.isArray(a))return a;return[]}function p(r){return typeof r=="object"&&r!==null?r:{}}function X(r){const a=p(r),m=p(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:k(a.categoryScores,p(a.scores).categories)}}function oe(r){const a=p(r);return{...X(a),rationale:String(a.rationale??a.summary??""),evidence:k(a.evidence,p(a.details).evidence),followUps:k(a.followUps,p(a.recommendations).followUps)}}function de(r){const a=r?.projectId,m=a??"",t=`${V.EVALS_RUNS_PREFIX}${m}`,h=`${V.EVALS_RESULTS_PREFIX}${m}`,f=L(t,{maxAgeMs:P}),v=L(h,{maxAgeMs:P}),S=l.useRef(Array.isArray(f)&&f.length>0||Array.isArray(v)&&v.length>0),[o,g]=l.useState({q:"",runId:"",scoreMin:"",scoreMax:""}),[R,w]=l.useState(()=>Array.isArray(f)?f:[]),[d,M]=l.useState(()=>Array.isArray(v)?v:[]),[u,b]=l.useState(null),[F,A]=l.useState(null),[s,c]=l.useState(0),[y,j]=l.useState(!S.current),[G,z]=l.useState(null),C=l.useRef(0),q=l.useRef(a),T=l.useRef(u);T.current=u;const I=l.useCallback(async()=>{const n=++C.current;S.current||j(!0),z(null);try{const[i,x]=await Promise.all([Q({q:o.q||void 0,runId:o.runId||void 0,scoreMin:K(o.scoreMin),scoreMax:K(o.scoreMax),limit:100,offset:0},a),Y(a)]);if(n!==C.current)return;const E=k(i.results,i.evals,i.items).map(X);M(E),$(h,E.length>500?E.slice(0,500):E,{maxBytes:5e5}),c(typeof i.count=="number"?i.count:E.length);const D=k(x.runs,x.items).map(U=>{const N=p(U),O=p(N.counts);return{id:String(N.id??""),createdAt:String(N.createdAt??""),completedAt:typeof N.completedAt=="string"?N.completedAt:void 0,status:String(N.status??"pending"),evaluatedTaskCount:typeof O.totalTasks=="number"?O.totalTasks:0}});w(D),$(t,D,{maxBytes:5e5}),S.current=!0,T.current&&!E.some(U=>U.id===T.current)&&(b(null),A(null))}catch(i){if(n!==C.current)return;z(i instanceof Error?i.message:"Failed to load evals")}finally{n===C.current&&j(!1)}},[o.q,o.runId,o.scoreMax,o.scoreMin,a,h,t]),_=l.useCallback(async n=>{const i=await J(n,a),x=i.result??i;A(oe(x))},[a]);l.useEffect(()=>{if(q.current===a)return;q.current=a;const n=L(t,{maxAgeMs:P}),i=L(h,{maxAgeMs:P}),x=Array.isArray(n)&&n.length>0||Array.isArray(i)&&i.length>0;w(Array.isArray(n)?n:[]),M(Array.isArray(i)?i:[]),j(!x),S.current=x},[a,h,t]),l.useEffect(()=>{const n=window.setTimeout(()=>{I()},ie);return()=>window.clearTimeout(n)},[I]),l.useEffect(()=>{if(!u){A(null);return}_(u)},[_,u]),l.useEffect(()=>{const n=window.setInterval(()=>{I(),u&&_(u)},ce);return()=>window.clearInterval(n)},[_,I,u]);const W=l.useCallback(n=>{T.current=n,b(n)},[]);return{loading:y,error:G,results:d,count:s,runs:R,filters:o,setFilters:g,refresh:I,selectedEvalId:u,setSelectedEvalId:W,selectedEval:F}}function ge({projectId:r,onOpenSettings:a,onOpenTaskDetail:m}){const{t}=ne("app"),{loading:h,error:f,results:v,runs:S,filters:o,setFilters:g,selectedEvalId:R,setSelectedEvalId:w,selectedEval:d,refresh:M}=de({projectId:r}),[u,b]=l.useState(!0);l.useEffect(()=>{let s=!1;return Z(r).then(c=>{if(s)return;const y=c.evalSettings?.enabled;b(y??!1)}).catch(()=>{s||b(!1)}),()=>{s=!0}},[r]);const F=v.length>0,A=l.useMemo(()=>v.find(s=>s.id===R)??null,[v,R]);return u?e.jsxs("section",{className:"evals-view","data-testid":"evals-view",children:[e.jsx(H,{icon:B,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(c=>({...c,q:s.target.value}))}),e.jsxs("select",{className:"select",value:o.runId,onChange:s=>g(c=>({...c,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(c=>({...c,scoreMin:s.target.value}))}),e.jsx("input",{className:"input",placeholder:t("evals.maxScorePlaceholder","Max score"),value:o.scoreMax,onChange:s=>g(c=>({...c,scoreMax:s.target.value}))}),e.jsx("button",{className:"btn btn-icon",type:"button",onClick:()=>void M(),"aria-label":t("evals.refreshAria","Refresh evals"),children:e.jsx(se,{size:16})})]}),h&&e.jsx("p",{className:"evals-state","data-testid":"evals-loading",children:e.jsx(ae,{label:t("evals.loading","Loading evals…")})}),f&&e.jsx("p",{className:"evals-state evals-state--error",children:f}),!h&&!f&&!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===R?"evals-result--active":""}`,type:"button",onClick:()=>w(s.id),draggable:le(),onDragStart:c=>{te(c.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,c)=>{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(re,{size:14})]}):e.jsx("span",{children:s.ref})},`${s.ref}-${c}`)})})]}),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:B,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(ee,{size:16}),t("evals.openSettings","Open Scheduled Evals Settings")]})]})]})}export{ge as EvalsView};
1
+ import{r as l,j as e}from"./vendor-react-SZ_qB27O.js";import{an as L,ao as P,ap as V,aQ as Q,aR as Y,at as $,aS as J,aT as Z,V as H,T as B,U as ee,R as se,aG as ae,s as te,k as le,aO as re}from"./index-Cg9ahVtV.js";import{u as ne}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";const ie=300,ce=15e3;function K(r){if(!r.trim())return;const a=Number(r);return Number.isFinite(a)?a:void 0}function k(...r){for(const a of r)if(Array.isArray(a))return a;return[]}function p(r){return typeof r=="object"&&r!==null?r:{}}function X(r){const a=p(r),m=p(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:k(a.categoryScores,p(a.scores).categories)}}function oe(r){const a=p(r);return{...X(a),rationale:String(a.rationale??a.summary??""),evidence:k(a.evidence,p(a.details).evidence),followUps:k(a.followUps,p(a.recommendations).followUps)}}function de(r){const a=r?.projectId,m=a??"",t=`${V.EVALS_RUNS_PREFIX}${m}`,h=`${V.EVALS_RESULTS_PREFIX}${m}`,f=L(t,{maxAgeMs:P}),v=L(h,{maxAgeMs:P}),S=l.useRef(Array.isArray(f)&&f.length>0||Array.isArray(v)&&v.length>0),[o,g]=l.useState({q:"",runId:"",scoreMin:"",scoreMax:""}),[R,w]=l.useState(()=>Array.isArray(f)?f:[]),[d,M]=l.useState(()=>Array.isArray(v)?v:[]),[u,b]=l.useState(null),[F,A]=l.useState(null),[s,c]=l.useState(0),[y,j]=l.useState(!S.current),[G,z]=l.useState(null),C=l.useRef(0),q=l.useRef(a),T=l.useRef(u);T.current=u;const I=l.useCallback(async()=>{const n=++C.current;S.current||j(!0),z(null);try{const[i,x]=await Promise.all([Q({q:o.q||void 0,runId:o.runId||void 0,scoreMin:K(o.scoreMin),scoreMax:K(o.scoreMax),limit:100,offset:0},a),Y(a)]);if(n!==C.current)return;const E=k(i.results,i.evals,i.items).map(X);M(E),$(h,E.length>500?E.slice(0,500):E,{maxBytes:5e5}),c(typeof i.count=="number"?i.count:E.length);const D=k(x.runs,x.items).map(U=>{const N=p(U),O=p(N.counts);return{id:String(N.id??""),createdAt:String(N.createdAt??""),completedAt:typeof N.completedAt=="string"?N.completedAt:void 0,status:String(N.status??"pending"),evaluatedTaskCount:typeof O.totalTasks=="number"?O.totalTasks:0}});w(D),$(t,D,{maxBytes:5e5}),S.current=!0,T.current&&!E.some(U=>U.id===T.current)&&(b(null),A(null))}catch(i){if(n!==C.current)return;z(i instanceof Error?i.message:"Failed to load evals")}finally{n===C.current&&j(!1)}},[o.q,o.runId,o.scoreMax,o.scoreMin,a,h,t]),_=l.useCallback(async n=>{const i=await J(n,a),x=i.result??i;A(oe(x))},[a]);l.useEffect(()=>{if(q.current===a)return;q.current=a;const n=L(t,{maxAgeMs:P}),i=L(h,{maxAgeMs:P}),x=Array.isArray(n)&&n.length>0||Array.isArray(i)&&i.length>0;w(Array.isArray(n)?n:[]),M(Array.isArray(i)?i:[]),j(!x),S.current=x},[a,h,t]),l.useEffect(()=>{const n=window.setTimeout(()=>{I()},ie);return()=>window.clearTimeout(n)},[I]),l.useEffect(()=>{if(!u){A(null);return}_(u)},[_,u]),l.useEffect(()=>{const n=window.setInterval(()=>{I(),u&&_(u)},ce);return()=>window.clearInterval(n)},[_,I,u]);const W=l.useCallback(n=>{T.current=n,b(n)},[]);return{loading:y,error:G,results:d,count:s,runs:R,filters:o,setFilters:g,refresh:I,selectedEvalId:u,setSelectedEvalId:W,selectedEval:F}}function ge({projectId:r,onOpenSettings:a,onOpenTaskDetail:m}){const{t}=ne("app"),{loading:h,error:f,results:v,runs:S,filters:o,setFilters:g,selectedEvalId:R,setSelectedEvalId:w,selectedEval:d,refresh:M}=de({projectId:r}),[u,b]=l.useState(!0);l.useEffect(()=>{let s=!1;return Z(r).then(c=>{if(s)return;const y=c.evalSettings?.enabled;b(y??!1)}).catch(()=>{s||b(!1)}),()=>{s=!0}},[r]);const F=v.length>0,A=l.useMemo(()=>v.find(s=>s.id===R)??null,[v,R]);return u?e.jsxs("section",{className:"evals-view","data-testid":"evals-view",children:[e.jsx(H,{icon:B,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(c=>({...c,q:s.target.value}))}),e.jsxs("select",{className:"select",value:o.runId,onChange:s=>g(c=>({...c,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(c=>({...c,scoreMin:s.target.value}))}),e.jsx("input",{className:"input",placeholder:t("evals.maxScorePlaceholder","Max score"),value:o.scoreMax,onChange:s=>g(c=>({...c,scoreMax:s.target.value}))}),e.jsx("button",{className:"btn btn-icon",type:"button",onClick:()=>void M(),"aria-label":t("evals.refreshAria","Refresh evals"),children:e.jsx(se,{size:16})})]}),h&&e.jsx("p",{className:"evals-state","data-testid":"evals-loading",children:e.jsx(ae,{label:t("evals.loading","Loading evals…")})}),f&&e.jsx("p",{className:"evals-state evals-state--error",children:f}),!h&&!f&&!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===R?"evals-result--active":""}`,type:"button",onClick:()=>w(s.id),draggable:le(),onDragStart:c=>{te(c.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,c)=>{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(re,{size:14})]}):e.jsx("span",{children:s.ref})},`${s.ref}-${c}`)})})]}),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:B,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(ee,{size:16}),t("evals.openSettings","Open Scheduled Evals Settings")]})]})]})}export{ge as EvalsView};
@@ -1 +1 @@
1
- import{r as s,j as n}from"./vendor-react-SZ_qB27O.js";import{y as $,z as G,B as V,D as W,F as z,G as B}from"./index-DTPYepvh.js";import{u as U}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";function en({isOpen:l,onClose:R,onUseDraft:M,projectId:x,existingAgents:P,mode:_="create",existingAgentConfig:L}){const{t:e}=U("app"),[m,d]=s.useState("initial"),[f,S]=s.useState(""),[c,k]=s.useState(null),[C,I]=s.useState(""),[w,A]=s.useState("answer"),[v,p]=s.useState(""),[t,T]=s.useState(null),[H,g]=s.useState(null),[E,y]=s.useState([]),b=_==="edit",o=s.useRef(l),N=s.useCallback(()=>{d("initial"),S(""),k(null),I(""),A("answer"),p(""),T(null),g(null),y([])},[]),D=s.useMemo(()=>$.map(a=>({id:a.id,label:a.name,description:a.description})),[]);s.useEffect(()=>{if(o.current=l,!c)return;const a=G(c,x,{onThinking:i=>{o.current&&y(F=>{const h=[...F],j=h[h.length-1];return j&&!j.question?(h[h.length-1]={...j,thinkingOutput:`${j.thinkingOutput??""}${i}`},h):[...h,{response:{},thinkingOutput:i}]})},onQuestion:i=>{o.current&&(I(i.question),A(i.id),d("question"))},onSummary:i=>{o.current&&(T(i),d("summary"))},onError:i=>{o.current&&(g(i),d("error"))}});return()=>{o.current=!1,a.close()}},[l,c,x]);const u=async()=>{o.current=!1;try{c&&await W(c,x)}catch{}finally{N(),R()}};if(s.useEffect(()=>{o.current=l,l||N()},[l,N]),!l)return null;const r=a=>a==null||a===""?n.jsx("em",{className:"experimental-agent-onboarding-modal__summary-empty",children:e("agents.onboarding.notSet","Not set")}):n.jsx("span",{children:a}),q=async()=>{d("loading"),g(null);try{const a=await z(f,{mode:_,existingAgentConfig:L,existingAgents:P.map(i=>({id:i.id,name:i.name,role:i.role})),templates:D},x);if(!o.current)return;k(a.sessionId)}catch(a){if(!o.current)return;g(a.message),d("error")}},Q=async()=>{if(c){d("loading"),g(null);try{const a={[w]:v};if(y(i=>[...i,{question:{id:w,type:"text",question:C},response:a}]),await B(c,a,x),!o.current)return;p("")}catch(a){if(!o.current)return;g(a.message),d("error")}}},O=async()=>{t&&(M(t),await u())};return n.jsx("div",{className:"modal-overlay open",role:"presentation",children:n.jsxs("div",{className:"modal modal-lg experimental-agent-onboarding-modal",role:"dialog","aria-modal":"true","aria-label":e("agents.onboarding.dialogLabel","AI Interview"),children:[n.jsxs("div",{className:"modal-header",children:[n.jsx("h3",{children:e("agents.onboarding.title","AI Interview")}),n.jsx("button",{className:"modal-close",onClick:()=>void u(),"aria-label":e("common.closeAriaLabel","Close"),children:"×"})]}),E.length>0&&n.jsx(V,{entries:E}),m==="initial"&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-intent",children:b?e("agents.onboarding.intentLabelEdit","What should this agent change or improve?"):e("agents.onboarding.intentLabelCreate","What should this new agent own?")}),n.jsx("textarea",{id:"agent-onboarding-intent",className:"input experimental-agent-onboarding-modal__textarea",value:f,onChange:a=>S(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:!f.trim(),onClick:()=>void q(),children:b?e("agents.onboarding.startInterview","Start interview"):e("agents.onboarding.startOnboarding","Start onboarding")})]})]}),(m==="loading"||m==="question")&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-answer",children:C||e("agents.onboarding.thinking","Thinking...")}),n.jsx("textarea",{id:"agent-onboarding-answer",className:"input experimental-agent-onboarding-modal__textarea",value:v,onChange:a=>p(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:m==="loading"||!v.trim(),onClick:()=>void Q(),children:e("agents.onboarding.continue","Continue")})]})]}),m==="summary"&&t&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{children:b?e("agents.onboarding.updatedDraftReady","Updated draft ready for review"):e("agents.onboarding.draftReady","Draft ready for review")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-intro",children:e("agents.onboarding.draftIntro","Review this generated draft. Nothing is applied until you confirm.")}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary card",children:[n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionIdentity","Identity")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldName","Name")}),n.jsx("dd",{children:r(t.name)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRole","Role")}),n.jsx("dd",{children:r(t.role)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTitle","Title")}),n.jsx("dd",{children:r(t.title)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldIcon","Icon")}),n.jsx("dd",{children:r(t.icon)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldReportsTo","Reports To")}),n.jsx("dd",{children:r(t.reportsTo)})]})]})]}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionConfiguration","Configuration")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldInlineInstructions","Inline Instructions")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.instructionsText)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSoul","Soul")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.soul)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldAgentMemory","Agent Memory")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.memory)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSkills","Skills")}),n.jsx("dd",{children:r(t.skills?.join(", "))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldThinkingLevel","Thinking Level")}),n.jsx("dd",{children:r(t.thinkingLevel)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldMaxTurns","Max Turns")}),n.jsx("dd",{children:r(t.maxTurns)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTemplate","Template")}),n.jsx("dd",{children:r(t.templateId)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldPatternAgent","Pattern Agent")}),n.jsx("dd",{children:r(t.patternAgentId)})]})]})]}),(t.heartbeatProcedurePath||t.heartbeatIntervalMs||t.heartbeatEnabled!==void 0||t.modelHint||t.runtimeHint)&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRuntimeHints","Runtime Hints")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatPath","Heartbeat Procedure Path")}),n.jsx("dd",{children:r(t.heartbeatProcedurePath)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatInterval","Heartbeat Interval")}),n.jsx("dd",{children:r(t.heartbeatIntervalMs?`${t.heartbeatIntervalMs}ms`:void 0)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatEnabled","Heartbeat Enabled")}),n.jsx("dd",{children:r(t.heartbeatEnabled===void 0?void 0:t.heartbeatEnabled?e("agents.onboarding.yes","yes"):e("agents.onboarding.no","no"))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldModelHint","Model Hint")}),n.jsx("dd",{children:r(t.modelHint)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRuntimeHint","Runtime Hint")}),n.jsx("dd",{children:r(t.runtimeHint)})]})]})]}),t.rationale&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRationale","Rationale")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-block",children:t.rationale})]})]}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",onClick:()=>void O(),children:b?e("agents.onboarding.applyDraftSettings","Apply draft to settings form"):e("agents.onboarding.applyDraftAgent","Apply draft to agent form")})]})]}),m==="error"&&H&&n.jsxs("div",{className:"form-group",children:[n.jsx("div",{className:"form-error",children:H}),n.jsx("div",{className:"modal-actions",children:n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.close","Close")})})]})]})})}export{en as ExperimentalAgentOnboardingModal};
1
+ import{r as s,j as n}from"./vendor-react-SZ_qB27O.js";import{y as $,z as G,B as V,D as W,F as z,G as B}from"./index-Cg9ahVtV.js";import{u as U}from"./vendor-i18n-GF3RlKbq.js";import"./vendor-codemirror-jBKmHyH0.js";import"./vendor-reactflow-9C3XTE7_.js";import"./vendor-xterm-BNq00GSj.js";function en({isOpen:l,onClose:R,onUseDraft:M,projectId:x,existingAgents:P,mode:_="create",existingAgentConfig:L}){const{t:e}=U("app"),[m,d]=s.useState("initial"),[f,S]=s.useState(""),[c,k]=s.useState(null),[C,I]=s.useState(""),[w,A]=s.useState("answer"),[v,p]=s.useState(""),[t,T]=s.useState(null),[H,g]=s.useState(null),[E,y]=s.useState([]),b=_==="edit",o=s.useRef(l),N=s.useCallback(()=>{d("initial"),S(""),k(null),I(""),A("answer"),p(""),T(null),g(null),y([])},[]),D=s.useMemo(()=>$.map(a=>({id:a.id,label:a.name,description:a.description})),[]);s.useEffect(()=>{if(o.current=l,!c)return;const a=G(c,x,{onThinking:i=>{o.current&&y(F=>{const h=[...F],j=h[h.length-1];return j&&!j.question?(h[h.length-1]={...j,thinkingOutput:`${j.thinkingOutput??""}${i}`},h):[...h,{response:{},thinkingOutput:i}]})},onQuestion:i=>{o.current&&(I(i.question),A(i.id),d("question"))},onSummary:i=>{o.current&&(T(i),d("summary"))},onError:i=>{o.current&&(g(i),d("error"))}});return()=>{o.current=!1,a.close()}},[l,c,x]);const u=async()=>{o.current=!1;try{c&&await W(c,x)}catch{}finally{N(),R()}};if(s.useEffect(()=>{o.current=l,l||N()},[l,N]),!l)return null;const r=a=>a==null||a===""?n.jsx("em",{className:"experimental-agent-onboarding-modal__summary-empty",children:e("agents.onboarding.notSet","Not set")}):n.jsx("span",{children:a}),q=async()=>{d("loading"),g(null);try{const a=await z(f,{mode:_,existingAgentConfig:L,existingAgents:P.map(i=>({id:i.id,name:i.name,role:i.role})),templates:D},x);if(!o.current)return;k(a.sessionId)}catch(a){if(!o.current)return;g(a.message),d("error")}},Q=async()=>{if(c){d("loading"),g(null);try{const a={[w]:v};if(y(i=>[...i,{question:{id:w,type:"text",question:C},response:a}]),await B(c,a,x),!o.current)return;p("")}catch(a){if(!o.current)return;g(a.message),d("error")}}},O=async()=>{t&&(M(t),await u())};return n.jsx("div",{className:"modal-overlay open",role:"presentation",children:n.jsxs("div",{className:"modal modal-lg experimental-agent-onboarding-modal",role:"dialog","aria-modal":"true","aria-label":e("agents.onboarding.dialogLabel","AI Interview"),children:[n.jsxs("div",{className:"modal-header",children:[n.jsx("h3",{children:e("agents.onboarding.title","AI Interview")}),n.jsx("button",{className:"modal-close",onClick:()=>void u(),"aria-label":e("common.closeAriaLabel","Close"),children:"×"})]}),E.length>0&&n.jsx(V,{entries:E}),m==="initial"&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-intent",children:b?e("agents.onboarding.intentLabelEdit","What should this agent change or improve?"):e("agents.onboarding.intentLabelCreate","What should this new agent own?")}),n.jsx("textarea",{id:"agent-onboarding-intent",className:"input experimental-agent-onboarding-modal__textarea",value:f,onChange:a=>S(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:!f.trim(),onClick:()=>void q(),children:b?e("agents.onboarding.startInterview","Start interview"):e("agents.onboarding.startOnboarding","Start onboarding")})]})]}),(m==="loading"||m==="question")&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{htmlFor:"agent-onboarding-answer",children:C||e("agents.onboarding.thinking","Thinking...")}),n.jsx("textarea",{id:"agent-onboarding-answer",className:"input experimental-agent-onboarding-modal__textarea",value:v,onChange:a=>p(a.target.value)}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",disabled:m==="loading"||!v.trim(),onClick:()=>void Q(),children:e("agents.onboarding.continue","Continue")})]})]}),m==="summary"&&t&&n.jsxs("div",{className:"form-group",children:[n.jsx("label",{children:b?e("agents.onboarding.updatedDraftReady","Updated draft ready for review"):e("agents.onboarding.draftReady","Draft ready for review")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-intro",children:e("agents.onboarding.draftIntro","Review this generated draft. Nothing is applied until you confirm.")}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary card",children:[n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionIdentity","Identity")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldName","Name")}),n.jsx("dd",{children:r(t.name)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRole","Role")}),n.jsx("dd",{children:r(t.role)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTitle","Title")}),n.jsx("dd",{children:r(t.title)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldIcon","Icon")}),n.jsx("dd",{children:r(t.icon)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldReportsTo","Reports To")}),n.jsx("dd",{children:r(t.reportsTo)})]})]})]}),n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionConfiguration","Configuration")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldInlineInstructions","Inline Instructions")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.instructionsText)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSoul","Soul")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.soul)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldAgentMemory","Agent Memory")}),n.jsx("dd",{className:"experimental-agent-onboarding-modal__summary-block",children:r(t.memory)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldSkills","Skills")}),n.jsx("dd",{children:r(t.skills?.join(", "))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldThinkingLevel","Thinking Level")}),n.jsx("dd",{children:r(t.thinkingLevel)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldMaxTurns","Max Turns")}),n.jsx("dd",{children:r(t.maxTurns)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldTemplate","Template")}),n.jsx("dd",{children:r(t.templateId)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldPatternAgent","Pattern Agent")}),n.jsx("dd",{children:r(t.patternAgentId)})]})]})]}),(t.heartbeatProcedurePath||t.heartbeatIntervalMs||t.heartbeatEnabled!==void 0||t.modelHint||t.runtimeHint)&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRuntimeHints","Runtime Hints")}),n.jsxs("dl",{className:"experimental-agent-onboarding-modal__summary-list",children:[n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatPath","Heartbeat Procedure Path")}),n.jsx("dd",{children:r(t.heartbeatProcedurePath)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatInterval","Heartbeat Interval")}),n.jsx("dd",{children:r(t.heartbeatIntervalMs?`${t.heartbeatIntervalMs}ms`:void 0)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldHeartbeatEnabled","Heartbeat Enabled")}),n.jsx("dd",{children:r(t.heartbeatEnabled===void 0?void 0:t.heartbeatEnabled?e("agents.onboarding.yes","yes"):e("agents.onboarding.no","no"))})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldModelHint","Model Hint")}),n.jsx("dd",{children:r(t.modelHint)})]}),n.jsxs("div",{children:[n.jsx("dt",{children:e("agents.onboarding.fieldRuntimeHint","Runtime Hint")}),n.jsx("dd",{children:r(t.runtimeHint)})]})]})]}),t.rationale&&n.jsxs("div",{className:"experimental-agent-onboarding-modal__summary-section",children:[n.jsx("h4",{children:e("agents.onboarding.sectionRationale","Rationale")}),n.jsx("p",{className:"experimental-agent-onboarding-modal__summary-block",children:t.rationale})]})]}),n.jsxs("div",{className:"modal-actions",children:[n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.cancel","Cancel")}),n.jsx("button",{className:"btn btn-primary",onClick:()=>void O(),children:b?e("agents.onboarding.applyDraftSettings","Apply draft to settings form"):e("agents.onboarding.applyDraftAgent","Apply draft to agent form")})]})]}),m==="error"&&H&&n.jsxs("div",{className:"form-group",children:[n.jsx("div",{className:"form-error",children:H}),n.jsx("div",{className:"modal-actions",children:n.jsx("button",{className:"btn",onClick:()=>void u(),children:e("common.close","Close")})})]})]})})}export{en as ExperimentalAgentOnboardingModal};