@runfusion/fusion 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/bin.js +7431 -2240
- package/dist/client/.vite/manifest.json +1118 -331
- package/dist/client/assets/AgentDetailView-CgbB51Iw.css +1 -0
- package/dist/client/assets/AgentDetailView-D1cA9Bfj.js +18 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor--YS4iMUY.js → AgentPermissionPolicyEditor-DE0wv8-L.js} +2 -2
- package/dist/client/assets/AgentsView-Bm_FA_1w.js +29 -0
- package/dist/client/assets/AgentsView-CzMa5Olf.css +1 -0
- package/dist/client/assets/ChatView-BtjkE0V7.css +1 -0
- package/dist/client/assets/ChatView-CHEkov6q.js +19 -0
- package/dist/client/assets/CommandCenter-Cfgek-dC.js +71 -0
- package/dist/client/assets/CommandCenter-DDjpYkPe.css +1 -0
- package/dist/client/assets/DevServerView-DgDksVH2.css +1 -0
- package/dist/client/assets/DevServerView-_or2KLVw.js +1 -0
- package/dist/client/assets/DirectoryPicker-etVwa-6X.js +1 -0
- package/dist/client/assets/DocumentsView-e8ZTdPIZ.js +1 -0
- package/dist/client/assets/EvalsView-CTbgPUne.css +1 -0
- package/dist/client/assets/EvalsView-CjDRQFMQ.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-3ZEFv8sr.css +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-DXR0OAsR.js +1 -0
- package/dist/client/assets/GoalsView-CUh8JBnJ.css +1 -0
- package/dist/client/assets/GoalsView-WWDKVslN.js +2 -0
- package/dist/client/assets/InsightsView-C7yRTMPn.css +1 -0
- package/dist/client/assets/InsightsView-DxIfxOzx.js +11 -0
- package/dist/client/assets/MemoryView-BVW2hkWf.js +2 -0
- package/dist/client/assets/MemoryView-CBDUr2Jy.css +1 -0
- package/dist/client/assets/PiExtensionsManager-CpSfMok2.js +11 -0
- package/dist/client/assets/PluginManager-CpBCy656.js +1 -0
- package/dist/client/assets/PullRequestView-BMspX1ga.js +6 -0
- package/dist/client/assets/PullRequestView-CpdE3Yo_.css +1 -0
- package/dist/client/assets/ResearchView--YEtcv_s.js +1 -0
- package/dist/client/assets/ResearchView-DIVNQF4_.css +1 -0
- package/dist/client/assets/SecretsView-CC6QDMWN.js +1 -0
- package/dist/client/assets/SecretsView-CvFioX7R.css +1 -0
- package/dist/client/assets/SessionTerminal-D4R3ScvQ.css +1 -0
- package/dist/client/assets/SessionTerminal-DJGtgIls.js +2 -0
- package/dist/client/assets/SettingsModal-4d_p8D7W.js +1 -0
- package/dist/client/assets/SettingsModal-BESN59Ao.css +1 -0
- package/dist/client/assets/SettingsModal-ino68pI2.css +1 -0
- package/dist/client/assets/SettingsModal-wABa7xmZ.js +21 -0
- package/dist/client/assets/SetupWizardModal-DHe2tXzx.js +2 -0
- package/dist/client/assets/ShadcnColorPicker-HX3j1v66.js +11 -0
- package/dist/client/assets/ShadcnColorPicker-pqVWCC5-.css +1 -0
- package/dist/client/assets/SkillsView-CJ8snrma.css +1 -0
- package/dist/client/assets/SkillsView-mdFVTX-r.js +1 -0
- package/dist/client/assets/TodoView-CIsL_uvQ.css +1 -0
- package/dist/client/assets/TodoView-DQVugDpW.js +6 -0
- package/dist/client/assets/WorkflowNodeEditor-CeERQHHu.js +8 -0
- package/dist/client/assets/WorkflowNodeEditor-f_XPV5Jd.css +1 -0
- package/dist/client/assets/{addon-fit-SnYDEvGm.js → addon-fit-C1WQXRvu.js} +1 -1
- package/dist/client/assets/{addon-unicode11-s5GoZCpi.js → addon-unicode11-BVmNDUBM.js} +1 -1
- package/dist/client/assets/{addon-web-links-jjt2f_oV.js → addon-web-links-CkVew5xs.js} +1 -1
- package/dist/client/assets/{addon-webgl-Icn-RnEx.js → addon-webgl-uLc0RKcC.js} +1 -1
- package/dist/client/assets/agentSkills-C2v1wbxh.js +1 -0
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-CZ_jbgep.css → agentSkills-bQJ4X1gH.css} +1 -1
- package/dist/client/assets/agentsOrgChartLayout-BMvyuaLA.js +1 -0
- package/dist/client/assets/app-BJGkp7Tt.js +13 -0
- package/dist/client/assets/app-BKLUvvm8.js +13 -0
- package/dist/client/assets/app-BaoNC9zg.js +13 -0
- package/dist/client/assets/app-CZQ_fFNf.js +13 -0
- package/dist/client/assets/app-DAu3AzsS.js +13 -0
- package/dist/client/assets/app-DgezOJub.js +13 -0
- package/dist/client/assets/arc-cxkkNsnK.js +1 -0
- package/dist/client/assets/architectureDiagram-3BPJPVTR-CGEhhgX_.js +36 -0
- package/dist/client/assets/band-CquvqAHh.js +1 -0
- package/dist/client/assets/blockDiagram-GPEHLZMM-D0DTo0HT.js +132 -0
- package/dist/client/assets/c4Diagram-AAUBKEIU-DNykNaRb.js +10 -0
- package/dist/client/assets/channel-Dwf1FoGU.js +1 -0
- package/dist/client/assets/chunk-2J33WTMH-5oQfAhmr.js +1 -0
- package/dist/client/assets/chunk-4BX2VUAB-BqLZXgFw.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-C1oIjX3T.js +1 -0
- package/dist/client/assets/chunk-727SXJPM-BaovQTgk.js +206 -0
- package/dist/client/assets/chunk-AQP2D5EJ-B4ikBK42.js +231 -0
- package/dist/client/assets/chunk-FMBD7UC4-5zgtNnG2.js +15 -0
- package/dist/client/assets/chunk-ND2GUHAM-ByrypRna.js +1 -0
- package/dist/client/assets/chunk-QZHKN3VN-B7D1exsu.js +1 -0
- package/dist/client/assets/classDiagram-4FO5ZUOK-WqSUwcK_.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-WqSUwcK_.js +1 -0
- package/dist/client/assets/common-BDp2y6CF.js +1 -0
- package/dist/client/assets/common-BnEo5fLN.js +1 -0
- package/dist/client/assets/common-Bzr_Y8h4.js +1 -0
- package/dist/client/assets/common-CvwyFzfv.js +1 -0
- package/dist/client/assets/common-CztCXRkz.js +1 -0
- package/dist/client/assets/common-DPe2mbb7.js +1 -0
- package/dist/client/assets/cose-bilkent-S5V4N54A-CQmiNzGr.js +1 -0
- package/dist/client/assets/cytoscape.esm-OyMbaexL.js +331 -0
- package/dist/client/assets/dagre-BM42HDAG-BH8Uk0Up.js +4 -0
- package/dist/client/assets/{dashboard-view-B4LXCv5H.js → dashboard-view-CWJ-b59n.js} +1680 -1620
- package/dist/client/assets/dashboard-view-D3PWY2PH.js +1 -0
- package/dist/client/assets/dashboard-view-D_zsA-kz.css +1 -0
- package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/client/assets/diagram-2AECGRRQ-CDoHfkxY.js +43 -0
- package/dist/client/assets/diagram-5GNKFQAL-DARILCuD.js +10 -0
- package/dist/client/assets/diagram-KO2AKTUF-CNP-qi0y.js +3 -0
- package/dist/client/assets/diagram-LMA3HP47-SCiVmkcf.js +24 -0
- package/dist/client/assets/diagram-OG6HWLK6-iTJLXH61.js +24 -0
- package/dist/client/assets/erDiagram-TEJ5UH35-ByMpiPIa.js +85 -0
- package/dist/client/assets/flowDiagram-I6XJVG4X-DW3m3ZpM.js +162 -0
- package/dist/client/assets/{folder-open-33WGVnbp.js → folder-open-G-9vPAdv.js} +1 -1
- package/dist/client/assets/ganttDiagram-6RSMTGT7-BJeYH7Ol.js +292 -0
- package/dist/client/assets/gitGraphDiagram-PVQCEYII-CK_Chj4m.js +106 -0
- package/dist/client/assets/graph--OzhPTMs.js +1 -0
- package/dist/client/assets/index-BZBQ_KsL.css +1 -0
- package/dist/client/assets/index-ccFe_1av.js +1459 -0
- package/dist/client/assets/infoDiagram-5YYISTIA-D8Wg1IgN.js +2 -0
- package/dist/client/assets/init-Dmth1JHB.js +1 -0
- package/dist/client/assets/ishikawaDiagram-YF4QCWOH-DWROR2aX.js +70 -0
- package/dist/client/assets/journeyDiagram-JHISSGLW-Bns9774_.js +139 -0
- package/dist/client/assets/kanban-definition-UN3LZRKU-QtURfAoI.js +89 -0
- package/dist/client/assets/katex-HP8lGamR.js +257 -0
- package/dist/client/assets/layout-SsrduOYp.js +1 -0
- package/dist/client/assets/linear-dXivciGL.js +1 -0
- package/dist/client/assets/mermaid.core-DqgrgWWm.js +309 -0
- package/dist/client/assets/mindmap-definition-RKZ34NQL-jLaDb5_X.js +96 -0
- package/dist/client/assets/ordinal-DILIJJjt.js +1 -0
- package/dist/client/assets/pieDiagram-4H26LBE5-CjbHuIje.js +30 -0
- package/dist/client/assets/quadrantDiagram-W4KKPZXB-xgHbylQr.js +7 -0
- package/dist/client/assets/requirementDiagram-4Y6WPE33-CHdD7W41.js +84 -0
- package/dist/client/assets/sankeyDiagram-5OEKKPKP-C3me87g9.js +40 -0
- package/dist/client/assets/sequenceDiagram-3UESZ5HK-DSHfs1kU.js +162 -0
- package/dist/client/assets/{shield-alert-CqeGWBUK.js → shield-alert-DkGlhVjI.js} +1 -1
- package/dist/client/assets/stateDiagram-AJRCARHV-C08n7sMP.js +1 -0
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BosoAbfO.js +1 -0
- package/dist/client/assets/step-yuy0qJer.js +1 -0
- package/dist/client/assets/time-DoDTxsna.js +1 -0
- package/dist/client/assets/timeline-definition-PNZ67QCA-C21h9Zqh.js +120 -0
- package/dist/client/assets/{upload-C11J2diI.js → upload-B9B-tYt9.js} +1 -1
- package/dist/client/assets/{users-a-ELbyyZ.js → users-C_BA3C7E.js} +1 -1
- package/dist/client/assets/{vendor-i18n-DYlSUfot.js → vendor-i18n-GF3RlKbq.js} +2 -2
- package/dist/client/assets/{vendor-react-BTgM5bbZ.js → vendor-react-SZ_qB27O.js} +1 -1
- package/dist/client/assets/vendor-reactflow-Bg-Qjzh8.js +15 -0
- package/dist/client/assets/{vendor-xterm-ea7-K05z.js → vendor-xterm-BNq00GSj.js} +1 -1
- package/dist/client/assets/vennDiagram-CIIHVFJN-Bv3G0dwI.js +34 -0
- package/dist/client/assets/wardley-L42UT6IY-WX0hHKcN.js +173 -0
- package/dist/client/assets/wardleyDiagram-YWT4CUSO-CMwIPWm7.js +78 -0
- package/dist/client/assets/xychartDiagram-2RQKCTM6-CZvFdt6j.js +7 -0
- package/dist/client/assets/zoom-out-NWbVkreR.js +41 -0
- package/dist/client/index.html +30 -10
- package/dist/client/sw.js +1 -1
- package/dist/client/theme-data.css +3082 -206
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/index.ts +56 -40
- package/dist/droid-cli/package.json +1 -1
- package/dist/droid-cli/src/__tests__/index.test.ts +47 -21
- package/dist/droid-cli/src/__tests__/process-manager.test.ts +50 -33
- package/dist/extension.js +5405 -919
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +25 -0
- package/dist/pi-claude-cli/src/process-manager.ts +11 -1
- package/dist/plugin-sdk/index.d.ts +137 -4
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +68 -44
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +5 -11
- package/dist/plugins/fusion-plugin-roadmap/manifest.json +1 -11
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +3 -3
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/cli-commands.md +2 -1
- package/skill/fusion/references/extension-tools.md +10 -0
- package/skill/fusion/references/fusion-capabilities.md +3 -1
- package/dist/client/assets/AgentDetailView-CanIeYHg.css +0 -1
- package/dist/client/assets/AgentDetailView-DxV8pFHX.js +0 -18
- package/dist/client/assets/AgentsView-BVILQjdS.css +0 -1
- package/dist/client/assets/AgentsView-CTzbcvhK.js +0 -29
- package/dist/client/assets/ChatView-COygcnyk.js +0 -6
- package/dist/client/assets/ChatView-DwJAd5G1.css +0 -1
- package/dist/client/assets/CommandCenter-CTaopaC0.css +0 -1
- package/dist/client/assets/CommandCenter-DoKX2HWm.js +0 -56
- package/dist/client/assets/DevServerView-Cyevyvqx.js +0 -1
- package/dist/client/assets/DevServerView-VTQY28P7.css +0 -1
- package/dist/client/assets/DirectoryPicker-DBdyXEhR.js +0 -1
- package/dist/client/assets/DocumentsView-BzSMyrns.js +0 -1
- package/dist/client/assets/DocumentsView-WfVoTZt8.css +0 -1
- package/dist/client/assets/EvalsView-CUNJ1TLc.css +0 -1
- package/dist/client/assets/EvalsView-ikz00o9g.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-D-rzCCET.js +0 -499
- package/dist/client/assets/GoalsView-Bfu1Oy2-.js +0 -2
- package/dist/client/assets/GoalsView-rg9VSIza.css +0 -1
- package/dist/client/assets/InsightsView-Cgmf5nES.js +0 -11
- package/dist/client/assets/InsightsView-LMv1M1dU.css +0 -1
- package/dist/client/assets/MemoryView-DkEuDKQs.js +0 -2
- package/dist/client/assets/MemoryView-zaXewZzi.css +0 -1
- package/dist/client/assets/NodesView-7VInxyf_.css +0 -1
- package/dist/client/assets/NodesView-B_KYfS4o.js +0 -14
- package/dist/client/assets/PiExtensionsManager-Dz69kkKs.js +0 -11
- package/dist/client/assets/PluginManager-LHCVcduP.js +0 -1
- package/dist/client/assets/PullRequestView-3AdbS2a1.css +0 -1
- package/dist/client/assets/PullRequestView-DBJutLLl.js +0 -6
- package/dist/client/assets/ResearchView-DTh8FLUm.css +0 -1
- package/dist/client/assets/ResearchView-gpn1XcVy.js +0 -1
- package/dist/client/assets/SecretsView-B7YqIowt.js +0 -1
- package/dist/client/assets/SecretsView-Djo1rahi.css +0 -1
- package/dist/client/assets/SessionTerminal-9l4bdKcn.js +0 -2
- package/dist/client/assets/SessionTerminal-BNgtmXb3.css +0 -1
- package/dist/client/assets/SettingsModal-BGEK9_9A.js +0 -31
- package/dist/client/assets/SettingsModal-CKv0TJfM.css +0 -1
- package/dist/client/assets/SettingsModal-CXogw-Er.css +0 -1
- package/dist/client/assets/SettingsModal-DIIoHGUH.js +0 -1
- package/dist/client/assets/SetupWizardModal-BcVeMxeX.js +0 -1
- package/dist/client/assets/SetupWizardModal-CIqFbkrD.css +0 -1
- package/dist/client/assets/SkillsView-3bhGyWs1.css +0 -1
- package/dist/client/assets/SkillsView-BxSJ4PHL.js +0 -1
- package/dist/client/assets/StashRecoveryView-B_8WIQEo.css +0 -1
- package/dist/client/assets/StashRecoveryView-BhFQ2FsP.js +0 -1
- package/dist/client/assets/TodoView-7xIh-Fmi.css +0 -1
- package/dist/client/assets/TodoView-BZpewjy0.js +0 -6
- package/dist/client/assets/WorkflowNodeEditor-Yn1FRF2v.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-tWsgCdVt.js +0 -8
- package/dist/client/assets/app-BmGA0Hiz.js +0 -13
- package/dist/client/assets/app-CEVYlVuJ.js +0 -13
- package/dist/client/assets/app-CbBFax2C.js +0 -13
- package/dist/client/assets/app-DORKrGAz.js +0 -13
- package/dist/client/assets/app-DQibuQ9z.js +0 -13
- package/dist/client/assets/app-k76GrQP0.js +0 -13
- package/dist/client/assets/common-BRyX4VxB.js +0 -1
- package/dist/client/assets/common-CN9QPI2d.js +0 -1
- package/dist/client/assets/common-CNbjPELi.js +0 -1
- package/dist/client/assets/common-DFDqu_n0.js +0 -1
- package/dist/client/assets/common-DgWWKG8Z.js +0 -1
- package/dist/client/assets/common-X6PzBnVA.js +0 -1
- package/dist/client/assets/createLucideIcon-DmVITl5d.js +0 -21
- package/dist/client/assets/dashboard-view-BFoyhTYF.js +0 -3
- package/dist/client/assets/dashboard-view-Cxzm_eqc.js +0 -1
- package/dist/client/assets/dashboard-view-DdGlfuu-.css +0 -1
- package/dist/client/assets/dashboard-view-_8yfNwju.css +0 -1
- package/dist/client/assets/index-Bglw05rM.js +0 -791
- package/dist/client/assets/index-FYgnflWD.css +0 -1
- package/dist/client/assets/vendor-reactflow-ZasuEfF9.js +0 -15
- package/dist/client/assets/x-PItWc-wQ.js +0 -61
- package/dist/client/assets/zoom-out-CzlHv0Kj.js +0 -21
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as t,j as r}from"./vendor-react-BTgM5bbZ.js";import{co as Pe,cp as pe,cq as sr,cr as he,s as Te,cs as Ne,ct as ke,cu as Ce,cv as je,cw as nr,cx as ce,cy as ar,cz as ir,cA as lr,cB as or,cC as cr,aI as Y,cD as de,L as se,S as dr,M as vr,cE as ur,bS as mr,a as fr,T as ze,cF as pr,Q as hr,b3 as gr,b4 as br,ah as wr,aD as xr,R as yr}from"./index-Bglw05rM.js";import{u as ne}from"./vendor-i18n-DYlSUfot.js";import{S as Fe}from"./shield-alert-CqeGWBUK.js";import"./vendor-reactflow-ZasuEfF9.js";import"./vendor-xterm-ea7-K05z.js";import"./vendor-codemirror-jBKmHyH0.js";const ge=500,Sr=3e3;function W(e){return e instanceof Error?e.message:String(e)}function Oe(e){return e.length<=ge?e:e.slice(-ge)}function ve(e,o){return Oe([...e,o])}function Q(e){try{return JSON.parse(e)}catch{return null}}function ee(e){const o=e.text??"";return e.stream==="stderr"?`[stderr] ${o}`:o}function Nr(e){return e?.previewUrl??null}async function Ee(e){return ar(e)}async function Le(e,o){return ir(e,o)}async function kr(e){return lr(e)}async function Cr(e){return or(e)}async function Re(e){return cr(e)}function q(e){try{return e()}catch{return null}}function ue(){return typeof q(()=>pe)=="function"&&typeof q(()=>Pe)=="function"}function X(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(o=>({timestamp:new Date().toISOString(),stream:o.startsWith("[stderr]")?"stderr":"stdout",text:o.replace(/^\[stderr\]\s*/,"")}))}}function jr(e){const{t:o}=ne("app"),[s,f]=t.useState(null),[b,g]=t.useState([]),[x,d]=t.useState([]),[E,S]=t.useState([]),[z,N]=t.useState(!0),[y,u]=t.useState(null),i=t.useRef(0),[m,M]=t.useState(null),A=t.useCallback(n=>{if(f(n),n?.logHistory){const a=n.logHistory.slice(-ge).map(ee);d(a)}},[]),L=t.useCallback(async()=>{const n=i.current;try{if(ue())if(m){const a=await Pe(m,e);if(i.current!==n)return;A(a)}else{const a=await pe(e);if(i.current!==n)return;g(a),a.length>0&&(M(a[0].config.id),A(a[0]))}else{const a=await Ee(e);if(i.current!==n)return;const v=X(a);g([v]),A(v)}u(null)}catch(a){if(i.current!==n)return;u(W(a))}},[A,e,m]);t.useEffect(()=>{i.current+=1;const n=i.current;f(null),g([]),d([]),S([]),N(!0),u(null),M(null),(async()=>{try{const[v,c]=await Promise.allSettled([ue()?pe(e):Ee(e).then(C=>[X(C)]),typeof q(()=>ce)=="function"?ce(e):Re(e).then(C=>C.map(R=>({name:R.name,command:R.command,cwd:R.cwd,scriptName:R.scriptName,packagePath:R.packagePath})))]);if(i.current!==n)return;let h=null;if(v.status==="fulfilled"){const C=v.value;if(g(C),C.length>0){const R=C[0];ue()&&M(R.config.id),A(R)}}else h=W(v.reason);c.status==="fulfilled"&&S(c.value),h&&u(h)}catch(v){if(i.current!==n)return;u(W(v))}finally{i.current===n&&N(!1)}})()},[A,e]),t.useEffect(()=>{const n=m?sr(m,e):typeof q(()=>he)=="function"?he(e):null;if(!n)return;const a=i.current,v=Te(n,{events:{history:c=>{if(i.current!==a)return;const h=Q(c.data);if(h?.lines){const C=h.lines.map(ee);d(Oe(C))}},log:c=>{if(i.current!==a)return;const h=Q(c.data);if(h){const C=typeof h.line=="string"?h.line:ee(h);d(R=>ve(R,C))}},"dev-server:log":c=>{if(i.current!==a)return;const h=Q(c.data);if(h){const C=typeof h.line=="string"?h.line:ee(h);d(R=>ve(R,C))}},"dev-server:output":c=>{if(i.current!==a)return;const h=Q(c.data);h?.line&&d(C=>ve(C,h.line))},status:c=>{if(i.current!==a)return;const h=Q(c.data),C=h?.status;C&&f(R=>R&&{...R,status:C,runtime:h.pid?{...R.runtime??{startedAt:new Date().toISOString()},pid:h.pid}:R.runtime})},"dev-server:status":c=>{if(i.current!==a)return;const h=Q(c.data);if(h?.status){const C=X(h);f(C),g([C])}},stopped:()=>{i.current},failed:()=>{i.current}},onReconnect:()=>{i.current===a&&L()},onError:()=>{i.current===a&&u(c=>c??o("devserver.lostConnection","Lost log stream connection."))}});return()=>{v()}},[e,L,m]),t.useEffect(()=>{if(s?.status!=="running"&&s?.status!=="starting")return;const n=setInterval(()=>{L()},Sr);return()=>{clearInterval(n)}},[L,s?.status]);const _=t.useCallback(async(n,a)=>{i.current+=1;const v=i.current;try{let c;if(m&&typeof q(()=>Ne)=="function")c=await Ne(m,e);else{const h=await Le({command:n,cwd:a},e);c=X(h)}if(i.current!==v)return;f(c),u(null)}catch(c){if(i.current!==v)return;throw u(W(c)),c}},[e,m]),j=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;if(m&&typeof q(()=>ke)=="function")a=await ke(m,e);else{const v=await kr(e);a=X(v)}if(i.current!==n)return;f(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e,m]),B=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;if(m&&typeof q(()=>Ce)=="function")a=await Ce(m,e);else{const v=await Cr(e);a=X(v)}if(i.current!==n)return;f(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e,m]),P=t.useCallback(async n=>{i.current+=1;const a=i.current;try{let v;if(m&&typeof q(()=>je)=="function")v=await je(m,n,e);else{const c=await nr({url:n},e);v={url:c.manualUrl??c.previewUrl??c.detectedUrl??null,source:c.manualUrl?"manual":"auto"}}if(i.current!==a)return;f(c=>c?{...c,previewUrl:v.url??void 0}:null),u(null)}catch(v){if(i.current!==a)return;throw u(W(v)),v}},[e,m]),V=t.useCallback(async()=>{i.current+=1;const n=i.current;try{let a;try{a=await ce(e)}catch{a=(await Re(e)).map(c=>({name:c.name,command:c.command,cwd:c.cwd,scriptName:c.scriptName,packagePath:c.packagePath}))}if(i.current!==n)return;S(a),u(null)}catch(a){if(i.current!==n)return;throw u(W(a)),a}},[e]),l=t.useCallback(async(n,a)=>{if(typeof n!="string"&&!m)try{const h=n,C=await Le({command:h.command,cwd:h.cwd,scriptName:h.scriptName,packagePath:h.packagePath??h.cwd},e),R=X(C);f(R),g([R]),u(null);return}catch(h){throw u(W(h)),h}const v=typeof n=="string"?n:n.command,c=typeof n=="string"?a:n.cwd;await _(v,c)},[e,_,m]),D=t.useCallback(async()=>{await j()},[j]),U=t.useCallback(async()=>{await B()},[B]),F=t.useCallback(async n=>{await P(n)},[P]),O=t.useCallback(async()=>{await V()},[V]),$=t.useCallback(async()=>{await L()},[L]),k=Nr(s),w=s?{...s,pid:s.runtime?.pid}:null;return{session:s,sessions:b,logs:x,detectedCommands:E,previewUrl:k,isLoading:z,error:y,startServer:_,stopServer:j,restartServer:B,setPreviewUrl:P,detectCommands:V,refresh:L,candidates:E,serverState:w,loading:z,start:l,stop:D,restart:U,setManualUrl:F,detect:O,refreshStatus:$}}const De=500,_e=100;function $e(e){return e.length>De?e.slice(-De):e}function Be(e){return e==="stderr"?"stderr":"stdout"}function re(e){try{return JSON.parse(e.data)}catch{return null}}function te(e,o){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:o,text:typeof e.text=="string"?e.text:"",stream:Be(e.stream),timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function Er(e,o){return{id:o,text:e,stream:"stdout",timestamp:""}}function me(e,o){if(o.length===0)return e;const s=[...e],f=new Set(e.map(b=>b.id));for(const b of o)f.has(b.id)||(f.add(b.id),s.push(b));return s.sort((b,g)=>b.id-g.id),$e(s)}function Lr(e,o){const[s,f]=t.useState([]),[b,g]=t.useState(!1),[x,d]=t.useState(!1),[E,S]=t.useState(!1),[z,N]=t.useState(null),y=t.useRef(null),u=t.useRef(!1),i=t.useRef(0),m=t.useRef(0),M=t.useRef(e),A=t.useRef(o),L=t.useRef(0),_=t.useRef(1);(M.current!==e||A.current!==o)&&(M.current=e,A.current=o,i.current++,Y({view:"useDevServerLogs",trigger:"project-context-change",projectId:e,replayAttempted:!1,reason:"context-version-bumped"}),u.current=!0,L.current=0,_.current=1,f([]),g(!1),d(!1),S(!1),N(null),y.current&&(y.current(),y.current=null)),t.useEffect(()=>{if(!o){y.current&&(y.current(),y.current=null);return}const l=i.current,D=++m.current;u.current=!1,g(!0);const U=(k,w)=>{const n=$e(k);f(n),N(w),S(w!==null?w>n.length:!1);const a=n.length>0?n[n.length-1].id:0;L.current=a,_.current=a+1},F=k=>{if(u.current||i.current!==l||!k||typeof k!="object")return;const w=k.lines;if(!Array.isArray(w))return;if(w.length>0&&typeof w[0]=="string"){const a=w.filter(v=>typeof v=="string").map((v,c)=>Er(v,c+1));U(a,a.length);return}const n=w.filter(a=>!!a&&typeof a=="object").map((a,v)=>te(a,v+1));U(n,n.length)},O=k=>{if(u.current||i.current!==l)return;const w=typeof k.text=="string"?k.text:typeof k.line=="string"?k.line:null;if(!w)return;const n=_.current,a=typeof k.id=="number"&&Number.isFinite(k.id)?k.id:n,v={id:a,text:w,stream:Be(k.stream),timestamp:typeof k.timestamp=="string"?k.timestamp:""};L.current=Math.max(L.current,a),_.current=Math.max(_.current,a+1),f(c=>me(c,[v])),N(c=>c===null?c:Math.max(c+1,v.id))};async function $(){try{const w=await de({maxLines:_e},e);if(u.current||i.current!==l||m.current!==D)return;const n=w.lines.map((a,v)=>te(a,v+1));U(n,w.totalLines)}catch{if(u.current||i.current!==l||m.current!==D)return;U([],null)}finally{!u.current&&i.current===l&&m.current===D&&g(!1)}const k=he(e);y.current=Te(k,{events:{"dev-server:log":w=>{const n=re(w);n&&O(n)},log:w=>{const n=re(w);n&&O(n)},history:w=>{const n=re(w);F(n)},"dev-server:history":w=>{const n=re(w);F(n)}},onReconnect:()=>{Y({view:"useDevServerLogs",trigger:"sse-reconnect",projectId:e,replayAttempted:!0,replayFromEventId:L.current??null,sseChannel:k,reason:"history-replay"}),!(u.current||i.current!==l)&&de({lastEventId:L.current,maxLines:50},e).then(w=>{if(u.current||i.current!==l)return;const n=w.lines.map((a,v)=>te(a,_.current+v));if(n.length>0){const a=n[n.length-1].id;L.current=Math.max(L.current,a),_.current=Math.max(_.current,a+1)}f(a=>me(a,n)),N(w.totalLines)}).catch(()=>{})}}),Y({view:"useDevServerLogs",trigger:"sse-open",projectId:e,replayAttempted:!1,sseChannel:k})}return $(),()=>{u.current=!0,y.current&&(y.current(),y.current=null)}},[o,e]);const B=t.useCallback(async()=>{if(!o||x)return;const l=i.current,D=s.length;d(!0);try{const U=await de({maxLines:_e,offset:D},e);if(u.current||i.current!==l)return;const F=U.lines.map((O,$)=>te(O,$+1));f(O=>me(F,O)),S(U.totalLines>D+F.length),N(U.totalLines)}catch{}finally{d(!1)}},[o,s.length,x,e]),P=t.useCallback(()=>{f([])},[]),V=y.current!==null&&!b&&!u.current;return{entries:s,loading:b,loadingMore:x,hasMore:E,total:z,loadMore:B,clear:P,logs:s,isStreaming:V,clearLogs:P}}const Rr="This preview appears to block iframe embedding. Open it in a new tab instead.",Dr="The preview URL could not be loaded. Verify the server is running and the URL is correct.",_r="Preview is taking longer than expected and may block iframe embedding.";function Ur(e){return e==="blocked"?Rr:e==="error"?Dr:null}function Ar(e,o={}){const{loadTimeoutMs:s=1e4,detectionMethod:f=null}=o,b=t.useRef(null),g=t.useRef(null),[x,d]=t.useState("unknown"),[E,S]=t.useState(null),[z]=t.useState(f),N=t.useCallback(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),y=t.useCallback(j=>{d(j),S(Ur(j))},[]),u=t.useCallback(()=>{d("blocked"),S(_r)},[]);t.useEffect(()=>{if(N(),!e){d("unknown"),S(null);return}d("unknown"),S(null);let j=!1;return queueMicrotask(()=>{j||(d("loading"),S(null))}),()=>{j=!0,N()}},[N,e]),t.useEffect(()=>{if(x!=="loading"){N();return}const j=setTimeout(()=>{g.current=null,u()},s);return g.current=j,()=>{clearTimeout(j),g.current===j&&(g.current=null)}},[N,x,s,u]);const i=t.useCallback(()=>{const j=b.current;if(!j){y("embedded");return}try{if(j.contentWindow?.location?.href==="about:blank"&&j.src!=="about:blank"){y("blocked");return}}catch{}y("embedded")},[y]),m=t.useCallback(()=>{y("error")},[y]);t.useEffect(()=>{if(N(),!e){d("unknown"),S(null);return}d("unknown"),S(null)},[N]);const M=t.useCallback(()=>{N(),d("unknown"),S(null)},[N]),A=M,L=t.useMemo(()=>x==="embedded",[x]),_=t.useMemo(()=>x==="blocked"||x==="error",[x]);return{embedStatus:x,isEmbedded:L,isBlocked:_,blockReason:E,detectionMethod:z,iframeRef:b,resetEmbedStatus:M,setEmbedStatus:y,retry:A,embedContext:E,handleIframeLoad:i,handleIframeError:m}}const Mr=/\x1b\[[0-9;]*m/g;function be(e){return e.replace(Mr,"")}function Pr(e){if(!e)return"";const o=new Date(e);return Number.isNaN(o.getTime())?"":o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function Tr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zr(e){if(e.stream==="stderr")return"error";const o=be(e.text).toLowerCase();return/\b(warn|warning)\b/.test(o)?"warn":/\b(error|fatal)\b/.test(o)?"error":"info"}function Fr(e,o){if(!o)return e;const s=new RegExp(`(${Tr(o)})`,"ig"),f=e.split(s),b=o.toLowerCase();return r.jsx(r.Fragment,{children:f.map((g,x)=>g.toLowerCase()===b?r.jsx("mark",{children:g},`${g}-${x}`):r.jsx("span",{children:g},`${g}-${x}`))})}function Or({entries:e,loading:o,loadingMore:s,hasMore:f,total:b,onLoadMore:g,isRunning:x}){const{t:d}=ne("app"),E=t.useRef(null),S=t.useRef(e.length),z=t.useRef(x),[N,y]=t.useState(!1),[u,i]=t.useState(!1),[m,M]=t.useState(""),[A,L]=t.useState("all"),_=t.useMemo(()=>A==="all"?e:e.filter(l=>zr(l)===A),[e,A]),j=t.useMemo(()=>{const l=m.trim().toLowerCase();return l?_.filter(D=>be(D.text).toLowerCase().includes(l)):_},[_,m]),B=j.length,P=t.useCallback(()=>{const l=E.current;l&&(l.scrollTop=l.scrollHeight,i(!1))},[]);t.useEffect(()=>{const l=z.current,D=S.current,U=e.length>D;x&&(!l||!u&&U)&&P(),z.current=x,S.current=e.length},[e.length,x,u,P]);const V=t.useCallback(()=>{const l=E.current;if(!l)return;const U=l.scrollTop+l.clientHeight>=l.scrollHeight-50;i(!U)},[]);return t.useEffect(()=>{o||e.length===0||!u&&x&&P()},[e,x,u,o,P]),o&&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(se,{size:16,className:"devserver-log-viewer__spinner"}),r.jsx("span",{children:d("devserver.loadingLogs","Loading logs…")})]})}):r.jsxs("section",{className:`devserver-log-viewer${N?" 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:d("devserver.logs","Logs")}),r.jsxs("span",{className:"devserver-log-viewer__count","data-testid":"devserver-log-count",children:[b!==null?`${e.length}/${b}`:`${e.length}`," ",d("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:d("devserver.filterBySeverity","Filter logs by severity")}),r.jsxs("select",{id:"devserver-log-severity-filter",className:"select devserver-log-viewer__severity-select",value:A,onChange:l=>L(l.target.value),"data-testid":"devserver-log-severity-filter","aria-label":d("devserver.filterBySeverity","Filter logs by severity"),children:[r.jsx("option",{value:"all",children:d("devserver.allSeverities","All severities")}),r.jsx("option",{value:"info",children:d("devserver.info","Info")}),r.jsx("option",{value:"warn",children:d("devserver.warn","Warn")}),r.jsx("option",{value:"error",children:d("devserver.error","Error")})]})]}),r.jsxs("label",{className:"devserver-log-viewer__search",htmlFor:"devserver-log-search",children:[r.jsx("span",{className:"visually-hidden",children:d("devserver.searchLogs","Search logs")}),r.jsx(dr,{size:14}),r.jsx("input",{id:"devserver-log-search",className:"input devserver-log-viewer__search-input",type:"text",value:m,onChange:l=>M(l.target.value),placeholder:d("devserver.searchLogs","Search logs"),"data-testid":"devserver-log-search-input","aria-label":d("devserver.searchLogs","Search logs")})]}),m.trim().length>0&&r.jsx("span",{className:"devserver-log-viewer__matches","data-testid":"devserver-log-match-count",children:d("devserver.matchCount",{count:B,defaultValue_one:"{{count}} match",defaultValue_other:"{{count}} matches"})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",onClick:()=>y(l=>!l),"data-testid":"devserver-log-fullscreen-toggle","aria-label":N?d("devserver.exitFullscreen","Exit fullscreen logs"):d("devserver.enterFullscreen","Enter fullscreen logs"),children:N?r.jsx(vr,{size:14}):r.jsx(ur,{size:14})})]})]}),r.jsxs("div",{className:"devserver-log-viewer__body",children:[f&&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:g,disabled:s,"data-testid":"devserver-log-load-more-button",children:s?r.jsxs(r.Fragment,{children:[r.jsx(se,{size:14,className:"devserver-log-viewer__spinner"}),d("devserver.loadingOlderLogs","Loading older logs…")]}):d("devserver.loadOlderLogs","Load older logs")})}),r.jsxs("div",{ref:E,className:"devserver-log-viewer__content",onScroll:V,"data-testid":"devserver-log-content",children:[!o&&j.length===0&&r.jsx("p",{className:"devserver-log-viewer__empty","data-testid":"devserver-log-empty",children:e.length===0?d("devserver.noLogsYet","No logs yet. Start the dev server to see output."):_.length===0?d("devserver.noMatchesSeverity","No log lines match the selected severity."):d("devserver.noMatchesSearch","No log lines match your search.")}),j.map(l=>{const D=be(l.text),U=Pr(l.timestamp);return r.jsxs("div",{className:"devserver-log-line",children:[U&&r.jsx("span",{className:"devserver-log-timestamp","data-testid":"devserver-log-timestamp",children:U}),l.stream==="stderr"&&r.jsx("span",{className:"devserver-log-stream-badge","data-testid":"devserver-log-stderr-badge",children:d("devserver.errBadge","ERR")}),r.jsx("span",{className:"devserver-log-text",children:mr(Fr(D,m.trim()))})]},l.id)})]}),u&&x&&r.jsxs("button",{type:"button",className:"btn btn-sm devserver-log-viewer__new-logs-button",onClick:P,"data-testid":"devserver-log-jump-button",children:[r.jsx(fr,{size:14}),d("devserver.newLogs","New logs")]})]})]})}const $r="devserver-preview-iframe";function Br({url:e,embedStatus:o,onEmbedStatusChange:s,iframeRef:f,blockReason:b,onRetry:g,className:x=$r,embedContext:d}){const{t:E}=ne("app"),S=b??d??null,[z,N]=t.useState(0);t.useEffect(()=>{!e||o!=="unknown"||(N(m=>m+1),s("loading"))},[o,s,e]);const y=t.useCallback(()=>{const m=f.current;if(!m){s("embedded");return}try{if(m.contentWindow?.location?.href==="about:blank"&&m.src!=="about:blank"){s("blocked");return}}catch{}s("embedded")},[f,s]),u=t.useCallback(m=>{m.stopPropagation(),s("error")},[s]),i=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:f,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox",className:x,title:"Dev server preview",onLoad:y,onError:u,onErrorCapture:u,"data-testid":"devserver-preview-iframe"},`${e}-${z}`),o==="loading"&&r.jsxs("div",{className:"devserver-preview-overlay","data-testid":"devserver-preview-loading",children:[r.jsx(se,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:E("preview.loading","Loading preview...")})]}),o==="blocked"&&r.jsxs("div",{className:"devserver-preview-blocked-panel",role:"alert","data-testid":"devserver-preview-blocked-panel",children:[r.jsx(Fe,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}),r.jsxs("div",{children:[r.jsx("p",{className:"devserver-preview-blocked-title",children:E("preview.blockedTitle","Preview cannot be embedded")}),S&&r.jsx("p",{className:"devserver-preview-blocked-context",children:S})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:E("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:i,children:E("preview.openInNewTab","Open in new tab")}),g&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:g,children:E("actions.retry","Retry")})]})]}),o==="error"&&r.jsxs("div",{className:"devserver-preview-error-panel",role:"alert","data-testid":"devserver-preview-error-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:E("preview.errorTitle","Unable to load preview")}),S&&r.jsx("p",{className:"devserver-preview-blocked-context",children:S})]}),r.jsx("p",{className:"devserver-preview-blocked-description",children:E("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:i,children:E("preview.openInNewTab","Open in new tab")}),g&&r.jsx("button",{type:"button",className:"btn btn-sm",onClick:g,children:E("actions.retry","Retry")})]})]})]}):null}function Hr(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")}}}let fe=!1;function Ue(e){return e instanceof Error?e.message:String(e)}function He(e){return e==="."?"root":e}function Ae(e){return e?e==="root"?".":e:null}function Me(e,o,s){return!o||e.scriptName!==o?!1:s?He(e.cwd)===s:!0}function Vr(e){return e.cwd==="."?"root":e.cwd}function Wr(e){return e.length<=60?e:`${e.slice(0,60)}…`}function Kr({addToast:e,projectId:o}){const{t:s}=ne("app");t.useEffect(()=>(Y({view:"DevServerView",trigger:fe?"route-active":"remount",projectId:o,replayAttempted:!1}),fe=!1,()=>{fe=!0,Y({view:"DevServerView",trigger:"route-inactive",projectId:o,replayAttempted:!1})}),[o]);const{session:f,detectedCommands:b,previewUrl:g,isLoading:x,error:d,startServer:E,stopServer:S,restartServer:z,setPreviewUrl:N,detectCommands:y,refresh:u}=jr(o),i=f?.status??"stopped",m=i==="running"||i==="starting",M=Hr(s),A=M[i]??M.stopped,{entries:L,loading:_,loadingMore:j,hasMore:B,total:P,loadMore:V}=Lr(o,!!o),l=g,D=f?.config?.cwd??null,[U,F]=t.useState(!0),[O,$]=t.useState(""),[k,w]=t.useState(""),[n,a]=t.useState(null),[v,c]=t.useState(null),[h,C]=t.useState("embedded"),R=h==="embedded"?l:null,{embedStatus:H,setEmbedStatus:Ve,resetEmbedStatus:G,iframeRef:J,isEmbedded:We,isBlocked:ae,blockReason:ie,retry:we}=Ar(R),[xe,I]=t.useState(!1),ye=t.useRef(H);t.useEffect(()=>{const p=ye.current!==H;ae&&p&&I(!0),H==="embedded"&&I(!1),ye.current=H},[H,ae]),t.useEffect(()=>{I(!1)},[l]);const K=t.useMemo(()=>{if(!n)return null;const p=Ae(D);return b.find(T=>!(T.scriptName!==n||p&&T.cwd!==p||f?.config?.command&&T.command!==f.config.command))??b.find(T=>Me(T,n,D))??null},[b,f?.config?.command,n,D]);t.useEffect(()=>{typeof y=="function"&&y().catch(p=>{e(Ue(p),"error")})},[e,y]),t.useEffect(()=>{if(n){F(!1);return}F(!0)},[n]),t.useEffect(()=>{if(f?.status==="running"||f?.status==="starting"){f.config?.command?.trim().length>0&&$(f.config.command);return}if(K){$(K.command);return}b.length>0&&$(p=>p.trim().length>0?p:b[0]?.command??"")},[b,K,f?.config?.command,f?.status]),t.useEffect(()=>{w(l??"")},[l]);const le=t.useCallback(()=>{l&&window.open(l,"_blank","noopener,noreferrer")},[l]),Se=t.useCallback(()=>{I(!1),we()},[we]),qe=t.useCallback(()=>{try{const p=J.current;if(p?.contentWindow){p.contentWindow.location.reload(),I(!1),G();return}}catch{}if(!(!l||!J.current))try{const p=new URL(l);p.searchParams.set("_t",Date.now().toString()),J.current.src=p.toString(),I(!1),G()}catch{J.current.src=l,I(!1),G()}},[l,J,G]),Z=t.useCallback(async(p,T,oe)=>{c(p);try{await T(),e(oe,"success")}catch(tr){e(Ue(tr),"error")}finally{c(null)}},[e]),Ie=t.useCallback(p=>{a(p.scriptName),F(!1),$(p.command),e(s("devserver.toast.selectedScript","Selected {{name}} script.",{name:p.scriptName}),"success")},[e]),Xe=t.useCallback(()=>{a(null),F(!0),e(s("devserver.toast.clearedScript","Cleared selected dev server script."),"success")},[e]),Je=()=>{const p=O.trim();if(p.length===0){e(s("devserver.toast.enterCommand","Enter a command before starting the dev server."),"warning");return}const T=Ae(D)??".",oe=K?.cwd??T;Z("start",()=>E(p,oe),s("devserver.toast.started","Dev server started."))},Qe=()=>{Z("stop",S,s("devserver.toast.stopped","Dev server stopped."))},Ye=()=>{Z("restart",z,s("devserver.toast.restarted","Dev server restarted."))},Ge=()=>{const p=k.trim(),T=p.length>0?p:null;Z("preview",()=>N(T),T?s("devserver.toast.previewUpdated","Preview URL updated."):s("devserver.toast.previewCleared","Preview URL override cleared."))},Ke=t.useCallback(()=>{d&&u()},[d,u]),Ze=i==="starting"||i==="running"||v!==null,er=i==="stopped"||v!==null,rr=i==="stopped"||i==="starting"||v!==null;return r.jsxs("div",{className:"dev-server-view","data-testid":"dev-server-view",children:[r.jsxs("section",{className:"dev-server-header","aria-label":"Dev server controls header",children:[r.jsxs("div",{className:"dev-server-header-title",children:[r.jsx(pr,{size:16}),r.jsx("h2",{children:s("devserver.title","Dev Server")}),r.jsx("span",{className:`dev-server-status-badge ${A.className}`,"data-testid":"dev-server-status-badge",children:A.label})]}),r.jsxs("div",{className:"dev-server-header-actions",children:[r.jsxs("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Je,disabled:Ze,"data-testid":"dev-server-start-button",children:[r.jsx(hr,{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:Qe,disabled:er,"data-testid":"dev-server-stop-button",children:[r.jsx(gr,{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:Ye,disabled:rr,"data-testid":"dev-server-restart-button",children:[r.jsx(br,{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":"Dev server configuration",children:[r.jsxs("div",{className:"dev-server-section-header",children:[r.jsx("h3",{children:s("devserver.configuration","Configuration")}),x&&r.jsx("span",{className:"dev-server-muted",children:s("devserver.loading","Loading...")})]}),x&&!f&&b.length===0&&r.jsxs("div",{className:"dev-server-loading-state","data-testid":"dev-server-loading-state",children:[r.jsx(se,{size:16,className:"dev-server-spin"}),r.jsx("span",{children:s("devserver.loadingConfig","Loading dev server configuration...")})]}),d&&r.jsxs("div",{className:"dev-server-error-box",role:"alert","data-testid":"dev-server-error-box",children:[r.jsx("p",{children:d}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:Ke,children:s("devserver.retry","Retry")})]}),r.jsxs("div",{className:"dev-server-section",children:[r.jsx("h3",{children:s("devserver.scriptSelection","Script Selection")}),n&&r.jsxs("div",{className:"dev-server-selected","data-testid":"dev-server-selected-summary",children:[r.jsx("span",{className:"dev-server-candidate-name",children:n}),r.jsx("span",{className:"dev-server-candidate-source",children:D??"root"}),r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>F(!0),"data-testid":"dev-server-change-selection",children:s("devserver.change","Change")}),r.jsx("button",{type:"button",className:"btn btn-danger btn-sm",onClick:Xe,"data-testid":"dev-server-clear-selection",children:s("devserver.clear","Clear")})]}),U&&b.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.")}),U&&b.length>0&&r.jsx("div",{className:"dev-server-candidates","data-testid":"dev-server-candidates",children:b.map(p=>{const T=Me(p,n,D);return r.jsxs("button",{type:"button",className:`dev-server-candidate ${T?"dev-server-candidate--selected":""}`,onClick:()=>Ie(p),"data-testid":`dev-server-candidate-${p.scriptName}-${He(p.cwd)}`,children:[r.jsx("span",{className:"dev-server-candidate-name",children:p.scriptName}),r.jsx("span",{className:"dev-server-candidate-command",children:Wr(p.command)}),r.jsx("span",{className:"dev-server-candidate-source",children:Vr(p)})]},`${p.cwd}::${p.scriptName}::${p.command}`)})})]}),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:O,onChange:p=>$(p.target.value),placeholder:"pnpm dev","data-testid":"dev-server-command-input",readOnly:i==="running"||i==="starting"})]}),(i==="running"||i==="starting")&&f&&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:f.config?.command??O})]}),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:k,onChange:p=>w(p.target.value),placeholder:"http://localhost:3000","data-testid":"dev-server-preview-input"}),r.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:Ge,disabled:v==="preview","data-testid":"dev-server-set-preview",children:s("devserver.save","Save")})]}),l&&r.jsx("p",{className:"dev-server-preview-hint",children:s("devserver.autoDetected","Auto-detected: {{url}}",{url:l})})]}),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":"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:P??L.length})})]}),r.jsx("div",{className:"dev-server-logs-viewer","data-testid":"dev-server-log-viewer",children:r.jsx(Or,{entries:L,loading:_,loadingMore:j,hasMore:B,total:P,onLoadMore:V,isRunning:m})})]})}),r.jsxs("section",{className:"dev-server-panel devserver-preview-panel","data-testid":"devserver-preview-panel","aria-label":"Dev server preview",children:[r.jsxs("div",{className:"devserver-preview-header",children:[r.jsxs("div",{className:"devserver-preview-title",children:[r.jsx(wr,{size:14}),r.jsx("span",{children:s("devserver.preview","Preview")})]}),r.jsxs("span",{className:"devserver-preview-url-badge devserver-preview-url-badge--auto",title:l??s("devserver.noPreviewUrl","No preview URL"),"data-testid":"devserver-preview-url-badge",children:[s("devserver.auto","Auto"),l?` · ${l}`:s("devserver.notAvailable"," · Not available")]}),r.jsxs("div",{className:"devserver-preview-actions",children:[r.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>C(p=>p==="embedded"?"external":"embedded"),"data-testid":"devserver-preview-mode-toggle",children:h==="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:le,disabled:!l,"data-testid":"devserver-preview-open-tab",children:r.jsx(xr,{})}),r.jsx("button",{type:"button",className:"btn btn-sm btn-icon",title:s("devserver.refreshPreview","Refresh preview"),onClick:qe,disabled:!l,"data-testid":"devserver-preview-refresh",children:r.jsx(yr,{})})]})]}),r.jsxs("div",{className:"devserver-preview-container","data-embed-status":H,"data-embedded":We?"true":"false",children:[!l&&!m&&r.jsx("p",{className:"devserver-preview-empty",children:s("devserver.startDevServer","Start a dev server to see a live preview here.")}),!l&&m&&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.")}),l&&h==="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:le,"data-testid":"devserver-preview-external-open-tab",children:s("devserver.openInNewTab","Open in new tab")})]}),l&&h==="embedded"&&xe&&ae&&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(ze,{className:"devserver-preview-blocked-icon","aria-hidden":"true"}):r.jsx(Fe,{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")}),ie&&r.jsx("p",{className:"devserver-preview-blocked-context",children:ie})]}),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:le,"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:Se,"data-testid":"devserver-preview-fallback-retry",children:s("devserver.retryEmbeddedPreview","Retry embedded preview")})]})]}),l&&h==="embedded"&&!xe&&r.jsx(Br,{url:l,embedStatus:H,onEmbedStatusChange:Ve,iframeRef:J,blockReason:ie,onRetry:Se})]})]})]})}export{Kr as DevServerView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.dev-server-view{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg);min-height:0;height:100%;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}.dev-server-header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card)}.dev-server-header-title{display:flex;align-items:center;gap:var(--space-sm)}.dev-server-header-title h2{margin:0;font-size:1.125rem;font-weight:600;color:var(--text)}.dev-server-header-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-sm)}.dev-server-status-badge{display:inline-flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:var(--radius-pill);padding:var(--space-xs) var(--space-sm);font-family:var(--font-mono)}.dev-server-status-badge--stopped{color:var(--color-muted);background:color-mix(in srgb,var(--color-muted) 16%,transparent);border-color:color-mix(in srgb,var(--color-muted) 40%,transparent)}.dev-server-status-badge--starting{color:var(--color-warning);background:color-mix(in srgb,var(--color-warning) 16%,transparent);border-color:color-mix(in srgb,var(--color-warning) 40%,transparent)}.dev-server-status-badge--running{color:var(--color-success);background:color-mix(in srgb,var(--color-success) 16%,transparent);border-color:color-mix(in srgb,var(--color-success) 40%,transparent)}.dev-server-status-badge--failed{color:var(--color-error);background:color-mix(in srgb,var(--color-error) 16%,transparent);border-color:color-mix(in srgb,var(--color-error) 40%,transparent)}.dev-server-panel{display:flex;flex-direction:column;gap:var(--space-md);min-height:0;padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);cursor:default;user-select:text;touch-action:auto}.dev-server-config{flex:0 0 auto;min-height:0;max-height:min(52vh,calc(var(--space-2xl) * 16));overflow-y:auto;overscroll-behavior:contain}.dev-server-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.dev-server-section-header h3{margin:0}.dev-server-muted{color:var(--text-muted);font-family:var(--font-mono)}.dev-server-field-group{display:flex;flex-direction:column;gap:var(--space-xs)}.dev-server-label{color:var(--text-muted)}.dev-server-empty-state{margin:0;color:var(--text-muted)}.dev-server-empty-state code{font-family:var(--font-mono)}.dev-server-section{display:flex;flex-direction:column;gap:var(--space-md);min-height:0;padding:var(--space-xl);max-width:calc(var(--space-2xl) * 25);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.dev-server-section h3{margin:0}.dev-server-candidates{display:flex;flex-direction:column;gap:var(--space-sm);min-height:0;max-height:min(36vh,calc(var(--space-2xl) * 9));overflow-y:auto;overscroll-behavior:contain}.dev-server-candidate{display:flex;align-items:center;gap:var(--space-md);width:100%;padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.dev-server-candidate:hover{background:var(--card-hover)}.dev-server-candidate:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.dev-server-candidate--selected{border-left:calc(var(--btn-border-width) * 3) solid var(--todo);background:var(--status-todo-bg)}.dev-server-candidate-name{font-family:var(--font-mono);font-size:.8125rem;font-weight:600}.dev-server-candidate-command{color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;max-width:calc(var(--space-2xl) * 9 + var(--space-md));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dev-server-candidate-source{margin-left:auto;color:var(--text-dim);font-size:.6875rem}.dev-server-selected{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.dev-server-selected .btn{margin-left:0}.dev-server-preview-override{display:flex;align-items:center;gap:var(--space-sm);margin-top:var(--space-xl)}.dev-server-preview-override .input{flex:1}.dev-server-preview-hint{margin:0;color:var(--text-muted)}.dev-server-loading-state{display:flex;align-items:center;gap:var(--space-sm);color:var(--text-muted)}.dev-server-error-box{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--color-error) 10%,transparent);color:var(--color-error)}.dev-server-error-box p{margin:0}.dev-server-current-command{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}.dev-server-current-command code{font-family:var(--font-mono);white-space:pre-wrap;word-break:break-word}.dev-server-error{margin:0;padding:var(--space-sm);border-radius:var(--radius-sm);border:1px solid color-mix(in srgb,var(--color-error) 40%,transparent);color:var(--color-error);background:color-mix(in srgb,var(--color-error) 10%,transparent)}.dev-server-content{flex:1;min-height:0;display:flex;flex-direction:column}.dev-server-logs-panel,.dev-server-preview{min-height:0}.dev-server-logs-viewer{flex:1;min-height:0}.dev-server-logs{flex:1;min-height:clamp(calc(var(--space-2xl) * 3 + var(--space-xs)),28vh,calc(var(--space-2xl) * 5));max-height:clamp(calc(var(--space-2xl) * 8),55vh,calc(var(--space-2xl) * 14));padding:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);overflow-y:auto;font-family:var(--font-mono)}.dev-server-log-line{margin:0;white-space:pre-wrap;word-break:break-word}.devserver-preview-panel{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--surface)}.devserver-preview-header{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border)}.devserver-preview-title{display:flex;align-items:center;gap:var(--space-xs);font-size:.8125rem;font-weight:600;color:var(--text)}.devserver-preview-url-badge{flex:1 1 auto;min-width:0;max-width:calc(var(--space-2xl) * 9);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-family:var(--font-mono);font-size:.6875rem}.devserver-preview-url-badge--manual{color:var(--color-info);background:color-mix(in srgb,var(--color-info) 14%,transparent)}.devserver-preview-url-badge--auto{color:var(--text-muted);background:color-mix(in srgb,var(--surface) 70%,var(--text))}.devserver-preview-actions{display:flex;gap:var(--space-xs);margin-left:auto}.devserver-preview-container{position:relative;flex:1;min-height:clamp(calc(var(--space-2xl) * 4),42vh,calc(var(--space-2xl) * 9 + var(--space-sm)));max-height:clamp(calc(var(--space-2xl) * 10),72vh,calc(var(--space-2xl) * 18 + var(--space-lg)));overflow:hidden}.devserver-preview-iframe-shell{position:relative;width:100%;height:100%}.devserver-preview-iframe{width:100%;height:100%;border:none;background:var(--surface)}.devserver-preview-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);background:color-mix(in srgb,var(--bg) 85%,transparent);color:var(--text-muted)}.devserver-preview-blocked-panel,.devserver-preview-error-panel{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;gap:var(--space-md);padding:var(--space-xl);text-align:center;border-radius:var(--radius-lg)}.devserver-preview-blocked-panel{background:color-mix(in srgb,var(--color-warning) 8%,transparent);border:1px solid color-mix(in srgb,var(--color-warning) 20%,transparent)}.devserver-preview-error-panel{background:color-mix(in srgb,var(--color-error) 8%,transparent);border:1px solid color-mix(in srgb,var(--color-error) 20%,transparent)}.devserver-preview-blocked-icon{width:calc(var(--space-2xl) + var(--space-lg));height:calc(var(--space-2xl) + var(--space-lg));color:var(--color-warning)}.devserver-preview-error-panel .devserver-preview-blocked-icon{color:var(--color-error)}.devserver-preview-blocked-title{margin:0 0 var(--space-xs);font-size:1rem;font-weight:600;color:var(--text)}.devserver-preview-blocked-context{margin:0;font-size:.75rem;color:var(--text-muted);font-family:var(--font-mono);background:color-mix(in srgb,var(--bg) 80%,transparent);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm)}.devserver-preview-blocked-description{margin:0;color:var(--text-muted);font-size:.8125rem}.devserver-preview-blocked-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap;justify-content:center}.devserver-preview-empty{margin:0;padding:var(--space-2xl);text-align:center;color:var(--text-dim);font-size:.8125rem}.devserver-preview-external-only{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);min-height:100%;padding:var(--space-lg);text-align:center;color:var(--text-muted);background:color-mix(in srgb,var(--surface) 80%,var(--text))}.devserver-preview-external-only p{margin:0}.dev-server-preview-fallback{border:1px solid color-mix(in srgb,var(--color-warning) 40%,transparent);background:color-mix(in srgb,var(--color-warning) 10%,transparent)}.dev-server-preview-external-only{border:1px solid var(--border);background:var(--surface)}.dev-server-spin{animation:dev-server-spin 1s linear infinite}@media(min-width:769px){.dev-server-view{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:auto auto 1fr}.dev-server-header{grid-column:1 / -1}.dev-server-config{grid-column:1;grid-row:2;max-height:none}.dev-server-content{grid-column:1;grid-row:3}.devserver-preview-panel{grid-column:2;grid-row:2 / 4}.devserver-preview-container{min-height:0;max-height:none}}@media(max-width:768px){.dev-server-view{display:flex;flex-direction:column;padding:var(--space-md)}.dev-server-header{flex-direction:column;align-items:flex-start}.dev-server-header-title{flex-wrap:wrap}.dev-server-header-actions{width:100%}.dev-server-content{display:flex;flex-direction:column}.dev-server-section{padding:var(--space-md);max-width:none}.devserver-preview-header{flex-wrap:wrap}.devserver-preview-url-badge{order:2;flex:1 1 100%;min-width:0;max-width:100%}.devserver-preview-actions{order:3;width:100%;margin-left:0;justify-content:flex-end}.dev-server-preview-override{flex-direction:column;align-items:stretch}.dev-server-candidate,.dev-server-selected{flex-wrap:wrap}.dev-server-candidate-command{flex:1 1 100%;max-width:100%;white-space:normal;word-break:break-word}.dev-server-config{max-height:min(48vh,calc(var(--space-2xl) * 13))}.dev-server-candidates{max-height:min(32vh,calc(var(--space-2xl) * 7))}.dev-server-candidate-source{margin-left:0}.dev-server-header-actions .btn,.devserver-preview-actions .btn,.dev-server-preview-override .btn,.devserver-preview-external-only .btn,.devserver-preview-blocked-panel .btn,.devserver-preview-error-panel .btn,.devserver-log-viewer__load-more .btn{min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}.devserver-preview-actions .btn-icon{min-width:calc(var(--space-lg) + var(--space-lg) + var(--space-xs));min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}.devserver-log-viewer__toolbar{flex-wrap:wrap;padding:var(--space-xs) var(--space-sm)}.devserver-log-viewer__toolbar-actions{width:100%;justify-content:space-between}.devserver-log-viewer__search{flex:1}.devserver-log-viewer__search-input{min-width:0;width:100%}.devserver-log-viewer__content{padding:var(--space-xs);font-size:.6875rem}.devserver-log-viewer__new-logs-button{bottom:var(--space-lg);min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}.dev-server-logs,.devserver-preview-container,.devserver-preview-iframe{min-height:calc(var(--space-2xl) * 4 + var(--space-md))}.devserver-preview-blocked-panel,.devserver-preview-error-panel,.devserver-preview-external-only{word-break:break-word}.devserver-preview-blocked-panel,.devserver-preview-error-panel{padding:var(--space-md)}.devserver-preview-blocked-actions .btn{min-height:calc(var(--space-lg) + var(--space-md) + var(--space-sm))}.chat-tool-calls-header,.chat-tool-call summary,.chat-tool-call-content,.chat-tool-call-preview,.chat-tool-call-value{font-size:.6875rem}.chat-tool-call summary{padding:var(--space-xs)}.chat-tool-call-content{margin:var(--space-xs);padding:var(--space-xs)}.chat-tool-call-status-text{font-size:.625rem}}.devserver-log-viewer{display:flex;flex-direction:column;height:100%;min-height:0;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.devserver-log-viewer--fullscreen{position:fixed;inset:0;z-index:120;border-radius:0}.devserver-log-viewer__toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border);background:var(--card)}.devserver-log-viewer__toolbar-meta{display:flex;align-items:baseline;gap:var(--space-sm)}.devserver-log-viewer__title{color:var(--text);font-weight:600}.devserver-log-viewer__count{color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem}.devserver-log-viewer__toolbar-actions{display:flex;align-items:center;gap:var(--space-sm)}.devserver-log-viewer__severity,.devserver-log-viewer__search{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--text-muted)}.devserver-log-viewer__severity-select{min-height:calc(var(--space-lg) + var(--space-md));min-width:calc(var(--space-2xl) * 3);font-size:.75rem}.devserver-log-viewer__search-input{min-height:calc(var(--space-lg) + var(--space-md));min-width:calc(var(--space-2xl) * 4);font-size:.75rem}.devserver-log-viewer__matches{color:var(--text-muted);font-family:var(--font-mono);font-size:.6875rem}.devserver-log-viewer__body{position:relative;display:flex;flex:1;flex-direction:column;min-height:0}.devserver-log-viewer__load-more{display:flex;justify-content:center;padding:var(--space-sm);border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 95%,var(--text))}.devserver-log-viewer__content{flex:1;min-height:0;overflow-y:auto;padding:var(--space-sm);font-family:var(--font-mono);font-size:.75rem;line-height:1.5;background:var(--surface)}.devserver-log-viewer__loading,.devserver-log-viewer__empty{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);min-height:calc(var(--space-2xl) * 4);margin:0;color:var(--text-muted)}.devserver-log-viewer__spinner{animation:dev-server-spin 1s linear infinite}.devserver-log-line{padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-sm);white-space:pre-wrap;word-break:break-all}.devserver-log-line:nth-child(2n){background:color-mix(in srgb,var(--surface) 95%,var(--text))}.devserver-log-timestamp{margin-right:var(--space-sm);color:var(--text-dim);font-size:.6875rem}.devserver-log-stream-badge{margin-right:var(--space-sm);padding:0 var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-error) 15%,transparent);color:var(--color-error);font-size:.625rem;font-weight:600}.devserver-log-text{color:var(--text)}.devserver-log-text mark{border-radius:var(--radius-sm);background:color-mix(in srgb,var(--todo) 40%,transparent);color:var(--text)}.devserver-log-viewer__new-logs-button{position:absolute;left:50%;bottom:var(--space-xl);transform:translate(-50%);z-index:10;border-color:var(--border);background:var(--card);box-shadow:var(--shadow-md)}.devserver-log-viewer__new-logs-button:active{transform:translate(-50%) scale(.97)}@keyframes dev-server-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(max-width:480px){.devserver-preview-blocked-actions{width:100%;flex-direction:column}.devserver-preview-blocked-actions .btn{width:100%;min-height:calc(var(--space-lg) + var(--space-lg) + var(--space-xs))}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,j as r}from"./vendor-react-BTgM5bbZ.js";import{de as v,df as z,dg as D,dh as x,b as j,al as S,ag as T,ah as B,J as A,L,aA as w}from"./index-Bglw05rM.js";import{u as K}from"./vendor-i18n-DYlSUfot.js";import{F as R}from"./folder-open-33WGVnbp.js";function q({value:p,onChange:u,placeholder:f,onInputKeyDown:N,nodeId:b,localNodeId:k}){const{t:i}=K("app"),[e,s]=n.useState({isOpen:!1,loading:!1,error:null,currentPath:"",parentPath:null,entries:[],showHidden:!1,createFolderOpen:!1,createFolderError:null}),[l,h]=n.useState(""),o=n.useCallback(async(t,c=!1)=>{s(d=>({...d,loading:!0,error:null}));try{const d=await v(t,c,b,k);s(a=>({...a,loading:!1,currentPath:d.currentPath,parentPath:d.parentPath,entries:d.entries}))}catch(d){s(a=>({...a,loading:!1,error:d instanceof Error?d.message:"Failed to browse directory"}))}},[b,k]),g=n.useCallback(()=>{s(t=>t.isOpen?{...t,isOpen:!1}:{...t,isOpen:!0})},[]);n.useEffect(()=>{e.isOpen&&!e.loading&&!e.currentPath&&!e.error&&o(p||void 0,e.showHidden)},[e.isOpen,e.loading,e.currentPath,e.error,p,e.showHidden,o,b,k]);const m=n.useCallback(t=>{o(t,e.showHidden)},[o,e.showHidden]),F=n.useCallback(()=>{u(e.currentPath),s(t=>({...t,isOpen:!1}))},[e.currentPath,u]),C=n.useCallback(()=>{s(t=>{const c=!t.showHidden;return{...t,showHidden:c}})},[]);n.useEffect(()=>{e.isOpen&&e.currentPath&&o(e.currentPath,e.showHidden)},[e.showHidden,o]);const P=n.useCallback(()=>{s(t=>({...t,createFolderOpen:!t.createFolderOpen,createFolderError:null})),h("")},[]),y=n.useCallback(async()=>{if(!l.trim()||!e.currentPath)return;const t=l.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("\\")?"\\":"/",d=e.currentPath.endsWith(c)?e.currentPath+t:e.currentPath+c+t;s(a=>({...a,loading:!0,createFolderError:null}));try{await z(d),h(""),s(a=>({...a,createFolderOpen:!1})),await o(e.currentPath,e.showHidden)}catch(a){s(O=>({...O,loading:!1,createFolderError:a instanceof Error?a.message:"Failed to create folder"}))}},[l,e.currentPath,e.showHidden,o]),H=n.useCallback(t=>{t.key==="Enter"?(t.preventDefault(),y()):t.key==="Escape"&&(s(c=>({...c,createFolderOpen:!1,createFolderError:null})),h(""))},[y]),E=e.currentPath?D(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:p,onChange:t=>u(t.target.value),onKeyDown:N,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:g,"aria-label":e.isOpen?i("dirPicker.closeBrowser","Close directory browser"):i("dirPicker.openBrowser","Browse directories"),children:[e.isOpen?r.jsx(R,{size:16}):r.jsx(x,{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:E.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:()=>m(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:()=>m(e.parentPath),"aria-label":i("dirPicker.parentDir","Go to parent directory"),title:i("dirPicker.parentDirTitle","Parent directory"),children:[r.jsx(S,{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:C,"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(T,{size:14}):r.jsx(B,{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:P,"aria-label":i("dirPicker.createFolderAria","Create new folder"),title:i("dirPicker.createFolderTitle","Create folder"),children:[r.jsx(A,{size:14}),r.jsx("span",{children:i("dirPicker.createFolder","New folder")})]})]}),e.loading?r.jsxs("div",{className:"directory-picker-loading",children:[r.jsx(L,{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(w,{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:()=>m(t.path),role:"treeitem",title:t.path,children:[r.jsx(x,{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:l,onChange:t=>h(t.target.value),onKeyDown:H,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:y,disabled:!l.trim()||e.loading||!e.currentPath,children:i("dirPicker.createFolderConfirm","Create")}),r.jsx("button",{type:"button",className:"btn btn-sm btn-secondary",onClick:P,children:i("dirPicker.cancel","Cancel")})]}),e.createFolderError&&r.jsxs("div",{className:"directory-picker-create-folder-error",children:[r.jsx(w,{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:F,children:i("dirPicker.select","Select")})]})]})]})}export{q as D};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as s,j as e}from"./vendor-react-BTgM5bbZ.js";import{a7 as J,a8 as Z,a9 as be,aa as ve,ab as ee,ac as Ne,ad as I,f as Ce,ae as Se,af as Fe,F as z,ag as ye,ah as Te,S as Pe,X as Ee,R as Me,ai as Re,aj as te,ak as se,a as ne,b as Le,al as De}from"./index-Bglw05rM.js";import{u as U}from"./vendor-i18n-DYlSUfot.js";import"./vendor-reactflow-ZasuEfF9.js";import"./vendor-xterm-ea7-K05z.js";import"./vendor-codemirror-jBKmHyH0.js";function ze(a){const{projectId:o,searchQuery:h,includeProjectFiles:d=!0}=a??{},t=o?`${be.DOCUMENTS_PREFIX}${o}`:null,[r,u]=s.useState(()=>{if(!t)return[];const b=J(t,{maxAgeMs:Z});return Array.isArray(b)?b:[]}),[i,f]=s.useState([]),[l,p]=s.useState(()=>r.length===0),[g,y]=s.useState(null),w=s.useRef(null),j=s.useRef(r.length>0),k=s.useRef(null),v=s.useCallback(async()=>{w.current&&w.current.abort();const b=new AbortController;w.current=b;const F=!j.current;F&&p(!0),y(null);const P=ve(h?{q:h}:void 0,o),A=d?ee(o):Promise.resolve({files:[]}),[x,E]=await Promise.allSettled([P,A]);if(b.signal.aborted)return;let R=null;if(x.status==="fulfilled"){if(u(x.value),t){const T=x.value.length>500?x.value.slice(0,500):x.value;Ne(t,T,{maxBytes:5e5})}j.current=!0}else R=x.reason instanceof Error?x.reason.message:String(x.reason);if(E.status==="fulfilled"){const T=E.value.files,N=h?.trim().toLowerCase(),L=N?T.filter(D=>D.name.toLowerCase().includes(N)||D.path.toLowerCase().includes(N)):T;f(L)}y(R),F&&p(!1)},[t,d,o,h]);return s.useEffect(()=>{if(!t){j.current=!1,u([]),p(!0);return}const b=J(t,{maxAgeMs:Z});Array.isArray(b)?(u(b),j.current=!0,p(!1)):(j.current=!1,u([]),p(!0))},[t]),s.useEffect(()=>(k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{v()},300),()=>{k.current&&clearTimeout(k.current)}),[v]),s.useEffect(()=>(v(),()=>{w.current&&w.current.abort()}),[]),{documents:r,projectFiles:i,loading:l,error:g,refresh:v}}function Ae(a,o){const[h,d]=s.useState([]),[t,r]=s.useState(!0),[u,i]=s.useState(null),f=s.useRef(null),l=s.useRef(!1),p=o?.showHidden??!1,g=s.useCallback(async y=>{f.current&&f.current.abort();const w=new AbortController;f.current=w;const j=!l.current;j&&r(!0),i(null);try{const k=await ee(a,{showHidden:y?.showHidden??p});if(w.signal.aborted)return;d(k.files),l.current=!0}catch(k){if(w.signal.aborted)return;i(k instanceof Error?k.message:String(k))}finally{!w.signal.aborted&&j&&r(!1)}},[a,p]);return s.useEffect(()=>(l.current=!1,g({showHidden:p}),()=>{f.current&&f.current.abort()}),[g,p]),{files:h,loading:t,error:u,refresh:g}}const He=768;function ae(a){return a?new Date(a).toLocaleString():""}function $e(a){return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(a>=10*1024?0:1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function Oe(a,o=200){return a.length<=o?a:`${a.substring(0,o)}…`}function qe({document:a,renderMarkdown:o,onToggleMarkdown:h}){const{t:d}=U("app"),[t,r]=s.useState(!1),u=Oe(a.content),i=a.content.length>200;return e.jsxs("div",{className:"document-card",children:[e.jsxs("div",{className:"document-card-header",children:[e.jsxs("div",{className:"document-card-key",children:[e.jsx(z,{size:14}),e.jsx("span",{className:"document-card-key-text",children:a.key}),e.jsxs("span",{className:"document-card-revision-badge",children:["v",a.revision]})]}),e.jsx("div",{className:"document-card-actions",children:e.jsx("button",{className:"btn btn-sm document-card-expand-btn",onClick:()=>r(f=>!f),title:t?d("documents.collapse","Collapse"):d("documents.expand","Expand"),"aria-label":t?d("documents.collapseContent","Collapse content"):d("documents.expandContent","Expand content"),children:t?e.jsx(De,{size:14}):e.jsx(ne,{size:14})})})]}),e.jsxs("div",{className:"document-card-meta",children:[e.jsx("span",{className:"document-card-author",children:a.author}),e.jsx("span",{className:"document-card-separator",children:"·"}),e.jsx("span",{className:"document-card-date",children:ae(a.updatedAt)})]}),e.jsxs("div",{className:`document-card-content${t?" document-card-content--expanded":""}`,children:[t?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"document-card-content-header",children:e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:h,"aria-label":o?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":o,title:o?d("documents.switchToPlainText","Switch to plain text"):d("documents.switchToMarkdown","Switch to markdown"),children:o?d("documents.markdown","Markdown"):d("documents.plain","Plain")})}),o?e.jsx("div",{className:"document-card-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(te,{remarkPlugins:[se],children:a.content})})}):e.jsx("pre",{className:"document-card-content-text",children:a.content})]}):e.jsx("p",{className:"document-card-preview",children:u}),i&&!t&&e.jsx("p",{className:"document-card-preview-truncated",children:"…"})]})]})}function Be({taskId:a,taskTitle:o,documents:h,onOpenTask:d,renderMarkdownStates:t,onToggleMarkdown:r}){const{t:u}=U("app"),[i,f]=s.useState(!1);return e.jsxs("div",{className:"documents-group",children:[e.jsxs("div",{className:"documents-group-header",children:[e.jsxs("button",{className:"documents-group-toggle-btn",onClick:()=>f(l=>!l),"aria-expanded":i,"aria-label":`${i?u("documents.collapse","Collapse"):u("documents.expand","Expand")} documents for task ${a}`,children:[e.jsx("span",{className:"documents-group-toggle","aria-hidden":"true",children:i?e.jsx(ne,{size:16}):e.jsx(Le,{size:16})}),e.jsx("span",{className:"documents-group-task-id",children:a}),e.jsx("span",{className:"documents-group-task-title",children:o||u("documents.untitled","Untitled")})]}),e.jsx("span",{className:"documents-group-count",children:u("documents.docCount","{{count}} doc{{plural}}",{count:h.length,plural:h.length!==1?"s":""})}),e.jsx("button",{className:"documents-group-task-link",onClick:()=>d(a),"aria-label":`Open task ${a}: ${o||u("documents.untitled","Untitled")}`,children:u("documents.openTask","Open task")})]}),i&&e.jsx("div",{className:"documents-group-content",children:h.map(l=>e.jsx(qe,{document:l,renderMarkdown:t.get(l.id)??!1,onToggleMarkdown:()=>r(l.id)},l.id))})]})}function Xe({projectId:a,addToast:o,onOpenDetail:h,onSendSelectionToTask:d}){const{t}=U("app"),[r,u]=s.useState("project"),[i,f]=s.useState(""),[l,p]=s.useState(null),[g,y]=s.useState(!1),[w,j]=s.useState(null),[k,v]=s.useState(!1),[b,F]=s.useState(null),[P,A]=s.useState(!1),x=s.useRef(0),E=s.useRef(!1),R=s.useRef(null),T=s.useRef(null),[N,L]=s.useState(!1),[D,_]=s.useState(new Map),[Q,ce]=s.useState(!1),oe=I(R,{locked:Q}),re=I(T,{locked:Q}),H=N?oe:re,le=r==="tasks"?i.trim():"",{documents:M,loading:$,error:ie,refresh:K}=ze({projectId:a,searchQuery:le||void 0,includeProjectFiles:!1}),{files:S,loading:O,error:de,refresh:W}=Ae(a,{showHidden:g});s.useEffect(()=>{const n=()=>{A(window.innerWidth<=He)};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),s.useEffect(()=>{E.current=!1,u("project"),p(null),y(!1),j(null),F(null),v(!1),L(!1),_(new Map)},[a]),s.useEffect(()=>{E.current||$||O||(S.length>0?u("project"):M.length>0&&u("tasks"),E.current=!0)},[M.length,$,S.length,O]);const q=s.useMemo(()=>{const n=new Map;for(const c of M){const m=n.get(c.taskId)||[];n.set(c.taskId,[...m,c])}return Array.from(n.entries()).map(([c,m])=>{const C=[...m].sort((ke,ge)=>ge.updatedAt.localeCompare(ke.updatedAt));return{taskId:c,taskTitle:C[0]?.taskTitle,documents:C,latestUpdated:C[0]?.updatedAt??""}}).sort((c,m)=>m.latestUpdated.localeCompare(c.latestUpdated))},[M]),B=s.useMemo(()=>{const n=i.trim().toLowerCase();return n?S.filter(c=>{const m=c.path.toLowerCase(),C=c.name.toLowerCase();return m.includes(n)||C.includes(n)}):S},[S,i]);s.useEffect(()=>{if(!l)return;S.some(c=>c.path===l.path)||(p(null),j(null),F(null),v(!1))},[S,l]);const ue=s.useCallback(n=>{f(n.target.value)},[]),me=s.useCallback(()=>{f("")},[]),G=s.useCallback(n=>{u(n)},[]),he=s.useCallback(async n=>{try{const c=await Ce(n,a);h(c)}catch{o(`Failed to open task ${n}`,"error")}},[a,h,o]),pe=s.useCallback(async n=>{p(n),v(!0),F(null),j(null);const c=x.current+1;x.current=c;try{const m=await Se("project",n.path,a);if(x.current!==c)return;j(m.content)}catch(m){if(x.current!==c)return;const C=m instanceof Error?m.message:`Failed to open ${n.path}`;F(C),o(C,"error")}finally{x.current===c&&v(!1)}},[a,o]),fe=s.useCallback(()=>{p(null),j(null),F(null),v(!1)},[]),je=s.useCallback(n=>{_(c=>{const m=new Map(c),C=m.get(n)??!1;return m.set(n,!C),m})},[]),X=r==="project"?de:ie,xe=s.useCallback(async()=>{if(r==="project"){await W();return}await K()},[r,W,K]),V=r==="project"?B.length:M.length,we=l&&d&&H?e.jsx(Fe,{selectedText:H.selectedText,anchorRect:H.anchorRect,filePath:l.path,onSubmit:d,onOpenChange:ce}):null,Y=r==="project"?t("documents.searchProjectFiles","Search project markdown files…"):t("documents.searchTaskDocuments","Search task documents…");return e.jsxs("div",{className:"documents-view",children:[e.jsxs("div",{className:"documents-view-header",children:[e.jsxs("div",{className:"documents-view-title-row",children:[e.jsxs("h2",{className:"documents-view-title",children:[e.jsx(z,{size:20}),t("documents.title","Documents")]}),e.jsx("span",{className:"documents-view-count",children:t("documents.resultCount","{{count}} result{{plural}}",{count:V,plural:V!==1?"s":""})})]}),e.jsxs("div",{className:"documents-controls-row",children:[e.jsxs("div",{className:"documents-tab-bar",role:"tablist","aria-label":"Documents sections",children:[e.jsxs("button",{className:`btn documents-tab${r==="project"?" active":""}`,role:"tab","aria-selected":r==="project","aria-label":t("documents.showProjectFiles","Show project markdown files"),onClick:()=>G("project"),children:[t("documents.projectFilesTab","Project Files"),e.jsx("span",{className:"documents-tab-count",children:S.length})]}),e.jsxs("button",{className:`btn documents-tab${r==="tasks"?" active":""}`,role:"tab","aria-selected":r==="tasks","aria-label":t("documents.showTaskDocuments","Show task documents"),onClick:()=>G("tasks"),children:[t("documents.taskDocumentsTab","Task Documents"),e.jsx("span",{className:"documents-tab-count",children:q.length})]})]}),r==="project"&&e.jsxs("button",{className:"btn btn-sm documents-hidden-toggle",onClick:()=>y(n=>!n),"aria-pressed":g,"aria-label":g?t("documents.hideHidden","Hide hidden project files"):t("documents.showHidden","Show hidden project files"),title:g?t("documents.hideHiddenFiles","Hide hidden files"):t("documents.showHiddenFiles","Show hidden files"),children:[g?e.jsx(ye,{size:14}):e.jsx(Te,{size:14}),g?t("documents.hideHiddenLabel","Hide Hidden"):t("documents.showHiddenLabel","Show Hidden")]}),e.jsxs("div",{className:"documents-search",children:[e.jsx(Pe,{size:16,className:"documents-search-icon"}),e.jsx("input",{type:"text",className:"documents-search-input",placeholder:Y,value:i,onChange:ue,"aria-label":Y}),i&&e.jsx("button",{className:"documents-search-clear",onClick:me,"aria-label":t("documents.clearSearch","Clear search"),children:e.jsx(Ee,{size:16})})]})]})]}),e.jsx("div",{className:"documents-view-content",children:X?e.jsxs("div",{className:"documents-view-error",children:[e.jsx("p",{children:t("documents.failedToLoad","Failed to load {{type}}: {{error}}",{type:r==="project"?t("documents.projectFiles","project files"):t("documents.taskDocuments","task documents"),error:X})}),e.jsxs("button",{className:"btn btn-primary",onClick:()=>void xe(),"aria-label":t("documents.retryLoading","Retry loading documents"),children:[e.jsx(Me,{size:16}),t("documents.retry","Retry")]})]}):r==="project"?O&&S.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:t("documents.loadingProjectFiles","Loading project markdown files…")})}):B.length===0?e.jsx("div",{className:"documents-view-empty",children:i.trim()?e.jsx("p",{children:t("documents.noMatchProject",'No project markdown files match "{{query}}".',{query:i.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(z,{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${P?" documents-project-layout--mobile":""}`,children:[(!P||!l)&&e.jsx("aside",{className:"documents-view-sidebar","aria-label":"Project markdown files",children:e.jsx("ul",{className:"markdown-file-list",children:B.map(n=>{const c=l?.path===n.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 pe(n),"aria-label":`Open ${n.path}`,"aria-current":c?"true":void 0,children:[e.jsx("span",{className:"markdown-file-item-name",children:n.name}),e.jsx("span",{className:"markdown-file-item-path",children:n.path}),e.jsxs("span",{className:"markdown-file-item-meta",children:[$e(n.size)," · ",ae(n.mtime)]})]})},n.path)})})}),(!P||l)&&e.jsxs("section",{className:"documents-view-main","aria-label":"Project file content preview",children:[P&&l&&e.jsxs("button",{className:"btn btn-sm documents-mobile-back",onClick:fe,"aria-label":t("documents.backToFilesList","Back to project files list"),children:[e.jsx(Re,{size:14}),t("documents.backToFiles","Back to files")]}),l?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:l.path}),e.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>L(n=>!n),"aria-label":N?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),"aria-pressed":N,title:N?t("documents.switchToPlainText","Switch to plain text"):t("documents.switchToMarkdown","Switch to markdown"),children:N?t("documents.markdown","Markdown"):t("documents.plain","Plain")})]}),k?e.jsx("p",{className:"documents-content-state",children:t("documents.loadingFileContent","Loading file content…")}):b?e.jsx("p",{className:"documents-content-state documents-content-state--error",children:b}):N?e.jsx("div",{ref:R,className:"documents-content-markdown",children:e.jsx("div",{className:"markdown-body",children:e.jsx(te,{remarkPlugins:[se],children:w??""})})}):e.jsx("pre",{ref:T,className:"document-card-content-text documents-content-viewer-text",children:w??""}),we]}):e.jsx("div",{className:"documents-view-empty",children:e.jsx("p",{children:t("documents.selectFile","Select a Markdown file to view its content.")})})]})]}):$&&M.length===0?e.jsx("div",{className:"documents-view-loading",children:e.jsx("p",{children:t("documents.loadingTaskDocuments","Loading task documents…")})}):q.length===0?e.jsx("div",{className:"documents-view-empty",children:i.trim()?e.jsx("p",{children:t("documents.noMatchTask",'No task documents match "{{query}}".',{query:i.trim()})}):e.jsxs(e.Fragment,{children:[e.jsx(z,{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.jsx("div",{className:"documents-task-list-wrap",children:e.jsx("div",{className:"documents-view-list",children:q.map(({taskId:n,taskTitle:c,documents:m})=>e.jsx(Be,{taskId:n,taskTitle:c,documents:m,onOpenTask:he,renderMarkdownStates:D,onToggleMarkdown:je},n))})})})]})}export{Xe as DocumentsView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.documents-view{display:flex;flex-direction:column;height:100%;width:100%;flex:1 1 auto;min-width:0;min-height:0}.documents-view-header{padding:var(--space-lg);border-bottom:1px solid var(--border);background:var(--surface)}.documents-view-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.documents-view-title{display:flex;align-items:center;gap:var(--space-sm);font-size:18px;font-weight:600;margin:0;color:var(--text)}.documents-view-title svg{color:var(--todo)}.documents-view-count{font-size:14px;color:var(--text-muted)}.documents-controls-row{display:flex;align-items:center;gap:var(--space-md);flex-wrap:nowrap}.documents-tab-bar{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.documents-tab{display:inline-flex;align-items:center;gap:var(--space-sm);border:1px solid var(--border);background:var(--surface);color:var(--text-muted)}.documents-tab:hover{background:var(--card-hover);color:var(--text)}.documents-tab.active{color:var(--todo);border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.documents-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;padding:0 var(--space-xs);border-radius:var(--radius-pill);background:color-mix(in srgb,var(--text) 10%,transparent);color:inherit;font-size:11px;font-family:var(--font-mono)}.documents-hidden-toggle{flex-shrink:0;white-space:nowrap}.documents-hidden-toggle[aria-pressed=true]{color:var(--todo);border-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.documents-search{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0}.documents-search-icon{position:absolute;left:var(--space-sm);color:var(--text-muted);pointer-events:none}.documents-search-input{width:100%;min-width:120px;padding:var(--space-sm) var(--space-sm) var(--space-sm) calc(var(--space-sm) + 24px);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);color:var(--text);font-size:14px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.documents-search-input:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.documents-search-input::placeholder{color:var(--text-dim)}.documents-search-clear{position:absolute;right:var(--space-sm);display:flex;align-items:center;justify-content:center;background:none;border:none;color:var(--text-muted);cursor:pointer;padding:var(--space-xs);border-radius:var(--radius-sm);transition:color var(--transition-fast),background var(--transition-fast)}.documents-search-clear:hover{color:var(--text);background:var(--card-hover)}.documents-search-clear:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-view-content{flex:1;min-height:0;overflow:auto;padding:var(--space-lg)}.documents-view-loading,.documents-view-empty,.documents-view-error{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--space-2xl);color:var(--text-muted);min-height:200px}.documents-view-empty-icon{margin-bottom:var(--space-md);color:var(--text-dim)}.documents-view-empty-hint{font-size:13px;color:var(--text-dim);margin-top:var(--space-xs)}.documents-view-error{color:var(--color-error)}.documents-view-error .btn{margin-top:var(--space-md)}.documents-project-layout{display:grid;grid-template-columns:minmax(280px,320px) minmax(0,1fr);min-height:0;height:100%;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--card)}.documents-project-layout--mobile{grid-template-columns:1fr}.documents-view-sidebar{width:100%;min-width:0;overflow-y:auto;border-right:1px solid var(--border);background:var(--surface)}.markdown-file-list{margin:0;padding:0;list-style:none}.markdown-file-list-item{margin:0}.markdown-file-item{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-xs);border:none;border-left:3px solid transparent;border-bottom:1px solid var(--border);padding:var(--space-md);background:transparent;color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast)}.markdown-file-list-item:last-child .markdown-file-item{border-bottom:none}.markdown-file-item:hover{background:var(--card-hover)}.markdown-file-item:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.markdown-file-item--selected{border-left-color:var(--todo);background:color-mix(in srgb,var(--todo) 12%,transparent)}.markdown-file-item-name{font-size:13px;font-weight:600;color:var(--text)}.markdown-file-item-path{font-size:12px;color:var(--text-muted);font-family:var(--font-mono);word-break:break-word}.markdown-file-item-meta{font-size:12px;color:var(--text-dim)}.documents-view-main{min-width:0;overflow-y:auto;background:var(--card);padding:var(--space-lg)}.documents-mobile-back{margin-bottom:var(--space-md)}.documents-content-viewer{display:flex;flex-direction:column;gap:var(--space-md);width:100%}.documents-content-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.documents-file-path-header{margin:0;padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-muted);font-family:var(--font-mono);font-size:12px;word-break:break-word;flex:1}.documents-content-viewer-text,.documents-content-markdown{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-md);min-height:220px}.documents-content-state{margin:0;color:var(--text-muted)}.documents-content-state--error{color:var(--color-error)}.documents-task-list-wrap{width:100%}.documents-view-list{display:flex;flex-direction:column;gap:var(--space-md)}.documents-group{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;background:var(--card)}.documents-group-header{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--surface);border-bottom:1px solid var(--border)}.documents-group-toggle-btn{display:flex;align-items:center;gap:var(--space-sm);min-width:0;border:none;background:none;color:var(--text);text-align:left;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast);min-height:36px}.documents-group-toggle-btn:hover{background:var(--card-hover)}.documents-group-toggle-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-group-toggle{display:flex;align-items:center;justify-content:center;color:var(--text-muted);flex-shrink:0}.documents-group-task-id{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);flex-shrink:0}.documents-group-task-title{font-size:14px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.documents-group-count{font-size:12px;color:var(--text-dim);justify-self:end}.documents-group-task-link{border:1px solid var(--border);background:var(--card);color:var(--text-muted);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-md);cursor:pointer;transition:border-color var(--transition-fast),color var(--transition-fast),background var(--transition-fast);min-height:36px}.documents-group-task-link:hover{border-color:var(--todo);color:var(--todo);background:color-mix(in srgb,var(--todo) 10%,transparent)}.documents-group-task-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.documents-group-content{padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.document-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:border-color var(--transition-fast)}.document-card:hover{border-color:var(--text-dim)}.document-card-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);background:var(--surface);border-bottom:1px solid var(--border)}.document-card-key{display:flex;align-items:center;gap:var(--space-xs);color:var(--text)}.document-card-key svg{color:var(--text-muted);flex-shrink:0}.document-card-key-text{font-family:var(--font-mono);font-size:13px;font-weight:500}.document-card-revision-badge{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);background:var(--surface);padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);border:1px solid var(--border)}.document-card-expand-btn{padding:var(--space-xs);color:var(--text-muted)}.document-card-expand-btn:hover{color:var(--text)}.document-card-actions{display:flex;align-items:center;gap:var(--space-xs)}.document-mode-toggle{padding:var(--space-xs) var(--space-sm);font-size:11px;font-weight:500;color:var(--text-muted);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:var(--transition-fast);line-height:1}.document-mode-toggle:hover{background:var(--card-hover);color:var(--text)}.document-mode-toggle:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.document-mode-toggle[aria-pressed=true]{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.document-card-content-header{display:flex;justify-content:flex-end;margin-bottom:var(--space-sm)}.document-card-meta{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-md);font-size:12px;color:var(--text-dim);border-bottom:1px solid var(--border)}.document-card-separator{color:var(--border)}.document-card-content{padding:var(--space-md)}.document-card-preview{margin:0;font-size:13px;color:var(--text-muted);line-height:1.5;word-break:break-word}.document-card-preview-truncated{margin:0;font-size:13px;color:var(--text-dim)}.document-card-content--expanded .document-card-preview,.document-card-content--expanded .document-card-preview-truncated{display:none}.document-card-content-text{margin:0;font-size:13px;color:var(--text);line-height:1.5;white-space:pre-wrap;word-break:break-word;font-family:var(--font-primary)}@media(max-width:768px){.documents-view-header{padding:var(--space-md)}.documents-view-title-row{flex-direction:column;align-items:flex-start;gap:var(--space-sm)}.documents-view-title{font-size:16px}.documents-controls-row{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.documents-tab-bar{width:100%}.documents-tab{flex:1;justify-content:center;min-height:44px}.documents-hidden-toggle{width:100%;justify-content:center;min-height:44px}.documents-search-input{max-width:none;width:100%}.documents-view-content{padding:var(--space-md)}.documents-project-layout,.documents-project-layout--mobile{display:flex;flex-direction:column;min-height:0}.documents-view-sidebar{border-right:none;border-bottom:1px solid var(--border);max-height:none}.markdown-file-item{min-height:44px;padding:var(--space-sm) var(--space-md)}.documents-view-main{padding:var(--space-md)}.documents-content-viewer{width:100%}.documents-content-viewer-text{min-height:160px}.documents-group-header{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"toggle count" "link link";row-gap:var(--space-xs)}.documents-group-toggle-btn{grid-area:toggle}.documents-group-count{grid-area:count;justify-self:end}.documents-group-task-link{grid-area:link;width:100%;justify-self:stretch;min-height:44px}.documents-group-task-title{max-width:180px}.document-card-key-text{font-size:12px}.document-mode-toggle{min-width:36px;min-height:36px}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.evals-view{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-lg)}.evals-list,.evals-detail{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg)}.evals-toolbar{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr) minmax(0,1fr) auto;gap:var(--space-sm);align-items:center}.evals-results,.evals-categories,.evals-links,.evals-follow-ups{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.evals-result{width:100%;text-align:left;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);color:var(--text);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-xs)}.evals-result--active{border-color:var(--todo);box-shadow:var(--focus-ring)}.evals-result-title,.evals-detail-title,.evals-title{font-weight:600}.evals-result-meta,.evals-empty-copy,.evals-state{color:var(--text-muted)}.evals-state--error{color:var(--color-error)}.evals-external-link{display:inline-flex;align-items:center;gap:var(--space-xs);color:var(--text)}.evals-rationale{white-space:pre-wrap}@media(max-width:768px){.evals-view,.evals-toolbar{grid-template-columns:1fr}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as l,j as e}from"./vendor-react-BTgM5bbZ.js";import{a7 as P,a8 as F,a9 as O,aR as W,aS as G,ac as V,aT as Y,x as J,az as Q,R as Z,aD as ee}from"./index-Bglw05rM.js";import{u as se}from"./vendor-i18n-DYlSUfot.js";import"./vendor-reactflow-ZasuEfF9.js";import"./vendor-xterm-ea7-K05z.js";import"./vendor-codemirror-jBKmHyH0.js";const ae=300,te=15e3;function H(r){if(!r.trim())return;const s=Number(r);return Number.isFinite(s)?s:void 0}function k(...r){for(const s of r)if(Array.isArray(s))return s;return[]}function p(r){return typeof r=="object"&&r!==null?r:{}}function B(r){const s=p(r),m=p(s.taskSnapshot);return{id:String(s.id??s.evalId??""),runId:String(s.runId??s.batchId??""),taskId:String(s.taskId??m.taskId??""),taskTitle:String(m.title??s.taskTitle??s.title??"Untitled task"),createdAt:String(s.createdAt??s.timestamp??s.updatedAt??new Date(0).toISOString()),overallScore:typeof s.overallScore=="number"?s.overallScore:null,maxScore:typeof s.maxScore=="number"?s.maxScore:null,categoryScores:k(s.categoryScores,p(s.scores).categories)}}function le(r){const s=p(r);return{...B(s),rationale:String(s.rationale??s.summary??""),evidence:k(s.evidence,p(s.details).evidence),followUps:k(s.followUps,p(s.recommendations).followUps)}}function re(r){const s=r?.projectId,m=s??"",t=`${O.EVALS_RUNS_PREFIX}${m}`,h=`${O.EVALS_RESULTS_PREFIX}${m}`,f=P(t,{maxAgeMs:F}),v=P(h,{maxAgeMs:F}),S=l.useRef(Array.isArray(f)&&f.length>0||Array.isArray(v)&&v.length>0),[o,g]=l.useState({q:"",runId:"",scoreMin:"",scoreMax:""}),[A,w]=l.useState(()=>Array.isArray(f)?f:[]),[i,M]=l.useState(()=>Array.isArray(v)?v:[]),[u,N]=l.useState(null),[L,b]=l.useState(null),[a,d]=l.useState(0),[y,j]=l.useState(!S.current),[K,z]=l.useState(null),C=l.useRef(0),q=l.useRef(s),T=l.useRef(u);T.current=u;const I=l.useCallback(async()=>{const n=++C.current;S.current||j(!0),z(null);try{const[c,x]=await Promise.all([W({q:o.q||void 0,runId:o.runId||void 0,scoreMin:H(o.scoreMin),scoreMax:H(o.scoreMax),limit:100,offset:0},s),G(s)]);if(n!==C.current)return;const E=k(c.results,c.evals,c.items).map(B);M(E),V(h,E.length>500?E.slice(0,500):E,{maxBytes:5e5}),d(typeof c.count=="number"?c.count:E.length);const $=k(x.runs,x.items).map(U=>{const R=p(U),D=p(R.counts);return{id:String(R.id??""),createdAt:String(R.createdAt??""),completedAt:typeof R.completedAt=="string"?R.completedAt:void 0,status:String(R.status??"pending"),evaluatedTaskCount:typeof D.totalTasks=="number"?D.totalTasks:0}});w($),V(t,$,{maxBytes:5e5}),S.current=!0,T.current&&!E.some(U=>U.id===T.current)&&(N(null),b(null))}catch(c){if(n!==C.current)return;z(c instanceof Error?c.message:"Failed to load evals")}finally{n===C.current&&j(!1)}},[o.q,o.runId,o.scoreMax,o.scoreMin,s,h,t]),_=l.useCallback(async n=>{const c=await Y(n,s),x=c.result??c;b(le(x))},[s]);l.useEffect(()=>{if(q.current===s)return;q.current=s;const n=P(t,{maxAgeMs:F}),c=P(h,{maxAgeMs:F}),x=Array.isArray(n)&&n.length>0||Array.isArray(c)&&c.length>0;w(Array.isArray(n)?n:[]),M(Array.isArray(c)?c:[]),j(!x),S.current=x},[s,h,t]),l.useEffect(()=>{const n=window.setTimeout(()=>{I()},ae);return()=>window.clearTimeout(n)},[I]),l.useEffect(()=>{if(!u){b(null);return}_(u)},[_,u]),l.useEffect(()=>{const n=window.setInterval(()=>{I(),u&&_(u)},te);return()=>window.clearInterval(n)},[_,I,u]);const X=l.useCallback(n=>{T.current=n,N(n)},[]);return{loading:y,error:K,results:i,count:a,runs:A,filters:o,setFilters:g,refresh:I,selectedEvalId:u,setSelectedEvalId:X,selectedEval:L}}function he({projectId:r,onOpenSettings:s,onOpenTaskDetail:m}){const{t}=se("app"),{loading:h,error:f,results:v,runs:S,filters:o,setFilters:g,selectedEvalId:A,setSelectedEvalId:w,selectedEval:i,refresh:M}=re({projectId:r}),[u,N]=l.useState(!0);l.useEffect(()=>{let a=!1;return J(r).then(d=>{if(a)return;const y=d.evalSettings?.enabled;N(y??!1)}).catch(()=>{a||N(!1)}),()=>{a=!0}},[r]);const L=v.length>0,b=l.useMemo(()=>v.find(a=>a.id===A)??null,[v,A]);return u?e.jsxs("section",{className:"evals-view","data-testid":"evals-view",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:a=>g(d=>({...d,q:a.target.value}))}),e.jsxs("select",{className:"select",value:o.runId,onChange:a=>g(d=>({...d,runId:a.target.value})),children:[e.jsx("option",{value:"",children:t("evals.allRuns","All runs")}),S.map(a=>e.jsx("option",{value:a.id,children:a.id},a.id))]}),e.jsx("input",{className:"input",placeholder:t("evals.minScorePlaceholder","Min score"),value:o.scoreMin,onChange:a=>g(d=>({...d,scoreMin:a.target.value}))}),e.jsx("input",{className:"input",placeholder:t("evals.maxScorePlaceholder","Max score"),value:o.scoreMax,onChange:a=>g(d=>({...d,scoreMax:a.target.value}))}),e.jsx("button",{className:"btn btn-icon",type:"button",onClick:()=>void M(),"aria-label":t("evals.refreshAria","Refresh evals"),children:e.jsx(Z,{size:16})})]}),h&&e.jsx("p",{className:"evals-state","data-testid":"evals-loading",children:t("evals.loading","Loading evals…")}),f&&e.jsx("p",{className:"evals-state evals-state--error",children:f}),!h&&!f&&!L&&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(a=>e.jsx("li",{children:e.jsxs("button",{className:`evals-result ${a.id===A?"evals-result--active":""}`,type:"button",onClick:()=>w(a.id),children:[e.jsx("span",{className:"evals-result-title",children:a.taskTitle}),e.jsxs("span",{className:"evals-result-meta",children:[a.taskId," · ",a.runId," · ",a.overallScore??t("evals.naPlaceholder","n/a")]})]})},a.id))})]}),e.jsxs("div",{className:"evals-detail card","data-testid":"evals-detail",children:[!i&&e.jsx("p",{className:"evals-state",children:t("evals.selectPrompt","Select an evaluation to inspect scores, rationale, and evidence.")}),i&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:"evals-detail-title",children:b?.taskTitle??i.taskTitle}),e.jsxs("p",{className:"evals-result-meta",children:[i.taskId," · ",i.runId]}),e.jsx("p",{className:"evals-score",children:t("evals.overallScore","Overall score: {{score}}",{score:i.overallScore??t("evals.naPlaceholder","n/a")})}),e.jsx("ul",{className:"evals-categories",children:i.categoryScores.map(a=>e.jsxs("li",{children:[a.category,": ",a.finalScore]},a.category))}),e.jsx("p",{className:"evals-rationale",children:i.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:i.evidence.map((a,d)=>{const y=typeof a.metadata?.taskId=="string"?a.metadata.taskId:void 0,j=typeof a.metadata?.url=="string"?a.metadata.url:void 0;return e.jsx("li",{children:y?e.jsx("button",{type:"button",className:"btn",onClick:()=>m?.(y),children:a.ref}):j?e.jsxs("a",{href:j,target:"_blank",rel:"noreferrer",className:"evals-external-link",children:[a.ref,e.jsx(ee,{size:14})]}):e.jsx("span",{children:a.ref})},`${a.ref}-${d}`)})})]}),e.jsxs("div",{children:[e.jsx("h4",{children:t("evals.suggestedFollowupsHeading","Suggested follow-up tasks")}),e.jsxs("ul",{className:"evals-follow-ups",children:[i.followUps.length===0&&e.jsx("li",{children:t("evals.noFollowups","None")}),i.followUps.map(a=>e.jsxs("li",{children:[e.jsx("strong",{children:a.title}),e.jsx("p",{children:a.rationale})]},a.suggestionId))]})]})]})]})]}):e.jsxs("section",{className:"evals-view card","data-testid":"evals-disabled",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:()=>s?.("scheduled-evals"),children:[e.jsx(Q,{size:16}),t("evals.openSettings","Open Scheduled Evals Settings")]})]})}export{he as EvalsView};
|