@runfusion/fusion 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +438 -235
- package/dist/client/assets/{AgentDetailView-Cu4TgvBn.js → AgentDetailView-Dx7T1-gM.js} +3 -3
- package/dist/client/assets/AgentPermissionPolicyEditor-Cbd6SG_T.css +1 -0
- package/dist/client/assets/AgentPermissionPolicyEditor-Ia7QkynK.js +6 -0
- package/dist/client/assets/{AgentsView-CIH4Acck.js → AgentsView-DBbdPWV-.js} +3 -3
- package/dist/client/assets/ChatView-DYpoWnCc.js +1 -0
- package/dist/client/assets/{DevServerView-Bd8JZ-3C.js → DevServerView-DotHOFZt.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BOGqZNiq.js → DirectoryPicker-CIj3ZGKv.js} +1 -1
- package/dist/client/assets/{DocumentsView-B-ELcw4o.js → DocumentsView-Dt27gDYa.js} +1 -1
- package/dist/client/assets/{EvalsView-Ccl9QBYN.js → EvalsView-HfWTc8Uv.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-BM7EnSvJ.js → ExperimentalAgentOnboardingModal-U7fXDhhN.js} +1 -1
- package/dist/client/assets/{InsightsView-DLF49bzu.js → InsightsView-C8bsAlMv.js} +1 -1
- package/dist/client/assets/{MemoryView-CE1D9euM.js → MemoryView-D-HLtRrr.js} +1 -1
- package/dist/client/assets/{NodesView-Zxusnhxu.js → NodesView-w3ms-XX2.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-BlMmxtLZ.js → PiExtensionsManager-DFAZAfNn.js} +2 -2
- package/dist/client/assets/{PluginManager-D4eZ0zA4.js → PluginManager-DN1VG7Qm.js} +1 -1
- package/dist/client/assets/ReliabilityView-D0Rtd7pX.css +1 -0
- package/dist/client/assets/{ResearchView-C14Zh7c9.js → ResearchView-YoxEFtNB.js} +1 -1
- package/dist/client/assets/{SettingsModal-BAx4gt2A.css → SettingsModal-1Y8N6MkL.css} +1 -1
- package/dist/client/assets/SettingsModal-B86XhYB1.js +31 -0
- package/dist/client/assets/{SettingsModal-DRnZ6eBW.js → SettingsModal-BRRPoxku.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-BmmRM3g-.js → SetupWizardModal-B4eA3bpz.js} +1 -1
- package/dist/client/assets/{SkillsView-DWVtT2-8.js → SkillsView-DZIfZoF5.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-CKkaWzzc.js → StashRecoveryView-mKXYsqam.js} +1 -1
- package/dist/client/assets/{TodoView-hbD0NOCY.js → TodoView-C6sLLEQu.js} +1 -1
- package/dist/client/assets/dashboard-view-DOY8-BIx.js +21 -0
- package/dist/client/assets/{folder-open-BTN2_Wuv.js → folder-open-C_fxRMq1.js} +1 -1
- package/dist/client/assets/index-DTFPgu6_.js +695 -0
- package/dist/client/assets/index-DdvAZIzj.css +1 -0
- package/dist/client/assets/{upload-euJEs_N2.js → upload-xjku_93-.js} +1 -1
- package/dist/client/assets/{users-B7miEHCZ.js → users-CbALDtDk.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +477 -225
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/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/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/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/extension-tools.md +11 -0
- package/skill/fusion/references/fusion-capabilities.md +1 -0
- package/dist/client/assets/AgentPermissionPolicyEditor-Ceg2Dszn.js +0 -6
- package/dist/client/assets/AgentPermissionPolicyEditor-CthjqUL_.css +0 -1
- package/dist/client/assets/ChatView-DqJoFquZ.js +0 -1
- package/dist/client/assets/ReliabilityView-rxA_HgEG.css +0 -1
- package/dist/client/assets/SettingsModal-c1QwWno0.js +0 -31
- package/dist/client/assets/dashboard-view-VNPB3ca0.js +0 -21
- package/dist/client/assets/index-CZFBq256.css +0 -1
- package/dist/client/assets/index-DzSLVOnp.js +0 -695
- /package/dist/client/assets/{ReliabilityView-KmH60I_5.js → ReliabilityView-DAuqE-zi.js} +0 -0
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-Dx7T1-gM.js","assets/vendor-react-K0fH_qHe.js","assets/AgentPermissionPolicyEditor-Ia7QkynK.js","assets/AgentPermissionPolicyEditor-Cbd6SG_T.css","assets/ExperimentalAgentOnboardingModal-U7fXDhhN.js","assets/ExperimentalAgentOnboardingModal-BNpveCEk.css","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/vendor-codemirror-jBKmHyH0.js","assets/AgentDetailView-CY-O6VkV.css","assets/addon-fit-C7jRorKK.js","assets/addon-web-links-CkJwd4cQ.js","assets/addon-webgl-BjvOw43o.js","assets/TodoView-C6sLLEQu.js","assets/TodoView-Cx9cVhq7.css","assets/SetupWizardModal-B4eA3bpz.js","assets/DirectoryPicker-CIj3ZGKv.js","assets/folder-open-C_fxRMq1.js","assets/DirectoryPicker-DzKVmxOf.css","assets/projectDetection-G3XuxD2X.js","assets/SetupWizardModal-CGYGKurR.css","assets/SettingsModal-B86XhYB1.js","assets/SettingsModal-BRRPoxku.js","assets/SettingsModal-sp7SNwS9.css","assets/users-CbALDtDk.js","assets/SettingsModal-1Y8N6MkL.css","assets/dashboard-view-DOY8-BIx.js","assets/createLucideIcon-BazL2hk5.js","assets/dashboard-view-DqWnXEbq.css","assets/dashboard-view-BWGH_fAq.js","assets/dashboard-view-DdGlfuu-.css","assets/AgentsView-DBbdPWV-.js","assets/upload-xjku_93-.js","assets/AgentsView-BI_CESkd.css","assets/DocumentsView-Dt27gDYa.js","assets/DocumentsView-gv4zG3aT.css","assets/InsightsView-C8bsAlMv.js","assets/InsightsView-B0J4mhzV.css","assets/ResearchView-YoxEFtNB.js","assets/ResearchView-DTh8FLUm.css","assets/EvalsView-HfWTc8Uv.js","assets/EvalsView-CUNJ1TLc.css","assets/NodesView-w3ms-XX2.js","assets/NodesView-DT4pXowv.css","assets/ChatView-DYpoWnCc.js","assets/ChatView-DwJAd5G1.css","assets/SkillsView-DZIfZoF5.js","assets/SkillsView-CUbSBeZ2.css","assets/MemoryView-D-HLtRrr.js","assets/MemoryView-zaXewZzi.css","assets/ReliabilityView-DAuqE-zi.js","assets/ReliabilityView-D0Rtd7pX.css","assets/DevServerView-DotHOFZt.js","assets/DevServerView-DlZpuAnj.css","assets/StashRecoveryView-mKXYsqam.js","assets/StashRecoveryView-B_8WIQEo.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as i,j as t,R as ka,a as Ha,g as Nb,c as ow}from"./vendor-react-K0fH_qHe.js";import"./vendor-xterm-DzcZoU0P.js";import{j as Xm,c as lw,a as cw,m as dw,C as ao,E as ro,b as Zm,l as uw,o as mw,s as hw,d as pw}from"./vendor-codemirror-jBKmHyH0.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))a(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&a(l)}).observe(document,{childList:!0,subtree:!0});function s(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(r){if(r.ep)return;r.ep=!0;const o=s(r);fetch(r.href,o)}})();/**
|
|
3
|
+
* @license lucide-react v1.7.0 - ISC
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the ISC license.
|
|
6
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/const Sb=(...e)=>e.filter((n,s,a)=>!!n&&n.trim()!==""&&a.indexOf(n)===s).join(" ").trim();/**
|
|
8
|
+
* @license lucide-react v1.7.0 - ISC
|
|
9
|
+
*
|
|
10
|
+
* This source code is licensed under the ISC license.
|
|
11
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
12
|
+
*/const fw=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
|
|
13
|
+
* @license lucide-react v1.7.0 - ISC
|
|
14
|
+
*
|
|
15
|
+
* This source code is licensed under the ISC license.
|
|
16
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
17
|
+
*/const gw=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(n,s,a)=>a?a.toUpperCase():s.toLowerCase());/**
|
|
18
|
+
* @license lucide-react v1.7.0 - ISC
|
|
19
|
+
*
|
|
20
|
+
* This source code is licensed under the ISC license.
|
|
21
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
22
|
+
*/const eh=e=>{const n=gw(e);return n.charAt(0).toUpperCase()+n.slice(1)};/**
|
|
23
|
+
* @license lucide-react v1.7.0 - ISC
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the ISC license.
|
|
26
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
27
|
+
*/var Yc={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
|
|
28
|
+
* @license lucide-react v1.7.0 - ISC
|
|
29
|
+
*
|
|
30
|
+
* This source code is licensed under the ISC license.
|
|
31
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
32
|
+
*/const bw=e=>{for(const n in e)if(n.startsWith("aria-")||n==="role"||n==="title")return!0;return!1},xw=i.createContext({}),vw=()=>i.useContext(xw),yw=i.forwardRef(({color:e,size:n,strokeWidth:s,absoluteStrokeWidth:a,className:r="",children:o,iconNode:l,...c},d)=>{const{size:u=24,strokeWidth:h=2,absoluteStrokeWidth:m=!1,color:f="currentColor",className:p=""}=vw()??{},g=a??m?Number(s??h)*24/Number(n??u):s??h;return i.createElement("svg",{ref:d,...Yc,width:n??u??Yc.width,height:n??u??Yc.height,stroke:e??f,strokeWidth:g,className:Sb("lucide",p,r),...!o&&!bw(c)&&{"aria-hidden":"true"},...c},[...l.map(([w,v])=>i.createElement(w,v)),...Array.isArray(o)?o:[o]])});/**
|
|
33
|
+
* @license lucide-react v1.7.0 - ISC
|
|
34
|
+
*
|
|
35
|
+
* This source code is licensed under the ISC license.
|
|
36
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
37
|
+
*/const at=(e,n)=>{const s=i.forwardRef(({className:a,...r},o)=>i.createElement(yw,{ref:o,iconNode:n,className:Sb(`lucide-${fw(eh(e))}`,`lucide-${e}`,a),...r}));return s.displayName=eh(e),s};/**
|
|
38
|
+
* @license lucide-react v1.7.0 - ISC
|
|
39
|
+
*
|
|
40
|
+
* This source code is licensed under the ISC license.
|
|
41
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
42
|
+
*/const ww=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],Ls=at("activity",ww);/**
|
|
43
|
+
* @license lucide-react v1.7.0 - ISC
|
|
44
|
+
*
|
|
45
|
+
* This source code is licensed under the ISC license.
|
|
46
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
47
|
+
*/const kw=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]],jw=at("archive-restore",kw);/**
|
|
48
|
+
* @license lucide-react v1.7.0 - ISC
|
|
49
|
+
*
|
|
50
|
+
* This source code is licensed under the ISC license.
|
|
51
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
52
|
+
*/const Nw=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]],Wr=at("archive",Nw);/**
|
|
53
|
+
* @license lucide-react v1.7.0 - ISC
|
|
54
|
+
*
|
|
55
|
+
* This source code is licensed under the ISC license.
|
|
56
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
57
|
+
*/const Sw=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Yo=at("arrow-down",Sw);/**
|
|
58
|
+
* @license lucide-react v1.7.0 - ISC
|
|
59
|
+
*
|
|
60
|
+
* This source code is licensed under the ISC license.
|
|
61
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
62
|
+
*/const Cw=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],tr=at("arrow-left",Cw);/**
|
|
63
|
+
* @license lucide-react v1.7.0 - ISC
|
|
64
|
+
*
|
|
65
|
+
* This source code is licensed under the ISC license.
|
|
66
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
67
|
+
*/const Ew=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Qo=at("arrow-right",Ew);/**
|
|
68
|
+
* @license lucide-react v1.7.0 - ISC
|
|
69
|
+
*
|
|
70
|
+
* This source code is licensed under the ISC license.
|
|
71
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
72
|
+
*/const _w=[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]],Cb=at("arrow-up-down",_w);/**
|
|
73
|
+
* @license lucide-react v1.7.0 - ISC
|
|
74
|
+
*
|
|
75
|
+
* This source code is licensed under the ISC license.
|
|
76
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
77
|
+
*/const Mw=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Va=at("arrow-up",Mw);/**
|
|
78
|
+
* @license lucide-react v1.7.0 - ISC
|
|
79
|
+
*
|
|
80
|
+
* This source code is licensed under the ISC license.
|
|
81
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
82
|
+
*/const Aw=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],Rw=at("book-open",Aw);/**
|
|
83
|
+
* @license lucide-react v1.7.0 - ISC
|
|
84
|
+
*
|
|
85
|
+
* This source code is licensed under the ISC license.
|
|
86
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
87
|
+
*/const Iw=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],es=at("bot",Iw);/**
|
|
88
|
+
* @license lucide-react v1.7.0 - ISC
|
|
89
|
+
*
|
|
90
|
+
* This source code is licensed under the ISC license.
|
|
91
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
92
|
+
*/const Tw=[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]],hu=at("box",Tw);/**
|
|
93
|
+
* @license lucide-react v1.7.0 - ISC
|
|
94
|
+
*
|
|
95
|
+
* This source code is licensed under the ISC license.
|
|
96
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
97
|
+
*/const Pw=[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]],Uo=at("brain",Pw);/**
|
|
98
|
+
* @license lucide-react v1.7.0 - ISC
|
|
99
|
+
*
|
|
100
|
+
* This source code is licensed under the ISC license.
|
|
101
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
102
|
+
*/const $w=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],Eb=at("calendar",$w);/**
|
|
103
|
+
* @license lucide-react v1.7.0 - ISC
|
|
104
|
+
*
|
|
105
|
+
* This source code is licensed under the ISC license.
|
|
106
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
107
|
+
*/const Dw=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],th=at("check-check",Dw);/**
|
|
108
|
+
* @license lucide-react v1.7.0 - ISC
|
|
109
|
+
*
|
|
110
|
+
* This source code is licensed under the ISC license.
|
|
111
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
112
|
+
*/const Lw=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],vs=at("check",Lw);/**
|
|
113
|
+
* @license lucide-react v1.7.0 - ISC
|
|
114
|
+
*
|
|
115
|
+
* This source code is licensed under the ISC license.
|
|
116
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
117
|
+
*/const Ow=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],jn=at("chevron-down",Ow);/**
|
|
118
|
+
* @license lucide-react v1.7.0 - ISC
|
|
119
|
+
*
|
|
120
|
+
* This source code is licensed under the ISC license.
|
|
121
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
122
|
+
*/const Fw=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],wc=at("chevron-left",Fw);/**
|
|
123
|
+
* @license lucide-react v1.7.0 - ISC
|
|
124
|
+
*
|
|
125
|
+
* This source code is licensed under the ISC license.
|
|
126
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
127
|
+
*/const zw=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Wn=at("chevron-right",zw);/**
|
|
128
|
+
* @license lucide-react v1.7.0 - ISC
|
|
129
|
+
*
|
|
130
|
+
* This source code is licensed under the ISC license.
|
|
131
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
132
|
+
*/const Bw=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],pi=at("chevron-up",Bw);/**
|
|
133
|
+
* @license lucide-react v1.7.0 - ISC
|
|
134
|
+
*
|
|
135
|
+
* This source code is licensed under the ISC license.
|
|
136
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
137
|
+
*/const Uw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],Vs=at("circle-alert",Uw);/**
|
|
138
|
+
* @license lucide-react v1.7.0 - ISC
|
|
139
|
+
*
|
|
140
|
+
* This source code is licensed under the ISC license.
|
|
141
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
142
|
+
*/const Hw=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],ts=at("circle-check-big",Hw);/**
|
|
143
|
+
* @license lucide-react v1.7.0 - ISC
|
|
144
|
+
*
|
|
145
|
+
* This source code is licensed under the ISC license.
|
|
146
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
147
|
+
*/const qw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],kc=at("circle-dot",qw);/**
|
|
148
|
+
* @license lucide-react v1.7.0 - ISC
|
|
149
|
+
*
|
|
150
|
+
* This source code is licensed under the ISC license.
|
|
151
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
152
|
+
*/const Vw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],pu=at("circle-question-mark",Vw);/**
|
|
153
|
+
* @license lucide-react v1.7.0 - ISC
|
|
154
|
+
*
|
|
155
|
+
* This source code is licensed under the ISC license.
|
|
156
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
157
|
+
*/const Ww=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]],Gw=at("circle-stop",Ww);/**
|
|
158
|
+
* @license lucide-react v1.7.0 - ISC
|
|
159
|
+
*
|
|
160
|
+
* This source code is licensed under the ISC license.
|
|
161
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
162
|
+
*/const Kw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Xo=at("circle-x",Kw);/**
|
|
163
|
+
* @license lucide-react v1.7.0 - ISC
|
|
164
|
+
*
|
|
165
|
+
* This source code is licensed under the ISC license.
|
|
166
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
167
|
+
*/const Jw=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]],Yw=at("clipboard-list",Jw);/**
|
|
168
|
+
* @license lucide-react v1.7.0 - ISC
|
|
169
|
+
*
|
|
170
|
+
* This source code is licensed under the ISC license.
|
|
171
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
172
|
+
*/const Qw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],ia=at("clock",Qw);/**
|
|
173
|
+
* @license lucide-react v1.7.0 - ISC
|
|
174
|
+
*
|
|
175
|
+
* This source code is licensed under the ISC license.
|
|
176
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
177
|
+
*/const Xw=[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]],_b=at("code",Xw);/**
|
|
178
|
+
* @license lucide-react v1.7.0 - ISC
|
|
179
|
+
*
|
|
180
|
+
* This source code is licensed under the ISC license.
|
|
181
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
182
|
+
*/const Zw=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],nh=at("columns-3",Zw);/**
|
|
183
|
+
* @license lucide-react v1.7.0 - ISC
|
|
184
|
+
*
|
|
185
|
+
* This source code is licensed under the ISC license.
|
|
186
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
187
|
+
*/const ek=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],ja=at("copy",ek);/**
|
|
188
|
+
* @license lucide-react v1.7.0 - ISC
|
|
189
|
+
*
|
|
190
|
+
* This source code is licensed under the ISC license.
|
|
191
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
192
|
+
*/const tk=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],Mb=at("cpu",tk);/**
|
|
193
|
+
* @license lucide-react v1.7.0 - ISC
|
|
194
|
+
*
|
|
195
|
+
* This source code is licensed under the ISC license.
|
|
196
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
197
|
+
*/const nk=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],sk=at("download",nk);/**
|
|
198
|
+
* @license lucide-react v1.7.0 - ISC
|
|
199
|
+
*
|
|
200
|
+
* This source code is licensed under the ISC license.
|
|
201
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
202
|
+
*/const ik=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]],ak=at("ellipsis-vertical",ik);/**
|
|
203
|
+
* @license lucide-react v1.7.0 - ISC
|
|
204
|
+
*
|
|
205
|
+
* This source code is licensed under the ISC license.
|
|
206
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
207
|
+
*/const rk=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],fu=at("ellipsis",rk);/**
|
|
208
|
+
* @license lucide-react v1.7.0 - ISC
|
|
209
|
+
*
|
|
210
|
+
* This source code is licensed under the ISC license.
|
|
211
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
212
|
+
*/const ok=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],Ab=at("external-link",ok);/**
|
|
213
|
+
* @license lucide-react v1.7.0 - ISC
|
|
214
|
+
*
|
|
215
|
+
* This source code is licensed under the ISC license.
|
|
216
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
217
|
+
*/const lk=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],Zu=at("eye-off",lk);/**
|
|
218
|
+
* @license lucide-react v1.7.0 - ISC
|
|
219
|
+
*
|
|
220
|
+
* This source code is licensed under the ISC license.
|
|
221
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
222
|
+
*/const ck=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Gr=at("eye",ck);/**
|
|
223
|
+
* @license lucide-react v1.7.0 - ISC
|
|
224
|
+
*
|
|
225
|
+
* This source code is licensed under the ISC license.
|
|
226
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
227
|
+
*/const dk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]],Ni=at("file-code",dk);/**
|
|
228
|
+
* @license lucide-react v1.7.0 - ISC
|
|
229
|
+
*
|
|
230
|
+
* This source code is licensed under the ISC license.
|
|
231
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
232
|
+
*/const uk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]],gu=at("file-diff",uk);/**
|
|
233
|
+
* @license lucide-react v1.7.0 - ISC
|
|
234
|
+
*
|
|
235
|
+
* This source code is licensed under the ISC license.
|
|
236
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
237
|
+
*/const mk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}]],hk=at("file-minus",mk);/**
|
|
238
|
+
* @license lucide-react v1.7.0 - ISC
|
|
239
|
+
*
|
|
240
|
+
* This source code is licensed under the ISC license.
|
|
241
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
242
|
+
*/const pk=[["path",{d:"M12.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v9.34",key:"o6klzx"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10.378 12.622a1 1 0 0 1 3 3.003L8.36 20.637a2 2 0 0 1-.854.506l-2.867.837a.5.5 0 0 1-.62-.62l.836-2.869a2 2 0 0 1 .506-.853z",key:"zhnas1"}]],Rb=at("file-pen",pk);/**
|
|
243
|
+
* @license lucide-react v1.7.0 - ISC
|
|
244
|
+
*
|
|
245
|
+
* This source code is licensed under the ISC license.
|
|
246
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
247
|
+
*/const fk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}],["path",{d:"M12 18v-6",key:"17g6i2"}]],gk=at("file-plus",fk);/**
|
|
248
|
+
* @license lucide-react v1.7.0 - ISC
|
|
249
|
+
*
|
|
250
|
+
* This source code is licensed under the ISC license.
|
|
251
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
252
|
+
*/const bk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}]],xk=at("file-question-mark",bk);/**
|
|
253
|
+
* @license lucide-react v1.7.0 - ISC
|
|
254
|
+
*
|
|
255
|
+
* This source code is licensed under the ISC license.
|
|
256
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
257
|
+
*/const vk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],Na=at("file-text",vk);/**
|
|
258
|
+
* @license lucide-react v1.7.0 - ISC
|
|
259
|
+
*
|
|
260
|
+
* This source code is licensed under the ISC license.
|
|
261
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
262
|
+
*/const yk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M11 18h2",key:"12mj7e"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"M9 13v-.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 .5.5v.5",key:"qbrxap"}]],wk=at("file-type",yk);/**
|
|
263
|
+
* @license lucide-react v1.7.0 - ISC
|
|
264
|
+
*
|
|
265
|
+
* This source code is licensed under the ISC license.
|
|
266
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
267
|
+
*/const kk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]],Ib=at("file",kk);/**
|
|
268
|
+
* @license lucide-react v1.7.0 - ISC
|
|
269
|
+
*
|
|
270
|
+
* This source code is licensed under the ISC license.
|
|
271
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
272
|
+
*/const jk=[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]],Nk=at("flag",jk);/**
|
|
273
|
+
* @license lucide-react v1.7.0 - ISC
|
|
274
|
+
*
|
|
275
|
+
* This source code is licensed under the ISC license.
|
|
276
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
277
|
+
*/const Sk=[["path",{d:"M18 19a5 5 0 0 1-5-5v8",key:"sz5oeg"}],["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]],bu=at("folder-git-2",Sk);/**
|
|
278
|
+
* @license lucide-react v1.7.0 - ISC
|
|
279
|
+
*
|
|
280
|
+
* This source code is licensed under the ISC license.
|
|
281
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
282
|
+
*/const Ck=[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z",key:"1fr9dc"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}],["path",{d:"M12 15v5",key:"11xva1"}]],sh=at("folder-root",Ck);/**
|
|
283
|
+
* @license lucide-react v1.7.0 - ISC
|
|
284
|
+
*
|
|
285
|
+
* This source code is licensed under the ISC license.
|
|
286
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
287
|
+
*/const Ek=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],js=at("folder",Ek);/**
|
|
288
|
+
* @license lucide-react v1.7.0 - ISC
|
|
289
|
+
*
|
|
290
|
+
* This source code is licensed under the ISC license.
|
|
291
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
292
|
+
*/const _k=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],Zl=at("funnel",_k);/**
|
|
293
|
+
* @license lucide-react v1.7.0 - ISC
|
|
294
|
+
*
|
|
295
|
+
* This source code is licensed under the ISC license.
|
|
296
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
297
|
+
*/const Mk=[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]],Os=at("git-branch",Mk);/**
|
|
298
|
+
* @license lucide-react v1.7.0 - ISC
|
|
299
|
+
*
|
|
300
|
+
* This source code is licensed under the ISC license.
|
|
301
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
302
|
+
*/const Ak=[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]],Ir=at("git-commit-horizontal",Ak);/**
|
|
303
|
+
* @license lucide-react v1.7.0 - ISC
|
|
304
|
+
*
|
|
305
|
+
* This source code is licensed under the ISC license.
|
|
306
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
307
|
+
*/const Rk=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]],Tb=at("git-merge",Rk);/**
|
|
308
|
+
* @license lucide-react v1.7.0 - ISC
|
|
309
|
+
*
|
|
310
|
+
* This source code is licensed under the ISC license.
|
|
311
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
312
|
+
*/const Ik=[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["line",{x1:"6",x2:"6",y1:"9",y2:"21",key:"rroup"}]],Zs=at("git-pull-request",Ik);/**
|
|
313
|
+
* @license lucide-react v1.7.0 - ISC
|
|
314
|
+
*
|
|
315
|
+
* This source code is licensed under the ISC license.
|
|
316
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
317
|
+
*/const Tk=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],jc=at("globe",Tk);/**
|
|
318
|
+
* @license lucide-react v1.7.0 - ISC
|
|
319
|
+
*
|
|
320
|
+
* This source code is licensed under the ISC license.
|
|
321
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
322
|
+
*/const Pk=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],Nc=at("grid-3x3",Pk);/**
|
|
323
|
+
* @license lucide-react v1.7.0 - ISC
|
|
324
|
+
*
|
|
325
|
+
* This source code is licensed under the ISC license.
|
|
326
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
327
|
+
*/const $k=[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]],Sc=at("grip-vertical",$k);/**
|
|
328
|
+
* @license lucide-react v1.7.0 - ISC
|
|
329
|
+
*
|
|
330
|
+
* This source code is licensed under the ISC license.
|
|
331
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
332
|
+
*/const Dk=[["path",{d:"M10 16h.01",key:"1bzywj"}],["path",{d:"M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"18tbho"}],["path",{d:"M21.946 12.013H2.054",key:"zqlbp7"}],["path",{d:"M6 16h.01",key:"1pmjb7"}]],Lk=at("hard-drive",Dk);/**
|
|
333
|
+
* @license lucide-react v1.7.0 - ISC
|
|
334
|
+
*
|
|
335
|
+
* This source code is licensed under the ISC license.
|
|
336
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
337
|
+
*/const Ok=[["path",{d:"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",key:"mvr1a0"}]],Fk=at("heart",Ok);/**
|
|
338
|
+
* @license lucide-react v1.7.0 - ISC
|
|
339
|
+
*
|
|
340
|
+
* This source code is licensed under the ISC license.
|
|
341
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
342
|
+
*/const zk=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],Wa=at("history",zk);/**
|
|
343
|
+
* @license lucide-react v1.7.0 - ISC
|
|
344
|
+
*
|
|
345
|
+
* This source code is licensed under the ISC license.
|
|
346
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
347
|
+
*/const Bk=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],xa=at("inbox",Bk);/**
|
|
348
|
+
* @license lucide-react v1.7.0 - ISC
|
|
349
|
+
*
|
|
350
|
+
* This source code is licensed under the ISC license.
|
|
351
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
352
|
+
*/const Uk=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]],Pb=at("key",Uk);/**
|
|
353
|
+
* @license lucide-react v1.7.0 - ISC
|
|
354
|
+
*
|
|
355
|
+
* This source code is licensed under the ISC license.
|
|
356
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
357
|
+
*/const Hk=[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]],qk=at("keyboard",Hk);/**
|
|
358
|
+
* @license lucide-react v1.7.0 - ISC
|
|
359
|
+
*
|
|
360
|
+
* This source code is licensed under the ISC license.
|
|
361
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
362
|
+
*/const Vk=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],Ga=at("layers",Vk);/**
|
|
363
|
+
* @license lucide-react v1.7.0 - ISC
|
|
364
|
+
*
|
|
365
|
+
* This source code is licensed under the ISC license.
|
|
366
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
367
|
+
*/const Wk=[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]],Sa=at("layout-grid",Wk);/**
|
|
368
|
+
* @license lucide-react v1.7.0 - ISC
|
|
369
|
+
*
|
|
370
|
+
* This source code is licensed under the ISC license.
|
|
371
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
372
|
+
*/const Gk=[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]],Ui=at("lightbulb",Gk);/**
|
|
373
|
+
* @license lucide-react v1.7.0 - ISC
|
|
374
|
+
*
|
|
375
|
+
* This source code is licensed under the ISC license.
|
|
376
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
377
|
+
*/const Kk=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],Tr=at("link",Kk);/**
|
|
378
|
+
* @license lucide-react v1.7.0 - ISC
|
|
379
|
+
*
|
|
380
|
+
* This source code is licensed under the ISC license.
|
|
381
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
382
|
+
*/const Jk=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]],Yk=at("list-checks",Jk);/**
|
|
383
|
+
* @license lucide-react v1.7.0 - ISC
|
|
384
|
+
*
|
|
385
|
+
* This source code is licensed under the ISC license.
|
|
386
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
387
|
+
*/const Qk=[["path",{d:"M11 5h10",key:"1cz7ny"}],["path",{d:"M11 12h10",key:"1438ji"}],["path",{d:"M11 19h10",key:"11t30w"}],["path",{d:"M4 4h1v5",key:"10yrso"}],["path",{d:"M4 9h2",key:"r1h2o0"}],["path",{d:"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02",key:"xtkcd5"}]],Xk=at("list-ordered",Qk);/**
|
|
388
|
+
* @license lucide-react v1.7.0 - ISC
|
|
389
|
+
*
|
|
390
|
+
* This source code is licensed under the ISC license.
|
|
391
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
392
|
+
*/const Zk=[["path",{d:"M16 5H3",key:"m91uny"}],["path",{d:"M11 12H3",key:"51ecnj"}],["path",{d:"M16 19H3",key:"zzsher"}],["path",{d:"M18 9v6",key:"1twb98"}],["path",{d:"M21 12h-6",key:"bt1uis"}]],ej=at("list-plus",Zk);/**
|
|
393
|
+
* @license lucide-react v1.7.0 - ISC
|
|
394
|
+
*
|
|
395
|
+
* This source code is licensed under the ISC license.
|
|
396
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
397
|
+
*/const tj=[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]],Cc=at("list-tree",tj);/**
|
|
398
|
+
* @license lucide-react v1.7.0 - ISC
|
|
399
|
+
*
|
|
400
|
+
* This source code is licensed under the ISC license.
|
|
401
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
402
|
+
*/const nj=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],xu=at("list",nj);/**
|
|
403
|
+
* @license lucide-react v1.7.0 - ISC
|
|
404
|
+
*
|
|
405
|
+
* This source code is licensed under the ISC license.
|
|
406
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
407
|
+
*/const sj=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],St=at("loader-circle",sj);/**
|
|
408
|
+
* @license lucide-react v1.7.0 - ISC
|
|
409
|
+
*
|
|
410
|
+
* This source code is licensed under the ISC license.
|
|
411
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
412
|
+
*/const ij=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],Ec=at("lock",ij);/**
|
|
413
|
+
* @license lucide-react v1.7.0 - ISC
|
|
414
|
+
*
|
|
415
|
+
* This source code is licensed under the ISC license.
|
|
416
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
417
|
+
*/const aj=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],Ka=at("mail",aj);/**
|
|
418
|
+
* @license lucide-react v1.7.0 - ISC
|
|
419
|
+
*
|
|
420
|
+
* This source code is licensed under the ISC license.
|
|
421
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
422
|
+
*/const rj=[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]],oj=at("map",rj);/**
|
|
423
|
+
* @license lucide-react v1.7.0 - ISC
|
|
424
|
+
*
|
|
425
|
+
* This source code is licensed under the ISC license.
|
|
426
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
427
|
+
*/const lj=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],_c=at("maximize-2",lj);/**
|
|
428
|
+
* @license lucide-react v1.7.0 - ISC
|
|
429
|
+
*
|
|
430
|
+
* This source code is licensed under the ISC license.
|
|
431
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
432
|
+
*/const cj=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 8v6",key:"1ib9pf"}],["path",{d:"M9 11h6",key:"1fldmi"}]],dj=at("message-square-plus",cj);/**
|
|
433
|
+
* @license lucide-react v1.7.0 - ISC
|
|
434
|
+
*
|
|
435
|
+
* This source code is licensed under the ISC license.
|
|
436
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
437
|
+
*/const uj=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],na=at("message-square",uj);/**
|
|
438
|
+
* @license lucide-react v1.7.0 - ISC
|
|
439
|
+
*
|
|
440
|
+
* This source code is licensed under the ISC license.
|
|
441
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
442
|
+
*/const mj=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],Zo=at("minimize-2",mj);/**
|
|
443
|
+
* @license lucide-react v1.7.0 - ISC
|
|
444
|
+
*
|
|
445
|
+
* This source code is licensed under the ISC license.
|
|
446
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
447
|
+
*/const hj=[["path",{d:"M5 12h14",key:"1ays0h"}]],pj=at("minus",hj);/**
|
|
448
|
+
* @license lucide-react v1.7.0 - ISC
|
|
449
|
+
*
|
|
450
|
+
* This source code is licensed under the ISC license.
|
|
451
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
452
|
+
*/const fj=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],Pr=at("monitor",fj);/**
|
|
453
|
+
* @license lucide-react v1.7.0 - ISC
|
|
454
|
+
*
|
|
455
|
+
* This source code is licensed under the ISC license.
|
|
456
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
457
|
+
*/const gj=[["path",{d:"M12 2v20",key:"t6zp3m"}],["path",{d:"m15 19-3 3-3-3",key:"11eu04"}],["path",{d:"m19 9 3 3-3 3",key:"1mg7y2"}],["path",{d:"M2 12h20",key:"9i4pu4"}],["path",{d:"m5 9-3 3 3 3",key:"j64kie"}],["path",{d:"m9 5 3-3 3 3",key:"l8vdw6"}]],bj=at("move",gj);/**
|
|
458
|
+
* @license lucide-react v1.7.0 - ISC
|
|
459
|
+
*
|
|
460
|
+
* This source code is licensed under the ISC license.
|
|
461
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
462
|
+
*/const xj=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],vj=at("network",xj);/**
|
|
463
|
+
* @license lucide-react v1.7.0 - ISC
|
|
464
|
+
*
|
|
465
|
+
* This source code is licensed under the ISC license.
|
|
466
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
467
|
+
*/const yj=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],vu=at("package",yj);/**
|
|
468
|
+
* @license lucide-react v1.7.0 - ISC
|
|
469
|
+
*
|
|
470
|
+
* This source code is licensed under the ISC license.
|
|
471
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
472
|
+
*/const wj=[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]],$b=at("paperclip",wj);/**
|
|
473
|
+
* @license lucide-react v1.7.0 - ISC
|
|
474
|
+
*
|
|
475
|
+
* This source code is licensed under the ISC license.
|
|
476
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
477
|
+
*/const kj=[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]],mi=at("pause",kj);/**
|
|
478
|
+
* @license lucide-react v1.7.0 - ISC
|
|
479
|
+
*
|
|
480
|
+
* This source code is licensed under the ISC license.
|
|
481
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
482
|
+
*/const jj=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],Hs=at("pencil",jj);/**
|
|
483
|
+
* @license lucide-react v1.7.0 - ISC
|
|
484
|
+
*
|
|
485
|
+
* This source code is licensed under the ISC license.
|
|
486
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
487
|
+
*/const Nj=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],ds=at("play",Nj);/**
|
|
488
|
+
* @license lucide-react v1.7.0 - ISC
|
|
489
|
+
*
|
|
490
|
+
* This source code is licensed under the ISC license.
|
|
491
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
492
|
+
*/const Sj=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],Bn=at("plus",Sj);/**
|
|
493
|
+
* @license lucide-react v1.7.0 - ISC
|
|
494
|
+
*
|
|
495
|
+
* This source code is licensed under the ISC license.
|
|
496
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
497
|
+
*/const Cj=[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]],Ej=at("puzzle",Cj);/**
|
|
498
|
+
* @license lucide-react v1.7.0 - ISC
|
|
499
|
+
*
|
|
500
|
+
* This source code is licensed under the ISC license.
|
|
501
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
502
|
+
*/const _j=[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],Db=at("radio",_j);/**
|
|
503
|
+
* @license lucide-react v1.7.0 - ISC
|
|
504
|
+
*
|
|
505
|
+
* This source code is licensed under the ISC license.
|
|
506
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
507
|
+
*/const Mj=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],bs=at("refresh-cw",Mj);/**
|
|
508
|
+
* @license lucide-react v1.7.0 - ISC
|
|
509
|
+
*
|
|
510
|
+
* This source code is licensed under the ISC license.
|
|
511
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
512
|
+
*/const Aj=[["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}],["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09",key:"u4xsad"}],["path",{d:"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z",key:"676m9"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05",key:"92ym6u"}]],ih=at("rocket",Aj);/**
|
|
513
|
+
* @license lucide-react v1.7.0 - ISC
|
|
514
|
+
*
|
|
515
|
+
* This source code is licensed under the ISC license.
|
|
516
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
517
|
+
*/const Rj=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],Ij=at("rotate-ccw",Rj);/**
|
|
518
|
+
* @license lucide-react v1.7.0 - ISC
|
|
519
|
+
*
|
|
520
|
+
* This source code is licensed under the ISC license.
|
|
521
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
522
|
+
*/const Tj=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]],ah=at("rotate-cw",Tj);/**
|
|
523
|
+
* @license lucide-react v1.7.0 - ISC
|
|
524
|
+
*
|
|
525
|
+
* This source code is licensed under the ISC license.
|
|
526
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
527
|
+
*/const Pj=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],Lb=at("save",Pj);/**
|
|
528
|
+
* @license lucide-react v1.7.0 - ISC
|
|
529
|
+
*
|
|
530
|
+
* This source code is licensed under the ISC license.
|
|
531
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
532
|
+
*/const $j=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],zi=at("search",$j);/**
|
|
533
|
+
* @license lucide-react v1.7.0 - ISC
|
|
534
|
+
*
|
|
535
|
+
* This source code is licensed under the ISC license.
|
|
536
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
537
|
+
*/const Dj=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],qa=at("send",Dj);/**
|
|
538
|
+
* @license lucide-react v1.7.0 - ISC
|
|
539
|
+
*
|
|
540
|
+
* This source code is licensed under the ISC license.
|
|
541
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
542
|
+
*/const Lj=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],Ho=at("server",Lj);/**
|
|
543
|
+
* @license lucide-react v1.7.0 - ISC
|
|
544
|
+
*
|
|
545
|
+
* This source code is licensed under the ISC license.
|
|
546
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
547
|
+
*/const Oj=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Do=at("settings",Oj);/**
|
|
548
|
+
* @license lucide-react v1.7.0 - ISC
|
|
549
|
+
*
|
|
550
|
+
* This source code is licensed under the ISC license.
|
|
551
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
552
|
+
*/const Fj=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],zj=at("shield-alert",Fj);/**
|
|
553
|
+
* @license lucide-react v1.7.0 - ISC
|
|
554
|
+
*
|
|
555
|
+
* This source code is licensed under the ISC license.
|
|
556
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
557
|
+
*/const Bj=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],Uj=at("shield",Bj);/**
|
|
558
|
+
* @license lucide-react v1.7.0 - ISC
|
|
559
|
+
*
|
|
560
|
+
* This source code is licensed under the ISC license.
|
|
561
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
562
|
+
*/const Hj=[["path",{d:"m12.5 17-.5-1-.5 1h1z",key:"3me087"}],["path",{d:"M15 22a1 1 0 0 0 1-1v-1a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20v1a1 1 0 0 0 1 1z",key:"1o5pge"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}]],qj=at("skull",Hj);/**
|
|
563
|
+
* @license lucide-react v1.7.0 - ISC
|
|
564
|
+
*
|
|
565
|
+
* This source code is licensed under the ISC license.
|
|
566
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
567
|
+
*/const Vj=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],fs=at("sparkles",Vj);/**
|
|
568
|
+
* @license lucide-react v1.7.0 - ISC
|
|
569
|
+
*
|
|
570
|
+
* This source code is licensed under the ISC license.
|
|
571
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
572
|
+
*/const Wj=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],em=at("square-check-big",Wj);/**
|
|
573
|
+
* @license lucide-react v1.7.0 - ISC
|
|
574
|
+
*
|
|
575
|
+
* This source code is licensed under the ISC license.
|
|
576
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
577
|
+
*/const Gj=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Fi=at("square",Gj);/**
|
|
578
|
+
* @license lucide-react v1.7.0 - ISC
|
|
579
|
+
*
|
|
580
|
+
* This source code is licensed under the ISC license.
|
|
581
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
582
|
+
*/const Kj=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],_s=at("target",Kj);/**
|
|
583
|
+
* @license lucide-react v1.7.0 - ISC
|
|
584
|
+
*
|
|
585
|
+
* This source code is licensed under the ISC license.
|
|
586
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
587
|
+
*/const Jj=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],sa=at("terminal",Jj);/**
|
|
588
|
+
* @license lucide-react v1.7.0 - ISC
|
|
589
|
+
*
|
|
590
|
+
* This source code is licensed under the ISC license.
|
|
591
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
592
|
+
*/const Yj=[["path",{d:"m16 16-3 3 3 3",key:"117b85"}],["path",{d:"M3 12h14.5a1 1 0 0 1 0 7H13",key:"18xa6z"}],["path",{d:"M3 19h6",key:"1ygdsz"}],["path",{d:"M3 5h18",key:"1u36vt"}]],tm=at("text-wrap",Yj);/**
|
|
593
|
+
* @license lucide-react v1.7.0 - ISC
|
|
594
|
+
*
|
|
595
|
+
* This source code is licensed under the ISC license.
|
|
596
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
597
|
+
*/const Qj=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],zn=at("trash-2",Qj);/**
|
|
598
|
+
* @license lucide-react v1.7.0 - ISC
|
|
599
|
+
*
|
|
600
|
+
* This source code is licensed under the ISC license.
|
|
601
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
602
|
+
*/const Xj=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],Zj=at("trending-up",Xj);/**
|
|
603
|
+
* @license lucide-react v1.7.0 - ISC
|
|
604
|
+
*
|
|
605
|
+
* This source code is licensed under the ISC license.
|
|
606
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
607
|
+
*/const eN=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Kr=at("triangle-alert",eN);/**
|
|
608
|
+
* @license lucide-react v1.7.0 - ISC
|
|
609
|
+
*
|
|
610
|
+
* This source code is licensed under the ISC license.
|
|
611
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
612
|
+
*/const tN=[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]],rh=at("unlink",tN);/**
|
|
613
|
+
* @license lucide-react v1.7.0 - ISC
|
|
614
|
+
*
|
|
615
|
+
* This source code is licensed under the ISC license.
|
|
616
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
617
|
+
*/const nN=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Fa=at("user",nN);/**
|
|
618
|
+
* @license lucide-react v1.7.0 - ISC
|
|
619
|
+
*
|
|
620
|
+
* This source code is licensed under the ISC license.
|
|
621
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
622
|
+
*/const sN=[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]],Ob=at("webhook",sN);/**
|
|
623
|
+
* @license lucide-react v1.7.0 - ISC
|
|
624
|
+
*
|
|
625
|
+
* This source code is licensed under the ISC license.
|
|
626
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
627
|
+
*/const iN=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],ec=at("workflow",iN);/**
|
|
628
|
+
* @license lucide-react v1.7.0 - ISC
|
|
629
|
+
*
|
|
630
|
+
* This source code is licensed under the ISC license.
|
|
631
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
632
|
+
*/const aN=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],oh=at("wrench",aN);/**
|
|
633
|
+
* @license lucide-react v1.7.0 - ISC
|
|
634
|
+
*
|
|
635
|
+
* This source code is licensed under the ISC license.
|
|
636
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
637
|
+
*/const rN=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],yn=at("x",rN);/**
|
|
638
|
+
* @license lucide-react v1.7.0 - ISC
|
|
639
|
+
*
|
|
640
|
+
* This source code is licensed under the ISC license.
|
|
641
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
642
|
+
*/const oN=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],us=at("zap",oN),yu="fusion:version-reload",wu="fusion:version-update";let nm=!0;function Qc(e){nm=e}function lN(){try{if(sessionStorage.getItem(wu))return sessionStorage.removeItem(wu),!0}catch{}return!1}function sm(e){if(sessionStorage.getItem(yu)){console.warn("[versionCheck] reload already attempted, suppressing",e);return}if(sessionStorage.setItem(yu,"1"),!nm){console.info("[versionCheck] auto-reload disabled by setting, skipping reload:",e);return}console.info("[versionCheck] reloading:",e),window.location.reload()}function cN(e){const n=e instanceof Error?e.message:typeof e=="string"?e:"";return/Failed to fetch dynamically imported module|error loading dynamically imported module|Importing a module script failed|is not a valid JavaScript MIME type|ChunkLoadError|Unable to preload (?:CSS|module) for/i.test(n)}function dN(e){return cN(e)?(sm(`chunk load error: ${e?.message??e}`),!0):!1}async function uN(){try{const e=await fetch("/version.json",{cache:"no-store",headers:{Accept:"application/json"}});if(!e.ok||!(e.headers.get("content-type")??"").includes("application/json"))return null;const s=await e.json();return typeof s.version=="string"?s.version:null}catch{return null}}async function mN(){try{const e=new AbortController,n=setTimeout(()=>e.abort(),3e3),s=await fetch("/api/settings",{headers:{Accept:"application/json"},signal:e.signal});clearTimeout(n),s.ok&&(await s.json()).autoReloadOnVersionChange===!1&&(nm=!1)}catch{}}const hN=6e4;let lh=0,Xc=!1;async function Zc(){if(!(Xc||document.visibilityState!=="visible")&&!(Date.now()-lh<hN)){lh=Date.now(),Xc=!0;try{const e=await uN();if(e&&e!=="236ce62ef-f6a4fbd5"){try{sessionStorage.setItem(wu,"1")}catch{}sm(`build version changed: 236ce62ef-f6a4fbd5 -> ${e}`)}}finally{Xc=!1}}}function pN(){mN(),window.setTimeout(()=>sessionStorage.removeItem(yu),5e3),document.addEventListener("visibilitychange",()=>{Zc()}),window.addEventListener("focus",()=>{Zc()}),window.setTimeout(()=>void Zc(),2e3)}class el extends i.Component{constructor(n){super(n),this.state={hasError:!1,error:null}}static getDerivedStateFromError(n){return{hasError:!0,error:n}}componentDidCatch(n,s){console.error("[ErrorBoundary]",n,s),!dN(n)&&this.props.onError?.(n,s)}resetErrorBoundary=()=>{this.setState({hasError:!1,error:null})};render(){if(!this.state.hasError)return this.props.children;if(this.props.fallback)return this.props.fallback;const n=this.props.level??"page",a=n==="modal"?"This section encountered an error":"Something went wrong";return t.jsxs("div",{className:`error-boundary error-boundary--${n}`,children:[t.jsx("div",{className:"error-boundary__icon",children:t.jsx(Kr,{size:40})}),t.jsx("div",{className:"error-boundary__title",children:a}),this.state.error&&t.jsx("pre",{className:"error-boundary__message",children:this.state.error.message}),t.jsxs("div",{className:"error-boundary__actions",children:[t.jsx("button",{className:"btn btn-primary",onClick:this.resetErrorBoundary,children:"Retry"}),t.jsx("button",{className:"btn",onClick:()=>window.location.reload(),children:"Reload page"})]})]})}}function Cs({children:e,onError:n}){return t.jsx(el,{level:"page",onError:n,children:e})}function za({children:e,onError:n}){return t.jsx(el,{level:"modal",onError:n,children:e})}function fN({children:e,onError:n}){return t.jsx(el,{level:"root",onError:n,children:e})}const gN="modulepreload",bN=function(e){return"/"+e},ch={},Tn=function(n,s,a){let r=Promise.resolve();if(s&&s.length>0){let l=function(u){return Promise.all(u.map(h=>Promise.resolve(h).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),d=c?.nonce||c?.getAttribute("nonce");r=l(s.map(u=>{if(u=bN(u),u in ch)return;ch[u]=!0;const h=u.endsWith(".css"),m=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${m}`))return;const f=document.createElement("link");if(f.rel=h?"stylesheet":gN,h||(f.as="script"),f.crossOrigin="",f.href=u,d&&f.setAttribute("nonce",d),document.head.appendChild(f),h)return new Promise((p,g)=>{f.addEventListener("load",p),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(l){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=l,window.dispatchEvent(c),!c.defaultPrevented)throw l}return r.then(l=>{for(const c of l||[])c.status==="rejected"&&o(c.reason);return n().catch(o)})},xN=20;function vN(e){const n=e.todoCount>e.threshold&&e.idleNonEphemeralAgentCount===0;return{atRisk:n,todoCount:e.todoCount,inProgressCount:e.inProgressCount,inReviewCount:e.inReviewCount,idleNonEphemeralAgentCount:e.idleNonEphemeralAgentCount,threshold:e.threshold,reason:n?"todo-exceeds-threshold-and-no-idle-agents":"ok"}}const yN={themeMode:"dark",colorTheme:"default",dashboardFontScalePct:100,defaultProvider:void 0,defaultModelId:void 0,fallbackProvider:void 0,fallbackModelId:void 0,defaultThinkingLevel:void 0,ntfyEnabled:!1,ntfyTopic:void 0,ntfyBaseUrl:void 0,ntfyAccessToken:void 0,ntfyEvents:["in-review","merged","failed","awaiting-approval","awaiting-user-review","planning-awaiting-input","message:agent-to-user","message:agent-to-agent","message:room","gridlock","fallback-used","memory-dreams-processed","token-budget"],ntfyDashboardHost:void 0,taskTokenBudget:void 0,failureNotificationDelayMs:3e4,failureNotificationMode:"sticky-only",webhookEnabled:!1,webhookUrl:void 0,webhookFormat:"generic",webhookEvents:[],notificationProviders:[],customProviders:[],defaultProjectId:void 0,setupComplete:void 0,favoriteProviders:void 0,favoriteModels:void 0,openrouterModelSync:!0,opencodeGoModelSync:!0,updateCheckEnabled:!0,fnBinaryCheckEnabled:!0,updateCheckFrequency:"daily",autoReloadOnVersionChange:!0,showGitHubStarButton:!0,githubTrackingDefaultRepo:void 0,modelOnboardingComplete:void 0,useClaudeCli:void 0,useDroidCli:void 0,useLlamaCpp:void 0,executionGlobalProvider:void 0,executionGlobalModelId:void 0,planningGlobalProvider:void 0,planningGlobalModelId:void 0,validatorGlobalProvider:void 0,validatorGlobalModelId:void 0,titleSummarizerGlobalProvider:void 0,titleSummarizerGlobalModelId:void 0,daemonToken:void 0,daemonPort:4040,daemonHost:"127.0.0.1",settingsSyncEnabled:!1,settingsSyncAuth:!1,settingsSyncInterval:9e5,settingsSyncConflictResolution:"last-write-wins",dashboardCurrentNodeId:void 0,dashboardCurrentProjectIdByNode:void 0,vitestAutoKillEnabled:!0,vitestKillThresholdPct:90,persistAgentToolOutput:!0,persistAgentThinkingLogPermanent:!1,persistAgentThinkingLogEphemeral:!1,persistAgentThinkingLog:!1,agentMemoryInclusionMode:"full",researchGlobalDefaults:{searchProvider:void 0,synthesisProvider:void 0,synthesisModelId:void 0,enabledSources:{webSearch:!0,pageFetch:!0,github:!1,localDocs:!0,llmSynthesis:!0},maxSourcesPerRun:20,defaultExportFormat:"markdown"},researchGlobalEnabled:!0,researchGlobalMaxConcurrentRuns:3,researchGlobalDefaultTimeout:3e5,researchGlobalMaxSourcesPerRun:20,researchGlobalMaxSynthesisRounds:2,researchGlobalWebSearchProvider:"builtin",researchGlobalSearxngUrl:void 0,researchGlobalBraveApiKey:void 0,researchGlobalGoogleSearchApiKey:void 0,researchGlobalGoogleSearchCx:void 0,researchGlobalTavilyApiKey:void 0,researchGlobalGitHubEnabled:!1,researchGlobalLocalDocsEnabled:!0,researchGlobalMaxSearchResults:10,researchGlobalFetchTimeoutMs:3e4,researchGlobalUserAgent:"FusionResearchBot/1.0",remoteAccess:{activeProvider:null,providers:{tailscale:{enabled:!1,hostname:"",targetPort:0,acceptRoutes:!1},cloudflare:{enabled:!1,quickTunnel:!0,tunnelName:"",tunnelToken:null,ingressUrl:""}},tokenStrategy:{persistent:{enabled:!0,token:null},shortLived:{enabled:!1,ttlMs:9e5,maxTtlMs:864e5}},lifecycle:{rememberLastRunning:!1,wasRunningOnShutdown:!1,lastRunningProvider:null}},experimentalFeatures:{}},wN={globalPause:!1,globalPauseReason:void 0,enginePaused:!1,maxConcurrent:2,maxTriageConcurrent:2,globalMaxConcurrent:4,maxWorktrees:4,pollIntervalMs:15e3,heartbeatMultiplier:1,autoClaimCandidatesInPrompt:5,heartbeatScopeDiscipline:"strict",heartbeatPromptTemplate:"default",groupOverlappingFiles:!0,overlapIgnorePaths:[],autoMerge:!0,mergeStrategy:"direct",directMergeCommitStrategy:"auto",requirePrApproval:!1,pushAfterMerge:!1,pushRemote:"origin",unavailableNodePolicy:"block",defaultNodeId:void 0,worktreeInitCommand:void 0,testCommand:void 0,buildCommand:void 0,recycleWorktrees:!1,executorAllowSiblingBranchRename:!1,worktreeNaming:"random",taskPrefix:"FN",includeTaskIdInCommit:!0,commitAuthorEnabled:!0,commitAuthorName:"Fusion",commitAuthorEmail:"noreply@runfusion.ai",planningProvider:void 0,planningModelId:void 0,planningFallbackProvider:void 0,planningFallbackModelId:void 0,defaultProviderOverride:void 0,defaultModelIdOverride:void 0,executionProvider:void 0,executionModelId:void 0,validatorProvider:void 0,validatorModelId:void 0,validatorFallbackProvider:void 0,validatorFallbackModelId:void 0,modelPresets:[],autoSelectModelPreset:!1,completionDocumentationMode:"off",defaultPresetBySize:{},autoResolveConflicts:!0,smartConflictResolution:!0,mergerAutostashMaxAgeHours:24,worktreeRebaseBeforeMerge:!0,worktreeRebaseRemote:"",worktreeRebaseLocalBase:!0,mergeConflictStrategy:"smart-prefer-main",mergeDiffVolumeMinLines:void 0,mergeDiffVolumeThreshold:void 0,mergeDiffVolumeAllowlist:void 0,mergeStrategyOverlapBehavior:"flip-to-prefer-branch",postMergeAuditMode:"warn",mergeAuditAutoRecovery:"ai-assisted",autoRecovery:{mode:"deterministic-only",maxRetries:3},workflowStepTimeoutMs:36e4,workflowStepScopeEnforcement:"block",planOnlyScopeLeakEnforcement:"warn",workflowRevisionForkOnScopeMismatch:!0,strictScopeEnforcement:!1,buildRetryCount:0,verificationFixRetries:3,buildTimeoutMs:3e5,requirePlanApproval:!1,ephemeralAgentsEnabled:!0,agentProvisioning:{},defaultAgentPermissionPolicy:void 0,specStalenessEnabled:!1,specStalenessMaxAgeMs:360*60*1e3,taskStuckTimeoutMs:6e5,stalePausedReviewThresholdMs:1440*6e4,capacityRiskBannerEnabled:!1,capacityRiskTodoThreshold:20,staleHighFanoutBlockerAgeThresholdMs:7200*1e3,staleInProgressWarningMs:240*6e4,staleInProgressCriticalMs:1440*6e4,staleInReviewWarningMs:1440*6e4,staleInReviewCriticalMs:4320*6e4,aiSessionTtlMs:10080*60*1e3,aiSessionCleanupIntervalMs:3600*1e3,autoUnpauseEnabled:!0,autoUnpauseBaseDelayMs:3e5,autoUnpauseMaxDelayMs:36e5,maxStuckKills:6,maxBranchConflictRecoveries:5,maxReviewerContextRetries:2,maxReviewerFallbackRetries:2,maxTotalRetriesBeforeFail:25,preserveProgressOnStuckRequeue:!0,maxPostReviewFixes:1,maxSpawnedAgentsPerParent:5,maxSpawnedAgentsGlobal:20,maintenanceIntervalMs:3e5,autoArchiveDoneTasksEnabled:!0,autoArchiveDoneAfterMs:2880*60*1e3,archiveAgentLogMode:"compact",autoUpdatePrStatus:!1,githubCommentOnDone:!1,githubCommentTemplate:void 0,githubTrackingEnabledByDefault:!1,githubTrackingDefaultRepo:void 0,githubAuthMode:"gh-cli",githubAuthToken:void 0,autoBackupEnabled:!1,autoBackupSchedule:"0 2 * * *",autoBackupRetention:7,autoBackupDir:".fusion/backups",memoryBackupEnabled:!1,memoryBackupSchedule:"0 3 * * *",memoryBackupRetention:14,memoryBackupDir:".fusion/backups/memory",memoryBackupScope:"all",autoSummarizeTitles:!1,useAiMergeCommitSummary:!0,titleSummarizerProvider:void 0,titleSummarizerModelId:void 0,titleSummarizerFallbackProvider:void 0,titleSummarizerFallbackModelId:void 0,scripts:void 0,setupScript:void 0,insightExtractionEnabled:!1,insightExtractionSchedule:"0 2 * * *",insightExtractionMinIntervalMs:864e5,taskEvaluationEnabled:!1,taskEvaluationSchedule:"0 5 * * *",taskEvaluationProvider:void 0,taskEvaluationModelId:void 0,taskEvaluationFollowUpPolicy:"off",taskEvaluationRetention:void 0,memoryEnabled:!0,memoryBackendType:"qmd",memoryAutoSummarizeEnabled:!1,memoryAutoSummarizeThresholdChars:5e4,memoryAutoSummarizeSchedule:"0 3 * * *",memoryDreamsEnabled:!1,memoryDreamsSchedule:"0 4 * * *",tokenCap:void 0,taskTokenBudget:void 0,runStepsInNewSessions:!1,maxParallelSteps:2,missionStaleThresholdMs:6e5,missionMaxTaskRetries:3,missionHealthCheckIntervalMs:3e5,agentPrompts:void 0,promptOverrides:void 0,reflectionEnabled:!1,reflectionIntervalMs:36e5,reflectionAfterTask:!0,reviewHandoffPolicy:"disabled",showQuickChatFAB:!1,chatRoomRecentVerbatimMessages:12,chatRoomCompactionFetchLimit:80,chatRoomSummaryMaxChars:1500,researchSettings:{enabled:!0,searchProvider:void 0,synthesisProvider:void 0,synthesisModelId:void 0,enabledSources:{webSearch:!0,pageFetch:!0,github:!1,localDocs:!0,llmSynthesis:!0},limits:{maxConcurrentRuns:3,maxSourcesPerRun:20,maxDurationMs:3e5,requestTimeoutMs:3e4}},evalSettings:{enabled:!1,intervalMs:864e5,evaluatorProvider:void 0,evaluatorModelId:void 0,followUpPolicy:"suggest-only",retentionDays:30},researchEnabled:!0,researchMaxConcurrentRuns:3,researchDefaultTimeout:3e5,researchMaxSourcesPerRun:20,researchMaxSynthesisRounds:2},kN=Object.freeze(Object.keys(yN)),jN=Object.freeze(Object.keys(wN));function F3(e){return kN.includes(e)}function z3(e){return jN.includes(e)}function B3(e,n){const s=n.ephemeral?e?.persistAgentThinkingLogEphemeral:e?.persistAgentThinkingLogPermanent;return typeof s=="boolean"?s:typeof e?.persistAgentThinkingLog=="boolean"?e.persistAgentThinkingLog:!1}function Me(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function NN(e){return!!(e?.provider&&e?.modelId)}function Ca(...e){for(const n of e)if(NN(n))return{provider:n.provider,modelId:n.modelId};return{}}function Mc(e){return Ca({provider:e?.defaultProviderOverride,modelId:e?.defaultModelIdOverride},{provider:e?.defaultProvider,modelId:e?.defaultModelId})}function SN(e){return Ca({provider:e?.executionProvider,modelId:e?.executionModelId},{provider:e?.executionGlobalProvider,modelId:e?.executionGlobalModelId},Mc(e))}function CN(e){return Ca({provider:e?.planningProvider,modelId:e?.planningModelId},{provider:e?.planningGlobalProvider,modelId:e?.planningGlobalModelId},Mc(e))}function EN(e){return Ca({provider:e?.validatorProvider,modelId:e?.validatorModelId},{provider:e?.validatorGlobalProvider,modelId:e?.validatorGlobalModelId},Mc(e))}function U3(e){return Ca({provider:e?.titleSummarizerProvider,modelId:e?.titleSummarizerModelId},{provider:e?.titleSummarizerGlobalProvider,modelId:e?.titleSummarizerGlobalModelId},{provider:e?.planningProvider,modelId:e?.planningModelId},Mc(e))}function Fb(e,n){return Ca({provider:e.modelProvider,modelId:e.modelId},SN(n))}function zb(e,n){return Ca({provider:e.validatorModelProvider,modelId:e.validatorModelId},EN(n))}function Bb(e,n){return Ca({provider:e.planningModelProvider,modelId:e.planningModelId},CN(n))}const H3=["off","minimal","low","medium","high"],va=["triage","todo","in-progress","in-review","done","archived"],tc="triage";function im(e){return typeof e=="string"&&va.includes(e)}function Ub(e,n=tc){return im(e)?e:n}const Ea=["low","normal","high","urgent"],Ps="normal",am=5,Hb=7200*1e3,_N=["default","ocean","forest","sunset","zen","berry","high-contrast","industrial","monochrome","slate","ash","graphite","silver","solarized","factory","ayu","one-dark","nord","dracula","gruvbox","tokyo-night","catppuccin-mocha","github-dark","everforest","rose-pine","kanagawa","night-owl","palenight","monokai-pro","slime","brutalist","neon-city","parchment","terminal","glass","horizon","vitesse","outrun","snazzy","porple","espresso","mars","poimandres","ember","rust","copper","foundry","carbon","sandstone","lagoon","frost","lavender","neon-bloom","sepia"],Ac=/^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/,gs={triage:"Planning",todo:"Todo","in-progress":"In Progress","in-review":"In Review",done:"Done",archived:"Archived"},MN={triage:"Raw ideas — AI will plan these",todo:"Specified and ready to start","in-progress":"AI is working on this in a worktree","in-review":"Complete — ready to merge",done:"Merged and closed",archived:"Completed and archived"},ku={triage:["todo"],todo:["in-progress","triage"],"in-progress":["in-review","todo","triage","done"],"in-review":["done","in-progress","todo","triage"],done:["todo","triage","archived"],archived:["done"]};function AN(e){const n=e.metadata??{};return!!(n.agentKind==="task-worker"||n.taskWorker===!0||n.managedBy==="task-executor"||n.type==="spawned"||n.internal===!0||e.role==="executor"&&typeof e.name=="string"&&e.name.startsWith("executor-")&&e.reportsTo==null||e.role==="executor"&&e.name==="verification-agent"&&e.reportsTo==null)}const q3=["git_write","file_write_delete","command_execution","network_api","task_agent_mutation"],V3={git_write:["git commit","git push","git merge","git branch -d","git worktree add","write","edit"],file_write_delete:["write","edit","fn_task_attach"],command_execution:["bash (non-git)","read","find","grep","ls"],network_api:["fn_research_run (web/research)","fn_web_fetch"],task_agent_mutation:["fn_task_create","fn_delegate_task","fn_task_import_github","fn_task_import_github_issue","fn_spawn_agent","fn_update_agent_config","fn_update_identity"]},W3=["fn_send_message","fn_post_room_message","fn_read_messages","fn_task_log","fn_task_done","fn_heartbeat_done","fn_task_document_write","fn_task_document_read","fn_memory_search","fn_memory_get","fn_memory_append","fn_read_evaluations","fn_reflect_on_performance"],G3=["always","trusted-only","never"],rm="fn.authToken",dh="token",RN="fn_token";let Er,uh=!1,nc=!1;const ju="fn:auth-token-recovery-required";function IN(){try{const e=window.localStorage.getItem(rm);return e&&e.length>0?e:void 0}catch{return}}function qb(e){try{window.localStorage.setItem(rm,e)}catch{}}function TN(){if(!(uh||typeof window>"u")){uh=!0;try{const e=new URL(window.location.href),n=e.searchParams.get(dh);if(!n)return;qb(n),e.searchParams.delete(dh);const s=e.pathname+(e.search?e.search:"")+e.hash;return window.history.replaceState(window.history.state,"",s),n}catch{return}}}function $r(){if(Er!==void 0)return Er;const e=TN();if(e)return Er=e,e;const n=IN();if(n)return Er=n,n}function PN(e){Er=e,nc=!1,qb(e)}function $N(){Er=void 0,nc=!1;try{window.localStorage.removeItem(rm)}catch{}}function mh(e){return e==="ws:"?"http:":e==="wss:"?"https:":e}function DN(e){return e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function LN(e){if(typeof window>"u")return!1;const n=new URL(window.location.origin);if(!DN(e.protocol))return!1;const s=e.hostname===n.hostname,a=e.port===n.port,r=mh(e.protocol)===mh(n.protocol);return s&&a&&r}function ON(e){if(!(typeof window>"u"))try{const n=new URL(e,window.location.origin),s=e.startsWith("/");return{parsed:n,preserveRelativePath:s}}catch{return}}function Ci(e){const n=$r();if(!n||typeof window>"u")return e;const s=ON(e);return!s||!LN(s.parsed)?e:(s.parsed.searchParams.set(RN,n),s.preserveRelativePath?`${s.parsed.pathname}${s.parsed.search}${s.parsed.hash}`:s.parsed.toString())}function Ei(e){const n=$r();if(!n)return e;const s=new Headers(e??{});return s.has("Authorization")||s.set("Authorization",`Bearer ${n}`),s}function FN(e){if(!e||typeof e!="object")return!1;const n=e;return n.error==="Unauthorized"&&n.message==="Valid bearer token required"}function zN(){typeof window>"u"||nc||(nc=!0,window.dispatchEvent(new CustomEvent(ju)))}async function BN(e){if(e.status===401)try{const n=e.clone();if(!(n.headers.get("content-type")??"").toLowerCase().includes("application/json"))return;const a=await n.json();FN(a)&&zN()}catch{}}function UN(){if(typeof window>"u"||window.__fnAuthFetchInstalled)return;window.__fnAuthFetchInstalled=!0,$r();const e=window.fetch.bind(window);window.fetch=function(s,a){const r=$r(),o=typeof s=="string"?s:s instanceof URL?s.toString():s.url;if(!(()=>{try{const d=new URL(o,window.location.origin);return d.origin!==window.location.origin?!1:d.pathname.startsWith("/api/")||d.pathname==="/api"}catch{return o.startsWith("/api/")||o==="/api"}})())return e(s,a);const c=new Headers(a?.headers??(s instanceof Request?s.headers:void 0));return r&&!c.has("Authorization")&&c.set("Authorization",`Bearer ${r}`),e(s,{...a,headers:c}).then(d=>(BN(d),d))}}class sc extends Error{status;details;constructor(n,s,a){super(n),this.name="ApiRequestError",this.status=s,this.details=a}}function HN(e){const n=e.trim();return n.startsWith("<!DOCTYPE")||n.startsWith("<html")||n.startsWith("<HTML")}function As(e){return`/api${e}`}async function I(e,n={}){const s=As(e),a=$r(),r=(()=>{if(a){const f=new Headers(n.headers??{});return f.has("Content-Type")||f.set("Content-Type","application/json"),Ei(f)}if(!n.headers)return{"Content-Type":"application/json"};const m=new Headers(n.headers);return m.has("Content-Type")||m.set("Content-Type","application/json"),Object.fromEntries(m.entries())})(),o=await fetch(s,{...n,headers:r});if(o.status===204){if(!o.ok)throw new Error(`Request failed for ${s}: ${o.status} ${o.statusText}`);return}const l=o.headers.get("content-type")??"",c=await o.text(),d=l.includes("application/json");if(l.includes("text/html")||HN(c))throw new Error(`API returned HTML instead of JSON for ${s}. The endpoint may not be properly configured. (${o.status} ${o.statusText})`);if(!d){const m=c.length>160?`${c.slice(0,160)}...`:c;throw new Error(`API returned ${l||"an unknown content type"} instead of JSON for ${s}. (${o.status} ${o.statusText})${m?` Response: ${m}`:""}`)}let h;try{h=c?JSON.parse(c):null}catch{throw new Error(`API returned invalid JSON for ${s}. (${o.status} ${o.statusText})`)}if(!o.ok){const m=h;throw new sc(m?.error||`Request failed for ${s}: ${o.status} ${o.statusText}`,o.status,m?.details)}return h}function qN(){return I("/health")}function VN(){return I("/health/refresh",{method:"POST"})}function K3(){return I("/updates/check")}function WN(e,n,s,a,r){const o=new URLSearchParams;e!==void 0&&o.set("limit",String(e)),n!==void 0&&o.set("offset",String(n)),s&&o.set("projectId",s),a&&o.set("q",a),r&&o.set("includeArchived","1");const l=o.size>0?`?${o.toString()}`:"";return I(`/tasks${l}`)}async function Ja(e,n){const a=As(V(`/tasks/${e}`,n));for(let r=1;r<=2;r++){const o=await fetch(a,{headers:Ei({"Content-Type":"application/json"})}),l=await o.json();if(o.ok)return l;if(r===2)throw new Error(l.error||"Request failed")}throw new Error("Request failed")}function Vb(e,n,s){const{title:a,description:r,column:o,dependencies:l,breakIntoSubtasks:c,enabledWorkflowSteps:d,assignedAgentId:u,modelPresetId:h,modelProvider:m,modelId:f,validatorModelProvider:p,validatorModelId:g,planningModelProvider:w,planningModelId:v,thinkingLevel:b,summarize:y,reviewLevel:N,executionMode:S,priority:C,source:x,nodeId:k,branch:R,baseBranch:z,githubTracking:_}=e;return il(V("/tasks",n),{method:"POST",nodeId:s?.transportNodeId,localNodeId:s?.localNodeId,body:JSON.stringify({title:a,description:r,column:o,dependencies:l,breakIntoSubtasks:c,enabledWorkflowSteps:d,assignedAgentId:u,modelPresetId:h,modelProvider:m,modelId:f,validatorModelProvider:p,validatorModelId:g,planningModelProvider:w,planningModelId:v,thinkingLevel:b,summarize:y,reviewLevel:N,executionMode:S,priority:C,source:x,nodeId:k,branch:R,baseBranch:z,githubTracking:_})})}function Ds(e,n,s){return I(V(`/tasks/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}function GN(e,n,s,a,r,o,l,c,d){return I(V("/tasks/batch-update-models",d),{method:"POST",body:JSON.stringify({taskIds:e,modelProvider:n,modelId:s,validatorModelProvider:a,validatorModelId:r,planningModelProvider:o,planningModelId:l,nodeId:c})})}function KN(e,n,s,a){return I(V(`/tasks/${e}/move`,s),{method:"POST",body:JSON.stringify({column:n,...typeof a=="object"&&a?.preserveProgress?{preserveProgress:!0}:{}})})}function JN(e,n,s){const a=new URLSearchParams;s?.removeDependencyReferences&&a.set("removeDependencyReferences","true"),s?.githubIssueAction&&a.set("githubIssueAction",s.githubIssueAction);const r=a.size>0?`?${a.toString()}`:"";return I(V(`/tasks/${e}${r}`,n),{method:"DELETE"})}function YN(e,n){return I(V(`/tasks/${e}/merge`,n),{method:"POST"})}function QN(e,n){return I(V(`/tasks/${e}/retry`,n),{method:"POST"})}function XN(e,n){return I(V(`/tasks/${e}/reset`,n),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({confirm:!0})})}function ZN(e,n){return I(V(`/tasks/${e}/duplicate`,n),{method:"POST"})}function Wb(e,n){return I(V(`/tasks/${e}/pause`,n),{method:"POST"})}function Gb(e,n){return I(V(`/tasks/${e}/unpause`,n),{method:"POST"})}function eS(e,n){return I(V(`/tasks/${e}/archive`,n),{method:"POST"})}function tS(e,n){return I(V(`/tasks/${e}/unarchive`,n),{method:"POST"})}function nS(e){return I(V("/tasks/archive-all-done",e),{method:"POST"}).then(n=>n.archived)}function sS(e,n){return I(V(`/tasks/${e}/approve-plan`,n),{method:"POST"})}function iS(e,n){return I(V(`/tasks/${e}/reject-plan`,n),{method:"POST"})}function aS(e){return I(V("/config",e))}function Rc(e){return I(V("/settings",e))}function pl(e,n){return I(V("/settings",n),{method:"PUT",body:JSON.stringify(e)})}function rS(e){return I(V("/update-check",e))}function J3(e){return I(V("/remote/settings",e))}function Y3(e,n){return I(V("/remote/settings",n),{method:"PUT",body:JSON.stringify(e)})}function Q3(e){return I(V("/remote/status",e))}function X3(e){return I(V("/remote/install-cloudflared",e),{method:"POST"})}function Z3(e){return I(V("/remote/tunnel/start",e),{method:"POST"})}function e5(e){return I(V("/remote/tunnel/stop",e),{method:"POST"})}function t5(e){return I(V("/remote/tunnel/kill-external",e),{method:"POST"})}function n5(e){return I(V("/remote/token/persistent/regenerate",e),{method:"POST"})}function s5(e,n){return I(V("/remote/token/short-lived/generate",n),{method:"POST",body:JSON.stringify({ttlMs:e})})}function Kb(e,n,s){const a=new URLSearchParams;e&&a.set("format",e),a.set("tokenType",n),n==="short-lived"&&typeof s=="number"&&Number.isFinite(s)&&a.set("ttlMs",String(s));const r=a.toString();return r?`?${r}`:""}function i5(e={}){const{projectId:n,tokenType:s="persistent",ttlMs:a}=e,r=Kb(null,s,a);return I(V(`/remote/url${r}`,n))}function a5(e="text",n={}){const{projectId:s,tokenType:a="persistent",ttlMs:r}=n,o=Kb(e,a,r);return I(V(`/remote/qr${o}`,s))}function r5(e){return I(V("/memory",e))}function o5(e,n){return I(V("/memory",n),{method:"PUT",body:JSON.stringify({content:e})})}function l5(e){return I(V("/memory/files",e))}function c5(e,n){const s=`path=${encodeURIComponent(e)}`;return I(V(`/memory/file?${s}`,n))}function d5(e,n,s){return I(V("/memory/file",s),{method:"PUT",body:JSON.stringify({path:e,content:n})})}function u5(e,n){let s,a=n;if(n!==void 0)s=e;else if(typeof e=="string"&&e.trim().length>0){const r=e.trim();r.includes("/")||r.endsWith(".md")||r.startsWith(".")?s=r:a=r}return I(V("/memory/compact",a),{method:"POST",body:JSON.stringify(s?{path:s}:{})})}function m5(e){return I(V("/memory/dream",e),{method:"POST"})}function h5(e){return I(V("/memory/insights",e))}function p5(e,n){return I(V("/memory/insights",n),{method:"PUT",body:JSON.stringify({content:e})})}function f5(e){return I(V("/memory/extract",e),{method:"POST"})}function g5(e){return I(V("/memory/audit",e))}function b5(e){return I(V("/memory/stats",e))}function x5(e){return I(V("/memory/backend",e))}function v5(e){return I(V("/memory/install-qmd",e),{method:"POST"})}function y5(e,n){return I(V("/memory/test",n),{method:"POST",body:JSON.stringify({query:e})})}function aa(){return I("/settings/global")}function Jn(e){return I("/settings/global",{method:"PUT",body:JSON.stringify(e)})}function w5(e){return I(V("/settings/scopes",e))}function k5(e){return I(V("/settings/pi-extensions",e))}function j5(e,n){return I(V("/settings/pi-extensions",n),{method:"PUT",body:JSON.stringify({disabledIds:e})})}function N5(e,n,s){return I(V("/settings/test-notification",s),{method:"POST",body:JSON.stringify({providerId:e,...n??{}})})}function S5(){return I("/pi-settings")}async function C5(e){return I("/pi-settings",{method:"PUT",body:JSON.stringify(e)})}async function E5(e){return I("/pi-settings/packages",{method:"POST",body:JSON.stringify({source:e})})}async function _5(e){return I(V("/pi-settings/reinstall-fusion",e),{method:"POST"})}async function Ic(e,n,s){const a=new FormData;a.append("file",n);const r=await fetch(As(V(`/tasks/${e}/attachments`,s)),{method:"POST",headers:Ei(),body:a}),o=await r.json();if(!r.ok)throw new Error(o.error||"Upload failed");return o}async function oS(e,n,s){return I(V(`/tasks/${e}/attachments/${n}`,s),{method:"DELETE"})}async function hh(e,n,s){const a=new URLSearchParams;s?.limit!==void 0&&a.set("limit",String(s.limit)),s?.offset!==void 0&&a.set("offset",String(s.offset));const r=a.toString()?`?${a.toString()}`:"",o=V(`/tasks/${e}/logs${r}`,n),l=await fetch(As(o),{headers:Ei()});if(!l.ok){const h=await l.json().catch(()=>({error:"Failed to fetch agent logs"}));throw new Error(h.error||`HTTP ${l.status}`)}const c=await l.json(),d=l.headers.has("X-Total-Count")?parseInt(l.headers.get("X-Total-Count"),10):c.length,u=l.headers.has("X-Has-More")?l.headers.get("X-Has-More")==="true":!1;return{entries:c,total:d,hasMore:u}}function lS(e,n,s,a){return I(V(`/tasks/${e}/comments/${n}`,a),{method:"PATCH",body:JSON.stringify({text:s})})}function cS(e,n,s){return I(V(`/tasks/${e}/comments/${n}`,s),{method:"DELETE"})}function dS(e,n){return I(V(`/tasks/${e}/documents`,n))}function uS(e,n,s){return I(V(`/tasks/${e}/documents/${n}/revisions`,s))}async function M5(e,n){const s=new URLSearchParams;e?.q&&s.set("q",e.q),e?.limit!==void 0&&s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset));const a=s.toString(),r=`/documents${a?`?${a}`:""}`;return I(V(r,n))}function A5(e,n){const s=new URLSearchParams;n?.showHidden&&s.set("showHidden","1");const a=s.toString(),r=`/files/markdown-list${a?`?${a}`:""}`;return I(V(r,e))}function ph(e,n,s,a,r){return I(V(`/tasks/${e}/documents/${n}`,r),{method:"PUT",body:JSON.stringify({content:s,author:a?.author,metadata:a?.metadata})})}function mS(e,n,s){return I(V(`/tasks/${e}/documents/${n}`,s),{method:"DELETE"})}function hS(e,n,s){return I(V(`/tasks/${e}/steer`,s),{method:"POST",body:JSON.stringify({text:n})})}function pS(e,n,s){return I(V(`/tasks/${e}/spec/revise`,s),{method:"POST",body:JSON.stringify({feedback:n})})}function fS(e,n){return I(V(`/tasks/${e}/spec/rebuild`,n),{method:"POST"})}function gS(e,n,s){return I(V(`/tasks/${e}/refine`,s),{method:"POST",body:JSON.stringify({feedback:n})})}function Ws(){return I("/models")}function bS(){return I("/usage")}function xS(){return I("/providers/claude-cli/status")}function vS(){return I("/system/fn-binary/status")}function yS(){return I("/system/fn-binary/install",{method:"POST"})}function wS(){return I("/providers/droid-cli/status")}function kS(){return I("/providers/cursor-cli/status")}function jS(){return I("/providers/llama-cpp/status")}async function R5(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return I(`/providers/hermes/status${n}`)}async function I5(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return(await I(`/providers/hermes/profiles${n}`)).profiles??[]}async function T5(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return I(`/providers/openclaw/status${n}`)}async function P5(e){const n=new URLSearchParams({apiUrl:e.apiUrl});return e.apiKey&&n.set("apiKey",e.apiKey),I(`/providers/paperclip/status?${n.toString()}`)}async function $5(e){const n=new URLSearchParams({apiUrl:e.apiUrl});return e.apiKey&&n.set("apiKey",e.apiKey),(await I(`/providers/paperclip/companies?${n.toString()}`)).companies??[]}async function D5(e){const n=new URLSearchParams({apiUrl:e.apiUrl,companyId:e.companyId});return e.apiKey&&n.set("apiKey",e.apiKey),(await I(`/providers/paperclip/agents?${n.toString()}`)).agents??[]}async function L5(e){return I("/providers/paperclip/cli-mint-key",{method:"POST",body:JSON.stringify(e)})}async function O5(e){const n=new URLSearchParams;e.cliBinaryPath&&n.set("cliBinaryPath",e.cliBinaryPath),e.cliConfigPath&&n.set("cliConfigPath",e.cliConfigPath);const s=n.toString();return I(`/providers/paperclip/cli-status${s?`?${s}`:""}`)}async function F5(e){const n=new URLSearchParams;e.cliBinaryPath&&n.set("cliBinaryPath",e.cliBinaryPath),e.cliConfigPath&&n.set("cliConfigPath",e.cliConfigPath);const s=n.toString();return(await I(`/providers/paperclip/cli-companies${s?`?${s}`:""}`)).companies??[]}async function z5(e){const n=new URLSearchParams({companyId:e.companyId});return e.cliBinaryPath&&n.set("cliBinaryPath",e.cliBinaryPath),e.cliConfigPath&&n.set("cliConfigPath",e.cliConfigPath),(await I(`/providers/paperclip/cli-agents?${n.toString()}`)).agents??[]}async function B5(e={}){const n=new URLSearchParams;e.cliConfigPath&&n.set("cliConfigPath",e.cliConfigPath);const s=n.toString();return I(`/providers/paperclip/cli-discovery${s?`?${s}`:""}`)}function NS(e){return I("/auth/claude-cli",{method:"POST",body:JSON.stringify({enabled:e})})}function SS(e){return I("/auth/droid-cli",{method:"POST",body:JSON.stringify({enabled:e})})}function CS(e){return I("/auth/cursor-cli",{method:"POST",body:JSON.stringify({enabled:e})})}function ES(e){return I("/auth/llama-cpp",{method:"POST",body:JSON.stringify({enabled:e})})}async function _S(){const n=(await I("/custom-providers")).map(s=>({id:s.id,name:s.name,baseUrl:s.baseUrl,api:s.apiType==="anthropic-compatible"?"anthropic-messages":s.apiType==="google-generative-ai"?"google-generative-ai":"openai-completions",apiKey:s.apiKey,models:(s.models??[]).map(a=>({id:a.id,name:a.name}))}));return Object.assign(n,{providers:n})}function MS(e){return I("/custom-providers",{method:"POST",body:JSON.stringify(e)})}function U5(e,n){const s=n,a={...typeof s.name=="string"?{name:s.name}:{},...typeof s.baseUrl=="string"?{baseUrl:s.baseUrl}:{},...typeof s.apiKey=="string"?{apiKey:s.apiKey}:{},...Array.isArray(s.models)?{models:s.models.map(r=>({id:r.id,name:r.name??r.id}))}:{},...s.api?{apiType:s.api==="anthropic-messages"?"anthropic-compatible":"openai-compatible"}:{},..."apiType"in n?{apiType:n.apiType}:{}};return I(`/custom-providers/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(a)})}function H5(e){return I(`/custom-providers/${encodeURIComponent(e)}`,{method:"DELETE"})}function AS(e){const n=e.api==="anthropic-messages"?"anthropic-compatible":e.api==="google-generative-ai"?"google-generative-ai":"openai-compatible";return MS({name:e.name?.trim()||e.id,apiType:n,baseUrl:e.baseUrl,apiKey:e.apiKey,models:e.models?.map(s=>({id:s.id,name:s.name??s.id}))})}async function RS(e){return I("/custom-providers/probe-models",{method:"POST",body:JSON.stringify({baseUrl:e.baseUrl,apiKey:e.apiKey,apiType:e.apiType})})}function qo(){return I("/auth/status")}function IS(e){return I("/auth/login",{method:"POST",body:JSON.stringify({provider:e,origin:window.location.origin})})}function TS(e,n){return I("/auth/manual-code",{method:"POST",body:JSON.stringify({provider:e,code:n})})}function PS(e){return I("/auth/logout",{method:"POST",body:JSON.stringify({provider:e})})}function $S(e){return I("/auth/cancel",{method:"POST",body:JSON.stringify({provider:e})})}function DS(e,n){return I("/auth/api-key",{method:"POST",body:JSON.stringify({provider:e,apiKey:n})})}function LS(e){return I("/auth/api-key",{method:"DELETE",body:JSON.stringify({provider:e})})}function OS(e,n,s,a){return I("/github/issues/fetch",{method:"POST",body:JSON.stringify({owner:e,repo:n,limit:s,labels:a})})}function FS(e,n,s,a){return I(V("/github/issues/import",a),{method:"POST",body:JSON.stringify({owner:e,repo:n,issueNumber:s})})}function zS(e,n,s){return I("/github/pulls/fetch",{method:"POST",body:JSON.stringify({owner:e,repo:n,limit:s})})}function BS(e,n,s,a){return I(V("/github/pulls/import",a),{method:"POST",body:JSON.stringify({owner:e,repo:n,prNumber:s})})}function US(e){return I(V("/git/remotes",e))}function HS(e){return I(V("/git/remotes/detailed",e))}function qS(e,n,s){return I(V("/git/remotes",s),{method:"POST",body:JSON.stringify({name:e,url:n})})}function VS(e,n){return I(V(`/git/remotes/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function WS(e,n,s){return I(V(`/git/remotes/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify({newName:n})})}function GS(e,n,s){return I(V(`/git/remotes/${encodeURIComponent(e)}/url`,s),{method:"PUT",body:JSON.stringify({url:n})})}function KS(e,n,s){return I(V(`/tasks/${e}/pr/create`,s),{method:"POST",body:JSON.stringify(n)})}function JS(e,n){return I(V(`/tasks/${e}/pr/refresh`,n),{method:"POST"})}function fl(e,n,s,a){return I(V("/terminal/sessions",a),{method:"POST",body:JSON.stringify({cwd:e,cols:n,rows:s})})}function fh(e,n){return I(V(`/terminal/sessions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function YS(e){return I(V("/terminal/sessions",e))}function ki(e){return I(V("/git/status",e))}function QS(e,n){const s=e?`?limit=${e}`:"";return I(V(`/git/commits${s}`,n))}function ic(e,n){return I(V(`/git/commits/${e}/diff`,n))}function XS(e){return I(V("/git/commits/ahead",e))}function ZS(e,n,s,a){const r=new URLSearchParams;r.set("limit",String(s));const o=r.size>0?`?${r.toString()}`:"";return I(V(`/git/remotes/${encodeURIComponent(e)}/commits${o}`,a))}function oo(e){return I(V("/git/branches",e))}function e0(e,n,s){const a=`?limit=${n}`;return I(V(`/git/branches/${encodeURIComponent(e)}/commits${a}`,s))}function t0(e){return I(V("/git/worktrees",e))}function n0(e,n,s){return I(V("/git/branches",s),{method:"POST",body:JSON.stringify({name:e,base:n})})}function s0(e,n){return I(V(`/git/branches/${encodeURIComponent(e)}/checkout`,n),{method:"POST"})}function gh(e,n,s){const a=n?"?force=true":"";return I(V(`/git/branches/${encodeURIComponent(e)}${a}`,s),{method:"DELETE"})}function i0(e,n){return I(V("/git/fetch",n),{method:"POST",body:JSON.stringify({remote:e})})}function a0(e,n){const s=typeof e=="string"?void 0:e;return I(V("/git/pull",typeof e=="string"?e:n),{method:"POST",body:JSON.stringify({rebase:s?.rebase??!1})})}function r0(e){return I(V("/git/push",e),{method:"POST"})}function gl(e){return I(V("/git/stashes",e))}function o0(e,n){return I(V("/git/stashes",n),{method:"POST",body:JSON.stringify({message:e})})}function l0(e,n,s){return I(V(`/git/stashes/${e}/apply`,s),{method:"POST",body:JSON.stringify({drop:n})})}function c0(e,n){return I(V(`/git/stashes/${e}`,n),{method:"DELETE"})}function d0(e,n){return I(V(`/git/stashes/${e}/diff`,n))}function u0(e,n,s){const a=new URLSearchParams;return a.set("path",e),a.set("staged",String(n)),I(V(`/git/diff/file?${a.toString()}`,s))}function fr(e){return I(V("/git/changes",e))}function bh(e,n){return I(V("/git/stage",n),{method:"POST",body:JSON.stringify({files:e})})}function m0(e,n){return I(V("/git/unstage",n),{method:"POST",body:JSON.stringify({files:e})})}function xh(e,n){return I(V("/git/commit",n),{method:"POST",body:JSON.stringify({message:e})})}function h0(e,n){return I(V("/git/discard",n),{method:"POST",body:JSON.stringify({files:e})})}function p0(e){return I(V("/workspaces",e))}function f0(e,n,s){const a=new URLSearchParams({workspace:e});return n&&a.set("path",n),s&&a.set("projectId",s),I(`/files?${a.toString()}`)}function g0(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),I(`/files/${encodeURIComponent(n)}?${a.toString()}`)}function b0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}?${r.toString()}`,{method:"POST",body:JSON.stringify({content:s})})}function x0(e,n,s){const a=new URLSearchParams({q:e});return n&&a.set("workspace",n),s&&a.set("projectId",s),I(`/files/search?${a.toString()}`)}function v0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}/copy?${r.toString()}`,{method:"POST",body:JSON.stringify({destination:s})})}function y0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}/move?${r.toString()}`,{method:"POST",body:JSON.stringify({destination:s})})}function w0(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),I(`/files/${encodeURIComponent(n)}/delete?${a.toString()}`,{method:"POST"})}function k0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}/rename?${r.toString()}`,{method:"POST",body:JSON.stringify({newName:s})})}function Jb(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),`/api/files/${encodeURIComponent(n)}/download?${a.toString()}`}function j0(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),`/api/files/${encodeURIComponent(n)}/download-zip?${a.toString()}`}function N0(e,n,s){return I(V("/planning/create-draft",n),{method:"POST",body:JSON.stringify({initialPlan:e,planningModelProvider:s?.planningModelProvider,planningModelId:s?.planningModelId})})}function S0(e,n,s,a,r){return I(V("/planning/start-streaming",n),{method:"POST",body:JSON.stringify({initialPlan:e,planningModelProvider:s?.planningModelProvider,planningModelId:s?.planningModelId,planningDepth:a?.planningDepth,customQuestionCount:a?.customQuestionCount,...r?{existingSessionId:r}:{}})})}function vh(e,n,s,a){return I(V("/planning/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function C0(e,n,s){return I(V(`/planning/${encodeURIComponent(e)}/back`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function E0(e,n,s){return I(V(`/planning/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function _0(e,n,s){return I(V(`/planning/${encodeURIComponent(e)}/stop`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function Yb(e,n,s){return I(V("/planning/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function q5(e,n,s,a){return I(V("/agents/onboarding/start-streaming",s),{method:"POST",body:JSON.stringify({intent:e,context:n,mode:n.mode,existingAgentConfig:n.existingAgentConfig,planningModelProvider:a?.planningModelProvider,planningModelId:a?.planningModelId})})}function V5(e,n,s){return I(V("/agents/onboarding/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n})})}function W5(e,n){return I(V("/agents/onboarding/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e})})}function M0(e,n,s){return I(V("/planning/create-task",s),{method:"POST",body:JSON.stringify(n?{sessionId:e,summary:n}:{sessionId:e})})}function A0(e,n,s){return I(V("/planning/start-breakdown",s),{method:"POST",body:JSON.stringify(n?{sessionId:e,summary:n}:{sessionId:e})})}function R0(e,n,s){return I(V("/planning/create-tasks",s),{method:"POST",body:JSON.stringify({planningSessionId:e,subtasks:n})})}const Nu=new Set;if(typeof window<"u"){const e=()=>{for(const n of Array.from(Nu))try{n.close()}catch{}};window.addEventListener("pagehide",e),window.addEventListener("beforeunload",e)}function I0(e,n){if(n===null||n<=0)return e;const s=e.includes("?")?"&":"?";return`${e}${s}lastEventId=${encodeURIComponent(String(n))}`}function Jr(e,n,s={}){const a=s.maxReconnectAttempts??10;let r=null,o=!1,l=0,c=null,d=null,u=!1;const h=p=>{const g=p.lastEventId;if(!g)return!0;const w=Number.parseInt(g,10);return Number.isFinite(w)?d!==null&&w<=d?!1:(d=w,!0):!0},m=()=>{if(o)return;const p=I0(e,d),g=new EventSource(Ci(p));r=g,g.onopen=()=>{l=0,u=!1,s.onConnectionStateChange?.("connected"),n.onOpen?.()},g.onmessage=w=>{const v=w;h(v)&&n.onMessage?.(v)};for(const[w,v]of Object.entries(n.events??{}))g.addEventListener(w,b=>{const y=b;h(y)&&v(y)});g.onerror=()=>{if(o||r!==g)return;if(g.readyState===EventSource.CONNECTING){u||(u=!0,s.onConnectionStateChange?.("reconnecting"));return}if(g.close(),l>=a){s.onFatalError?.("Connection lost");return}u=!0,s.onConnectionStateChange?.("reconnecting"),l+=1;const v=Math.min(1e3*2**(l-1),3e4);c=setTimeout(()=>{c=null,m()},v)}};m();const f={close:()=>{o=!0,c&&(clearTimeout(c),c=null),r?.close(),Nu.delete(f)},isConnected:()=>!o&&r?.readyState===EventSource.OPEN};return Nu.add(f),f}function yh(e){const n=typeof e.source=="string"&&e.source.trim().length>0?e.source.trim():"root",s=n==="root"?".":n,a=e.name,r=typeof e.packagePath=="string"&&e.packagePath.trim().length>0?e.packagePath.trim():s,o=typeof e.confidence=="number"?e.confidence:1,l=n==="root"?"root":n,c=typeof e.packageName=="string"&&e.packageName.trim().length>0?e.packageName.trim():"project";return{name:e.name,command:e.command,scriptName:a,packagePath:r,confidence:o,cwd:s,source:n,workspaceName:typeof e.packageName=="string"?e.packageName:void 0,label:`${c} · ${a} (${l})`}}function Dr(e){const n=e.status,s=n==="starting"||n==="running"||n==="failed"||n==="stopped"?n:"stopped",a=typeof e.previewUrl=="string"?e.previewUrl:e.detectedUrl,r=typeof e.manualPreviewUrl=="string"?e.manualPreviewUrl:e.manualUrl;return{id:typeof e.id=="string"?e.id:"",name:typeof e.name=="string"&&e.name.length>0?e.name:"default",status:s,command:typeof e.command=="string"?e.command:"",scriptName:typeof e.scriptId=="string"?e.scriptId:"",cwd:typeof e.cwd=="string"?e.cwd:"",pid:e.pid,startedAt:e.startedAt,previewUrl:a,detectedUrl:typeof e.detectedUrl=="string"?e.detectedUrl:a,detectedPort:e.detectedPort,manualPreviewUrl:r,manualUrl:typeof e.manualUrl=="string"?e.manualUrl:r,logs:Array.isArray(e.logHistory)?e.logHistory:[],exitCode:e.exitCode}}function T0(e,n){return{id:typeof e.id=="number"&&Number.isFinite(e.id)?e.id:n,text:typeof e.text=="string"?e.text:typeof e.line=="string"?e.line:"",stream:e.stream==="stderr"?"stderr":"stdout",timestamp:typeof e.timestamp=="string"?e.timestamp:""}}function P0(e){const s=(Array.isArray(e.lines)?e.lines:[]).map((a,r)=>T0(a,r+1));return{lines:s,totalLines:typeof e.totalLines=="number"&&Number.isFinite(e.totalLines)?e.totalLines:s.length}}function $0(e,n){const s=typeof n.maxLines=="number"&&Number.isFinite(n.maxLines)?Math.max(1,Math.floor(n.maxLines)):100,a=typeof n.offset=="number"&&Number.isFinite(n.offset)?Math.max(0,Math.floor(n.offset)):0,r=typeof n.lastEventId=="number"&&Number.isFinite(n.lastEventId)?Math.max(0,Math.floor(n.lastEventId)):null,o=e.length,l=e.map((u,h)=>({id:h+1,text:u,stream:"stdout",timestamp:""}));if(r!==null)return{lines:l.filter(u=>u.id>r).slice(0,s),totalLines:o};const c=Math.max(o-a,0),d=Math.max(c-s,0);return{lines:l.slice(d,c),totalLines:o}}function wh(e){return Array.isArray(e)?e.map(yh):(e.candidates??[]).map(yh)}async function D0(e){try{const n=await I(V("/dev-server/candidates",e));return wh(n)}catch(n){if(n instanceof Error&&/\/dev-server\/candidates/.test(n.message)){const s=await I(V("/dev-server/detect",e));return wh(s)}throw n}}function om(e){return I(V("/dev-server/status",e)).then(Dr)}async function G5(e={},n){const s=new URLSearchParams;typeof e.maxLines=="number"&&Number.isFinite(e.maxLines)&&s.set("maxLines",String(Math.max(1,Math.floor(e.maxLines)))),typeof e.offset=="number"&&Number.isFinite(e.offset)&&s.set("offset",String(Math.max(0,Math.floor(e.offset)))),typeof e.lastEventId=="number"&&Number.isFinite(e.lastEventId)&&s.set("lastEventId",String(Math.max(0,Math.floor(e.lastEventId))));const a=s.size>0?`?${s.toString()}`:"";try{const r=await I(V(`/dev-server/logs/history${a}`,n));return P0(r)}catch(r){if(r instanceof Error&&/\/dev-server\/logs\/history/.test(r.message)){const o=await om(n);return $0(o.logs,e)}throw r}}function L0(e,n){const s=e.cwd??e.packagePath??".",a=e.scriptName;return I(V("/dev-server/start",n),{method:"POST",body:JSON.stringify({command:e.command,scriptName:a,scriptId:a,cwd:s,packagePath:e.packagePath})}).then(Dr)}function O0(e){return I(V("/dev-server/stop",e),{method:"POST"}).then(Dr)}function F0(e){return I(V("/dev-server/restart",e),{method:"POST"}).then(Dr)}async function z0(e,n){const s=typeof e=="string"?{url:e}:e;try{const a=await I(V("/dev-server/preview-url",n),{method:"POST",body:JSON.stringify(s)});return Dr(a)}catch(a){if(a instanceof Error&&/\/dev-server\/preview-url/.test(a.message)){const r=await I(V("/dev-server/preview-url",n),{method:"PUT",body:JSON.stringify(s)});return Dr(r)}throw a}}function K5(e){return As(V("/dev-server/logs/stream",e))}async function J5(e){try{return(await I(V("/devserver",e))).sessions??[]}catch{try{const n=await om(e);return[{config:{id:n.id??"default",name:n.name??"Dev Server",command:n.command??"",cwd:n.cwd??"."},status:n.status,runtime:n.pid?{pid:n.pid,startedAt:n.startedAt??new Date().toISOString(),exitCode:n.exitCode??void 0,previewUrl:n.previewUrl}:void 0,previewUrl:n.previewUrl??n.detectedUrl??void 0,logHistory:(n.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}]}catch{return[]}}}async function Y5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}`,n))}catch{try{const s=await om(n);return!e||e==="default"||e===s.id?{config:{id:s.id??"default",name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}:null}catch{return null}}}async function Q5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}/start`,n),{method:"POST"})}catch{const s=await L0({command:""},n);return{config:{id:s.id??e,name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}}}async function X5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}catch{const s=await O0(n);return{config:{id:s.id??e,name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}}}async function Z5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}/restart`,n),{method:"POST"})}catch{const s=await F0(n);return{config:{id:s.id??e,name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}}}async function e8(e,n,s){try{const a=await I(V(`/devserver/${encodeURIComponent(e)}/preview`,s),{method:"POST",body:JSON.stringify({url:n})});return{url:a.url??null,source:a.source??null}}catch{const a=await z0({url:n},s);return{url:a.previewUrl??a.manualUrl??null,source:"manual"}}}async function t8(e){try{return(await I(V("/devserver/detect",e))).candidates??[]}catch{try{return(await D0(e)).map(s=>({name:s.name,command:s.command,cwd:s.cwd,scriptName:s.scriptName,packagePath:s.packagePath}))}catch{return[]}}}function n8(e,n){return As(V(`/devserver/${encodeURIComponent(e)}/logs/stream`,n))}function tl(e,n,s=25e3){const a=setInterval(()=>{$C(e,n).catch(()=>{})},s);return{stop:()=>{clearInterval(a)}}}function B0(e,n){return As(V(`/planning/${encodeURIComponent(e)}/stream`,n))}function U0(e,n){return As(V(`/agents/onboarding/${encodeURIComponent(e)}/stream`,n))}function s8(e,n,s,a){const r=U0(e,n),o=Jr(r,{events:{thinking:l=>{try{s.onThinking?.(JSON.parse(l.data))}catch{s.onThinking?.(l.data)}},question:l=>{try{s.onQuestion?.(JSON.parse(l.data))}catch{}},summary:l=>{try{s.onSummary?.(JSON.parse(l.data))}catch{}},error:l=>{try{const c=JSON.parse(l.data);s.onError?.(c.message||c)}catch{s.onError?.(l.data||"Stream error")}},complete:()=>{s.onComplete?.()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:l=>s.onError?.(l)});return{close:o.close,isConnected:o.isConnected}}function H0(e,n,s,a){const r=B0(e,n);let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[planning] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[planning] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function nl(e,n){const s=new URLSearchParams;n?.scope&&s.set("scope",n.scope),n?.projectId&&s.set("projectId",n.projectId);const a=s.toString();return a?`${e}?${a}`:e}function q0(e){return I(nl("/routines",e))}function V0(e,n){return I(nl("/routines",n),{method:"POST",body:JSON.stringify(e)})}function kh(e,n,s){return I(nl(`/routines/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function W0(e,n){await I(nl(`/routines/${e}`,n),{method:"DELETE"})}function G0(e,n){return I(nl(`/routines/${e}/trigger`,n),{method:"POST"})}function jh(e){const n=new URLSearchParams;e?.limit!==void 0&&n.set("limit",String(e.limit)),e?.since!==void 0&&n.set("since",e.since),e?.type!==void 0&&n.set("type",e.type),e?.projectId&&n.set("projectId",e.projectId);const s=n.size>0?`?${n.toString()}`:"";return I(`/activity${s}`)}function K0(e){const n=V("/activity",e);return I(n,{method:"DELETE"})}function sl(e){return I(V("/workflow-steps",e))}function Nh(e,n){return I(V("/workflow-steps",n),{method:"POST",body:JSON.stringify(e)})}function J0(e,n,s){return I(V(`/workflow-steps/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}function Y0(e,n){return I(V(`/workflow-steps/${e}`,n),{method:"DELETE"})}function Sh(e,n){return I(V(`/workflow-steps/${e}/refine`,n),{method:"POST"})}function Q0(e,n){return I(V(`/tasks/${encodeURIComponent(e)}/workflow-results`,n))}function X0(){return I("/workflow-step-templates")}function Z0(){return I("/plugin-workflow-step-templates")}function e1(e,n){return I(V(`/workflow-step-templates/${encodeURIComponent(e)}/create`,n),{method:"POST"})}function Vo(e){return I(V("/scripts",e))}function t1(e,n,s){return I(V("/scripts",s),{method:"POST",body:JSON.stringify({name:e,command:n})})}function n1(e,n){return I(V(`/scripts/${encodeURIComponent(e)}`,n),{method:"DELETE"})}async function Qb(e,n,s){return(await I(V("/ai/refine-text",s),{method:"POST",body:JSON.stringify({text:e,type:n})})).refined}const bl={RATE_LIMIT:"Too many refinement requests. Please wait an hour.",INVALID_TYPE:"Invalid refinement option selected.",NETWORK:"Failed to refine text. Please try again."};function Xb(e){if(!(e instanceof Error))return bl.NETWORK;const n=e.message.toLowerCase();return n.includes("rate limit")||n.includes("429")?bl.RATE_LIMIT:n.includes("invalid")&&n.includes("type")?bl.INVALID_TYPE:n.startsWith("text must")||n.includes("text is required")||n.includes("type is required")?e.message:bl.NETWORK}function s1(e,n){return I(V("/subtasks/start-streaming",n),{method:"POST",body:JSON.stringify({description:e})})}function i1(e,n,s){return I(V(`/subtasks/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function a1(e,n){return As(V(`/subtasks/${encodeURIComponent(e)}/stream`,n))}function r1(e,n,s,a){let r=null,o=null;const l=()=>{r?.stop(),r=null},c=Jr(a1(e,n),{onOpen:()=>{l(),r=tl(e,n)},events:{thinking:d=>{try{s.onThinking?.(JSON.parse(d.data))}catch{s.onThinking?.(d.data)}},subtasks:d=>{try{s.onSubtasks?.(JSON.parse(d.data))}catch(u){console.error("[subtasks] Failed to parse subtasks event:",u)}},error:d=>{try{const u=JSON.parse(d.data),h=typeof u=="string"&&u.length>0?u:null;s.onError?.(h||"Stream error")}catch{s.onError?.("Stream error")}o?.close()},complete:()=>{s.onComplete?.(),o?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:d=>{l(),s.onError?.(d)}});return o={close:()=>{l(),c.close()},isConnected:c.isConnected},o}function o1(e,n,s,a,r){return I(V("/subtasks/create-tasks",a),{method:"POST",body:JSON.stringify({sessionId:e,parentTaskId:s,...r?.branch!==void 0?{branch:r.branch}:{},...r?.baseBranch!==void 0?{baseBranch:r.baseBranch}:{},...r?.branchSelection?{branchSelection:r.branchSelection}:{},...r?.branchAssignment?{branchAssignment:r.branchAssignment}:{},subtasks:n.map(o=>({tempId:o.id,title:o.title,description:o.description,size:o.suggestedSize,dependsOn:o.dependsOn}))})})}function Zb(e,n,s){return I(V("/subtasks/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function V(e,n){if(!n)return e;const s=e.includes("?")?"&":"?";return`${e}${s}projectId=${encodeURIComponent(n)}`}function l1(e,n,s){if(!n||n===s)return e;const a="/api",r=e.startsWith(a)?e.slice(a.length):e;return`/proxy/${encodeURIComponent(n)}${r}`}function il(e,n){const{nodeId:s,localNodeId:a,...r}=n??{},o=l1(e,s,a);return I(o,r)}function Yr(e,n){const s=new URLSearchParams;e?.state&&s.set("state",e.state),e?.role&&s.set("role",e.role),e?.includeEphemeral===!0&&s.set("includeEphemeral","true"),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/agents${a}`)}function Su(e,n){return I(V(`/agents/${encodeURIComponent(e)}`,n))}function c1(e,n){return I(V("/agents",n),{method:"POST",body:JSON.stringify(e)})}function d1(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function i8(e,n,s){const a=new FormData;a.append("file",n);const r=await fetch(As(V(`/agents/${encodeURIComponent(e)}/avatar`,s)),{method:"POST",headers:Ei(),body:a}),o=await r.json();if(!r.ok)throw new Error(o.error||"Avatar upload failed");return o}function a8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/avatar`,n),{method:"DELETE"})}function r8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/upgrade-heartbeat-procedure`,n),{method:"POST"})}function o8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/instructions`,s),{method:"PATCH",body:JSON.stringify(n)})}function l8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/soul`,s),{method:"PATCH",body:JSON.stringify({soul:n})})}function c8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/memory`,s),{method:"PATCH",body:JSON.stringify({memory:n})})}function d8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/memory/files`,n))}function u8(e,n,s){const a=`path=${encodeURIComponent(n)}`;return I(V(`/agents/${encodeURIComponent(e)}/memory/file?${a}`,s))}function m8(e,n,s,a){return I(V(`/agents/${encodeURIComponent(e)}/memory/file`,a),{method:"PUT",body:JSON.stringify({path:n,content:s})})}function u1(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/state`,s),{method:"POST",body:JSON.stringify({state:n})})}function m1(e,n){return I(V(`/agents/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function h8(e,n,s){const a=new URLSearchParams;n!==void 0&&a.set("limit",String(n)),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/runs${r}`)}function p8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/runs/${encodeURIComponent(n)}`,s))}function f8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/runs/${encodeURIComponent(n)}/logs`,s))}function g8(e,n,s){const a=new URLSearchParams;a.set("limit",String(n)),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/prompt-sizes${r}`)}function b8(e,n,s){const a=s?.source??"manual",r=s?.triggerDetail??"Agent activated via dashboard";return I(V(`/agents/${encodeURIComponent(e)}/runs`,n),{method:"POST",body:JSON.stringify({source:a,triggerDetail:r})})}function x8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/runs/stop`,n),{method:"POST"})}function h1(e){return I(V("/agents/stats",e))}function v8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/chain-of-command`,n))}function y8(e,n){const s=new URLSearchParams;e&&s.set("projectId",e),n?.includeEphemeral&&s.set("includeEphemeral","true");const a=s.toString();return I(`/agents/org-tree${a?`?${a}`:""}`)}function w8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/children`,n)).catch(s=>{if(s.message.includes("not found"))return[];throw s})}function Ch(e,n,s){return I(V(`/tasks/${encodeURIComponent(e)}/assign`,s),{method:"PATCH",body:JSON.stringify({agentId:n})})}function ex(e){return{reviewState:{source:e.mode,summary:e.summary??void 0,items:e.items.map(n=>({id:n.itemId,body:n.body,author:{login:n.author},createdAt:n.createdAt??new Date(0).toISOString(),updatedAt:n.updatedAt??void 0,path:n.filePath,threadId:n.threadId,htmlUrl:n.url,state:n.reviewState??void 0,isResolved:n.isResolved})),addressing:[],lastRefreshedAt:e.fetchedAt??void 0,refreshStatus:"ready",refreshSource:"initial-load"},automationStatus:null}}async function p1(e,n){const s=await I(V(`/tasks/${encodeURIComponent(e)}/review`,n));return ex(s)}async function f1(e,n){const s=await I(V(`/tasks/${encodeURIComponent(e)}/review/refresh`,n),{method:"POST"});return ex(s)}function g1(e,n,s){return I(V(`/tasks/${encodeURIComponent(e)}/review/address`,s),{method:"POST",body:JSON.stringify({selectedItems:n,tab:"review"})})}function k8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/tasks`,n))}function j8(){return I("/agents/companies")}function N8(e,n){return I(V("/agents/generate/start",n),{method:"POST",body:JSON.stringify({role:e})})}function S8(e,n){return I(V("/agents/generate/spec",n),{method:"POST",body:JSON.stringify({sessionId:e})})}function C8(e,n){return I(V(`/agents/generate/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function E8(e){return I(V("/backups",e))}function _8(e){return I(V("/backups",e),{method:"POST"})}function M8(e,n){const s=V("/settings/export",n),a=`${s}${s.includes("?")?"&":"?"}scope=${encodeURIComponent(e)}`;return I(a)}function A8(e,n,s){return I(V("/settings/import",s),{method:"POST",body:JSON.stringify({data:e,scope:n?.scope??"both",merge:n?.merge??!0})})}function b1(e){return Array.isArray(e.nodeMappings)||Array.isArray(e.projectNodeMappings)||Array.isArray(e.pathMappings)}function Eh(){return I("/projects/across-nodes")}function ac(){return I("/nodes")}function R8(){return I("/docker/nodes")}function I8(e){return I(`/docker/nodes/${encodeURIComponent(e)}/container-status`)}function T8(e,n){const s=new URLSearchParams;typeof n?.tail=="number"&&s.set("tail",String(n.tail));const a=s.size>0?`?${s.toString()}`:"";return I(`/docker/nodes/${encodeURIComponent(e)}/logs${a}`)}function P8(e){return I("/docker-nodes",{method:"POST",body:JSON.stringify(e)})}function x1(e){return I("/nodes",{method:"POST",body:JSON.stringify(e)})}function v1(e){return I("/nodes/discover-projects",{method:"POST",body:JSON.stringify(e)})}function y1(e,n){return I(`/nodes/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})}function w1(e){return I(`/nodes/${encodeURIComponent(e)}/docker-config`)}function k1(e,n){return I(`/nodes/${encodeURIComponent(e)}/docker-config`,{method:"PATCH",body:JSON.stringify(n)})}function j1(e){return I(`/nodes/${encodeURIComponent(e)}/docker-config/diff`)}function _h(e){return I(`/nodes/${encodeURIComponent(e)}`,{method:"DELETE"})}async function N1(e){const n=await I(`/nodes/${encodeURIComponent(e)}/health-check`,{method:"POST"});return{nodeId:n.nodeId??e,status:n.status,responseTimeMs:n.responseTimeMs,error:n.error,checkedAt:n.checkedAt??new Date().toISOString()}}async function $8(){return I("/mesh/state")}function D8(e,n,s,a){const r=s&&s!==a?s:void 0,o=new URLSearchParams;e&&o.set("path",e),n&&o.set("showHidden","true"),r&&o.set("nodeId",r);const l=$r();l&&o.set("fn_token",l);const c=o.toString(),d=`/browse-directory${c?`?${c}`:""}`;return I(d)}function S1(e){return I("/projects",{method:"POST",body:JSON.stringify(e)})}function tx(e){return I(`/projects/${encodeURIComponent(e)}`,{method:"DELETE"})}function C1(e,n,s){return I(`/projects/${encodeURIComponent(e)}/path-mappings/${encodeURIComponent(n)}`,{method:"PUT",body:JSON.stringify({path:s})})}function Mh(e){return I(`/projects/${encodeURIComponent(e)}/health`)}function E1(e){return I(V("/executor/stats",e))}function _1(e){return I(V("/system-stats",e))}function M1(e){return I(V("/kill-vitest",e),{method:"POST"})}function Ah(e){const n=new URLSearchParams;e?.limit!==void 0&&n.set("limit",String(e.limit)),e?.since&&n.set("since",e.since),e?.projectId&&n.set("projectId",e.projectId),e?.type&&n.set("type",e.type);const s=n.size>0?`?${n.toString()}`:"";return I(`/activity-feed${s}`)}function A1(e){return I(`/projects/${encodeURIComponent(e)}/pause`,{method:"POST"})}function R1(e){return I(`/projects/${encodeURIComponent(e)}/resume`,{method:"POST"})}function L8(){return I("/global-concurrency")}function O8(e){return I("/global-concurrency",{method:"PUT",body:JSON.stringify(e)})}function I1(e,n){return I(`/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})}function nx(e,n,s){const a=new URLSearchParams;n&&a.set("worktree",n),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/tasks/${encodeURIComponent(e)}/diff${r}`)}function T1(e,n){return I(V(`/tasks/${encodeURIComponent(e)}/commit-associations`,n))}function P1(e){return I(V("/missions",e))}function $1(e,n){return I(V("/missions",n),{method:"POST",body:JSON.stringify(e)})}function sx(e,n){return I(V(`/missions/${encodeURIComponent(e)}`,n))}function D1(e,n,s){return I(V(`/missions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function L1(e,n){return I(V(`/missions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function O1(e,n,s){const a=new URLSearchParams;a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset));const r=a.size>0?`?${a.toString()}`:"";return I(V(`/missions/${encodeURIComponent(e)}/events${r}`,s))}function F1(e){return I(V("/missions/health",e))}function z1(e,n,s){return I(V(`/missions/${encodeURIComponent(e)}/milestones`,s),{method:"POST",body:JSON.stringify(n)})}function B1(e,n,s){return I(V(`/missions/milestones/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function U1(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function H1(e,n,s){return I(V(`/missions/milestones/${encodeURIComponent(e)}/slices`,s),{method:"POST",body:JSON.stringify(n)})}function q1(e,n,s){return I(V(`/missions/slices/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function V1(e,n){return I(V(`/missions/slices/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function W1(e,n){return I(V(`/missions/slices/${encodeURIComponent(e)}/activate`,n),{method:"POST"})}function G1(e,n,s){return I(V(`/missions/slices/${encodeURIComponent(e)}/features`,s),{method:"POST",body:JSON.stringify(n)})}function K1(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function J1(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function Y1(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}/link-task`,s),{method:"POST",body:JSON.stringify({taskId:n})})}function Q1(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}/unlink-task`,n),{method:"POST"})}function X1(e,n,s,a,r){return I(V(`/missions/features/${encodeURIComponent(e)}/triage`,a),{method:"POST",body:JSON.stringify({taskTitle:n,taskDescription:s,...r})})}function Z1(e,n,s){return I(V(`/missions/slices/${encodeURIComponent(e)}/triage-all`,n),{method:"POST",body:JSON.stringify({})})}function ed(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}/assertions`,n))}function eC(e,n,s){return I(V(`/missions/milestones/${encodeURIComponent(e)}/assertions`,s),{method:"POST",body:JSON.stringify(n)})}function tC(e,n,s){return I(V(`/missions/assertions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function nC(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}/assertions/${encodeURIComponent(n)}/link`,s),{method:"POST"})}function sC(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}/assertions/${encodeURIComponent(n)}/unlink`,s),{method:"POST"})}function iC(e,n){return I(V(`/missions/assertions/${encodeURIComponent(e)}/features`,n))}function td(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}/validation`,n))}function Rh(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}/validation-telemetry`,n))}function aC(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}/validate`,n),{method:"POST"})}function Ih(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}/validation-loop`,n))}function rC(e,n,s){const a=new URLSearchParams;a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset));const r=a.size>0?`?${a.toString()}`:"";return I(V(`/missions/features/${encodeURIComponent(e)}/validation-runs${r}`,s)).then(o=>o.runs)}function oC(e,n){return I(V(`/missions/validation-runs/${encodeURIComponent(e)}`,n))}function lC(e,n){return I(V(`/missions/${encodeURIComponent(e)}/resume`,n),{method:"POST"})}function cC(e,n){return I(V(`/missions/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}function dC(e,n){return I(V(`/missions/${encodeURIComponent(e)}/start`,n),{method:"POST"})}function uC(e,n,s){return I(V(`/missions/${encodeURIComponent(e)}/autopilot`,s),{method:"PATCH",body:JSON.stringify(n)})}function mC(e,n,s){return I(V("/missions/interview/start",n),{method:"POST",body:JSON.stringify({missionTitle:e,modelProvider:s?.modelProvider,modelId:s?.modelId})})}function hC(e,n,s,a){return I(V("/missions/interview/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function pC(e,n,s){return I(V(`/missions/interview/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function ix(e,n,s){return I(V("/missions/interview/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}async function fC(e){const n=e?`?${new URLSearchParams({projectId:e}).toString()}`:"";return(await I(`/missions/interview/drafts${n}`)).drafts??[]}function gC(e,n,s){return I(V(`/missions/interview/drafts/${encodeURIComponent(e)}/discard`,n),{method:"POST",body:JSON.stringify({tabId:s})})}function bC(e,n,s,a){return I(V("/missions/interview/create-mission",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function xC(e,n,s,a){const r=As(V(`/missions/interview/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[mission-interview] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[mission-interview] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function al(e,n,s){return V(`/missions/milestones/${encodeURIComponent(e)}/interview${n}`,s)}function rl(e,n,s){return V(`/missions/slices/${encodeURIComponent(e)}/interview${n}`,s)}function vC(e,n){return I(al(e,"/start",n),{method:"POST"})}function yC(e,n,s,a){return I(al(e,"/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function wC(e,n,s,a){const r=As(al(e,`/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[milestone-interview] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[milestone-interview] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function kC(e,n,s){return I(al(e,"/apply",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function jC(e,n){return I(al(e,"/skip",n),{method:"POST"})}function NC(e,n){return I(rl(e,"/start",n),{method:"POST"})}function SC(e,n,s,a){return I(rl(e,"/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function CC(e,n,s,a){const r=As(rl(e,`/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[slice-interview] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[slice-interview] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function EC(e,n,s){return I(rl(e,"/apply",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function _C(e,n){return I(rl(e,"/skip",n),{method:"POST"})}async function MC(e,n){try{return await I(V(`/missions/features/${encodeURIComponent(e)}/preview-description`,n),{method:"POST"})}catch{throw new Error("Preview endpoint not available")}}function F8(e){return I(V("/todos",e))}function z8(e,n){const s={title:e};return I(V("/todos",n),{method:"POST",body:JSON.stringify(s)})}function B8(e,n,s){const a={title:n};return I(V(`/todos/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(a)})}function U8(e,n){return I(V(`/todos/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function H8(e,n,s){const a={text:n};return I(V(`/todos/${encodeURIComponent(e)}/items`,s),{method:"POST",body:JSON.stringify(a)})}function q8(e,n,s){const a=n;return I(V(`/todos/items/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(a)})}function V8(e,n){return I(V(`/todos/items/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function W8(e,n,s){return I(V(`/todos/${encodeURIComponent(e)}/items/reorder`,s),{method:"POST",body:JSON.stringify({itemIds:n})})}function Lr(e){if(!e)return[];try{const n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return[]}}async function lm(e,n){const s=new URLSearchParams;e&&s.set("projectId",e),n?.includeCompleted&&s.set("includeCompleted","1"),n?.includeArchived&&s.set("includeArchived","1");const a=s.toString(),r=await fetch(As(`/ai-sessions${a?`?${a}`:""}`),{headers:Ei()});return r.ok?(await r.json()).sessions??[]:[]}async function AC(e){return I(`/ai-sessions/${encodeURIComponent(e)}/archive`,{method:"POST"})}async function RC(e){return I(`/ai-sessions/${encodeURIComponent(e)}/unarchive`,{method:"POST"})}async function Bi(e){const n=await fetch(As(`/ai-sessions/${encodeURIComponent(e)}`),{headers:Ei()});return n.ok?n.json():null}async function IC(e,n){const s=await I(`/ai-sessions/${encodeURIComponent(e)}/lock`,{method:"POST",body:JSON.stringify({tabId:n})});return{acquired:s.acquired,currentHolder:s.currentHolder??null}}function TC(e,n){return I(`/ai-sessions/${encodeURIComponent(e)}/lock`,{method:"DELETE",body:JSON.stringify({tabId:n})})}function PC(e,n){return I(`/ai-sessions/${encodeURIComponent(e)}/lock/force`,{method:"POST",body:JSON.stringify({tabId:n})})}async function ax(e){await fetch(As(`/ai-sessions/${encodeURIComponent(e)}`),{method:"DELETE",headers:Ei()})}function $C(e,n){return I(V(`/ai-sessions/${encodeURIComponent(e)}/ping`,n),{method:"POST"})}function DC(e,n,s){return I(V(`/ai-sessions/${encodeURIComponent(e)}/draft`,s),{method:"PATCH",body:JSON.stringify(n)})}function LC(e,n){return I(V(`/planning/${encodeURIComponent(e)}/summarize-draft-title`,n),{method:"POST"})}function OC(e,n){const s=new URLSearchParams;s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset)),e?.unreadOnly&&s.set("unreadOnly","true"),e?.type&&s.set("type",e.type),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/messages/inbox${a}`)}function FC(e,n){const s=new URLSearchParams;s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset)),e?.type&&s.set("type",e.type),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/messages/outbox${a}`)}function rx(e){return I(V("/messages/unread-count",e))}function zC(e,n){return I(V("/messages",n),{method:"POST",body:JSON.stringify(e)})}function BC(e,n){return I(V(`/messages/${encodeURIComponent(e)}/read`,n),{method:"POST"})}function UC(e){return I(V("/messages/read-all",e),{method:"POST"})}function HC(e,n){return I(V(`/messages/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function qC(e,n,s){const a=`/messages/conversation/${encodeURIComponent(n)}/${encodeURIComponent(e)}`;return I(V(a,s))}function VC(e,n){return I(V(`/agents/${encodeURIComponent(e)}/mailbox`,n))}function WC(e){return I(V("/agents/mailbox/all",e))}function xl(e,n){const s=new URLSearchParams;e?.status&&s.set("status",e.status),e?.limit!==void 0&&s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset)),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/approvals${a}`)}function Th(e,n){return I(V(`/approvals/${encodeURIComponent(e)}`,n))}function GC(e,n,s){return I(V(`/approvals/${encodeURIComponent(e)}/decision`,s),{method:"POST",body:JSON.stringify(n)})}function G8(e,n,s){const a=new URLSearchParams;a.set("limit",String(n)),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/reflections${r}`)}function K8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/reflections`,n),{method:"POST"})}function J8(e,n,s){const a=new URLSearchParams;s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/performance${r}`)}function Y8(e,n,s){const a=new URLSearchParams;a.set("limit",String(n.limit)),n?.category&&a.set("category",n.category),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/ratings${r}`)}function Q8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/ratings`,s),{method:"POST",body:JSON.stringify(n)})}function X8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/ratings/summary`,n))}function Z8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/ratings/${encodeURIComponent(n)}`,s),{method:"DELETE"})}function eB(e,n){return I(V(`/agents/${encodeURIComponent(e)}/budget`,n))}function tB(e,n){return I(V(`/agents/${encodeURIComponent(e)}/budget/reset`,n),{method:"POST"})}async function nB(e){return I(V("/plugins",e))}async function sB(e,n){return I(V("/plugins",n),{method:"POST",body:JSON.stringify({mode:"install",...e})})}async function iB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/enable`,n),{method:"POST"})}async function aB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/disable`,n),{method:"POST"})}async function rB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}`,n),{method:"DELETE"})}async function oB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/settings`,n))}async function lB(e,n,s){return I(V(`/plugins/${encodeURIComponent(e)}/settings`,s),{method:"PUT",body:JSON.stringify({settings:n})})}async function cB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/setup-status`,n))}async function dB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/setup/install`,n),{method:"POST"})}async function uB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/reload`,n),{method:"POST"})}async function mB(e,n,s){return I(V(`/plugins/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function hB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/rescan`,n),{method:"POST"})}async function KC(e){return I(V("/plugins/ui-slots",e))}async function JC(e){return I(V("/plugins/dashboard-views",e))}async function pB(e){return I(V("/plugins/runtimes",e))}async function YC(e){return(await I(V("/skills/discovered",e))).skills}async function fB(e,n,s){return I(V("/skills/execution",s),{method:"PATCH",body:JSON.stringify({skillId:e,enabled:n})})}async function gB(e,n,s){const a=new URLSearchParams;e&&a.set("q",e),a.set("limit",String(n));const r=a.size>0?`?${a.toString()}`:"";return I(V(`/skills/catalog${r}`,s))}async function bB(e,n){return(await I(V(`/skills/${encodeURIComponent(e)}/content`,n))).content}function Ph(e,n){const s=new URLSearchParams;e&&s.set("projectId",e);const a=s.toString();return I(`/chat/sessions${a?`?${a}`:""}`)}async function QC(e,n){const s=e.agentId.trim();if(!s)throw new Error("agentId is required");const a=e.modelProvider?.trim(),r=e.modelId?.trim();if(a&&!r||!a&&r)throw new Error("Both modelProvider and modelId must be provided together, or neither should be provided");const o=new URLSearchParams;return o.set("lookup","resume"),o.set("agentId",s),n&&o.set("projectId",n),a&&r&&(o.set("modelProvider",a),o.set("modelId",r)),{session:(await I(`/chat/sessions?${o.toString()}`)).sessions[0]??null}}function XC(e,n){return I(V("/chat/sessions",n),{method:"POST",body:JSON.stringify(e)})}function nd(e,n){return I(V(`/chat/sessions/${encodeURIComponent(e)}`,n))}function xB(e,n,s){return I(V(`/chat/sessions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function vB(e,n){return I(V(`/chat/sessions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function lo(e,n,s){const a=new URLSearchParams;n?.limit!==void 0&&a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset)),n?.before&&a.set("before",n.before);const r=a.toString();return I(V(`/chat/sessions/${encodeURIComponent(e)}/messages${r?`?${r}`:""}`,s))}function yB(e={},n){const s=new URLSearchParams;n&&s.set("projectId",n),e.status&&s.set("status",e.status),e.agentId&&s.set("agentId",e.agentId);const a=s.toString();return I(`/chat/rooms${a?`?${a}`:""}`)}function wB(e,n){const s={...e,...n?{projectId:n}:{}};return I(V("/chat/rooms",n),{method:"POST",body:JSON.stringify(s)})}function kB(e,n){return I(V(`/chat/rooms/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function jB(e,n){return I(V(`/chat/rooms/${encodeURIComponent(e)}/members`,n))}function NB(e,n,s){const a=new URLSearchParams;n?.limit!==void 0&&a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset)),n?.before&&a.set("before",n.before),n?.order&&a.set("order",n.order);const r=a.toString();return I(V(`/chat/rooms/${encodeURIComponent(e)}/messages${r?`?${r}`:""}`,s))}function SB(e,n,s){return I(V(`/chat/rooms/${encodeURIComponent(e)}/messages`,s),{method:"POST",body:JSON.stringify(n)})}function ZC(e,n){return I(V(`/chat/sessions/${encodeURIComponent(e)}/cancel`,n),{method:"POST"})}function eE(e){if(!e||typeof e!="object")return null;const n=e,s=typeof n.summary=="string"?n.summary.trim():"";if(!s)return null;const a=(()=>{const r=n.reference;if(!r||typeof r!="object")return;const o=r,l=typeof o.kind=="string"?o.kind.trim():"",c=typeof o.id=="string"?o.id.trim():"";if(!(!l||!c))return{kind:l,id:c,...typeof o.label=="string"&&o.label.trim()?{label:o.label.trim()}:{}}})();return{summary:s,...typeof n.errorClass=="string"&&n.errorClass.trim()?{errorClass:n.errorClass.trim()}:{},...typeof n.code=="string"&&n.code.trim()?{code:n.code.trim()}:{},...typeof n.detail=="string"&&n.detail.trim()?{detail:n.detail.trim()}:{},...a?{reference:a}:{}}}function ox(e){try{const n=JSON.parse(e),s=eE(n);return s||(n&&typeof n=="object"&&typeof n.message=="string"?n.message:typeof n=="string"?n:e||"Stream error")}catch{return e||"Stream error"}}function tE(e,n,s,a,r,o){const l=As(V(`/chat/sessions/${encodeURIComponent(e)}/messages`,r)),c=new AbortController;let d=!1,u=!1,h=!1;const m=Math.max(1e3,6e4);let f=null;const p=()=>{f&&(clearTimeout(f),f=null)},g=()=>{h||(h=!0,p())},w=(v,b)=>{if(v)switch(g(),v){case"thinking":try{s.onThinking?.(JSON.parse(b))}catch{s.onThinking?.(b)}break;case"text":try{s.onText?.(JSON.parse(b))}catch{s.onText?.(b)}break;case"tool_start":try{s.onToolStart?.(JSON.parse(b))}catch{}break;case"tool_end":try{s.onToolEnd?.(JSON.parse(b))}catch{}break;case"fallback":try{s.onFallback?.(JSON.parse(b))}catch{}break;case"done":u=!0;try{const y=JSON.parse(b);s.onDone?.({messageId:typeof y.messageId=="string"?y.messageId:"",...y.message&&typeof y.message=="object"?{message:y.message}:{}})}catch{s.onDone?.({messageId:""})}break;case"error":u=!0,s.onError?.(ox(b));break}};return(async()=>{try{const v=Array.isArray(a)&&a.length>0,b=v?(()=>{const _=new FormData;return _.append("content",n),a.forEach(A=>_.append("attachments",A)),_})():JSON.stringify({content:n}),y=await fetch(l,{method:"POST",headers:v?Ei():Ei({"Content-Type":"application/json"}),body:b,signal:c.signal});if(!y.ok){const _=await y.text();let A=`Request failed: ${y.status}`;try{A=JSON.parse(_).error||A}catch{}s.onError?.(A);return}if(!y.body){s.onError?.("No response body");return}s.onConnectionStateChange?.("connected"),f=setTimeout(()=>{u||d||h||(u=!0,s.onError?.("Timed out waiting for first response event"),c.abort())},m);const N=y.body.getReader(),S=new TextDecoder;let C="",x="",k=[];const R=(_,A=!1)=>{C+=_;const X=C.split(`
|
|
643
|
+
`);C=X.pop()||"",A&&C.length>0&&(X.push(C),C="");for(const H of X){const M=H.endsWith("\r")?H.slice(0,-1):H;if(M.startsWith("event:"))x=M.slice(6).trim();else if(M.startsWith("data:")){const T=M.slice(5);k.push(T.startsWith(" ")?T.slice(1):T)}else if(M===""){const T=k.join(`
|
|
644
|
+
`);w(x,T),x="",k=[]}}if(A&&x&&k.length>0){const H=k.join(`
|
|
645
|
+
`);w(x,H),x="",k=[]}};for(;;){const{done:_,value:A}=await N.read();if(_){R(S.decode(),!0);break}R(S.decode(A,{stream:!0}))}const z=C.length>0||x.length>0||k.length>0;!u&&!d&&!z&&s.onError?.("Connection closed unexpectedly"),p()}catch(v){if(v instanceof DOMException&&v.name==="AbortError"){!d&&!u&&s.onError?.("Connection aborted"),p();return}if(d){p();return}p(),s.onError?.(v instanceof Error?v.message:"Connection error")}})(),{close:()=>{d=!0,p(),c.abort()},isConnected:()=>!d}}function nE(e,n,s,a){const r=As(V(`/chat/sessions/${encodeURIComponent(e)}/stream`,s)),o=new AbortController;let l=!1,c=!1;const d=(u,h)=>{if(u)switch(u){case"thinking":try{n.onThinking?.(JSON.parse(h))}catch{n.onThinking?.(h)}break;case"text":try{n.onText?.(JSON.parse(h))}catch{n.onText?.(h)}break;case"tool_start":try{n.onToolStart?.(JSON.parse(h))}catch{}break;case"tool_end":try{n.onToolEnd?.(JSON.parse(h))}catch{}break;case"fallback":try{n.onFallback?.(JSON.parse(h))}catch{}break;case"done":c=!0;try{const m=JSON.parse(h);n.onDone?.({messageId:typeof m.messageId=="string"?m.messageId:"",...m.message&&typeof m.message=="object"?{message:m.message}:{}})}catch{n.onDone?.({messageId:""})}break;case"error":c=!0,n.onError?.(ox(h));break}};return(async()=>{try{const u=new Headers(Ei());typeof a?.lastEventId=="number"&&u.set("Last-Event-ID",String(a.lastEventId));const h=await fetch(r,{method:"GET",headers:u,signal:o.signal});if(!h.ok){const y=await h.text();let N=`Request failed: ${h.status}`;try{N=JSON.parse(y).error||N}catch{}n.onError?.(N);return}if(!h.body){n.onError?.("No response body");return}n.onConnectionStateChange?.("connected");const m=h.body.getReader(),f=new TextDecoder;let p="",g="",w=[];const v=(y,N=!1)=>{p+=y;const S=p.split(`
|
|
646
|
+
`);p=S.pop()||"",N&&p.length>0&&(S.push(p),p="");for(const C of S){const x=C.endsWith("\r")?C.slice(0,-1):C;if(x.startsWith("event:"))g=x.slice(6).trim();else if(x.startsWith("data:")){const k=x.slice(5);w.push(k.startsWith(" ")?k.slice(1):k)}else if(x===""){const k=w.join(`
|
|
647
|
+
`);d(g,k),g="",w=[]}}if(N&&g&&w.length>0){const C=w.join(`
|
|
648
|
+
`);d(g,C),g="",w=[]}};for(;;){const{done:y,value:N}=await m.read();if(y){v(f.decode(),!0);break}v(f.decode(N,{stream:!0}))}const b=p.length>0||g.length>0||w.length>0;if(!c&&!l&&!b)return}catch(u){if(u instanceof DOMException&&u.name==="AbortError"){!l&&!c&&n.onError?.("Connection aborted");return}if(l)return;n.onError?.(u instanceof Error?u.message:"Connection error")}})(),{close:()=>{l=!0,o.abort()},isConnected:()=>!l}}function CB(e={},n){const s=new URLSearchParams;e.category&&s.set("category",e.category),e.status&&s.set("status",e.status),e.runId&&s.set("runId",e.runId),e.limit!==void 0&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset));const a=s.size>0?`?${s.toString()}`:"";return I(V(`/insights${a}`,n))}function EB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/dismiss`,n),{method:"POST"})}function _B(e,n){return I(V(`/insights/${encodeURIComponent(e)}/archive`,n),{method:"POST"})}function MB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/unarchive`,n),{method:"POST"})}function AB(e="manual",n,s,a,r){const o={trigger:e,inputMetadata:n};return a&&(o.modelProvider=a),r&&(o.modelId=r),I(V("/insights/run",s),{method:"POST",body:JSON.stringify(o)})}function RB(e){return I(V("/insights/runs",e))}function IB(e,n){return I(V(`/insights/runs/${encodeURIComponent(e)}`,n))}function TB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/create-task`,n),{method:"POST"})}function PB(e={},n){const s=new URLSearchParams;e.q&&s.set("q",e.q),e.runId&&s.set("runId",e.runId),e.scoreMin!==void 0&&s.set("scoreMin",String(e.scoreMin)),e.scoreMax!==void 0&&s.set("scoreMax",String(e.scoreMax)),e.limit!==void 0&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset));const a=s.size>0?`?${s.toString()}`:"";return I(V(`/evals${a}`,n))}function $B(e,n){return I(V(`/evals/${encodeURIComponent(e)}`,n))}function DB(e){return I(V("/evals/runs",e))}function LB(e={},n){const s=new URLSearchParams;e.q&&s.set("q",e.q),e.status&&s.set("status",e.status),e.limit!==void 0&&s.set("limit",String(e.limit));const a=s.size>0?`?${s.toString()}`:"";return I(V(`/research/runs${a}`,n))}function OB(e,n){return I(V("/research/runs",n),{method:"POST",body:JSON.stringify(e)})}function FB(e,n){return I(V(`/research/runs/${encodeURIComponent(e)}`,n))}function lx(e){if(e instanceof sc){const n=e.details?.code,s=typeof n=="string"?n:"INTERNAL_ERROR",a=typeof e.details?.setupHint=="string"?e.details.setupHint:void 0,r=typeof e.details?.retryable=="boolean"?e.details.retryable:void 0,o=e;throw o.researchCode=s,o.setupHint=a,o.retryable=r,o}throw e}async function zB(e,n){try{return await I(V(`/research/runs/${encodeURIComponent(e)}/cancel`,n),{method:"POST"})}catch(s){lx(s)}}async function BB(e,n){try{return await I(V(`/research/runs/${encodeURIComponent(e)}/retry`,n),{method:"POST"})}catch(s){lx(s)}}function UB(e,n,s){return I(V(`/research/runs/${encodeURIComponent(e)}/export?format=${encodeURIComponent(n)}`,s))}function HB(e,n,s){const a=n.findingId??"finding-1";return I(V(`/research/runs/${encodeURIComponent(e)}/findings/${encodeURIComponent(a)}/task`,s),{method:"POST",body:JSON.stringify({title:n.title,description:n.description,priority:n.priority,attachExport:n.attachExport})})}function qB(e,n,s){const a=n.findingId??"finding-1";return I(V(`/research/runs/${encodeURIComponent(e)}/findings/${encodeURIComponent(a)}/tasks/${encodeURIComponent(n.taskId)}/enrich`,s),{method:"POST",body:JSON.stringify({attachExport:n.attachExport})})}async function sE(e){return il("/health",{nodeId:e})}async function iE(e){return il("/projects",{nodeId:e})}async function aE(e,n,s){const a=new URLSearchParams({projectId:n});return s&&s.trim()&&a.set("q",s.trim()),il(`/tasks?${a.toString()}`,{nodeId:e})}async function rE(e,n){return il(`/project-health?projectId=${encodeURIComponent(n)}`,{nodeId:e})}async function VB(e){return I(`/nodes/${encodeURIComponent(e)}/settings/push`,{method:"POST",body:JSON.stringify({})})}async function WB(e){return I(`/nodes/${encodeURIComponent(e)}/settings/pull`,{method:"POST",body:JSON.stringify({conflictResolution:"last-write-wins"})})}async function GB(e){return I(`/nodes/${encodeURIComponent(e)}/settings/sync-status`)}async function KB(e){return I(`/nodes/${encodeURIComponent(e)}/auth/sync`,{method:"POST",body:JSON.stringify({})})}async function oE(e,n){return Promise.all(n.map(({projectId:s,path:a})=>C1(s,e,a)))}function lE(e){switch(e){case"online":return{label:"Online",dotClass:"node-status-indicator__dot--online"};case"offline":return{label:"Offline",dotClass:"node-status-indicator__dot--offline"};case"connecting":return{label:"Connecting",dotClass:"node-status-indicator__dot--connecting"};case"error":return{label:"Error",dotClass:"node-status-indicator__dot--error"};default:return{label:"Unknown",dotClass:"node-status-indicator__dot--offline"}}}function cE({node:e,showDetails:n=!1}){if(!e||e.type==="local")return t.jsx("div",{className:"node-status-indicator node-status-indicator--local",children:t.jsx("span",{className:"node-status-indicator__label",children:"Local"})});const{label:s,dotClass:a}=lE(e.status),r=e.status==="connecting";return t.jsxs("div",{className:"node-status-indicator node-status-indicator--remote",children:[t.jsx("span",{className:`node-status-indicator__dot ${a}`,children:r&&t.jsx("span",{className:"node-status-indicator__spinner"})}),t.jsx("span",{className:"node-status-indicator__name",children:e.name}),n&&t.jsxs("span",{className:"node-status-indicator__details",children:[e.type," · ",s]})]})}function dE(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ya({status:e,showLabel:n=!1,className:s,compact:a=!1}){const r=dE(e);return t.jsxs("span",{className:`node-health-dot${a?" node-health-dot--compact":""}${s?` ${s}`:""}`,title:r,"aria-label":`Node status: ${r}`,children:[t.jsx("span",{className:`status-dot status-dot--${e}`}),n?t.jsx("span",{className:"node-health-dot__label",children:r}):null]})}const $h=new Map,uE=6e4;function cx(e){const[n,s]=i.useState([]),[a,r]=i.useState(!0),[o,l]=i.useState(null),c=i.useRef(!1),d=i.useRef(!1),u=i.useCallback(h=>n.filter(m=>m.slot.slotId===h),[n]);return i.useEffect(()=>{const h=e??"default";let m=!1;async function f(){const p=$h.get(h);if(p&&Date.now()<p.expiresAt){if(m||d.current)return;s(p.slots),r(!1);return}!c.current&&r(!0),l(null);try{const w=await KC(e);if(m||d.current)return;$h.set(h,{slots:w,expiresAt:Date.now()+uE}),s(w),c.current=!0}catch(w){if(m||d.current)return;l(w instanceof Error?w.message:"Failed to fetch UI slots"),c.current=!0}finally{!m&&!d.current&&r(!1)}}return f(),()=>{m=!0}},[e]),i.useEffect(()=>{c.current=!1,d.current=!1},[e]),i.useEffect(()=>()=>{d.current=!0},[]),i.useMemo(()=>({slots:n,getSlotsForId:u,loading:a,error:o}),[n,u,a,o])}function Dh({size:e,color:n,label:s="llama.cpp"}){return t.jsx(Mb,{size:e,color:n,"aria-label":s,"data-testid":"llama-cpp-icon"})}const mE={sm:16,md:20,lg:24};function hE({size:e,color:n,label:s="Anthropic"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"anthropic-icon","aria-label":s,children:t.jsx("path",{d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z",fill:n})})}function Lh({size:e,color:n,label:s="OpenAI"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"openai-icon","aria-label":s,children:t.jsx("path",{d:"M22.282 9.821a6 6 0 0 0-.516-4.91a6.05 6.05 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a6 6 0 0 0-3.998 2.9a6.05 6.05 0 0 0 .743 7.097a5.98 5.98 0 0 0 .51 4.911a6.05 6.05 0 0 0 6.515 2.9A6 6 0 0 0 13.26 24a6.06 6.06 0 0 0 5.772-4.206a6 6 0 0 0 3.997-2.9a6.06 6.06 0 0 0-.747-7.073M13.26 22.43a4.48 4.48 0 0 1-2.876-1.04l.141-.081l4.779-2.758a.8.8 0 0 0 .392-.681v-6.737l2.02 1.168a.07.07 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494M3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085l4.783 2.759a.77.77 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646M2.34 7.896a4.5 4.5 0 0 1 2.366-1.973V11.6a.77.77 0 0 0 .388.677l5.815 3.354l-2.02 1.168a.08.08 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.08.08 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667m2.01-3.023l-.141-.085l-4.774-2.782a.78.78 0 0 0-.785 0L9.409 9.23V6.897a.07.07 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.8.8 0 0 0-.393.681zm1.097-2.365l2.602-1.5l2.607 1.5v2.999l-2.597 1.5l-2.607-1.5Z",fill:n})})}function $i({size:e,color:n,label:s="Google Gemini"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"gemini-icon","aria-label":s,children:t.jsx("path",{d:"M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81",fill:n})})}function pE({size:e,color:n,label:s="Ollama"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"ollama-icon","aria-label":s,children:t.jsx("path",{d:"M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z",fill:n})})}function Oh({size:e,color:n,label:s="MiniMax"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"minimax-icon","aria-label":s,children:t.jsx("path",{d:"M11.43 3.92a.86.86 0 1 0-1.718 0v14.236a1.999 1.999 0 0 1-3.997 0V9.022a.86.86 0 1 0-1.718 0v3.87a1.999 1.999 0 0 1-3.997 0V11.49a.57.57 0 0 1 1.139 0v1.404a.86.86 0 0 0 1.719 0V9.022a1.999 1.999 0 0 1 3.997 0v9.134a.86.86 0 0 0 1.719 0V3.92a1.998 1.998 0 1 1 3.996 0v11.788a.57.57 0 1 1-1.139 0zm10.572 3.105a2 2 0 0 0-1.999 1.997v7.63a.86.86 0 0 1-1.718 0V3.923a1.999 1.999 0 0 0-3.997 0v16.16a.86.86 0 0 1-1.719 0V18.08a.57.57 0 1 0-1.138 0v2a1.998 1.998 0 0 0 3.996 0V3.92a.86.86 0 0 1 1.719 0v12.73a1.999 1.999 0 0 0 3.996 0V9.023a.86.86 0 1 1 1.72 0v6.686a.57.57 0 0 0 1.138 0V9.022a2 2 0 0 0-1.998-1.997",fill:n})})}function fE({size:e,color:n,label:s="Z.ai"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"zai-icon","aria-label":s,children:t.jsx("path",{d:"M3 5H21V8.5L7 17.5H21V21H3V17.5L17 8.5H3Z",fill:n})})}function sd({size:e,color:n,label:s="Kimi"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"kimi-icon","aria-label":s,children:t.jsx("path",{d:"M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.39 5.39 0 0 1-4.4 2.26 5.4 5.4 0 0 1-3.14-9.8c.2-.07.4-.1.64-.1z",fill:n})})}function Fh({size:e,color:n,label:s="Amazon Bedrock"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"bedrock-icon","aria-label":s,children:t.jsx("path",{d:"M.045 18.02c.072-.116.187-.124.348-.022 2.344 1.476 4.878 2.212 7.607 2.212 1.86 0 3.68-.398 5.453-1.198.386-.168.71-.298.972-.39.26-.092.478-.113.654-.06.176.052.263.2.263.443 0 .222-.12.453-.358.693-.96.962-2.16 1.71-3.592 2.242A12.126 12.126 0 0 1 7.297 23c-2.456 0-4.583-.665-6.378-1.992a.39.39 0 0 1-.098-.096c-.05-.078-.05-.156 0-.234zm6.609-3.26c0-.37.093-.665.282-.886.188-.222.43-.332.727-.332.282 0 .524.105.726.314.2.21.3.498.3.866v4.116c0 .382-.098.676-.294.882-.196.206-.436.31-.72.31-.294 0-.54-.108-.738-.324-.198-.216-.296-.506-.296-.868v-4.078h.014zm-2.986 2.3c0-.376.096-.672.288-.89.192-.216.434-.324.726-.324.292 0 .534.108.726.324.192.218.288.514.288.89v1.778c0 .376-.096.672-.288.89-.192.216-.434.324-.726.324-.292 0-.534-.108-.726-.324-.192-.218-.288-.514-.288-.89v-1.778zm-2.92 1.334c0-.36.09-.65.27-.868.18-.218.42-.328.722-.328s.544.11.73.328c.186.218.278.508.278.868v.444c0 .36-.092.65-.278.868-.186.218-.428.328-.73.328s-.542-.11-.722-.328c-.18-.218-.27-.508-.27-.868v-.444zM21.93 16.4c.804.456 1.39.87 1.758 1.242.368.372.552.7.552.984 0 .208-.102.37-.308.488-.206.118-.462.128-.768.032-.306-.096-.674-.316-1.104-.66a12.728 12.728 0 0 1-1.864-1.75c-1.592.644-3.342.966-5.25.966-1.354 0-2.604-.178-3.752-.534a8.103 8.103 0 0 1-.09-.032l.03.012c-.136-.048.056.022-.042-.014-.04-.016-.04-.016 0 0l.012.004-.012-.004c-.32-.122-.528-.222-.624-.3-.096-.078-.144-.178-.144-.3 0-.098.04-.186.122-.264.082-.078.19-.116.326-.116.076 0 .284.054.624.162 1.078.34 2.264.51 3.558.51 1.642 0 3.194-.286 4.658-.856a17.018 17.018 0 0 1-1.904-3.326c-.416-.94-.726-1.86-.93-2.758-.206-.898-.308-1.728-.308-2.49 0-.664.094-1.194.28-1.592.188-.396.456-.594.804-.594.2 0 .392.074.576.224.184.148.312.354.384.614.1.358.178.758.234 1.198.056.44.084.876.084 1.306 0 .898-.116 1.862-.348 2.894-.232 1.032-.614 2.11-1.146 3.234a16.217 16.217 0 0 0 1.916 1.694z",fill:n})})}function zh({size:e,color:n,label:s="xAI"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"xai-icon","aria-label":s,children:t.jsx("path",{d:"M2.21 3l7.964 11.386L2.13 21h1.974l6.843-7.07L17.165 21H22.1l-8.392-11.97L21.17 3h-1.974l-6.349 6.56L6.845 3z",fill:n})})}function Bh({size:e,color:n,label:s="Opencode"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"opencode-icon","aria-label":s,children:t.jsx("path",{d:"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6z",fill:n})})}function id({size:e,color:n,label:s="DeepSeek"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"deepseek-icon","aria-label":s,children:t.jsx("path",{d:"M4 12a8 8 0 1 1 12.7 6.4L12 16h4a4 4 0 1 0-1.6 3.2L12 22l7-1-1.2-3.6A10 10 0 1 0 2 12z",fill:n})})}function Uh({size:e,color:n,label:s="Cloudflare"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"cloudflare-icon","aria-label":s,children:t.jsx("path",{d:"M7 16.5h10.8a2.9 2.9 0 0 0 .3-5.8 4.9 4.9 0 0 0-9.3-1.6A3.6 3.6 0 0 0 7 16.5m-1.9 0h3.2a2.5 2.5 0 0 0 .2-5 3.4 3.4 0 0 0-3.4 3.4c0 .6 0 1 .2 1.6",fill:n})})}function co({size:e,color:n,label:s="Qwen"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"qwen-icon","aria-label":s,children:[t.jsx("circle",{cx:"11",cy:"12",r:"7.5",stroke:n,strokeWidth:"2",fill:"none"}),t.jsx("path",{d:"M14 15 L21 22",stroke:n,strokeWidth:"2.6",strokeLinecap:"round"})]})}function Hh({size:e,color:n,label:s="LM Studio"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"lmstudio-icon","aria-label":s,children:[t.jsx("rect",{x:"2",y:"2",width:"20",height:"20",rx:"4.5",fill:n}),t.jsx("text",{x:"12",y:"16",textAnchor:"middle",fontFamily:"-apple-system, system-ui, sans-serif",fontSize:"9.5",fontWeight:"700",fill:"var(--provider-icon-contrast)",letterSpacing:"-0.4",children:"LM"})]})}function ad({size:e,color:n,label:s="Hugging Face"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"huggingface-icon","aria-label":s,children:[t.jsx("circle",{cx:"12",cy:"12",r:"9",fill:n}),t.jsx("circle",{cx:"8.5",cy:"10.5",r:"1.4",fill:"var(--provider-icon-contrast)"}),t.jsx("circle",{cx:"15.5",cy:"10.5",r:"1.4",fill:"var(--provider-icon-contrast)"}),t.jsx("path",{d:"M7.5 14.5 Q12 18.5 16.5 14.5",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.6",strokeLinecap:"round",fill:"none"}),t.jsx("path",{d:"M3.5 16 Q5 13.5 7 14.5 M20.5 16 Q19 13.5 17 14.5",stroke:n,strokeWidth:"1.8",strokeLinecap:"round",fill:"none"})]})}function qh({size:e,color:n,label:s="Mistral AI"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"mistral-icon","aria-label":s,children:t.jsx("path",{d:"M2 4h3v16H2zM7 4h3v12H7zM12 4h3v16h-3zM17 4h3v8h-3zM7 16h3v4H7zM17 8h3v12h-3z",fill:n})})}function rd({size:e,color:n,label:s="Azure"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"azure-icon","aria-label":s,children:t.jsx("path",{d:"M10.4 3.2 4.5 16.6l3.5.5L13 6 9.6 19.5h9.9zM3 19.5l4.6.6 8.6-1.7-7-1.6z",fill:n})})}function gE({size:e,color:n,label:s="Cerebras"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"cerebras-icon","aria-label":s,children:[t.jsx("path",{d:"M19.5 6.5A8.5 8.5 0 1 0 19.5 17.5",stroke:n,strokeWidth:"2.4",strokeLinecap:"round",fill:"none"}),t.jsx("path",{d:"M16.5 9A4.6 4.6 0 1 0 16.5 15",stroke:n,strokeWidth:"1.8",strokeLinecap:"round",fill:"none"}),t.jsx("circle",{cx:"11",cy:"12",r:"1.6",fill:n})]})}function bE({size:e,color:n,label:s="Groq"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"groq-icon","aria-label":s,children:t.jsx("path",{d:"M14 2 4 13h6l-2 9 10-11h-6z",fill:n})})}function Vh({size:e,color:n,label:s="Vercel"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"vercel-icon","aria-label":s,children:t.jsx("path",{d:"M12 2 22 21H2z",fill:n})})}function od({size:e,color:n,label:s="Fireworks AI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"fireworks-icon","aria-label":s,children:[t.jsx("circle",{cx:"12",cy:"12",r:"2.4",fill:n}),t.jsx("circle",{cx:"12",cy:"3.5",r:"1.4",fill:n}),t.jsx("circle",{cx:"12",cy:"20.5",r:"1.4",fill:n}),t.jsx("circle",{cx:"3.5",cy:"12",r:"1.4",fill:n}),t.jsx("circle",{cx:"20.5",cy:"12",r:"1.4",fill:n}),t.jsx("circle",{cx:"6",cy:"6",r:"1.2",fill:n}),t.jsx("circle",{cx:"18",cy:"6",r:"1.2",fill:n}),t.jsx("circle",{cx:"6",cy:"18",r:"1.2",fill:n}),t.jsx("circle",{cx:"18",cy:"18",r:"1.2",fill:n}),t.jsx("path",{d:"M12 5.5v3M12 15.5v3M5.5 12h3M15.5 12h3",stroke:n,strokeWidth:"1.4",strokeLinecap:"round"})]})}function xE({size:e,color:n,label:s="OpenRouter"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"openrouter-icon","aria-label":s,children:t.jsx("path",{d:"M12 2.5a9.5 9.5 0 1 0 9.5 9.5h-2.7a6.8 6.8 0 1 1-2-4.8l-3.1 3.1H22V2.5l-3.2 3.2A9.45 9.45 0 0 0 12 2.5",fill:n})})}function Wh({size:e,color:n,label:s="GitHub"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"github-icon","aria-label":s,children:t.jsx("path",{d:"M12 0a12 12 0 0 0-3.79 23.39c.6.11.82-.26.82-.58v-2.23c-3.34.73-4.04-1.41-4.04-1.41-.55-1.39-1.34-1.76-1.34-1.76-1.09-.75.08-.74.08-.74 1.2.08 1.84 1.24 1.84 1.24 1.08 1.84 2.82 1.31 3.5 1 .1-.78.42-1.31.77-1.62-2.67-.3-5.47-1.34-5.47-5.95 0-1.31.47-2.38 1.24-3.22-.12-.31-.54-1.56.12-3.24 0 0 1.01-.32 3.3 1.23a11.3 11.3 0 0 1 6 0c2.29-1.55 3.3-1.23 3.3-1.23.66 1.68.24 2.93.12 3.24.77.84 1.24 1.91 1.24 3.22 0 4.62-2.8 5.64-5.48 5.94.43.37.82 1.1.82 2.22v3.29c0 .32.22.69.83.58A12 12 0 0 0 12 0",fill:n})})}function ld({size:e,color:n,label:s="Hermes"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 64 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":s,children:[t.jsx("rect",{x:"30",y:"10",width:"4",height:"46",rx:"2",fill:n}),t.jsx("path",{d:"M30 18 C24 14, 14 14, 10 18 C14 16, 22 16, 28 20",fill:n,opacity:"0.9"}),t.jsx("path",{d:"M30 22 C26 19, 18 19, 14 22 C18 20, 24 20, 28 24",fill:n,opacity:"0.7"}),t.jsx("path",{d:"M34 18 C40 14, 50 14, 54 18 C50 16, 42 16, 36 20",fill:n,opacity:"0.9"}),t.jsx("path",{d:"M34 22 C38 19, 46 19, 50 22 C46 20, 40 20, 36 24",fill:n,opacity:"0.7"}),t.jsx("path",{d:"M32 48 C22 44, 20 38, 26 34 C20 36, 18 42, 24 46 C18 40, 22 30, 30 28 C24 32, 22 38, 28 42",fill:"none",stroke:n,strokeWidth:"2.5",strokeLinecap:"round"}),t.jsx("path",{d:"M32 48 C42 44, 44 38, 38 34 C44 36, 46 42, 40 46 C46 40, 42 30, 34 28 C40 32, 42 38, 36 42",fill:"none",stroke:n,strokeWidth:"2.5",strokeLinecap:"round",opacity:"0.8"}),t.jsx("circle",{cx:"32",cy:"10",r:"4",fill:n})]})}function Gh({size:e,label:n="OpenClaw"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":n,children:[t.jsx("rect",{width:"16",height:"16",fill:"none"}),t.jsxs("g",{fill:"#3a0a0d",children:[t.jsx("rect",{x:"1",y:"5",width:"1",height:"3"}),t.jsx("rect",{x:"2",y:"4",width:"1",height:"1"}),t.jsx("rect",{x:"2",y:"8",width:"1",height:"1"}),t.jsx("rect",{x:"3",y:"3",width:"1",height:"1"}),t.jsx("rect",{x:"3",y:"9",width:"1",height:"1"}),t.jsx("rect",{x:"4",y:"2",width:"1",height:"1"}),t.jsx("rect",{x:"4",y:"10",width:"1",height:"1"}),t.jsx("rect",{x:"5",y:"2",width:"6",height:"1"}),t.jsx("rect",{x:"11",y:"2",width:"1",height:"1"}),t.jsx("rect",{x:"12",y:"3",width:"1",height:"1"}),t.jsx("rect",{x:"12",y:"9",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"4",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"8",width:"1",height:"1"}),t.jsx("rect",{x:"14",y:"5",width:"1",height:"3"}),t.jsx("rect",{x:"5",y:"11",width:"6",height:"1"}),t.jsx("rect",{x:"4",y:"12",width:"1",height:"1"}),t.jsx("rect",{x:"11",y:"12",width:"1",height:"1"}),t.jsx("rect",{x:"3",y:"13",width:"1",height:"1"}),t.jsx("rect",{x:"12",y:"13",width:"1",height:"1"}),t.jsx("rect",{x:"5",y:"14",width:"6",height:"1"})]}),t.jsxs("g",{fill:"#ff4f40",children:[t.jsx("rect",{x:"5",y:"3",width:"6",height:"1"}),t.jsx("rect",{x:"4",y:"4",width:"8",height:"1"}),t.jsx("rect",{x:"3",y:"5",width:"10",height:"1"}),t.jsx("rect",{x:"3",y:"6",width:"10",height:"1"}),t.jsx("rect",{x:"3",y:"7",width:"10",height:"1"}),t.jsx("rect",{x:"4",y:"8",width:"8",height:"1"}),t.jsx("rect",{x:"5",y:"9",width:"6",height:"1"}),t.jsx("rect",{x:"5",y:"12",width:"6",height:"1"}),t.jsx("rect",{x:"6",y:"13",width:"4",height:"1"})]}),t.jsxs("g",{fill:"#ff775f",children:[t.jsx("rect",{x:"1",y:"6",width:"2",height:"1"}),t.jsx("rect",{x:"2",y:"5",width:"1",height:"1"}),t.jsx("rect",{x:"2",y:"7",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"6",width:"2",height:"1"}),t.jsx("rect",{x:"13",y:"5",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"7",width:"1",height:"1"})]}),t.jsxs("g",{fill:"#081016",children:[t.jsx("rect",{x:"6",y:"5",width:"1",height:"1"}),t.jsx("rect",{x:"9",y:"5",width:"1",height:"1"})]}),t.jsxs("g",{fill:"#f5fbff",children:[t.jsx("rect",{x:"6",y:"4",width:"1",height:"1"}),t.jsx("rect",{x:"9",y:"4",width:"1",height:"1"})]})]})}function cd({size:e,color:n,label:s="Paperclip"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":s,children:t.jsx("path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function Kh({size:e,color:n,label:s="Anthropic — via Claude CLI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"claude-cli-icon","aria-label":s,children:[t.jsx("g",{transform:"translate(-1 -1.5) scale(0.82)",children:t.jsx("path",{d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z",fill:n})}),t.jsx("rect",{x:"13",y:"13",width:"10",height:"9",rx:"1.5",fill:n}),t.jsx("path",{d:"M15.2 16.2l1.6 1.4-1.6 1.4M18.6 19.6h2.4",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function vE({size:e,color:n,label:s="Factory AI — via Droid CLI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"droid-cli-icon","aria-label":s,children:[t.jsx("rect",{x:"2",y:"3",width:"14",height:"14",rx:"3",fill:n}),t.jsx("path",{d:"M6.5 7.5h2.6a2.9 2.9 0 1 1 0 5.8H6.5zM9 7.5v5.8",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"}),t.jsx("rect",{x:"13",y:"13",width:"10",height:"9",rx:"1.5",fill:n}),t.jsx("path",{d:"M15.2 16.2l1.6 1.4-1.6 1.4M18.6 19.6h2.4",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function yE({size:e,color:n,label:s="Cursor — via Cursor CLI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"cursor-cli-icon","aria-label":s,children:[t.jsx("rect",{x:"2",y:"3",width:"14",height:"14",rx:"3",fill:n}),t.jsx("path",{d:"M10.8 7.2a3.6 3.6 0 1 0 0 5.6",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"}),t.jsx("rect",{x:"13",y:"13",width:"10",height:"9",rx:"1.5",fill:n}),t.jsx("path",{d:"M15.2 16.2l1.6 1.4-1.6 1.4M18.6 19.6h2.4",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}const wE={anthropic:{component:hE,color:"var(--provider-anthropic)"},"claude-cli":{component:Kh,color:"var(--provider-anthropic)",label:"Anthropic — via Claude CLI"},"pi-claude-cli":{component:Kh,color:"var(--provider-anthropic)",label:"Anthropic — via Claude CLI"},"droid-cli":{component:vE,color:"var(--provider-openai)",label:"Factory AI — via Droid CLI"},"cursor-cli":{component:yE,color:"var(--provider-cursor-cli)",label:"Cursor — via Cursor CLI"},"llama-cpp":{component:Dh,color:"var(--provider-ollama)",label:"llama.cpp"},"llama-server":{component:Dh,color:"var(--provider-ollama)",label:"llama.cpp"},openai:{component:Lh,color:"var(--provider-openai)"},"openai-codex":{component:Lh,color:"var(--provider-openai)",label:"OpenAI Codex"},google:{component:$i,color:"var(--provider-gemini)"},gemini:{component:$i,color:"var(--provider-gemini)"},"google-antigravity":{component:$i,color:"var(--provider-gemini)",label:"Google Gemini"},antigravity:{component:$i,color:"var(--provider-gemini)",label:"Google Gemini"},"google-vertex":{component:$i,color:"var(--provider-gemini)",label:"Google Vertex AI"},vertex:{component:$i,color:"var(--provider-gemini)",label:"Google Vertex AI"},"google-cloud-code":{component:$i,color:"var(--provider-gemini)",label:"Google Cloud Code"},"cloud-code":{component:$i,color:"var(--provider-gemini)",label:"Google Cloud Code"},"google-gemini-cli":{component:$i,color:"var(--provider-gemini)",label:"Google Gemini CLI"},"google-generative-ai":{component:$i,color:"var(--provider-gemini)",label:"Google Generative AI"},ollama:{component:pE,color:"var(--text)"},github:{component:Wh,color:"var(--text)"},"github-copilot":{component:Wh,color:"var(--text)",label:"GitHub Copilot"},openrouter:{component:xE,color:"var(--provider-openrouter)"},minimax:{component:Oh,color:"var(--provider-minimax)"},"minimax-cn":{component:Oh,color:"var(--provider-minimax)",label:"MiniMax (CN)"},zai:{component:fE,color:"var(--provider-zai)"},kimi:{component:sd,color:"var(--provider-kimi)"},moonshot:{component:sd,color:"var(--provider-kimi)"},"kimi-coding":{component:sd,color:"var(--provider-kimi)",label:"Kimi"},bedrock:{component:Fh,color:"var(--provider-bedrock)"},"amazon-bedrock":{component:Fh,color:"var(--provider-bedrock)",label:"Amazon Bedrock"},xai:{component:zh,color:"var(--text)"},grok:{component:zh,color:"var(--text)",label:"xAI"},opencode:{component:Bh,color:"var(--provider-opencode)"},"opencode-go":{component:Bh,color:"var(--provider-opencode)",label:"Opencode (Go)"},deepseek:{component:id,color:"var(--provider-deepseek)",label:"DeepSeek"},"deepseek-ai":{component:id,color:"var(--provider-deepseek)",label:"DeepSeek"},"deep-seek":{component:id,color:"var(--provider-deepseek)",label:"DeepSeek"},cloudflare:{component:Uh,color:"var(--provider-cloudflare)",label:"Cloudflare"},cloudflared:{component:Uh,color:"var(--provider-cloudflare)",label:"Cloudflare"},qwen:{component:co,color:"var(--provider-qwen)"},"qwen-ai":{component:co,color:"var(--provider-qwen)",label:"Qwen"},"qwen-coder":{component:co,color:"var(--provider-qwen)",label:"Qwen Coder"},alibaba:{component:co,color:"var(--provider-qwen)",label:"Qwen"},tongyi:{component:co,color:"var(--provider-qwen)",label:"Qwen"},lmstudio:{component:Hh,color:"var(--provider-lmstudio)",label:"LM Studio"},"lm-studio":{component:Hh,color:"var(--provider-lmstudio)",label:"LM Studio"},huggingface:{component:ad,color:"var(--provider-huggingface)",label:"Hugging Face"},"hugging-face":{component:ad,color:"var(--provider-huggingface)",label:"Hugging Face"},hf:{component:ad,color:"var(--provider-huggingface)",label:"Hugging Face"},mistral:{component:qh,color:"var(--provider-mistral)",label:"Mistral AI"},"mistral-ai":{component:qh,color:"var(--provider-mistral)",label:"Mistral AI"},azure:{component:rd,color:"var(--provider-azure)"},"azure-openai":{component:rd,color:"var(--provider-azure)",label:"Azure OpenAI"},"azure-openai-responses":{component:rd,color:"var(--provider-azure)",label:"Azure OpenAI"},fireworks:{component:od,color:"var(--provider-fireworks)",label:"Fireworks AI"},"fireworks-ai":{component:od,color:"var(--provider-fireworks)",label:"Fireworks AI"},fireworksai:{component:od,color:"var(--provider-fireworks)",label:"Fireworks AI"},cerebras:{component:gE,color:"var(--provider-cerebras)"},groq:{component:bE,color:"var(--provider-groq)"},vercel:{component:Vh,color:"var(--provider-vercel)"},"vercel-ai-gateway":{component:Vh,color:"var(--provider-vercel)",label:"Vercel AI Gateway"},hermes:{component:ld,color:"var(--provider-hermes)",label:"Hermes"},"hermes-agent":{component:ld,color:"var(--provider-hermes)",label:"Hermes"},hermesagent:{component:ld,color:"var(--provider-hermes)",label:"Hermes"},openclaw:{component:Gh,color:"var(--provider-openclaw)",label:"OpenClaw"},"open-claw":{component:Gh,color:"var(--provider-openclaw)",label:"OpenClaw"},paperclip:{component:cd,color:"var(--provider-paperclip)",label:"Paperclip"},paperclipai:{component:cd,color:"var(--provider-paperclip)",label:"Paperclip"},"paperclip-ai":{component:cd,color:"var(--provider-paperclip)",label:"Paperclip"}};function Kn({provider:e,size:n="sm"}){const s=e.toLowerCase(),a=wE[s],r=a?.component,o=a?.color??"var(--text-muted)",l=a?.label,c=mE[n];return t.jsx("span",{className:"provider-icon",style:{color:o},"data-provider":s,children:r?t.jsx(r,{size:c,color:o,label:l}):t.jsx(Mb,{size:c})})}function dx({authenticated:e,onToggled:n,compact:s=!1}){const[a,r]=i.useState(null),[o,l]=i.useState(null),[c,d]=i.useState(null),u=i.useRef(!0);i.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]);const h=i.useCallback(async()=>{try{const b=await wS();return u.current&&r(b),b}catch(b){return u.current&&d({kind:"error",message:b instanceof Error?b.message:String(b)}),null}},[]);i.useEffect(()=>{h()},[h]);const m=i.useCallback(async()=>{l("testing"),d(null),await h(),u.current&&l(null)},[h]),f=i.useCallback(async b=>{l(b?"enabling":"disabling"),d(null);try{const y=await SS(b);u.current&&d({kind:y.enabled?"enabled":"disabled",restartRequired:y.restartRequired}),n?.(y.enabled),await h()}catch(y){u.current&&d({kind:"error",message:y instanceof Error?y.message:String(y)})}finally{u.current&&l(null)}},[n,h]),p=a?.binary.available??!1,g=a?.enabled??e,w=t.jsxs("span",{className:"onboarding-provider-card__description",children:["Route AI calls through your locally-installed ",t.jsx("code",{children:"droid"})," CLI. Uses your existing Factory AI subscription / quota instead of an API key."]}),v=t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:12,className:"animate-spin"}),"Testing…"]}):"Test"}),g?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void f(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void f(!0),disabled:o!==null||!p,title:p?void 0:"`droid` binary not detected on PATH — install Droid CLI first.",children:o==="enabling"?"Enabling…":"Enable"})]});return s?t.jsxs("div",{className:`auth-provider-card auth-provider-card--cli${e?" auth-provider-card--authenticated":""}`,"data-testid":"droid-cli-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Kn,{provider:"droid-cli",size:"sm"}),t.jsx("strong",{children:"Factory AI — via Droid CLI"}),t.jsx(kE,{status:a,authenticated:e})]}),t.jsx("div",{className:"auth-provider-cli-actions",children:v})]}),t.jsxs("details",{className:"auth-provider-cli-details",children:[t.jsx("summary",{children:"Details"}),t.jsxs("div",{className:"auth-provider-cli-details-body",children:[w,t.jsx(Jh,{status:a,authenticated:e}),c&&t.jsx(Yh,{action:c})]})]})]}):t.jsxs("div",{className:`onboarding-provider-card${e?" onboarding-provider-card--connected":""}`,"data-testid":"droid-cli-provider-card",children:[t.jsx("div",{className:"onboarding-provider-card__icon",children:t.jsx(Kn,{provider:"droid-cli",size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:"Factory AI — via Droid CLI"}),w,t.jsx(Jh,{status:a,authenticated:e})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:v}),c&&t.jsx(Yh,{action:c})]})}function kE({status:e,authenticated:n}){const s=e?.enabled??n,a=e?.binary.available??!1;return s?t.jsx("span",{className:"auth-status-badge authenticated",children:"✓ Active"}):!a&&e?t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not installed"}):t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not connected"})}function Jh({status:e,authenticated:n}){if(!e)return t.jsxs("small",{className:"settings-muted",children:[t.jsx(St,{size:10,className:"animate-spin"})," Probing local CLI…"]});const{binary:s,enabled:a,extension:r,ready:o}=e;return s.available?a?r&&r.status!=="ok"?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--warning",children:["⚠ Extension load failed: ",r.reason??r.status]}):o||n?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--connected",children:["✓ Connected",s.version?` — ${s.version}`:""]}):t.jsx("small",{className:"settings-muted",children:"Enabled. Validating…"}):t.jsxs("small",{className:"settings-muted",children:[t.jsx("code",{children:"droid"})," ",s.version?`(${s.version})`:""," detected",s.binaryPath?` at ${s.binaryPath}`:"",". Click Enable to route AI calls through it."]}):t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--error",children:["✗ ",s.reason??"`droid` not found on PATH"]})}function Yh({action:e}){if(e.kind==="error")return t.jsx("p",{className:"onboarding-helper-text onboarding-helper-text--error",children:e.message});const n=e.kind==="enabled"?"Enabled":"Disabled";return t.jsxs("p",{className:"onboarding-helper-text",children:[n,"."," ",e.kind==="enabled"?"Factory AI (via Droid CLI) models are now visible in the model picker.":"Factory AI (via Droid CLI) models are hidden from the model picker.",e.restartRequired?" Restart required: restart your active CLI/chat session for routing changes to take effect.":""]})}function Qh({actions:e}){return t.jsx(dx,{compact:!0,authenticated:!1,onToggled:()=>{e?.refreshAuthProviders?.()}})}function jE({actions:e}){return t.jsx(dx,{authenticated:!1,onToggled:()=>{e?.refreshAuthProviders?.()}})}function NE(){return t.jsx("p",{className:"onboarding-helper-text","data-testid":"droid-onboarding-setup-help",children:"Tip: Enable Droid CLI to reuse your Factory AI subscription without adding an API key."})}function SE({actions:e}){return t.jsxs("div",{className:"post-onboarding-recommendations__item","data-testid":"droid-post-onboarding-recommendation",children:[t.jsxs("span",{className:"post-onboarding-recommendations__item-text",children:[t.jsx("strong",{children:"Enable Droid CLI"}),t.jsx("span",{children:"Use your local Droid CLI session as an AI provider in Fusion."})]}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>e?.openSettingsSection?.("authentication"),children:"Open Authentication"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>e?.openModelOnboarding?.(),children:"Open Onboarding"})]})}const CE=[{pluginId:"fusion-plugin-droid-runtime",slotId:"settings-provider-card",componentPath:"./components/settings-provider-card.js",component:Qh},{pluginId:"fusion-plugin-droid-runtime",slotId:"settings-integration-card",componentPath:"./components/settings-integration-card.js",component:Qh},{pluginId:"fusion-plugin-droid-runtime",slotId:"onboarding-provider-card",componentPath:"./components/onboarding-provider-card.js",component:jE},{pluginId:"fusion-plugin-droid-runtime",slotId:"onboarding-setup-help",componentPath:"./components/onboarding-setup-help.js",component:NE},{pluginId:"fusion-plugin-droid-runtime",slotId:"post-onboarding-recommendation",componentPath:"./components/post-onboarding-recommendation.js",component:SE}];function EE(e){return CE.find(s=>s.pluginId===e.pluginId&&s.slotId===e.slot.slotId&&s.componentPath===e.slot.componentPath)?.component??null}function _E({slotId:e,pluginId:n}){return t.jsxs("section",{className:"plugin-slot-shell","data-plugin-slot":!0,"data-slot-id":e,"data-plugin-id":n,"data-plugin-slot-state":"missing-component",role:"status","aria-live":"polite",children:[t.jsx("p",{className:"plugin-slot-shell__title",children:"Plugin component unavailable"}),t.jsx("p",{className:"plugin-slot-shell__message",children:"The dashboard could not resolve this plugin surface from the static host registry."})]})}function ya({slotId:e,projectId:n,pluginIds:s,renderPlaceholder:a=!0,actions:r}){const{getSlotsForId:o,loading:l,error:c}=cx(n);if(l||c||!e)return null;const d=o(e).filter(u=>s&&s.length>0?s.includes(u.pluginId):!0);return d.length===0?null:t.jsx(el,{level:"page",children:t.jsx(t.Fragment,{children:d.map((u,h)=>{const m=`${u.pluginId}-${u.slot.slotId}-${h}`,f=EE(u);return f?t.jsx(f,{entry:u,actions:r},m):a?t.jsx(_E,{slotId:u.slot.slotId,pluginId:u.pluginId},m):null})})})}function ME(){return typeof window>"u"?"desktop":window.matchMedia("(max-width: 768px)").matches?"mobile":window.matchMedia("(min-width: 769px) and (max-width: 1024px)").matches?"tablet":"desktop"}function ii(){const[e,n]=i.useState(ME);return i.useEffect(()=>{if(typeof window>"u")return;const s=window.matchMedia("(max-width: 768px)"),a=window.matchMedia("(min-width: 769px) and (max-width: 1024px)"),r=()=>{s.matches?n("mobile"):a.matches?n("tablet"):n("desktop")};return s.addEventListener("change",r),a.addEventListener("change",r),()=>{s.removeEventListener("change",r),a.removeEventListener("change",r)}},[]),e}function Qr(e){return e.replace(/\\/g,"/")}function cm(e){return e.replace(/[\\/]+$/g,"")}function dm(e){const n=Qr(cm(e));return n?n.split("/").filter(Boolean):[]}function um(e){const n=Qr(cm(e));if(!n)return e;const s=n.split("/").filter(Boolean);return s[s.length-1]||n}function ux(e,n){const s=dm(e);return s.length===0?Qr(e):s.slice(-2).join("/")}function AE(e){const n=Qr(cm(e)),s=n.lastIndexOf("/");return s<0?"":n.slice(0,s+1)}function RE(e,n){return!e||e==="."?n:[...dm(e),n].join("/")}function IE(e){const n=dm(e);return n.length===0?".":(n.pop(),n.length===0?".":n.join("/"))}function JB(e){const n=Qr(e),s=n.match(/^([A-Za-z]:)(?:\/(.*))?$/);if(s){const r=`${s[1]}/`,o=(s[2]??"").split("/").filter(Boolean),l=[{label:s[1],path:r}];for(let c=0;c<o.length;c+=1)l.push({label:o[c],path:`${r}${o.slice(0,c+1).join("/")}`});return l}if(n.startsWith("/")){const r=n.split("/").filter(Boolean),o=[{label:"/",path:"/"}];for(let l=0;l<r.length;l+=1)o.push({label:r[l],path:`/${r.slice(0,l+1).join("/")}`});return o}const a=n.split("/").filter(Boolean);return a.map((r,o)=>({label:r,path:a.slice(0,o+1).join("/")}))}const mm=new Map;function ol(e,n){return`plugin:${e}:${n}`}function mx(e){const n=/^plugin:([^:]+):(.+)$/u.exec(e);return n?{pluginId:n[1],viewId:n[2]}:null}function Mr(e){return mx(e)!==null}function vl(e,n,s){mm.set(ol(e,n),s)}function TE(e,n){return mm.get(ol(e,n))??null}function hx(e,n){return mm.has(ol(e,n))}function dd({viewId:e}){return t.jsxs("section",{className:"card plugin-dashboard-view-missing","data-testid":"plugin-view-unavailable",children:[t.jsxs("h2",{className:"plugin-dashboard-view-missing-title",children:[t.jsx(Kr,{}),"Plugin view unavailable"]}),t.jsxs("p",{className:"plugin-dashboard-view-missing-description",children:["No host registration found for ",t.jsx("code",{children:e}),"."]})]})}function PE({viewId:e,context:n}){const s=mx(e);if(!s)return t.jsx(dd,{viewId:e});const a=TE(s.pluginId,s.viewId);return a?t.jsx(el,{fallback:t.jsx(dd,{viewId:e}),children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(a,{context:n})})}):t.jsx(dd,{viewId:e})}const Lo=ol,$E={activity:Ls,bot:es,brain:Uo,checksquare:em,clock:ia,filetext:Na,folder:js,gitbranch:Os,grid3x3:Nc,layoutgrid:Sa,mail:Ka,map:oj,messagesquare:na,monitor:Pr,search:zi,sparkles:fs,target:_s,workflow:ec,zap:us};function DE(e){return(e??"").trim().toLowerCase().replace(/[-_\s]/g,"")}function rc(e){return $E[DE(e)]??Nc}const yl="__fusion:no-branch__",px={active:{color:"var(--success)"},paused:{color:"var(--warning)"},errored:{color:"var(--color-error)"},initializing:{color:"var(--info)"}};function LE({projects:e,currentProject:n,onViewAll:s,onSelectProject:a}){const[r,o]=i.useState(!1),l=i.useRef(null);i.useEffect(()=>{if(!r)return;const d=u=>{l.current&&!l.current.contains(u.target)&&o(!1)};return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[r]),i.useEffect(()=>{if(!r)return;const d=u=>{u.key==="Escape"&&o(!1)};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[r]);const c=i.useCallback(d=>{a?.(d),o(!1)},[a]);return t.jsx("div",{className:"project-selector",ref:l,children:e.length>0&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:`project-selector-trigger${r?" project-selector-trigger--open":""}`,onClick:()=>o(d=>!d),title:n?.name?`Switch project (current: ${n.name})`:"Switch project","aria-label":"Switch project","aria-expanded":r,"aria-haspopup":"listbox","data-testid":"project-selector-trigger",children:[t.jsx("span",{className:"project-selector-trigger-label",children:n?.name??"Projects"}),t.jsx(jn,{size:12,className:`project-selector-chevron${r?" project-selector-chevron--open":""}`})]}),r&&t.jsxs("div",{className:"project-selector-dropdown",role:"listbox","aria-label":"Select project","data-testid":"project-selector-dropdown",children:[e.map(d=>{const u=n?.id===d.id,h=px[d.status]?.color;return t.jsxs("button",{className:`project-selector-item${u?" project-selector-item--current":""}`,onClick:()=>c(d),role:"option","aria-selected":u,children:[t.jsx("span",{className:"project-selector-dot",style:{backgroundColor:h||"var(--text-muted)"}}),t.jsxs("div",{className:"project-selector-info",children:[t.jsx("span",{className:"project-selector-name",children:d.name}),t.jsx("span",{className:"project-selector-path",children:ux(d.path)})]}),u&&t.jsx(vs,{size:14,className:"project-selector-check"})]},d.id)}),t.jsx("div",{className:"project-selector-divider",role:"presentation"}),t.jsx("button",{className:"project-selector-manage",onClick:()=>{s(),o(!1)},"data-testid":"manage-projects-action",children:"Manage Projects"})]})]})})}function Xh({size:e=16}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:t.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}function OE({onOpenSettings:e,onOpenGitHubImport:n,onOpenPlanning:s,onResumePlanning:a,activePlanningSessionCount:r=0,onOpenUsage:o,onOpenActivityLog:l,onOpenSystemStats:c,onOpenMailbox:d,mailboxUnreadCount:u=0,mailboxPendingApprovalCount:h=0,chatHasUnreadResponse:m=!1,stashOrphanCount:f=0,onOpenSchedules:p,onOpenGitManager:g,onOpenNodes:w,showNodesButton:v,onOpenWorkflowSteps:b,onOpenScripts:y,onRunScript:N,onToggleTerminal:S,onOpenFiles:C,filesOpen:x,onOpenTodos:k,todosOpen:R,todosEnabled:z,globalPaused:_,enginePaused:A,onToggleGlobalPause:X,onToggleEnginePause:H,view:M="board",onChangeView:T,showSkillsTab:F,showAgentsTab:W,searchQuery:oe="",onSearchChange:D,branchFilter:E="",baseBranchFilter:P="",branchOptions:$=[],baseBranchOptions:j=[],onBranchFilterChange:q,onBaseBranchFilterChange:le,projects:fe=[],currentProject:Ce,onSelectProject:Ae,onViewAllProjects:re,projectId:Z,shellHost:pe={kind:"browser"},mobileNavEnabled:ie,availableNodes:ve=[],currentNode:ne,onSelectNode:L,isRemote:Y=!1,experimentalFeatures:ue,pluginDashboardViews:B=[],shellConnectionControl:xe}){const je=ii(),se=je==="mobile",De=se||je==="tablet",dt=se&&ie,[Pe,ce]=i.useState(!1),[Ee,Oe]=i.useState(!1),[ht,Ve]=i.useState(!1),[ge,me]=i.useState(!1),[$e,mt]=i.useState(!1),[jt,tt]=i.useState(!1),[bt,Ie]=i.useState(!1),[Xe,rt]=i.useState(!1),[It,_t]=i.useState(!1),[We,J]=i.useState(!1),[ke,ot]=i.useState(!1),[ye,it]=i.useState({}),[He,he]=i.useState(!1),[et,vt]=i.useState(-1),[Ct,Et]=i.useState(null),[Tt,Jt]=i.useState({}),[cn,Vt]=i.useState(!1),hn=i.useRef(null),dn=i.useRef(null),An=i.useRef(null),nn=i.useRef(null),Dn=i.useRef(null),Nn=i.useRef(null),zt=i.useRef(!1),sn=i.useRef(null),xn=i.useRef(null),Xt=i.useRef(null),Yt=i.useRef(null),rn=i.useRef(null),Zt=i.useRef(null),en=i.useRef(null),un=i.useRef(null),Qt=i.useRef(!1),pn=i.useMemo(()=>ve.filter(G=>G.type==="remote"),[ve]),Dt=pn.length>0,Bt=i.useMemo(()=>Object.entries(ye).sort(([G],[ze])=>G.localeCompare(ze)),[ye]),be=Bt.length>0,Re=Bt.length+(be?1:0),nt=i.useMemo(()=>Object.entries(Tt).sort(([G],[ze])=>G.localeCompare(ze)),[Tt]),ut=i.useMemo(()=>!!(T||ue?.researchView||z||ue?.insights||F||ue?.memoryView||ue?.devServerView||!dt||B.some(G=>G.view.placement!=="primary")),[T,ue,z,F,dt,B]),Ye=i.useCallback(()=>{const G=window.visualViewport;return G&&G.width>0&&G.height>0?{width:G.width,height:G.height,offsetTop:G.offsetTop,offsetLeft:G.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),lt=i.useCallback(()=>{const G=en.current;if(!G)return;const ze=G.getBoundingClientRect(),Ut=un.current,{width:gn,height:In,offsetTop:Ne,offsetLeft:xt}=Ye(),Mt=16,Gt=16,Sn=6,on=Ut?.offsetWidth||Math.max(ze.width,260),qt=Math.min(on,Math.max(gn-Mt*2,160)),Pt=Ut?.offsetHeight||280,Hn=Math.min(Pt,Math.max(In-Gt*2,160)),qn=ze.top-Ne,ns=ze.bottom-Ne,ss=ze.right-xt,ms=In-ns,ys=qn,hs=ms<Hn&&ys>ms,On=Math.min(Math.max(ss-qt,Mt),gn-Mt-qt)+xt,ws=hs?Math.max(Gt+Ne,qn-Hn-Sn+Ne):Math.min(ns+Sn+Ne,In+Ne-Gt-Hn);Et({top:ws,left:On,width:qt})},[Ye]),wt=i.useCallback((G,ze)=>{N?.(G,ze),ot(!1),vt(-1)},[N]),Q=i.useCallback(()=>{y?.(),ot(!1),vt(-1)},[y]),ae=i.useCallback(G=>{switch(G.key){case"ArrowDown":G.preventDefault(),Re>0&&vt(ze=>ze<Re-1?ze+1:0);break;case"ArrowUp":G.preventDefault(),Re>0&&vt(ze=>ze>0?ze-1:Re-1);break;case"Enter":if(G.preventDefault(),et>=0)if(et<Bt.length){const[ze,Ut]=Bt[et];wt(ze,Ut)}else be&&et===Bt.length&&Q();break;case"Home":G.preventDefault(),Re>0&&vt(0);break;case"End":G.preventDefault(),Re>0&&vt(Re-1);break}},[Q,wt,et,Bt,be,Re]);i.useEffect(()=>{zt.current=$e},[$e]),i.useEffect(()=>{Qt.current=ke},[ke]),i.useEffect(()=>{if(!$e||!De)return;let G=!1;return Vt(!0),Vo(Z).then(ze=>{G||Jt(ze)}).catch(()=>{G||Jt({})}).finally(()=>{G||Vt(!1)}),()=>{G=!0}},[$e,De,Z]),i.useEffect(()=>{if(!ke||De)return;let G=!1;return he(!0),Vo(Z).then(ze=>{G||it(ze)}).catch(()=>{G||it({})}).finally(()=>{G||he(!1)}),()=>{G=!0}},[ke,De,Z]),i.useEffect(()=>{if(!ke)return;const G=ze=>{Zt.current&&!Zt.current.contains(ze.target)&&ot(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[ke]),i.useEffect(()=>{if(!ke)return;const G=ze=>{ze.key==="Escape"&&(ot(!1),en.current?.focus())};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[ke]),i.useEffect(()=>{if(ke){vt(-1);const G=window.setTimeout(()=>un.current?.focus(),0);return()=>window.clearTimeout(G)}Et(null)},[ke]),i.useEffect(()=>{if(!ke)return;const G=requestAnimationFrame(()=>{lt()});return()=>cancelAnimationFrame(G)},[ke,He,Bt.length,be,lt]),i.useEffect(()=>{if(!ke)return;const G=()=>lt();window.addEventListener("resize",G),window.addEventListener("scroll",G,!0);const ze=window.visualViewport;return ze&&(ze.addEventListener("resize",G),ze.addEventListener("scroll",G)),()=>{window.removeEventListener("resize",G),window.removeEventListener("scroll",G,!0),ze&&(ze.removeEventListener("resize",G),ze.removeEventListener("scroll",G))}},[ke,lt]),i.useEffect(()=>{De&&(ot(!1),vt(-1))},[De]);const Ke=Pe||oe.length>0,gt=(Ee||oe.length>0)&&!ht,Wt=(M==="board"||M==="list")&&!se&&D&&!ht&&oe.length===0,fn=(M==="board"||M==="list")&&!se&&D,Rn=M==="board";i.useEffect(()=>{oe===""&&Ve(!1)},[oe]),i.useEffect(()=>{if(!ge)return;const G=ze=>{dn.current&&!dn.current.contains(ze.target)&&hn.current&&!hn.current.contains(ze.target)&&me(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[ge]),i.useEffect(()=>{if(!It)return;const G=ze=>{nn.current&&!nn.current.contains(ze.target)&&An.current&&!An.current.contains(ze.target)&&_t(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[It]),i.useEffect(()=>{if(!jt)return;const G=ze=>{sn.current&&!sn.current.contains(ze.target)&&tt(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[jt]),i.useEffect(()=>{const G=ze=>{if(ze.key==="Escape"){if(rt(!1),_t(!1),zt.current){mt(!1);return}if(Qt.current){ot(!1),en.current?.focus();return}me(!1),ce(!1),tt(!1),Ie(!1)}};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[]),i.useEffect(()=>{if(!bt)return;const G=ze=>{xn.current&&!xn.current.contains(ze.target)&&Ie(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[bt]),i.useEffect(()=>{if(!We)return;const G=ze=>{rn.current&&!rn.current.contains(ze.target)&&J(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[We]),i.useEffect(()=>{if(!We)return;const G=ze=>{ze.key==="Escape"&&J(!1)};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[We]),i.useEffect(()=>{if(!Xe)return;const G=ze=>{Xt.current&&!Xt.current.contains(ze.target)&&Yt.current&&!Yt.current.contains(ze.target)&&rt(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[Xe]);const wn=i.useCallback(()=>{ce(G=>!G)},[]),mn=i.useCallback(()=>{Oe(!0),Ve(!1)},[]),Un=i.useCallback(()=>{Oe(!1),Ve(!0),D&&D("")},[D]),de=i.useCallback(()=>{me(G=>!G)},[]),st=i.useCallback(G=>{G&&G(),me(!1),mt(!1)},[]),ct=i.useCallback(()=>{ce(!1),D&&D("")},[D]),kt=pe.kind==="desktop-shell";return t.jsxs("div",{className:"header-wrapper",children:[t.jsxs("header",{className:"header","data-shell-kind":pe.kind,children:[t.jsxs("div",{className:"header-left",children:[t.jsxs("div",{className:"header-brand",children:[t.jsxs("svg",{className:"header-logo",width:24,height:24,viewBox:"0 0 128 128",fill:"none","aria-label":"Fusion logo",role:"img",children:[t.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),t.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),t.jsx("h1",{className:"logo",children:"Fusion"})]}),se&&fe.length>=1&&Ae&&t.jsxs("div",{className:"mobile-project-switch",ref:xn,children:[t.jsx("button",{className:`mobile-project-switch-trigger${bt?" mobile-project-switch-trigger--open":""}`,onClick:()=>Ie(G=>!G),title:"Switch project","aria-label":"Switch project","aria-expanded":bt,"aria-haspopup":"listbox","data-testid":"mobile-project-switch-trigger",children:t.jsx(jn,{size:14,className:`mobile-project-switch-chevron${bt?" mobile-project-switch-chevron--open":""}`})}),bt&&t.jsx("div",{className:"mobile-project-switch-dropdown",role:"listbox","aria-label":"Select project","data-testid":"mobile-project-switch-dropdown",children:fe.map(G=>{const ze=Ce?.id===G.id,Ut=px[G.status]?.color;return t.jsxs("button",{className:`mobile-project-switch-item${ze?" mobile-project-switch-item--current":""}`,onClick:()=>{Ae(G),Ie(!1)},role:"option","aria-selected":ze,"data-testid":`mobile-project-switch-item-${G.id}`,children:[t.jsx("span",{className:"mobile-project-switch-dot",style:{backgroundColor:Ut||"var(--text-muted)"}}),t.jsxs("div",{className:"mobile-project-switch-info",children:[t.jsx("span",{className:"mobile-project-switch-name",children:G.name}),t.jsx("span",{className:"mobile-project-switch-path",children:ux(G.path)})]}),ze&&t.jsx(vs,{size:14,className:"mobile-project-switch-check"})]},G.id)})})]}),!De&&fe.length>=1&&re&&t.jsx(LE,{projects:fe,currentProject:Ce??null,onViewAll:re,onSelectProject:Ae}),Dt&&t.jsxs("div",{className:`header-node-selector${se?" header-node-selector--mobile":""}`,ref:se?void 0:sn,children:[t.jsx(cE,{node:ne??null,showDetails:!se}),!se&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:`btn-icon node-selector-trigger${jt?" node-selector-trigger--open":""}`,onClick:()=>tt(G=>!G),title:"Switch node","aria-label":"Switch node","aria-expanded":jt,"aria-haspopup":"listbox","data-testid":"node-selector-trigger",children:t.jsx(Wn,{size:12,className:`node-selector-chevron${jt?" node-selector-chevron--open":""}`})}),jt&&t.jsxs("div",{className:"node-selector-dropdown",role:"listbox","aria-label":"Select node",children:[t.jsxs("button",{className:`node-selector-option${Y?"":" node-selector-option--active"}`,onClick:()=>{L?.(null),tt(!1)},role:"option","aria-selected":!Y,"data-testid":"node-option-local",children:[t.jsx(Ya,{status:"online",compact:!0}),t.jsx("span",{className:"node-selector-option-label",children:"Local"})]}),pn.map(G=>t.jsxs("button",{className:`node-selector-option${ne?.id===G.id?" node-selector-option--active":""}`,onClick:()=>{L?.(G),tt(!1)},role:"option","aria-selected":ne?.id===G.id,"data-testid":`node-option-${G.id}`,children:[t.jsx(Ya,{status:G.status,compact:!0}),t.jsx("span",{className:"node-selector-option-label",children:G.name}),t.jsx("span",{className:"node-selector-option-status",children:G.status})]},G.id))]})]})]})]}),t.jsxs("div",{className:"header-actions",children:[xe,dt&&T&&(M==="board"||M==="list")&&t.jsxs("div",{className:"view-toggle","data-testid":"mobile-view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>T("board"),title:"Board view","aria-label":"Board view","aria-pressed":M==="board","data-testid":"mobile-view-toggle-board",children:t.jsx(Sa,{size:16})}),t.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>T("list"),title:"List view","aria-label":"List view","aria-pressed":M==="list","data-testid":"mobile-view-toggle-list",children:t.jsx(xu,{size:16})})]}),D&&se&&(dt||M==="board"||M==="list")&&!Ke&&t.jsx("button",{className:"btn-icon mobile-search-trigger",onClick:wn,title:"Open search","aria-label":"Open search","aria-expanded":!1,"data-testid":"mobile-header-search-btn",children:t.jsx(zi,{size:16})}),Wt&&t.jsx("button",{className:"btn-icon",onClick:mn,title:"Open search","aria-label":"Open search","data-testid":"desktop-header-search-btn",children:t.jsx(zi,{size:16})}),se&&dt&&o&&t.jsx("button",{className:"btn-icon",onClick:G=>o(G.currentTarget.getBoundingClientRect()),title:"View usage","data-testid":"mobile-header-usage-btn",children:t.jsx(Ls,{size:16})}),!dt&&T&&t.jsxs("div",{className:"view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>T("board"),title:"Board view","aria-label":"Board view","aria-pressed":M==="board",children:t.jsx(Sa,{size:16})}),t.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>T("list"),title:"List view","aria-label":"List view","aria-pressed":M==="list",children:t.jsx(xu,{size:16})}),W&&t.jsx("button",{className:`view-toggle-btn${M==="agents"?" active":""}`,onClick:()=>T("agents"),title:"Agents view","aria-label":"Agents view","aria-pressed":M==="agents",children:t.jsx(es,{size:16})}),t.jsx("button",{className:`view-toggle-btn${M==="missions"?" active":""}`,onClick:()=>T("missions"),title:"Missions view","aria-label":"Missions view","aria-pressed":M==="missions",children:t.jsx(_s,{size:16})}),t.jsxs("button",{className:`view-toggle-btn${M==="chat"?" active":""}`,onClick:()=>T("chat"),title:"Chat view","aria-label":"Chat view","aria-pressed":M==="chat","data-testid":"header-chat-view-btn",children:[t.jsx(na,{size:16}),m&&M!=="chat"&&t.jsx("span",{className:"status-dot status-dot--pending header-chat-unread-dot","aria-label":"Unread chat response"})]}),t.jsx("button",{className:`view-toggle-btn${M==="documents"?" active":""}`,onClick:()=>T("documents"),title:"Documents view","aria-label":"Documents view","aria-pressed":M==="documents",children:t.jsx(Na,{size:16})}),t.jsxs("button",{className:`view-toggle-btn${M==="mailbox"?" active":""}`,onClick:()=>T("mailbox"),title:"Mailbox view","aria-label":"Mailbox view","aria-pressed":M==="mailbox",children:[t.jsx(Ka,{size:16}),h>0&&M!=="mailbox"&&t.jsx("span",{className:"status-dot status-dot--pending header-chat-unread-dot","aria-label":"Pending approvals"})]}),B.filter(G=>G.view.placement==="primary").sort((G,ze)=>(G.view.order??Number.MAX_SAFE_INTEGER)-(ze.view.order??Number.MAX_SAFE_INTEGER)).map(G=>{const ze=Lo(G.pluginId,G.view.viewId),Ut=rc(G.view.icon);return t.jsx("button",{className:`view-toggle-btn${M===ze||M==="graph"&&G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?" active":""}`,onClick:()=>T(G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?"graph":ze),title:`${G.view.label} view`,"aria-label":`${G.view.label} view`,"aria-pressed":M===ze,"data-testid":`view-toggle-plugin-${G.pluginId}-${G.view.viewId}`,children:t.jsx(Ut,{size:16})},`${G.pluginId}:${G.view.viewId}`)}),ut&&t.jsxs(t.Fragment,{children:[t.jsx("button",{ref:Yt,className:`view-toggle-btn${["research","skills","insights","memory","reliability","dev-server","devserver","graph","stash-recovery"].includes(M)||ue?.evalsView&&M==="evals"||z&&R||Mr(M)?" active":""}`,onClick:()=>rt(G=>!G),title:"More views","aria-label":"More views","aria-haspopup":"menu","aria-expanded":Xe,"data-testid":"view-toggle-overflow-trigger",children:t.jsx(jn,{size:12})}),Xe&&t.jsxs("div",{ref:Xt,className:"view-toggle-overflow-menu",role:"menu","aria-label":"More views",children:[ue?.evalsView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="evals"?" active":""}`,onClick:()=>{T("evals"),rt(!1)},role:"menuitem","data-testid":"view-overflow-evals",children:[t.jsx(_s,{size:14}),t.jsx("span",{children:"Evals"})]}),t.jsxs("button",{className:`view-toggle-overflow-item${M==="stash-recovery"?" active":""}`,onClick:()=>{T("stash-recovery"),rt(!1)},role:"menuitem","data-testid":"view-overflow-stash-recovery",children:[t.jsx(Wa,{size:14}),t.jsx("span",{children:"Stash Recovery"}),f>0?t.jsx("span",{className:"btn-badge",children:f}):null]}),ue?.researchView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="research"?" active":""}`,onClick:()=>{T("research"),rt(!1)},role:"menuitem","data-testid":"view-overflow-research",children:[t.jsx(zi,{size:14}),t.jsx("span",{children:"Research"})]}),ue?.insights&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="insights"?" active":""}`,onClick:()=>{T("insights"),rt(!1)},role:"menuitem","data-testid":"view-overflow-insights",children:[t.jsx(fs,{size:14}),t.jsx("span",{children:"Insights"})]}),F&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="skills"?" active":""}`,onClick:()=>{T("skills"),rt(!1)},role:"menuitem","data-testid":"view-overflow-skills",children:[t.jsx(us,{size:14}),t.jsx("span",{children:"Skills"})]}),ue?.memoryView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="memory"?" active":""}`,onClick:()=>{T("memory"),rt(!1)},role:"menuitem","data-testid":"view-toggle-memory",children:[t.jsx(Uo,{size:14}),t.jsx("span",{children:"Memory"})]}),t.jsxs("button",{className:`view-toggle-overflow-item${M==="reliability"?" active":""}`,onClick:()=>{T("reliability"),rt(!1)},role:"menuitem","data-testid":"view-overflow-reliability",children:[t.jsx(Ls,{size:14}),t.jsx("span",{children:"Reliability"})]}),ue?.devServerView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="dev-server"||M==="devserver"?" active":""}`,onClick:()=>{T("devserver"),rt(!1)},role:"menuitem","data-testid":"view-toggle-devserver",children:[t.jsx(Pr,{size:14}),t.jsx("span",{children:"Dev Server"}),t.jsx("span",{className:"visually-hidden","data-testid":"view-toggle-dev-server"})]}),z&&k&&t.jsxs("button",{className:`view-toggle-overflow-item${R?" active":""}`,onClick:()=>{k(),rt(!1)},role:"menuitem","data-testid":"view-overflow-todos",children:[t.jsx(em,{size:14}),t.jsx("span",{children:"Todos"})]}),B.filter(G=>G.view.placement!=="primary").sort((G,ze)=>(G.view.order??Number.MAX_SAFE_INTEGER)-(ze.view.order??Number.MAX_SAFE_INTEGER)).map(G=>{const ze=Lo(G.pluginId,G.view.viewId),Ut=rc(G.view.icon);return t.jsxs("button",{className:`view-toggle-overflow-item${M===ze||M==="graph"&&G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?" active":""}`,onClick:()=>{T(G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?"graph":ze),rt(!1)},role:"menuitem","data-testid":`view-overflow-plugin-${G.pluginId}-${G.view.viewId}`,children:[t.jsx(Ut,{size:14}),t.jsx("span",{children:G.view.label})]},`${G.pluginId}:${G.view.viewId}`)})]})]})]}),!De&&o&&t.jsx("button",{className:"btn-icon",onClick:G=>o(G.currentTarget.getBoundingClientRect()),title:"View usage","data-testid":"desktop-header-usage-btn",children:t.jsx(Ls,{size:16})}),!De&&c&&t.jsx("button",{className:"btn-icon",onClick:c,title:"System Stats","data-testid":"desktop-header-system-stats-btn",children:t.jsx(Pr,{size:16})}),!De&&l&&t.jsx("button",{className:"btn-icon",onClick:l,title:"View Activity Log",children:t.jsx(Wa,{size:16})}),!De&&!kt&&t.jsx("button",{className:"btn-icon",onClick:n,title:"Import from GitHub",children:t.jsx(Xh,{size:16})}),!De&&t.jsxs("button",{className:`btn-icon${r>0?" btn-icon--has-indicator":""}`,onClick:r>0&&a?a:s,title:r>0?"Resume planning session":"Create a task with AI planning","data-testid":"planning-btn",style:{position:"relative"},children:[t.jsx(Ui,{size:16}),r>0&&t.jsx("span",{className:"header-badge header-badge--pulse","data-testid":"planning-badge","aria-label":`${r} active planning session${r!==1?"s":""}`,children:r})]}),!De&&t.jsxs("div",{className:"terminal-split-btn",ref:Zt,children:[t.jsx("button",{className:"btn-icon btn-icon--terminal terminal-split-btn__main",onClick:S,title:"Open Terminal","data-testid":"terminal-toggle-btn",children:t.jsx(sa,{size:16})}),y&&N&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"terminal-split-btn__divider"}),t.jsx("button",{ref:en,className:`btn-icon terminal-split-btn__chevron${ke?" btn-icon--active":""}`,onClick:()=>ot(G=>!G),title:"Scripts","aria-haspopup":"listbox","aria-expanded":ke,"aria-label":"Quick scripts","data-testid":"scripts-btn",children:t.jsx(jn,{size:12,className:`quick-scripts-dropdown__trigger-chevron${ke?" rotate":""}`})}),ke&&t.jsx("div",{ref:un,tabIndex:-1,className:"quick-scripts-dropdown__menu",role:"listbox","aria-label":"Scripts",onKeyDown:ae,"data-testid":"quick-scripts-dropdown",style:Ct?{position:"fixed",top:`${Ct.top}px`,left:`${Ct.left}px`,width:`${Ct.width}px`,right:"auto"}:void 0,children:He?t.jsxs("div",{className:"quick-scripts-dropdown__loading","data-testid":"quick-scripts-loading",children:[t.jsx(St,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts..."})]}):Bt.length===0?t.jsxs("div",{className:"quick-scripts-dropdown__empty","data-testid":"quick-scripts-empty",children:[t.jsx("div",{className:"quick-scripts-dropdown__empty-icon",children:t.jsx(sa,{size:16})}),t.jsx("p",{children:"No scripts configured"}),t.jsx("button",{className:"quick-scripts-dropdown__empty-action btn",onClick:Q,children:"Add your first script"})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"quick-scripts-dropdown__list",children:Bt.map(([G,ze],Ut)=>t.jsxs("button",{className:`quick-scripts-dropdown__item ${et===Ut?"highlighted":""}`,onClick:()=>wt(G,ze),role:"option","aria-selected":et===Ut,"data-testid":`quick-script-item-${G}`,children:[t.jsx(ds,{size:14,className:"quick-scripts-dropdown__item-icon"}),t.jsxs("div",{className:"quick-scripts-dropdown__item-info",children:[t.jsx("span",{className:"quick-scripts-dropdown__item-name",children:G}),t.jsx("span",{className:"quick-scripts-dropdown__item-command",title:ze,children:ze.length>50?`${ze.slice(0,50)}...`:ze})]})]},G))}),t.jsx("div",{className:"quick-scripts-dropdown__footer",children:t.jsxs("button",{className:`quick-scripts-dropdown__manage ${be&&et===Bt.length?"highlighted":""}`,onClick:Q,"data-testid":"quick-scripts-manage",children:[t.jsx(Do,{size:14}),t.jsx("span",{children:"Manage Scripts..."})]})})]})})]})]}),!De&&C&&t.jsx("button",{className:`btn-icon${x?" btn-icon--active":""}`,onClick:()=>C(),title:"Browse files","data-testid":"files-toggle-btn",children:t.jsx(js,{size:16})}),!De&&g&&t.jsx("button",{className:"btn-icon",onClick:g,title:"Git Manager","data-testid":"git-manager-btn",children:t.jsx(Os,{size:16})}),!De&&b&&t.jsx("button",{className:"btn-icon",onClick:b,title:"Workflow Steps","data-testid":"workflow-steps-btn",children:t.jsx(ec,{size:16})}),!De&&t.jsxs("div",{style:{position:"relative"},children:[t.jsx("button",{ref:An,className:"btn-icon",onClick:()=>_t(G=>!G),title:"More actions","aria-label":"More actions","aria-expanded":It,"aria-haspopup":"menu","data-testid":"desktop-overflow-trigger",children:t.jsx(fu,{size:16})}),It&&t.jsxs("div",{ref:nn,className:"desktop-overflow-menu",role:"menu","aria-label":"More actions",children:[w&&v!==!1&&t.jsxs("button",{className:"view-toggle-overflow-item",onClick:()=>{w(),_t(!1)},role:"menuitem","data-testid":"desktop-overflow-nodes-btn",children:[t.jsx(Ho,{size:14}),t.jsx("span",{children:"Nodes"})]}),t.jsxs("button",{className:"view-toggle-overflow-item",onClick:()=>{st(p),_t(!1)},role:"menuitem","data-testid":"desktop-overflow-schedules-btn",children:[t.jsx(ia,{size:14}),t.jsx("span",{children:"Automation"})]})]})]}),t.jsxs("div",{className:"engine-control-split-btn",ref:rn,children:[t.jsx("button",{className:`btn-icon engine-control-split-btn__main${_?" btn-icon--stopped":""}`,onClick:X,title:_?"Start AI engine":"Stop AI engine","data-testid":"engine-control-main-btn",children:_?t.jsx(ds,{size:16}):t.jsx(Fi,{size:16})}),t.jsx("span",{className:"engine-control-split-btn__divider"}),t.jsx("button",{className:`btn-icon engine-control-split-btn__chevron${We?" btn-icon--active":""}`,onClick:()=>J(G=>!G),title:"Engine options","aria-haspopup":"menu","aria-expanded":We,"data-testid":"engine-control-chevron-btn",children:t.jsx(jn,{size:12})}),We&&t.jsx("div",{className:"engine-control-split-btn__menu",role:"menu",children:t.jsxs("button",{className:`engine-control-split-btn__menu-item${A?" engine-control-split-btn__menu-item--active":""}`,onClick:()=>{H?.(),J(!1)},role:"menuitem",title:A?"Resume scheduling":"Pause triage",disabled:!!_,"data-testid":"engine-control-pause-triage-btn",children:[A?t.jsx(ds,{size:14}):t.jsx(mi,{size:14}),t.jsx("span",{children:A?"Resume scheduling":"Pause triage"})]})})]}),!De&&t.jsx("button",{className:"btn-icon",onClick:e,title:"Settings",children:t.jsx(Do,{size:16})}),t.jsx(ya,{slotId:"header-action",projectId:Z}),De&&!dt&&t.jsx("button",{ref:hn,className:"btn-icon compact-overflow-trigger",onClick:de,title:"More header actions","aria-label":"More header actions","aria-expanded":ge,"aria-haspopup":"menu",children:t.jsx(fu,{size:16})}),De&&!dt&&ge&&t.jsxs("div",{ref:dn,className:"mobile-overflow-menu",role:"menu","aria-label":"Additional header actions",children:[fe.length>=1&&re&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(re),role:"menuitem","data-testid":"overflow-project-selector-btn",children:[t.jsx(Nc,{size:16}),t.jsx("span",{children:"Projects"})]}),C&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(C),role:"menuitem","data-testid":"overflow-files-btn",children:[t.jsx(js,{size:16}),t.jsx("span",{children:"Browse Files"})]}),t.jsxs("button",{className:`mobile-overflow-item${r>0?" mobile-overflow-item--has-indicator":""}`,onClick:()=>st(r>0&&a?a:s),role:"menuitem","data-testid":"overflow-planning-btn",children:[t.jsxs("span",{className:"mobile-overflow-icon-wrapper",children:[t.jsx(Ui,{size:16}),r>0&&t.jsx("span",{className:"header-badge header-badge--pulse","data-testid":"overflow-planning-badge",children:r})]}),t.jsx("span",{children:r>0?`Resume planning session (${r})`:"Create a task with AI planning"})]}),g&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(g),role:"menuitem","data-testid":"overflow-git-btn",children:[t.jsx(Os,{size:16}),t.jsx("span",{children:"Git Manager"})]}),w&&v!==!1&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(w),role:"menuitem","data-testid":"overflow-nodes-btn",children:[t.jsx(Ho,{size:16}),t.jsx("span",{children:"Nodes"})]}),!kt&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(n),role:"menuitem",children:[t.jsx(Xh,{size:16}),t.jsx("span",{children:"Import from GitHub"})]}),t.jsxs("div",{className:"mobile-overflow-group","data-testid":"overflow-terminal-group",children:[t.jsxs("div",{className:"mobile-overflow-split-row",children:[t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-split-primary",onClick:()=>st(S),role:"menuitem","data-testid":"overflow-terminal-primary-btn",children:[t.jsx(sa,{size:16}),t.jsx("span",{children:"Terminal"})]}),t.jsx("button",{className:"mobile-overflow-split-toggle",onClick:()=>mt(G=>!G),role:"menuitem","aria-expanded":$e,"aria-haspopup":"menu","aria-label":"Show scripts","data-testid":"overflow-terminal-submenu-toggle",children:t.jsx(Wn,{size:14,className:`mobile-overflow-chevron${$e?" mobile-overflow-chevron--open":""}`})})]}),$e&&t.jsx("div",{className:"mobile-overflow-submenu",role:"menu","aria-label":"Scripts submenu",children:cn?t.jsxs("div",{className:"mobile-overflow-submenu-loading","data-testid":"overflow-scripts-loading",children:[t.jsx(St,{size:14,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts…"})]}):nt.length>0?t.jsxs(t.Fragment,{children:[nt.map(([G,ze])=>t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem",onClick:()=>{N&&N(G,ze),me(!1),mt(!1)},role:"menuitem","data-testid":`overflow-script-item-${G}`,children:[t.jsx(ds,{size:14}),t.jsx("span",{children:G})]},G)),y&&t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem mobile-overflow-subitem--manage",onClick:()=>st(y),role:"menuitem","data-testid":"overflow-scripts-manage",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"Manage Scripts…"})]})]}):y&&t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem",onClick:()=>st(y),role:"menuitem","data-testid":"overflow-scripts-manage",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"No scripts — add one…"})]})})]}),t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(p),role:"menuitem","data-testid":"overflow-schedules-btn",children:[t.jsx(ia,{size:16}),t.jsx("span",{children:"Automation"})]}),l&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(l),role:"menuitem","data-testid":"overflow-activity-log-btn",children:[t.jsx(Wa,{size:16}),t.jsx("span",{children:"View Activity Log"})]}),d&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(d),role:"menuitem","data-testid":"overflow-mailbox-btn",children:[t.jsx(Ka,{size:16}),t.jsxs("span",{children:["Mailbox",u>0?` (${u})`:""]}),h>0&&t.jsx("span",{className:"header-badge","data-testid":"overflow-mailbox-approval-badge",children:h})]}),o&&t.jsxs("button",{className:"mobile-overflow-item",onClick:G=>st(()=>o(G.currentTarget.getBoundingClientRect())),role:"menuitem","data-testid":"overflow-usage-btn",children:[t.jsx(Ls,{size:16}),t.jsx("span",{children:"View Usage"})]}),b&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(b),role:"menuitem","data-testid":"overflow-workflow-steps-btn",children:[t.jsx(ec,{size:16}),t.jsx("span",{children:"Workflow Steps"})]}),t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>st(e),role:"menuitem",children:[t.jsx(Do,{size:16}),t.jsx("span",{children:"Settings"})]})]})]})]}),fn&>&&t.jsxs("div",{className:"header-floating-search",children:[t.jsxs("div",{className:"header-search",children:[t.jsx(zi,{size:14,className:"header-search-icon"}),t.jsx("input",{autoFocus:!0,type:"text",placeholder:"Search tasks...",value:oe,onChange:G=>D(G.target.value),className:"header-search-input"}),t.jsx("button",{className:"header-search-clear",onClick:Un,"aria-label":"Close search",children:t.jsx(yn,{size:14})})]}),Rn&&t.jsxs("div",{className:"header-branch-filters","data-testid":"header-branch-filters-desktop",children:[t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Working branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:E,onChange:G=>q?.(G.target.value),"data-testid":"working-branch-filter",children:[t.jsx("option",{value:"",children:"All working branches"}),t.jsx("option",{value:yl,children:"No working branch"}),$.map(G=>t.jsx("option",{value:G,children:G},G))]})]}),t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Base branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:P,onChange:G=>le?.(G.target.value),"data-testid":"target-branch-filter",children:[t.jsx("option",{value:"",children:"All base branches"}),t.jsx("option",{value:yl,children:"No base branch"}),j.map(G=>t.jsx("option",{value:G,children:G},G))]})]})]})]}),D&&se&&Ke&&t.jsxs("div",{className:"header-floating-search",children:[t.jsxs("div",{ref:Dn,className:"header-search mobile-search-expanded",children:[t.jsx(zi,{size:14,className:"header-search-icon"}),t.jsx("input",{ref:Nn,autoFocus:!0,type:"text",placeholder:"Search tasks...",value:oe,onChange:G=>D(G.target.value),className:"header-search-input"}),t.jsx("button",{className:"header-search-clear",onClick:ct,"aria-label":"Close search",children:t.jsx(yn,{size:14})})]}),Rn&&t.jsxs("div",{className:"header-branch-filters","data-testid":"header-branch-filters-mobile",children:[t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Working branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:E,onChange:G=>q?.(G.target.value),"data-testid":"working-branch-filter-mobile",children:[t.jsx("option",{value:"",children:"All working branches"}),t.jsx("option",{value:yl,children:"No working branch"}),$.map(G=>t.jsx("option",{value:G,children:G},G))]})]}),t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Base branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:P,onChange:G=>le?.(G.target.value),"data-testid":"target-branch-filter-mobile",children:[t.jsx("option",{value:"",children:"All base branches"}),t.jsx("option",{value:yl,children:"No base branch"}),j.map(G=>t.jsx("option",{value:G,children:G},G))]})]})]})]})]})}function Zh(e){return e==="urgent"?3:e==="high"?2:e==="low"?0:1}function ep(e,n){return Zh(n)-Zh(e)}function ud(e,n){const s=Number.parseInt(e.slice(e.lastIndexOf("-")+1),10),a=Number.parseInt(n.slice(n.lastIndexOf("-")+1),10);return Number.isFinite(s)&&Number.isFinite(a)&&s!==a?s-a:e.localeCompare(n)}function tp(e){const n=e.columnMovedAt??e.updatedAt??e.createdAt,s=Date.parse(n);return Number.isFinite(s)?s:0}function np(e){return e==="merging"||e==="merging-pr"||e==="merging-fix"}function fx(e,n){return n==="todo"?[...e].sort((s,a)=>{const r=ep(s.priority,a.priority);return r!==0?r:s.createdAt!==a.createdAt?s.createdAt.localeCompare(a.createdAt):ud(s.id,a.id)}):[...e].sort((s,a)=>{if(n==="done"){const o=tp(a)-tp(s);return o!==0?o:ud(s.id,a.id)}if(n==="in-review"){const o=np(s.status),l=np(a.status);if(o!==l)return o?-1:1}const r=ep(s.priority,a.priority);return r!==0?r:ud(s.id,a.id)})}function FE(e,n=1400){const s=i.useRef(null),[a,r]=i.useState(!1),o=i.useRef(null);return i.useEffect(()=>(s.current!==null&&e>s.current&&(r(!0),o.current=setTimeout(()=>r(!1),n)),s.current=e,()=>{o.current!==null&&clearTimeout(o.current)}),[e,n]),a}function zE({isOpen:e,options:n,onConfirm:s,onCancel:a}){const r=i.useRef(null);return i.useEffect(()=>{if(!e)return;r.current?.focus();const o=l=>{l.key==="Escape"&&(l.preventDefault(),a())};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[e,a]),!e||!n?null:t.jsx("div",{className:"modal-overlay open confirm-dialog-overlay",onClick:a,children:t.jsxs("div",{className:"modal confirm-dialog",onClick:o=>o.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":n.title,children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:n.title}),t.jsx("button",{className:"modal-close",onClick:a,"aria-label":"Close confirmation dialog",children:"×"})]}),t.jsx("div",{className:"confirm-dialog__body",children:n.message}),t.jsxs("div",{className:"modal-actions confirm-dialog__actions",children:[t.jsx("button",{ref:r,className:"btn",onClick:a,children:n.cancelLabel??"Cancel"}),t.jsx("button",{className:`btn ${n.danger?"btn-danger":"btn-primary"}`,onClick:s,children:n.confirmLabel??"Confirm"})]})]})})}const gx=i.createContext(null);function BE({children:e}){const[n,s]=i.useState([]),a=i.useRef([]),r=i.useCallback(u=>{s(h=>{const m=u(h);return a.current=m,m})},[]),o=i.useCallback(u=>new Promise(h=>{r(m=>[...m,{options:u,resolve:h}])}),[r]),l=i.useCallback(u=>{const h=a.current[0];h&&(h.resolve(u),r(m=>m.slice(1)))},[r]),c=n[0]??null,d=i.useMemo(()=>({confirm:o}),[o]);return ka.createElement(gx.Provider,{value:d},e,ka.createElement(zE,{isOpen:c!==null,options:c?.options??null,onConfirm:()=>l(!0),onCancel:()=>l(!1)}))}function ai(){const e=i.useContext(gx);return e||{confirm:async n=>!1}}function UE(e,n){return e==="open"?"card-github-badge--open":n==="completed"?"card-github-badge--completed":n==="not_planned"?"card-github-badge--not-planned":"card-github-badge--closed"}function HE({prInfo:e,issueInfo:n,onIssueRefresh:s}){return t.jsxs(t.Fragment,{children:[e&&t.jsxs("a",{className:`card-github-badge card-github-badge--${e.status}`,title:`PR #${e.number}: ${e.title}`,href:e.url,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(Zs,{size:10}),t.jsxs("span",{children:["#",e.number]})]}),n&&t.jsxs("a",{className:`card-github-badge ${UE(n.state,n.stateReason)}`,title:`Issue #${n.number}: ${n.title}`,href:n.url,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(kc,{size:10}),t.jsxs("span",{children:["#",n.number]})]})]})}function wl(e,n){return`${e??"default"}:${n}`}class hm{ws=null;listeners=new Set;badgeUpdates=new Map;retainedBadgeUpdates=new Map;subscriptionsByTask=new Map;reconnectTimeout=null;reconnectDelayMs=1e3;shouldReconnect=!1;isConnected=!1;projectId=null;snapshot={badgeUpdates:new Map,isConnected:!1};previousProjectIdRef=null;projectContextVersionRef=0;contextVersionAtStart=0;static RETAINED_BADGE_CAP=200;subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}getSnapshot(){return this.snapshot}setProjectId(n){if(this.projectId===n)return;this.previousProjectIdRef=this.projectId,this.projectContextVersionRef++,this.contextVersionAtStart=this.projectContextVersionRef;const s=this.subscriptionsByTask.size>0,a=[];for(const[r,o]of this.subscriptionsByTask){const l=r.split(":").slice(1).join(":");for(const c of o)a.push({hookId:c,taskId:l})}if(this.projectId=n,this.reset(),s){for(const{hookId:r,taskId:o}of a){const l=wl(this.projectId,o);this.subscriptionsByTask.set(l,new Set([r]))}this.shouldReconnect=this.subscriptionsByTask.size>0,this.connect()}}subscribeTask(n,s){const a=wl(this.projectId,s),r=this.retainedBadgeUpdates.get(a);r&&!this.badgeUpdates.has(a)&&(this.badgeUpdates.set(a,r),this.retainedBadgeUpdates.delete(a),this.emit());const o=this.subscriptionsByTask.get(a)??new Set,l=!o.has(n);o.add(n),this.subscriptionsByTask.set(a,o),this.shouldReconnect=this.subscriptionsByTask.size>0,this.connect(),l&&this.send({type:"subscribe",taskId:s,projectId:this.projectId})}unsubscribeTask(n,s){const a=wl(this.projectId,s),r=this.subscriptionsByTask.get(a);if(r){if(r.delete(n),r.size===0){this.subscriptionsByTask.delete(a);const o=this.badgeUpdates.get(a);if(o)for(this.retainedBadgeUpdates.delete(a),this.retainedBadgeUpdates.set(a,o);this.retainedBadgeUpdates.size>hm.RETAINED_BADGE_CAP;){const l=this.retainedBadgeUpdates.keys().next().value;if(!l)break;this.retainedBadgeUpdates.delete(l)}this.badgeUpdates.delete(a),this.send({type:"unsubscribe",taskId:s,projectId:this.projectId}),this.emit()}this.shouldReconnect=this.subscriptionsByTask.size>0,this.shouldReconnect||this.disconnect()}}cleanupHook(n){for(const s of[...this.subscriptionsByTask.keys()]){const a=s.split(":").slice(1).join(":");this.unsubscribeTask(n,a)}}reset(){this.disconnect(),this.badgeUpdates.clear(),this.retainedBadgeUpdates.clear(),this.subscriptionsByTask.clear(),this.shouldReconnect=!1,this.emit()}connect(){if(!this.shouldReconnect||typeof window>"u"||this.ws&&(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING))return;const n=this.projectContextVersionRef;let a=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/ws`;this.projectId&&(a+=`?projectId=${encodeURIComponent(this.projectId)}`);const r=new WebSocket(Ci(a));this.ws=r,r.onopen=()=>{if(this.projectContextVersionRef!==n){r.close();return}this.isConnected=!0,this.reconnectDelayMs=1e3,this.emit();const o=new Set;for(const l of this.subscriptionsByTask.keys()){const c=l.split(":").slice(1).join(":");o.add(c)}for(const l of o)this.send({type:"subscribe",taskId:l,projectId:this.projectId})},r.onmessage=o=>{if(this.projectContextVersionRef===n)try{const l=JSON.parse(o.data);if(l.type!=="badge:updated"||l.projectId!==void 0&&l.projectId!==this.projectId)return;const c=wl(this.projectId,l.taskId),d=this.badgeUpdates.get(c);this.badgeUpdates.set(c,{prInfo:sp(l,"prInfo")?l.prInfo??null:d?.prInfo,issueInfo:sp(l,"issueInfo")?l.issueInfo??null:d?.issueInfo,timestamp:l.timestamp}),this.emit()}catch{}},r.onclose=()=>{this.projectContextVersionRef===n&&(this.ws=null,this.isConnected&&(this.isConnected=!1,this.emit()),this.shouldReconnect&&this.scheduleReconnect(n))},r.onerror=()=>{}}disconnect(){if(this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws){const n=this.ws;this.ws=null,n.close()}this.isConnected&&(this.isConnected=!1,this.emit())}scheduleReconnect(n){if(this.reconnectTimeout)return;const s=n??this.projectContextVersionRef,a=Math.min(this.reconnectDelayMs,5e3);this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.projectContextVersionRef===s&&this.shouldReconnect&&this.connect()},a),this.reconnectDelayMs=Math.min(this.reconnectDelayMs*2,5e3)}send(n){!this.ws||this.ws.readyState!==WebSocket.OPEN||this.ws.send(JSON.stringify(n))}emit(){this.snapshot={badgeUpdates:new Map(this.badgeUpdates),isConnected:this.isConnected};for(const n of this.listeners)n()}}const Ba=new hm;let qE=0;function sp(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function VE(e){const n=i.useRef(null);n.current===null&&(n.current=`badge-hook-${qE++}`);const s=i.useSyncExternalStore(o=>Ba.subscribe(o),()=>Ba.getSnapshot(),()=>Ba.getSnapshot()),a=i.useCallback(o=>{Ba.subscribeTask(n.current,o)},[]),r=i.useCallback(o=>{Ba.unsubscribeTask(n.current,o)},[]);return i.useEffect(()=>{Ba.setProjectId(e??null)},[e]),i.useEffect(()=>()=>{Ba.cleanupHook(n.current)},[]),{badgeUpdates:s.badgeUpdates,isConnected:s.isConnected,subscribeToBadge:a,unsubscribeFromBadge:r}}const WE={data:new Map},GE=5e3;function KE(e,n){return n?`${n}::${e}`:e}function JE(e,n){const s=WE.data.get(KE(e,n));if(!(!s||Date.now()-s.timestamp>GE))return s}const Cu=new Map,YE=3e4;function bx(e,n,s,a,r){return`${e}:${n??""}:${s??""}:${a??""}:${r??""}`}function QE(e,n,s,a,r){const o=bx(e,n,s,a,r),l=Cu.get(o);return l?Date.now()>l.expiresAt?(Cu.delete(o),null):l.stats:null}function XE(e,n,s,a,r,o){const l=bx(e,n,s,a,r);Cu.set(l,{stats:o,expiresAt:Date.now()+YE})}function ZE(e,n,s,a,r={}){const o=r.enabled??!0,l=r.worktree,c=r.stepVersion,d=r.pollIntervalMs,[u,h]=i.useState(null),[m,f]=i.useState(!1);return i.useEffect(()=>{if(!o){h(null),f(!1);return}const p=n==="done",g=n==="in-progress"||n==="in-review";if(!e||!p&&!g){h(null),f(!1);return}const w=g?l:void 0,v=c!==void 0?String(c):void 0,b=p?"done":"active";let y=!1;async function N(C=!1){if(!C){const x=QE(e,a,w,v,b);if(x){y||(h(x),f(!1));return}}f(!0);try{const x=await nx(e,w,a);y||(h(x.stats),XE(e,a,w,v,b,x.stats))}catch{y||h(null)}finally{y||f(!1)}}N();let S;return d&&g&&(S=setInterval(()=>{N(!0)},d)),()=>{y=!0,S&&clearInterval(S)}},[e,n,s,a,o,l,c,d]),{stats:u,loading:m}}const e_=new Set(["failed","stuck-killed"]);function oc(e,n,s){if(e.column!=="in-progress"||e.status&&e_.has(e.status)||!n||n<=0)return!1;const a=new Date(e.updatedAt).getTime();return(s??Date.now())-a>n}function t_(e){return e.stalledReview}const n_=new Set(["in-progress","in-review"]),s_=new Set(["triage","todo","in-progress","in-review"]);function i_(e,n){return!e||e.column==="done"||e.column==="archived"||e.column==="in-review"&&e.paused===!0||e.column==="in-review"&&e.status==="failed"&&(e.mergeRetries??0)>=n}function a_(e,n){const s=Date.parse(e.columnMovedAt??e.updatedAt);return Number.isFinite(s)?Math.max(0,n-s):0}function r_(e,n,s={}){const a=s.nowMs??Date.now(),r=s.highFanoutTodoThreshold??am,o=s.staleHighFanoutAgeThresholdMs??Hb,l=new Map(e.map(h=>[h.id,h])),c=new Map,d=h=>{let m=c.get(h);return m||(m={dependentIds:[],dependencyDependentIds:[],blockedByDependentIds:[],activeCount:0,activeTodoCount:0,overlapBlockedActiveCount:0,overlapBlockedTodoCount:0},c.set(h,m)),m};for(const h of e){const m=s_.has(h.column),f=h.column==="todo";for(const p of h.dependencies??[]){if(!p)continue;const g=d(p);g.dependentIds.push(h.id),g.dependencyDependentIds.push(h.id),m&&(g.activeCount+=1),f&&(g.activeTodoCount+=1)}if(h.blockedBy){const p=d(h.blockedBy);p.dependentIds.push(h.id),p.blockedByDependentIds.push(h.id),m&&(p.activeCount+=1,p.overlapBlockedActiveCount+=1),f&&(p.activeTodoCount+=1,p.overlapBlockedTodoCount+=1)}}const u=new Map;for(const[h,m]of c){const f=l.get(h),p=i_(f,n)?[...m.blockedByDependentIds]:[],g=m.overlapBlockedTodoCount>=r,w=f?a_(f,a):0,v=f?.column,b=v!==void 0&&g&&n_.has(v)&&w>=o;u.set(h,{totalCount:m.activeCount,activeTodoCount:m.activeTodoCount,dependentIds:m.dependentIds,dependencyDependentIds:m.dependencyDependentIds,overlapBlockedDependentIds:m.blockedByDependentIds,overlapBlockedActiveCount:m.overlapBlockedActiveCount,overlapBlockedTodoCount:m.overlapBlockedTodoCount,staleBlockedByDependentIds:p,isHighFanout:g,escalation:b?{blockerId:h,activeTodoCount:m.overlapBlockedTodoCount,totalActiveCount:m.overlapBlockedActiveCount,blockingAgeMs:w}:void 0})}return u}const Tc=3;function pm(e,n={}){return r_(e,Tc,{staleHighFanoutAgeThresholdMs:n.staleHighFanoutAgeThresholdMs})}function o_(e,n={}){return i.useMemo(()=>pm(e,n),[e,n.staleHighFanoutAgeThresholdMs])}const l_={"merge-blocker":"Merge blocked","transient-merge-status-no-owner":"Merge stalled","merge-retries-exhausted":"Retries exhausted","no-worktree-no-merge-confirmed":"No worktree"},c_={"merge-blocker":{headline:"Merge blocked by a pre-merge check",description:"A workflow step or merge precondition is reporting a blocker. The task is waiting for that check to pass before it can finalize.",suggestedAction:"Open the Review tab to see which step is blocking, then fix the failure or override the step."},"transient-merge-status-no-owner":{headline:"Stuck in a transient merge state with no active merger",description:"The task is parked in a merging/merging-pr/merging-fix status but no merger process owns it. Self-healing will retry, but if this repeats the merge worker may need attention.",suggestedAction:"Wait one self-healing cycle; if it persists, inspect engine logs for crashed merger runs."},"merge-retries-exhausted":{headline:"Auto-merge retries exhausted",description:"The merger hit its retry ceiling without confirming a merge. The task will not be re-enqueued automatically.",suggestedAction:"Resolve the underlying merge problem manually and re-run the merge from the Review tab, or move the task back to in-progress."},"no-worktree-no-merge-confirmed":{headline:"No worktree on disk and merge not confirmed",description:"The task's working tree is gone but the merge was never confirmed. Either the worktree was removed prematurely or the merge metadata is incomplete.",suggestedAction:"Check the Changes tab and Git history; if the work landed, mark the merge confirmed, otherwise re-create the worktree."}};function d_(e){return{badgeLabel:"In-review stall",code:e.code,headline:"In-review stall surfaced",description:e.reason,suggestedAction:"Open the activity log for details."}}function xx(e,n){const s=c_[e.code];if(!s)return d_(e);const a=n?.maxAutoMergeRetries??Tc,r=n?.mergeRetries,o=e.code==="merge-retries-exhausted"&&Number.isFinite(r)&&r!=null&&r>=0?`${Math.max(r,a)}/${a}`:void 0;return{badgeLabel:l_[e.code],code:e.code,counter:o,...s}}const u_=new Set(["merging","merging-pr","merging-fix"]);function vx(e){return e.column!=="in-review"||e.paused===!0||e.inReviewStall==null?!1:!(e.inReviewStall.code==="merge-blocker"&&e.status!=null&&u_.has(e.status))}const m_="Paused stall";function yx(e){return{badgeLabel:m_,code:e.code,headline:"Paused in review beyond threshold",description:"This task has remained paused in in-review beyond the configured stale paused review threshold.",suggestedAction:"Disposition options: unpause, retry, archive, or create follow-up task."}}function wx(e){return e.column==="in-review"&&e.paused===!0&&e.stalePausedReview!=null}function md(e){const n=Math.max(1,Math.floor(e/6e4)),s=Math.floor(n/1440),a=Math.floor(n%1440/60),r=n%60,o=[];return s>0&&o.push(`${s}d`),a>0&&o.push(`${a}h`),r>0&&s===0&&o.push(`${r}m`),o.join(" ")}function kx(e){if(!e)return null;const n=md(e.ageMs),s=e.paused?" while paused":"",a=e.level==="critical"?"critical":"warning";return{badgeLabel:a==="critical"?"Stale (critical)":"Stale",badgeTone:a,headline:`${e.column} task stale for ${n}`,description:`Task has been stale for ${n}${s}. Thresholds: warning ${md(e.warningThresholdMs)}, critical ${md(e.criticalThresholdMs)}.`}}function h_(e){return e.ageStaleness!=null}function p_(e){switch(e){case"passed":return"done";case"failed":case"advisory_failure":return"failed";case"skipped":return"skipped";case"pending":default:return"pending"}}function f_(e){return e==="done"||e==="skipped"}function g_(e,n,s){const a=s?.get(e)?.trim();if(a)return a;const r=n?.workflowStepName?.trim();return r||e}function jx(e,n){const s=(e.steps??[]).map((d,u)=>({id:`step-${u}`,name:d.name,status:d.status,source:"step",phase:"pre-merge"})),a=new Map((e.workflowStepResults??[]).map(d=>[d.workflowStepId,d])),r=(e.enabledWorkflowSteps??[]).map(d=>{const u=a.get(d);return{id:`workflow-${d}`,name:g_(d,u,n),status:u?p_(u.status):"pending",source:"workflow",phase:u?.phase??"pre-merge"}}),o=[...s,...r],l=o.length,c=o.filter(d=>f_(d.status)).length;return{total:l,completed:c,items:o}}function b_(e){return(e.action||e.outcome||"").replace(/^\[timing\]\s*/i,"").replace(/^\[[^\]]+\]\s*/i,"").replace(/\s+in\s+\d+(?:\.\d+)?ms\b/i,"").replace(/\s+after\s+\d+(?:\.\d+)?ms\b/i,"").trim()||"Timing event"}function Nx(e){return e.filter(n=>{const s=typeof n.action=="string"?n.action:"",a=typeof n.outcome=="string"?n.outcome:"";return s.includes("[timing]")||a.includes("[timing]")}).map(n=>{const a=`${n.action??""}
|
|
649
|
+
${n.outcome??""}`.match(/(\d+(?:\.\d+)?)ms\b/i),r=a?Number(a[1]):void 0;return{timestamp:n.timestamp,durationMs:Number.isFinite(r)?r:void 0,summary:b_(n)}})}function Sx(e){if(!e||e.length===0)return null;let n=0,s=0;for(const a of Nx(e))typeof a.durationMs=="number"&&(n+=a.durationMs,s+=1);return s>0?n:null}function Hi(e){if(!e)return null;const n=Date.parse(e);return Number.isFinite(n)?n:null}function Cx(e,n){if(!e||e.length===0)return null;let s=0,a=0;for(const r of e){if(!r.startedAt)continue;const o=Hi(r.startedAt);if(o==null)continue;let l;if(r.completedAt){const c=Hi(r.completedAt);if(c==null||c<o)continue;l=c}else l=Math.max(o,n);s+=l-o,a+=1}return a>0?s:null}function Ex(e,n,s){const a=Hi(e);if(a==null)return null;const r=Hi(n),o=r!=null&&r>=a?r:s;return Math.max(0,o-a)}function _x(e,n){const s=e.cumulativeActiveMs,a=s??0;if(e.column==="in-progress"){const r=Hi(e.executionStartedAt);if(r!=null)return a+Math.max(0,n-r)}return s!=null?Math.max(0,s):null}function x_(e,n,s){const a=Hi(e);if(a==null)return null;const r=Hi(n);return Math.max(0,(r??s)-a)}function fm(e){if(!(e instanceof Error))return null;const n=e.details;if(n?.code==="TASK_HAS_DEPENDENTS"&&Array.isArray(n.dependentIds))return{dependentIds:n.dependentIds.filter(a=>typeof a=="string")};const s=e.message.match(/[A-Z]+-\d+/g)??[];return s.length>1?{dependentIds:[...new Set(s.slice(1))]}:null}const Mx=i.createContext(void 0);function v_({value:e,children:n}){return t.jsx(Mx.Provider,{value:e,children:n})}function y_(){return i.useContext(Mx)}const Eu=new Map;async function w_(e,n){const s=Eu.get(e);if(s)return s;try{const a=await sx(e,n);return Eu.set(e,a.title),a.title}catch{return e}}const ip=12;function k_(e){return e.length<=ip?e:e.slice(0,ip-3)+"..."}const _u=new Map;async function j_(e,n){const s=_u.get(e);if(s)return s;try{const a=await Su(e,n);return _u.set(e,a.name),a.name}catch{return e}}function N_(e){return typeof e=="string"&&Ea.includes(e)?e:Ps}function S_(e,n){return e.length<=n?e:e.slice(0,n-3)+"..."}function Ax(e){const n=e.sourceMetadata?.agentName;if(typeof n=="string"&&n.trim().length>0)return n.trim();if(typeof e.sourceAgentId=="string"&&e.sourceAgentId.trim().length>0)return e.sourceAgentId.trim()}function C_(e){return e.sourceType==="agent_heartbeat"||e.sourceType==="automation"||!!Ax(e)}const E_=new Set(["triage","todo"]),ap=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]),rp=new Set(["merging","merging-pr","merging-fix"]),__={triage:"var(--triage)",todo:"var(--todo)","in-progress":"var(--in-progress)","in-review":"var(--in-review)",done:"var(--done)",archived:"var(--text-muted)"},M_=new Set(["in-progress","in-review","done"]),A_=3e4;function R_(e){return e==="merging-fix"?"Merging fixes…":e}function I_(e){const n=Hi(e.columnMovedAt??e.updatedAt);if(n==null)return null;const s=Date.now();return n>s?null:n}function op(e,n){const s=Hi(e.columnMovedAt??e.updatedAt);return s==null?null:Math.max(0,n-s)}function Mo(e,n){return e.cumulativeActiveMs==null?Ex(e.executionStartedAt,e.executionCompletedAt,n):_x(e,n)}function T_(e){return e.column==="done"?I_(e):null}function Rx(e,n){const s=Hi(e.updatedAt);return s==null?null:Math.max(0,n-s)}function P_(e,n){const s=Mo(e,n);if(s!=null)return s;const a=Rx(e,n),r=Ao(e,n);return r!=null?r+(a??0):a}function Ao(e,n){if(typeof e.timedExecutionMs=="number")return e.timedExecutionMs;const s=Sx(e.log),a=Cx(e.workflowStepResults,n);return s==null&&a==null?null:(s??0)+(a??0)}function lp(e){if(!Number.isFinite(e)||e<0)return"";if(e<6e4)return"<1m";const n=Math.floor(e/6e4);if(n<60)return`${n}m`;const s=Math.floor(n/60);return s<24?`${s}h`:`${Math.floor(s/24)}d`}function cp(e){if(!e)return null;const n=e.trim();return n.length>0?n:null}function $_(e){const n=cp(e.branch),s=cp(e.baseBranch),a=`fusion/${e.id.toLowerCase()}`,r=n&&(n===a||n.startsWith(`${a}-`))?null:n,o=s?.toLowerCase()==="main"?null:s;return{branch:r,baseBranch:o??null}}function dp(e){if(!Number.isFinite(e)||e<0||e===0)return"";const n=Math.ceil(e/6e4);if(n<59)return`${n}m`;const s=Math.ceil(e/36e5);return s<24?`${s}h`:`${Math.ceil(e/864e5)}d`}function up(e,n){if(!e&&!n)return!0;if(!e||!n)return!1;const s=Object.keys(e),a=Object.keys(n);return s.length!==a.length?!1:s.every(r=>e[r]===n[r])}function D_(e,n){return e.length!==n.length?!1:e.every((s,a)=>s.name===n[a]?.name&&s.status===n[a]?.status)}function hd(e,n){return e.length!==n.length?!1:e.every((s,a)=>s===n[a])}function L_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>s===n[a])}function O_(e){const n=e?.issueUrl;return typeof n=="string"&&n.length>0?n:void 0}function mp(e){if(!e)return null;const n=e.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)(?:$|[/?#])/i);if(!n)return null;const s=Number(n[3]);return!Number.isInteger(s)||s<=0?null:{owner:n[1],repo:n[2],number:s}}function F_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>{const r=n[a];return r?s.workflowStepId===r.workflowStepId&&s.workflowStepName===r.workflowStepName&&s.phase===r.phase&&s.status===r.status&&s.output===r.output&&s.startedAt===r.startedAt&&s.completedAt===r.completedAt:!1})}function z_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>{const r=n[a];return r?s.filename===r.filename&&s.mimeType===r.mimeType&&s.size===r.size:!1})}function B_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>{const r=n[a];return r?s.author===r.author&&s.text===r.text&&s.createdAt===r.createdAt:!1})}function U_(e,n){const s=e.task,a=n.task;return e.queued===n.queued&&e.projectId===n.projectId&&e.globalPaused===n.globalPaused&&e.taskStuckTimeoutMs===n.taskStuckTimeoutMs&&e.onOpenDetail===n.onOpenDetail&&e.addToast===n.addToast&&e.onUpdateTask===n.onUpdateTask&&e.onArchiveTask===n.onArchiveTask&&e.onUnarchiveTask===n.onUnarchiveTask&&e.onDeleteTask===n.onDeleteTask&&e.onRetryTask===n.onRetryTask&&e.onOpenDetailWithTab===n.onOpenDetailWithTab&&e.onOpenMission===n.onOpenMission&&e.onMoveTask===n.onMoveTask&&e.workflowStepNameLookup===n.workflowStepNameLookup&&e.disableDrag===n.disableDrag&&e.fanout?.totalCount===n.fanout?.totalCount&&e.fanout?.activeTodoCount===n.fanout?.activeTodoCount&&e.fanout?.isHighFanout===n.fanout?.isHighFanout&&e.fanout?.overlapBlockedTodoCount===n.fanout?.overlapBlockedTodoCount&&e.fanout?.escalation?.blockingAgeMs===n.fanout?.escalation?.blockingAgeMs&&hd(e.fanout?.dependentIds??[],n.fanout?.dependentIds??[])&&hd(e.fanout?.staleBlockedByDependentIds??[],n.fanout?.staleBlockedByDependentIds??[])&&s.id===a.id&&s.title===a.title&&s.description===a.description&&s.column===a.column&&s.columnMovedAt===a.columnMovedAt&&s.timedExecutionMs===a.timedExecutionMs&&s.updatedAt===a.updatedAt&&s.createdAt===a.createdAt&&s.status===a.status&&s.priority===a.priority&&s.executionMode===a.executionMode&&s.paused===a.paused&&s.userPaused===a.userPaused&&s.error===a.error&&s.size===a.size&&s.blockedBy===a.blockedBy&&s.overlapBlockedBy===a.overlapBlockedBy&&s.worktree===a.worktree&&s.branch===a.branch&&s.baseBranch===a.baseBranch&&s.breakIntoSubtasks===a.breakIntoSubtasks&&s.currentStep===a.currentStep&&s.modelProvider===a.modelProvider&&s.modelId===a.modelId&&s.validatorModelProvider===a.validatorModelProvider&&s.validatorModelId===a.validatorModelId&&s.planningModelProvider===a.planningModelProvider&&s.planningModelId===a.planningModelId&&s.reviewLevel===a.reviewLevel&&s.missionId===a.missionId&&s.assignedAgentId===a.assignedAgentId&&s.mergeRetries===a.mergeRetries&&s.retrySummary?.total===a.retrySummary?.total&&s.sourceType===a.sourceType&&s.sourceAgentId===a.sourceAgentId&&s.sourceMetadata?.issueUrl===a.sourceMetadata?.issueUrl&&s.sourceMetadata?.agentName===a.sourceMetadata?.agentName&&s.stalledReview?.reason===a.stalledReview?.reason&&s.stalledReview?.heuristic===a.stalledReview?.heuristic&&s.stalledReview?.matchCount===a.stalledReview?.matchCount&&s.stalledReview?.firstMatchAt===a.stalledReview?.firstMatchAt&&s.stalledReview?.lastMatchAt===a.stalledReview?.lastMatchAt&&s.ageStaleness?.level===a.ageStaleness?.level&&s.ageStaleness?.reason===a.ageStaleness?.reason&&s.ageStaleness?.observedAt===a.ageStaleness?.observedAt&&s.ageStaleness?.ageMs===a.ageStaleness?.ageMs&&s.ageStaleness?.warningThresholdMs===a.ageStaleness?.warningThresholdMs&&s.ageStaleness?.criticalThresholdMs===a.ageStaleness?.criticalThresholdMs&&s.ageStaleness?.column===a.ageStaleness?.column&&s.ageStaleness?.paused===a.ageStaleness?.paused&&z_(s.attachments,a.attachments)&&B_(s.comments,a.comments)&&hd(s.dependencies,a.dependencies)&&D_(s.steps,a.steps)&&L_(s.enabledWorkflowSteps,a.enabledWorkflowSteps)&&F_(s.workflowStepResults,a.workflowStepResults)&&up(s.prInfo,a.prInfo)&&up(s.issueInfo,a.issueInfo)}function H_({task:e,projectId:n,queued:s,onOpenDetail:a,addToast:r,globalPaused:o,onUpdateTask:l,onArchiveTask:c,onUnarchiveTask:d,onDeleteTask:u,onRetryTask:h,onOpenDetailWithTab:m,taskStuckTimeoutMs:f,onOpenMission:p,onMoveTask:g,lastFetchTimeMs:w,workflowStepNameLookup:v,disableDrag:b,fanout:y}){const[N,S]=i.useState(!1),[C,x]=i.useState(!1),[k,R]=i.useState(!1),[z,_]=i.useState(e.description||""),[A,X]=i.useState(!1),[H,M]=i.useState(e.column==="in-progress"||e.column==="triage"&&e.steps.some(Ne=>Ne.status==="done"||Ne.status==="skipped")),[T,F]=i.useState(null),[W,oe]=i.useState(null),[D,E]=i.useState(!1),[P,$]=i.useState(!1),[j,q]=i.useState(()=>Date.now()),le=i.useRef(null),fe=i.useRef(!1),Ce=i.useRef(null),Ae=i.useRef(null),[re,Z]=i.useState(!1),{badgeUpdates:pe,subscribeToBadge:ie,unsubscribeFromBadge:ve}=VE(n),{confirm:ne}=ai(),L=y_(),Y=i.useRef(null),ue=i.useRef(!1),B=i.useCallback(Ne=>Ne instanceof Element?!!Ne.closest("button, a, input, textarea, select, label, [role='button']"):!1,[]);i.useEffect(()=>{_(e.description||"")},[e.id,e.description]),i.useEffect(()=>{if(!D)return;const Ne=xt=>{Ae.current&&!Ae.current.contains(xt.target)&&E(!1)};return document.addEventListener("click",Ne),()=>document.removeEventListener("click",Ne)},[D]),i.useEffect(()=>{if(!e.missionId){F(null);return}const Ne=Eu.get(e.missionId);if(Ne){F(Ne);return}let xt=!1;return w_(e.missionId,n).then(Mt=>{xt||F(Mt)}),()=>{xt=!0}},[e.missionId,n]),i.useEffect(()=>{if(!e.assignedAgentId){oe(null);return}const Ne=_u.get(e.assignedAgentId);if(Ne){oe(Ne);return}oe(null);let xt=!1;return j_(e.assignedAgentId,n).then(Mt=>{xt||oe(Mt)}),()=>{xt=!0}},[e.assignedAgentId,n]),i.useEffect(()=>{if(k&&le.current){const Ne=le.current;Ne.focus(),Ne.style.height="auto",Ne.style.height=Ne.scrollHeight+"px"}},[k]),i.useEffect(()=>{if(typeof IntersectionObserver>"u"){Z(!0);return}const Ne=Ce.current;if(!Ne)return;const xt=new IntersectionObserver(([Mt])=>{Z(Mt?.isIntersecting??!0)},{rootMargin:"200px"});return xt.observe(Ne),()=>xt.disconnect()},[k,e.id]);const xe=i.useCallback(Ne=>{Ne.dataTransfer.setData("text/plain",e.id),Ne.dataTransfer.effectAllowed="move",S(!0)},[e.id]),je=i.useCallback(()=>{S(!1)},[]),se=i.useCallback(Ne=>Ne.dataTransfer.types.includes("Files"),[]),Ue=i.useCallback(Ne=>{se(Ne)&&(Ne.preventDefault(),Ne.stopPropagation(),Ne.dataTransfer.dropEffect="copy",x(!0))},[se]),De=i.useCallback(Ne=>{se(Ne)&&(Ne.preventDefault(),Ne.stopPropagation(),x(!1))},[se]),dt=i.useCallback(async Ne=>{if(!se(Ne))return;Ne.preventDefault(),Ne.stopPropagation(),x(!1);const xt=Array.from(Ne.dataTransfer.files);for(const Mt of xt)try{await Ic(e.id,Mt,n),r(`Attached ${Mt.name} to ${e.id}`,"success")}catch(Gt){r(`Failed to attach ${Mt.name}: ${Me(Gt)}`,"error")}},[e.id,se,r]),Pe=i.useCallback(()=>{k||a(e)},[e,a,k]),ce=i.useCallback(Ne=>{if(fe.current){fe.current=!1;return}B(Ne.target)||Pe()},[Pe,B]),Ee=i.useCallback(Ne=>{const xt=Ne.touches[0];xt&&(Y.current={x:xt.clientX,y:xt.clientY,time:Date.now()},ue.current=!1)},[]),Oe=i.useCallback(Ne=>{if(!Y.current)return;const xt=Ne.touches[0];if(!xt)return;const Mt=Math.abs(xt.clientX-Y.current.x),Gt=Math.abs(xt.clientY-Y.current.y);(Mt>hp||Gt>hp)&&(ue.current=!0)},[]),ht=i.useCallback(Ne=>{if(B(Ne.target)||!Y.current)return;const Mt=Date.now()-Y.current.time<q_,Gt=!ue.current;Mt&&Gt&&(fe.current=!0,Pe()),Y.current=null,ue.current=!1},[Pe,B]),Ve=i.useCallback(async(Ne,xt)=>{Ne.stopPropagation();try{const Mt=await Ja(xt,n);a(Mt)}catch{r(`Failed to load dependency ${xt}`,"error")}},[a,r]),ge=e.status==="failed",me=e.paused===!0||e.userPaused===!0,$e=!!(e.paused&&e.pausedByAgentId),mt=N_(e.priority),jt=mt!==Ps,tt=oc(e,f,w),bt=t_(e),Ie=!!(bt&&e.column==="in-review"&&!me),Xe=vx(e),rt=e.inReviewStall?xx(e.inReviewStall,{mergeRetries:e.mergeRetries,maxAutoMergeRetries:Tc}):void 0,It=wx(e),_t=e.stalePausedReview?yx(e.stalePausedReview):void 0,We=h_(e),J=kx(e.ageStaleness),ke=e.column==="triage"&&e.status==="awaiting-approval",ot=e.column==="archived",ye=!o&&!s&&!ge&&!me&&!tt&&!ke&&(e.column==="in-progress"||ap.has(e.status)),it=!b&&!s&&!me&&!k&&!ot,He=E_.has(e.column)&&!ye&&!me&&!s&&l,he=e.githubTracking?.issue,et=!!he,vt=e.sourceType==="github_import",Ct=O_(e.sourceMetadata),Et=i.useMemo(()=>mp(Ct),[Ct]),Tt=i.useMemo(()=>mp(e.issueInfo?.url),[e.issueInfo?.url]),Jt=Tt?.owner,cn=Tt?.repo,Vt=!!(e.issueInfo&&he&&e.issueInfo.number===he.number&&Jt===he.owner&&cn===he.repo),hn=!!(Et&&he&&Et.number===he.number&&Et.owner===he.owner&&Et.repo===he.repo),dn=et&&!Vt&&!hn,An=e.column==="in-review"&&!!g,nn=i.useMemo(()=>$_(e),[e.id,e.branch,e.baseBranch]),Dn=!!(nn.branch||nn.baseBranch),Nn=C_(e),zt=Ax(e),sn=zt?`Created by agent: ${zt}`:"Created by agent",xn=!!(e.assignedAgentId&&W===null),Xt=i.useMemo(()=>{const Ne=[];return e.modelProvider&&Ne.push(e.modelProvider),e.validatorModelProvider&&!Ne.includes(e.validatorModelProvider)&&Ne.push(e.validatorModelProvider),e.planningModelProvider&&!Ne.includes(e.planningModelProvider)&&Ne.push(e.planningModelProvider),Ne},[e.modelProvider,e.validatorModelProvider,e.planningModelProvider]),Yt=i.useMemo(()=>jx(e,v),[e.steps,e.enabledWorkflowSteps,e.workflowStepResults,v]),rn=Yt.total>0&&(e.status==="executing"||e.column==="in-progress");i.useEffect(()=>{if(e.column!=="in-progress"&&e.column!=="in-review")return;const Ne=e.status!=null&&rp.has(e.status);if(e.column==="in-progress"){const Mt=Mo(e,Date.now()),Gt=op(e,Date.now()),Sn=Ao(e,Date.now());if(Mt==null&&Gt==null&&Sn==null)return}if(!Ne&&e.column==="in-review"){const Mt=Mo(e,Date.now()),Gt=Ao(e,Date.now());if(Mt==null&&Gt==null)return}q(Date.now());const xt=window.setInterval(()=>{q(Date.now())},A_);return()=>window.clearInterval(xt)},[e.column,e.status,e.columnMovedAt,e.updatedAt,e.workflowStepResults,e.timedExecutionMs,e.firstExecutionAt,e.cumulativeActiveMs,e.executionStartedAt,e.executionCompletedAt]);const Zt=i.useMemo(()=>{if(!M_.has(e.column))return null;if(e.status!=null&&rp.has(e.status)){const on=P_(e,j);if(on!=null){const qt=dp(on);if(qt){const Pt=Rx(e,j),Hn=Pt==null?null:lp(Pt),qn=Hn?`Execution time ${qt}. Merge phase ${Hn}`:`Execution time ${qt}. Merging`;return{label:qt,title:qn,ariaLabel:qn}}}}if(e.column==="in-progress"){const on=Mo(e,j)??op(e,j)??Ao(e,j);if(on==null)return null;const qt=lp(on);return qt?{label:qt,title:`In progress ${qt}`,ariaLabel:`In progress ${qt}`}:null}const xt=Mo(e,j)??Ao(e,j);if(xt==null)return null;const Mt=dp(xt);if(!Mt)return null;const Gt=T_(e);if(Gt==null)return{label:Mt,title:`Execution time ${Mt}`,ariaLabel:`Execution time ${Mt}`};const Sn=new Date(Gt).toLocaleString();return{label:Mt,title:`Execution time ${Mt}. Completed ${Sn}`,ariaLabel:`Execution time ${Mt}. Completed ${Sn}`}},[e.column,e.status,e.columnMovedAt,e.timedExecutionMs,e.updatedAt,e.workflowStepResults,e.log,e.firstExecutionAt,e.cumulativeActiveMs,e.executionStartedAt,e.executionCompletedAt,j]),en=pe.get(`${n??"default"}:${e.id}`),un=i.useMemo(()=>JE(e.id,n),[e.id,n]),Qt=i.useRef(!1),pn=!!(e.prInfo||e.issueInfo||en?.prInfo||en?.issueInfo||un?.result?.prInfo||un?.result?.issueInfo);pn&&(Qt.current=!0);const Dt=pn||Qt.current;i.useEffect(()=>{if(!Dt||!re){ve(e.id);return}return ie(e.id),()=>{ve(e.id)}},[Dt,re,ie,e.id,ve]);const Bt=e.column==="in-progress"||e.column==="in-review",be=i.useMemo(()=>e.steps.map(Ne=>`${Ne.name}:${Ne.status}`).join("|"),[e.steps]),{stats:Re,loading:nt}=ZE(e.id,e.column,e.mergeDetails?.commitSha,n,{enabled:re,worktree:e.worktree,stepVersion:Bt?be:void 0,pollIntervalMs:Bt?3e4:void 0}),ut=i.useMemo(()=>{const Ne=en?.prInfo,xt=en?.timestamp,Mt=un?.result?.prInfo,Gt=un?.timestamp?new Date(un.timestamp).toISOString():void 0,Sn=e.prInfo,on=e.prInfo?.lastCheckedAt??e.updatedAt;let qt=Sn,Pt=on;return Ne&&(!Pt||xt!=null&&xt>=Pt)&&(qt=Ne,Pt=xt??Pt),Mt&&(!Pt||Gt!=null&&Gt>=Pt)&&(qt=Mt),qt},[en,un,e.prInfo,e.updatedAt]),Ye=i.useMemo(()=>{const Ne=en?.issueInfo,xt=en?.timestamp,Mt=un?.result?.issueInfo,Gt=un?.timestamp?new Date(un.timestamp).toISOString():void 0,Sn=e.issueInfo,on=e.issueInfo?.lastCheckedAt??e.updatedAt;let qt=Sn,Pt=on;return Ne&&(!Pt||xt!=null&&xt>=Pt)&&(qt=Ne,Pt=xt??Pt),Mt&&(!Pt||Gt!=null&&Gt>=Pt)&&(qt=Mt),qt},[en,un,e.issueInfo,e.updatedAt]),lt=i.useCallback(Ne=>{Ne?.stopPropagation(),!(!He||A)&&(R(!0),_(e.description||""))},[He,A,e.description]),wt=i.useCallback(()=>{R(!1),_(e.description||"")},[e.description]),Q=i.useCallback(()=>z!==(e.description||""),[z,e.description]),ae=i.useCallback(async()=>{if(!(!l||A)){if(!Q()){wt();return}X(!0);try{await l(e.id,{description:z.trim()||void 0}),r(`Updated ${e.id}`,"success"),R(!1)}catch(Ne){r(`Failed to update ${e.id}: ${Me(Ne)}`,"error")}finally{X(!1)}}},[l,e.id,z,A,Q,wt,r]),Ke=i.useCallback(Ne=>{Ne.key==="Enter"&&!Ne.shiftKey?(Ne.preventDefault(),ae()):Ne.key==="Escape"&&(Ne.preventDefault(),wt())},[ae,wt]),gt=i.useCallback(()=>{setTimeout(()=>{const Ne=document.activeElement;Ne===le.current||Ne?.closest(".card-editing-content")||(Q()?ae():wt())},0)},[Q,ae,wt]),Wt=i.useCallback(Ne=>{He&&(Ne.stopPropagation(),lt(Ne))},[He,lt]),fn=i.useCallback(Ne=>{Ne.stopPropagation(),lt(Ne)},[lt]),Rn=i.useCallback(Ne=>{_(Ne.target.value);const xt=Ne.target;xt.style.height="auto",xt.style.height=xt.scrollHeight+"px"},[]),wn=i.useCallback(Ne=>{Ne.stopPropagation(),c&&c(e.id).then(()=>{r(`Archived ${e.id}`,"success")}).catch(xt=>{r(`Failed to archive ${e.id}: ${Me(xt)}`,"error")})},[r,c,e.id]),mn=i.useCallback(Ne=>{Ne.stopPropagation(),d&&d(e.id).then(()=>{r(`Unarchived ${e.id}`,"success")}).catch(xt=>{r(`Failed to unarchive ${e.id}: ${Me(xt)}`,"error")})},[r,d,e.id]),Un=i.useCallback(async Ne=>{if(Ne.stopPropagation(),!u||!await ne({title:"Delete Task",message:`Delete ${e.id}?`,danger:!0}))return;const Mt=e.githubTracking?.enabled===!0?e.githubTracking.issue:void 0;let Gt;if(Mt?.owner&&Mt.repo&&Mt.number){const Sn=`${Mt.owner}/${Mt.repo}#${Mt.number}`;await ne({title:"Linked GitHub Issue",message:`Choose what to do with ${Sn} when deleting ${e.id}.
|
|
650
|
+
|
|
651
|
+
Close the issue?`,confirmLabel:"Close Issue",cancelLabel:"More Options"})?Gt="close":Gt=await ne({title:"Delete Linked GitHub Issue",message:`Delete ${Sn} on GitHub, or leave it unchanged?`,confirmLabel:"Delete Issue",cancelLabel:"Leave Unchanged",danger:!0})?"delete":"leave"}try{Gt?await u(e.id,{githubIssueAction:Gt}):await u(e.id);const Sn=Mt?.owner&&Mt.repo&&Mt.number&&Gt?` and ${Gt==="close"?"closed":Gt==="delete"?"deleted":"left"} issue ${Mt.owner}/${Mt.repo}#${Mt.number}`:"";r(`Deleted ${e.id}${Sn}`,"success")}catch(Sn){const on=fm(Sn);if(!on||on.dependentIds.length===0){r(`Failed to delete ${e.id}: ${Me(Sn)}`,"error");return}const qt=on.dependentIds.join(", ");if(!await ne({title:"Force Delete Task",message:`${e.id} is a dependency of ${qt}.
|
|
652
|
+
|
|
653
|
+
Delete anyway by removing these dependency references first?`,danger:!0}))return;try{await u(e.id,{removeDependencyReferences:!0,githubIssueAction:Gt}),r(`Deleted ${e.id} after removing dependency references`,"success")}catch(Hn){r(`Failed to delete ${e.id}: ${Me(Hn)}`,"error")}}},[r,ne,u,e.githubTracking?.enabled,e.githubTracking?.issue,e.id]),de=i.useCallback(Ne=>{Ne.stopPropagation(),m?.(e,"changes")},[e,m]),st=i.useCallback(Ne=>{Ne.stopPropagation(),m?.(e,"retries")},[e,m]),ct=i.useCallback(Ne=>{Ne.stopPropagation(),M(xt=>!xt)},[]),kt=i.useCallback(Ne=>{Ne.stopPropagation(),e.missionId&&p&&p(e.missionId)},[e.missionId,p]),G=i.useCallback(Ne=>{Ne.stopPropagation(),E(xt=>!xt)},[]),ze=i.useCallback(async(Ne,xt)=>{if(Ne.stopPropagation(),E(!1),!!g)try{const Mt=e.steps.some(on=>on.status!=="pending"),Gt=(xt==="todo"||xt==="triage")&&Mt;let Sn;if(Gt){if(await ne({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))Sn={preserveProgress:!0};else if(!await ne({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await g(e.id,xt,Sn),r(`Moved ${e.id} to ${gs[xt]}`,"success")}catch(Mt){r(`Failed to move ${e.id}: ${Me(Mt)}`,"error")}},[r,ne,g,e.id,e.steps]),Ut=i.useCallback(async Ne=>{if(Ne.stopPropagation(),!(!h||P)){$(!0);try{await h(e.id)}catch(xt){r(`Failed to retry ${e.id}: ${Me(xt)}`,"error")}finally{$(!1)}}},[r,P,h,e.id]),gn=`card${N?" dragging":""}${s?" queued":""}${ye?" agent-active":""}${ge?" failed":""}${me?" paused":""}${tt?" stuck":""}${ke?" awaiting-approval":""}${C?" file-drop-target":""}${k?" card-editing":""}${A?" card-saving":""}`,In=(()=>{if(e.column==="in-progress"){const Ne=Re?.filesChanged,xt=Ne==null?e.modifiedFiles?.length:void 0,Mt=Ne??xt;return Mt==null||Mt===0?null:t.jsxs("button",{type:"button",className:"card-session-files",onClick:de,disabled:!m,children:[t.jsx(js,{size:12}),t.jsxs("span",{children:[Mt," ",Mt===1?"file":"files"," changed"]})]})}if(e.column==="in-review"){const Ne=Re?.filesChanged,xt=Ne==null?e.modifiedFiles?.length:void 0,Mt=Ne??xt;return Mt==null||Mt===0?null:t.jsxs("button",{type:"button",className:"card-session-files",onClick:de,disabled:!m,children:[t.jsx(js,{size:12}),t.jsxs("span",{children:[Mt," ",Mt===1?"file":"files"," changed"]})]})}if(e.column==="done"){let Ne;if(Re?Ne=Re.filesChanged:nt?Ne=e.mergeDetails?.filesChanged??void 0:Ne=void 0,Ne!=null&&Ne>0)return t.jsxs("button",{type:"button",className:"card-session-files",onClick:de,disabled:!m,children:[t.jsx(js,{size:12}),t.jsxs("span",{children:[Ne," ",Ne===1?"file":"files"," changed"]})]});const xt=e.modifiedFiles?.length;if(xt!=null&&xt>0)return t.jsxs("button",{type:"button",className:"card-session-files",onClick:de,disabled:!m,children:[t.jsx(js,{size:12}),t.jsxs("span",{children:[xt," ",xt===1?"file":"files"," changed"]})]})}return null})();return k?t.jsx("div",{ref:Ce,className:gn,"data-id":e.id,"data-column":e.column,onDoubleClick:Wt,children:t.jsxs("div",{className:"card-editing-content",children:[t.jsx("textarea",{ref:le,className:"card-edit-desc-textarea",placeholder:"Task description",value:z,onChange:Rn,onKeyDown:Ke,onBlur:gt,disabled:A,rows:4}),A&&t.jsxs("div",{className:"card-edit-loading",children:[t.jsx("span",{className:"card-edit-loading-spinner"}),t.jsx("span",{className:"card-edit-loading-text",children:"Saving..."})]})]})}):t.jsxs("div",{ref:Ce,className:gn,"data-id":e.id,"data-column":e.column,draggable:it,onDragStart:it?xe:void 0,onDragEnd:it?je:void 0,onDragOver:Ue,onDragLeave:De,onDrop:dt,onClick:ce,onTouchStart:Ee,onTouchMove:Oe,onTouchEnd:ht,onDoubleClick:Wt,children:[t.jsxs("div",{className:"card-header",children:[t.jsx("span",{className:"card-id",children:e.id}),me&&t.jsx("span",{className:"card-status-badge paused",children:$e?"paused by agent":"paused"}),!me&&e.status&&e.status!=="queued"&&t.jsx("span",{className:`card-status-badge card-status-badge--${e.column}${ke?" awaiting-approval":""}${ap.has(e.status)?" pulsing":""}${ge?" failed":""}${tt?" stuck":""}`,children:tt?"Stuck":ke?"Awaiting Approval":R_(e.status)}),Xe&&rt&&t.jsxs("span",{className:`card-status-badge card-status-badge--in-review in-review-stall in-review-stall--${rt.code}`,title:`${rt.headline} — ${rt.description}`,"data-stall-code":rt.code,children:[rt.badgeLabel,rt.counter?` ${rt.counter}`:""]}),It&&_t&&t.jsx("span",{className:`card-status-badge card-status-badge--in-review stale-paused-review stale-paused-review--${_t.code}`,title:`${_t.headline} — ${_t.description}`,"data-stale-paused-review-code":_t.code,children:_t.badgeLabel}),We&&J&&t.jsx("span",{className:`card-status-badge card-task-age-staleness-badge card-task-age-staleness-badge--${J.badgeTone}`,title:`${J.headline} — ${J.description}`,children:J.badgeLabel}),tt&&(me||!e.status||e.status==="queued")&&t.jsx("span",{className:"card-status-badge stuck",children:"Stuck"}),Ie&&bt&&t.jsx("span",{className:"card-status-badge card-status-badge--in-review stalled-review",title:bt.reason,children:"Stalled"}),(ut||Ye)&&t.jsx(HE,{prInfo:ut,issueInfo:Ye}),Nn&&t.jsxs("span",{className:"card-agent-created-badge",title:sn,"aria-label":sn,children:[t.jsx(es,{size:11,"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:sn}),t.jsx("span",{"aria-hidden":"true",children:"Agent"})]}),jt&&t.jsx("span",{className:`card-priority-badge card-priority-badge--${mt}`,children:mt}),e.executionMode==="fast"&&t.jsxs("span",{className:"card-execution-mode-badge card-execution-mode-badge--fast",title:"Fast mode","aria-label":"Fast mode",children:[t.jsx(us,{"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:"Fast mode"})]}),e.noCommitsExpected===!0&&t.jsx("span",{className:"card-no-commits-expected-badge",title:"Decision-only task",children:"decision-only"}),e.missionId&&t.jsxs("span",{className:"card-mission-badge",onClick:kt,title:`Mission: ${T??e.missionId}`,role:p?"button":void 0,tabIndex:p?0:void 0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[t.jsx(_s,{size:11}),k_(T??e.missionId)]}),t.jsxs("div",{className:"card-header-actions",children:[He&&t.jsx("button",{className:"card-edit-btn",onClick:fn,title:"Edit task","aria-label":"Edit task",children:t.jsx(Hs,{size:12})}),e.column==="triage"&&u&&t.jsx("button",{className:"card-delete-btn",onClick:Un,title:"Delete task","aria-label":"Delete task",children:t.jsx(zn,{size:12})}),e.column==="done"&&c&&t.jsx("button",{className:"card-archive-btn",onClick:wn,title:"Archive task","aria-label":"Archive task",children:"Archive"}),e.column==="archived"&&d&&t.jsx("button",{className:"card-unarchive-btn",onClick:mn,title:"Unarchive task","aria-label":"Unarchive task",children:"Unarchive"}),e.column==="in-progress"&&g&&t.jsxs("div",{className:"card-send-back",ref:Ae,children:[t.jsxs("button",{className:"card-send-back-btn",onClick:G,title:"Send back","aria-label":"Send back","aria-haspopup":"menu","aria-expanded":D,children:["Send back",t.jsx(jn,{size:10})]}),D&&t.jsx("div",{className:"card-send-back-menu",role:"menu",children:ku["in-progress"].filter(Ne=>Ne!=="in-review").map(Ne=>t.jsx("button",{className:"card-send-back-menu-item",role:"menuitem",onClick:xt=>ze(xt,Ne),children:gs[Ne]},Ne))})]}),e.size&&t.jsx("span",{className:`card-size-badge size-${e.size.toLowerCase()}`,children:e.size})]})]}),Ie&&bt&&t.jsx("div",{className:"card-stalled-review-reason",title:bt.reason,children:bt.reason}),ge&&e.error&&t.jsxs("div",{className:"card-error",title:e.error,children:[t.jsx("span",{className:"card-error-icon",children:"⚠"}),t.jsx("span",{className:"card-error-text",children:e.error.length>60?e.error.slice(0,60)+"…":e.error}),h&&t.jsxs("button",{type:"button",className:"btn btn-sm card-error-retry-btn",onClick:Ut,disabled:P,children:[t.jsx(ah,{size:12}),P?"Retrying…":"Retry"]})]}),t.jsx("div",{className:"card-title",title:e.title||e.description||void 0,children:fp(e.title,pp)||fp(e.description,pp)||e.id}),Dn&&t.jsxs("div",{className:"card-branch-row","aria-label":"Branch metadata",children:[nn.branch&&t.jsxs("span",{className:"card-branch-chip",title:nn.branch,children:[t.jsx("span",{className:"card-branch-label",children:"Branch"}),t.jsx("span",{className:"card-branch-value",children:nn.branch})]}),nn.baseBranch&&t.jsxs("span",{className:"card-branch-chip",title:nn.baseBranch,children:[t.jsx("span",{className:"card-branch-label",children:"Base"}),t.jsx("span",{className:"card-branch-value",children:nn.baseBranch})]})]}),rn&&(()=>{const Ne=Yt.completed/Yt.total*100;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"card-progress",children:[t.jsx("div",{className:"card-progress-bar",children:t.jsx("div",{className:"card-progress-fill",style:{width:`${Ne}%`,backgroundColor:__[e.column]}})}),t.jsxs("span",{className:"card-progress-label",children:[Yt.completed,"/",Yt.total]})]}),t.jsxs("button",{type:"button",className:"card-steps-toggle",onClick:ct,"aria-expanded":H,"aria-label":H?"Hide steps":"Show steps",children:[t.jsxs("span",{children:[Yt.total," step",Yt.total===1?"":"s"]}),t.jsx(jn,{size:14,className:`card-steps-toggle-icon${H?" expanded":""}`})]}),H&&t.jsx("div",{className:"card-steps-list",children:Yt.items.map(xt=>{const Mt=xt.source==="workflow"&&xt.status==="failed";return t.jsxs("div",{className:"card-step-item",children:[t.jsx("span",{className:`card-step-dot card-step-dot--${xt.status}${Mt?" card-step-dot--workflow-failed":""}`,"aria-hidden":"true"}),t.jsx("span",{className:`card-step-name${xt.status==="done"?" completed":""}`,children:xt.name}),xt.source==="workflow"&&t.jsx("span",{className:`card-step-workflow-badge card-step-workflow-badge--${xt.phase}`,title:"Workflow check",children:"workflow"})]},xt.id)})})]})})(),(In||vt||dn&&he||(e.retrySummary?.total??0)>0||Zt)&&t.jsxs("div",{className:"card-footer-row",children:[In,vt&&t.jsx("span",{className:"card-source-provenance",title:Ct?`Imported from GitHub: ${Ct}`:"Imported from GitHub","aria-label":"Imported from GitHub",children:t.jsx(Kn,{provider:"github",size:"sm"})}),dn&&he&&t.jsxs("a",{className:"card-github-tracking-chip card-github-tracking-link",href:he.url,target:"_blank",rel:"noopener noreferrer",title:`Linked GitHub issue: ${he.owner}/${he.repo}#${he.number}`,"aria-label":`Linked GitHub issue #${he.number}`,onClick:Ne=>Ne.stopPropagation(),children:[t.jsx(Kn,{provider:"github",size:"sm"}),t.jsx("span",{children:`#${he.number}`})]}),(e.retrySummary?.total??0)>0&&t.jsxs("span",{className:`card-retry-badge${L!=null&&(e.retrySummary?.total??0)>=L?" card-retry-badge--error":" card-retry-badge--warning"}`,onClick:st,role:"button",tabIndex:0,onKeyDown:Ne=>{(Ne.key==="Enter"||Ne.key===" ")&&(Ne.preventDefault(),Ne.stopPropagation(),m?.(e,"retries"))},"aria-label":`${e.retrySummary?.total??0} retries`,title:"Open retry breakdown",children:[t.jsx(ah,{size:11}),t.jsx("span",{children:e.retrySummary?.total??0})]}),Zt&&t.jsxs("span",{className:"card-time-indicator",title:Zt.title,"aria-label":Zt.ariaLabel,children:[t.jsx(ia,{size:12}),t.jsx("span",{children:Zt.label})]})]}),(e.dependencies&&e.dependencies.length>0||s||e.status==="queued"||e.blockedBy||e.overlapBlockedBy||y&&y.totalCount>0)&&t.jsxs("div",{className:"card-meta",children:[e.dependencies&&e.dependencies.length>0&&t.jsx("div",{className:"card-dep-list",children:e.dependencies.map(Ne=>t.jsxs("span",{className:"card-dep-badge clickable",onClick:xt=>void Ve(xt,Ne),title:`Click to view ${Ne}`,children:[t.jsx(Tr,{size:12,style:{verticalAlign:"middle"}})," ",Ne]},Ne))}),(e.overlapBlockedBy||e.blockedBy)&&t.jsxs("span",{className:"card-scope-badge","data-tooltip":`Blocked by ${e.overlapBlockedBy||e.blockedBy} (file overlap)`,children:[t.jsx(Ga,{size:12,style:{verticalAlign:"middle"}})," ",e.overlapBlockedBy||e.blockedBy]}),y&&y.totalCount>0&&t.jsxs("span",{className:`card-fanout-badge${y.staleBlockedByDependentIds.length>0?" card-fanout-badge--stale":""}`,"data-tooltip":`Blocking ${y.totalCount} active task(s); overlap blockedBy queue: ${y.overlapBlockedTodoCount} todo${y.isHighFanout?` (overlap bottleneck threshold: ${am})`:""}${y.escalation?` · escalated after ${Math.floor(y.escalation.blockingAgeMs/6e4)}m in blocking column`:""}`,children:[t.jsx(Os,{size:12,style:{verticalAlign:"middle"}}),t.jsxs("span",{children:[y.escalation?"Escalated overlap":y.isHighFanout?"Overlap bottleneck":"Blocks"," ",t.jsx("span",{className:"card-fanout-count",children:y.totalCount}),y.staleBlockedByDependentIds.length>0?` (${y.staleBlockedByDependentIds.length} stale)`:""]})]}),(s||e.status==="queued")&&e.column!=="in-progress"&&t.jsxs("span",{className:"queued-badge",children:[t.jsx(ia,{size:12,style:{verticalAlign:"middle"}})," Queued"]})]}),(e.assignedAgentId||Xt.length>0)&&t.jsxs("div",{className:"card-agent-row",children:[Xt.length>0&&t.jsx("span",{className:"card-provider-icons","data-testid":"card-provider-icons",children:Xt.map(Ne=>t.jsx(Kn,{provider:Ne,size:"sm"},Ne))}),e.assignedAgentId&&t.jsxs("span",{className:`card-agent-badge${xn?" card-agent-badge--loading":""}`,title:`Assigned to ${W??e.assignedAgentId}`,children:[t.jsx(es,{size:11}),t.jsx("span",{className:"card-agent-badge-text","aria-hidden":"true",children:S_(W??e.assignedAgentId,15)}),t.jsxs("span",{className:"visually-hidden",children:["Assigned to ",W??e.assignedAgentId]})]})]}),An&&t.jsx("div",{className:"card-bottom-row",children:t.jsx("div",{className:"card-bottom-right-row",children:t.jsxs("div",{className:"card-send-back",ref:Ae,children:[t.jsxs("button",{className:"card-send-back-btn",onClick:G,title:"Move task","aria-label":"Move task","aria-haspopup":"menu","aria-expanded":D,children:["Move",t.jsx(jn,{size:10})]}),D&&t.jsx("div",{className:"card-send-back-menu",role:"menu",children:ku["in-review"].map(Ne=>t.jsx("button",{className:"card-send-back-menu-item",role:"menuitem",onClick:xt=>ze(xt,Ne),children:Ne==="done"?"Done (no merge)":gs[Ne]},Ne))})]})})}),t.jsx(ya,{slotId:"task-card-badge",projectId:n})]})}const hp=10,q_=300,pp=140;function fp(e,n){return e?e.length>n?e.slice(0,n)+"…":e:""}const Wo=i.memo(H_,U_);Wo.displayName="TaskCard";function V_({label:e,activeTasks:n,queuedTasks:s,projectId:a,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:d,onOpenDetailWithTab:u,taskStuckTimeoutMs:h,onOpenMission:m,lastFetchTimeMs:f,workflowStepNameLookup:p,blockerFanoutMap:g}){return t.jsxs("div",{className:"worktree-group",children:[t.jsxs("div",{className:"worktree-group-header",children:[t.jsx("span",{className:"worktree-icon",children:e==="Up Next"||e==="Unassigned"?t.jsx(Yw,{size:14}):t.jsx(Os,{size:14})}),t.jsx("span",{className:"worktree-label",children:e})]}),n.map(w=>t.jsx(Wo,{task:w,projectId:a,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:d,onOpenDetailWithTab:u,taskStuckTimeoutMs:h,onOpenMission:m,lastFetchTimeMs:f,workflowStepNameLookup:p,fanout:g?.get(w.id)},w.id)),s.map(w=>t.jsx(Wo,{task:w,projectId:a,queued:!0,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:d,onOpenDetailWithTab:u,taskStuckTimeoutMs:h,onOpenMission:m,lastFetchTimeMs:f,workflowStepNameLookup:p,fanout:g?.get(w.id)},w.id))]})}const Ix=i.memo(V_);Ix.displayName="WorktreeGroup";function gp(e){return e.toLowerCase().replace(/[-_./]/g,"")}function W_(e,n){let s=0;for(let a=0;a<n.length&&s<e.length;a++)e[s]===n[a]&&s++;return s===e.length}function G_(e,n,s){const a=e.length,r=n.length;if(a===0)return!0;if(r===0)return!1;let o=new Array(r+1).fill(0),l=new Array(r+1).fill(0);for(let c=1;c<=a;c++){const d=new Array(r+1);d[0]=c;for(let u=1;u<=r;u++){const h=e[c-1]===n[u-1]?0:1;d[u]=Math.min(l[u]+1,d[u-1]+1,l[u-1]+h),c>=2&&u>=2&&e[c-1]===n[u-2]&&e[c-2]===n[u-1]&&(d[u]=Math.min(d[u],o[u-2]+1))}o=l,l=d}for(let c=0;c<=r;c++)if(l[c]<=s)return!0;return!1}function K_(e,n){const s=gp(e),a=gp(n);if(s.length===0||a.includes(s))return!0;const r=a.split(/\s+/).filter(Boolean);for(const o of r)if(s.length>=3&&W_(s,o)||s.length>=4&&G_(s,o,1))return!0;return!1}function J_(e,n){const s=n.toLowerCase().trim().split(/\s+/).filter(Boolean);return s.length===0?e:e.filter(a=>{const r=`${a.provider} ${a.id} ${a.name}`;return s.every(o=>K_(o,r))})}function Ms({models:e,value:n,onChange:s,placeholder:a="Select a model…",disabled:r=!1,id:o,label:l,favoriteProviders:c=[],onToggleFavorite:d,favoriteModels:u=[],onToggleModelFavorite:h,noChangeValue:m,noChangeLabel:f="No change"}){const[p,g]=i.useState(!1),[w,v]=i.useState(""),[b,y]=i.useState(0),[N,S]=i.useState(null),[C,x]=i.useState(null),k=i.useRef(null),R=i.useRef(null),z=i.useRef(null),_=i.useRef(null),A=i.useRef(null),X=i.useMemo(()=>J_(e,w),[e,w]),H=i.useMemo(()=>X.reduce((ie,ve)=>((ie[ve.provider]??=[]).push(ve),ie),{}),[X]),M=i.useMemo(()=>{const ie=[];for(const ve of u){const ne=ve.indexOf("/");if(ne===-1)continue;const L=ve.slice(0,ne),Y=ve.slice(ne+1),ue=X.find(B=>B.provider===L&&B.id===Y);ue&&ie.push({model:ue,fullId:ve})}return ie},[u,X]),T=i.useMemo(()=>{const ie=Object.entries(H),ve=new Set(c);return ie.sort(([ne],[L])=>{const Y=ve.has(ne),ue=ve.has(L);if(Y&&!ue)return-1;if(!Y&&ue)return 1;if(Y&&ue){const B=c.indexOf(ne),xe=c.indexOf(L);if(B!==xe)return B-xe}return ne.localeCompare(L)})},[H,c]),F=typeof m=="string"&&m.length>0,W=i.useMemo(()=>{if(!n||F&&n===m)return null;const ie=n.indexOf("/");return ie===-1?null:n.slice(0,ie)},[F,m,n]),oe=i.useMemo(()=>{const ie=[];return F&&ie.push({type:"no-change",value:m,label:f}),ie.push({type:"default",value:"",label:"Use default"}),ie},[F,f,m]),D=i.useMemo(()=>{const ie=[...oe];for(const{model:ve,fullId:ne}of M)ie.push({type:"favorite",value:ne,label:ve.name,provider:ve.provider});return T.forEach(([ve,ne])=>{ie.push({type:"provider",value:`__group_${ve}`,label:ve,provider:ve}),ne.forEach(L=>{ie.push({type:"model",value:`${L.provider}/${L.id}`,label:L.name,provider:L.provider})})}),ie},[M,T,oe]),E=i.useMemo(()=>{if(F&&n===m)return f;if(!n)return"Use default";const ie=n.indexOf("/");if(ie===-1)return n;const ve=n.slice(0,ie),ne=n.slice(ie+1);return e.find(Y=>Y.provider===ve&&Y.id===ne)?.name||n},[F,f,m,n,e]),P=i.useMemo(()=>D.findIndex(ie=>ie.value===n),[D,n]),$=i.useCallback(()=>{const ie=window.visualViewport;return ie&&ie.height>0&&ie.width>0?{width:ie.width,height:ie.height,offsetTop:ie.offsetTop,offsetLeft:ie.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),j=i.useCallback(()=>{const{height:ie}=$(),ve=typeof window.matchMedia=="function",ne=ve?window.matchMedia("(max-width: 640px)").matches:!1,L=ve?window.matchMedia("(max-width: 768px)").matches:!1;return ie<=0?320:ne?Math.min(ie*.6,360):L?Math.min(ie*.7,420):320},[$]),q=i.useCallback(()=>{const ie=R.current;if(!ie)return;const ve=ie.getBoundingClientRect(),{width:ne,height:L,offsetTop:Y,offsetLeft:ue}=$(),B=16,xe=16,je=4,se=j(),Ue=ve.bottom-Y,De=ve.top-Y,dt=ve.left-ue,Pe=L-Ue,ce=De,Ee=Math.max(Pe-xe-je,160),Oe=Math.max(ce-xe-je,160),ht=Pe<se&&ce>Pe,Ve=Math.max(Math.min(ht?Oe:Ee,se),160),ge=Math.min(ve.width,ne-B*2),me=Math.min(Math.max(dt,B),ne-B-ge)+ue,$e=ht?Math.max(xe+Y,De-Ve-je+Y):Math.min(Ue+je+Y,L+Y-xe-Ve);S({top:$e,left:me,width:ge,maxHeight:Ve})},[$,j]);i.useEffect(()=>{x(document.body)},[]);const le=i.useRef(!1);i.useEffect(()=>{if(!p){le.current=!1;return}if(le.current||D.length===0)return;const ie=D.findIndex((ve,ne)=>ne>=(P>=0?P:0)&&ve.type!=="provider");y(ie>=0?ie:0),le.current=!0},[p,D,P]),i.useEffect(()=>{p&&le.current&&(y(0),A.current&&(A.current.scrollTop=0))},[w,p]),i.useEffect(()=>{if(!p)return;q();const ie=requestAnimationFrame(()=>_.current?.focus());return()=>cancelAnimationFrame(ie)},[p,q]),i.useEffect(()=>{if(!p)return;const ie=()=>q();window.addEventListener("resize",ie),window.addEventListener("scroll",ie,!0);const ve=window.visualViewport;return ve&&(ve.addEventListener("resize",ie),ve.addEventListener("scroll",ie)),()=>{window.removeEventListener("resize",ie),window.removeEventListener("scroll",ie,!0),ve&&(ve.removeEventListener("resize",ie),ve.removeEventListener("scroll",ie))}},[p,q]),i.useEffect(()=>{if(!p)return;const ie=ve=>{const ne=ve.target,L=k.current?.contains(ne),Y=z.current?.contains(ne);!L&&!Y&&(g(!1),v(""))};return document.addEventListener("mousedown",ie),()=>document.removeEventListener("mousedown",ie)},[p]);const fe=i.useCallback(ie=>{switch(ie.key){case"ArrowDown":if(ie.preventDefault(),!p)g(!0);else{let ve=b;for(let ne=1;ne<=D.length;ne++){const L=(b+ne)%D.length;if(D[L]?.type!=="provider"){ve=L;break}}y(ve)}break;case"ArrowUp":if(ie.preventDefault(),p){let ve=b;for(let ne=1;ne<=D.length;ne++){const L=(b-ne+D.length)%D.length;if(D[L]?.type!=="provider"){ve=L;break}}y(ve)}break;case"Enter":if(ie.preventDefault(),p){const ve=D[b];ve&&ve.type!=="provider"&&ve.type!=="favorite"&&(s(ve.value),g(!1),v(""))}else g(!0);break;case"Escape":ie.preventDefault(),g(!1),v("");break;case"Tab":p&&(g(!1),v(""));break}},[p,b,D,s]),Ce=i.useCallback(ie=>{s(ie),g(!1),v("")},[s]),Ae=i.useCallback(()=>{v(""),_.current?.focus()},[]),re=i.useCallback(()=>{r||g(ie=>!ie)},[r]);i.useEffect(()=>{if(p&&A.current){const ie=A.current.querySelector(`[data-index="${b}"]`);ie&&typeof ie.scrollIntoView=="function"&&ie.scrollIntoView({block:"nearest"})}},[b,p]);const Z=w.length>0,pe=p&&N?t.jsxs("div",{ref:z,className:"model-combobox-dropdown model-combobox-dropdown--portal",role:"listbox","data-testid":"model-combobox-portal",onKeyDown:fe,style:{top:`${N.top}px`,left:`${N.left}px`,width:`${N.width}px`,maxHeight:`${N.maxHeight}px`},children:[t.jsxs("div",{className:"model-combobox-search-wrapper",children:[t.jsx("input",{ref:_,type:"text",className:"model-combobox-search",placeholder:"Filter models…",value:w,onChange:ie=>v(ie.target.value),onClick:ie=>ie.stopPropagation()}),Z&&t.jsx("button",{type:"button",className:"model-combobox-clear",onClick:Ae,"aria-label":"Clear filter",children:"×"})]}),t.jsxs("div",{className:"model-combobox-results-count",children:[X.length," model",X.length!==1?"s":""]}),t.jsxs("div",{ref:A,className:"model-combobox-list",children:[oe.map((ie,ve)=>t.jsx("div",{"data-index":ve,className:`model-combobox-option ${b===ve?"model-combobox-option--highlighted":""} ${n===ie.value?"model-combobox-option--selected":""}`,onClick:()=>Ce(ie.value),onMouseEnter:()=>y(ve),role:"option","aria-selected":n===ie.value,children:t.jsx("span",{className:"model-combobox-option-text model-combobox-option-text--default",children:ie.label})},`${ie.type}-${ie.value}`)),M.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"model-combobox-divider"}),M.map(({model:ie,fullId:ve},ne)=>{const L=ne+oe.length,Y=b===L,ue=n===ve;return t.jsxs("div",{"data-index":L,className:`model-combobox-option model-combobox-option--favorite ${Y?"model-combobox-option--highlighted":""} ${ue?"model-combobox-option--selected":""}`,onClick:()=>Ce(ve),onMouseEnter:()=>y(L),role:"option","aria-selected":ue,children:[t.jsxs("span",{className:"model-combobox-option-main",children:[t.jsx("span",{className:"model-combobox-option-icon",children:t.jsx(Kn,{provider:ie.provider,size:"sm"})}),t.jsx("span",{className:"model-combobox-option-text",children:ie.name})]}),t.jsx("span",{className:"model-combobox-option-id",children:ie.id}),h&&t.jsx("button",{type:"button",className:"model-combobox-option-favorite model-combobox-option-favorite--active",onClick:B=>{B.stopPropagation(),h(ve)},title:"Remove from favorites","aria-label":`Remove ${ie.name} from favorites`,children:"★"})]},ve)}),t.jsx("div",{className:"model-combobox-divider"})]}),T.map(([ie,ve])=>{const ne=D.findIndex(ue=>ue.value===`__group_${ie}`),L=c.includes(ie),Y=ve.filter(ue=>{const B=`${ue.provider}/${ue.id}`;return!u.includes(B)});return Y.length===0?null:t.jsxs("div",{className:"model-combobox-group",children:[t.jsxs("div",{className:"model-combobox-optgroup","data-index":ne,children:[t.jsx(Kn,{provider:ie,size:"sm"}),t.jsx("span",{className:"model-combobox-optgroup-text",children:ie}),d&&t.jsx("button",{type:"button",className:`model-combobox-optgroup-favorite ${L?"model-combobox-optgroup-favorite--active":""}`,onClick:ue=>{ue.stopPropagation(),d(ie)},title:L?"Remove from favorites":"Add to favorites","aria-label":L?`Remove ${ie} from favorites`:`Add ${ie} to favorites`,children:"★"})]}),Y.map(ue=>{const B=`${ue.provider}/${ue.id}`,xe=D.findIndex(De=>De.value===B),je=b===xe,se=n===B,Ue=u.includes(B);return t.jsxs("div",{"data-index":xe,className:`model-combobox-option ${je?"model-combobox-option--highlighted":""} ${se?"model-combobox-option--selected":""}`,onClick:()=>Ce(B),onMouseEnter:()=>y(xe),role:"option","aria-selected":se,children:[t.jsx("span",{className:"model-combobox-option-text",children:ue.name}),t.jsx("span",{className:"model-combobox-option-id",children:ue.id}),h&&t.jsx("button",{type:"button",className:`model-combobox-option-favorite ${Ue?"model-combobox-option-favorite--active":""}`,onClick:De=>{De.stopPropagation(),h(B)},title:Ue?"Remove from favorites":"Add to favorites","aria-label":Ue?`Remove ${ue.name} from favorites`:`Add ${ue.name} to favorites`,children:Ue?"★":"☆"})]},B)})]},ie)}),X.length===0&&Z&&t.jsxs("div",{className:"model-combobox-no-results",children:["No models match '",w,"'"]})]})]}):null;return t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:k,className:"model-combobox",onKeyDown:fe,children:t.jsxs("button",{ref:R,type:"button",id:o,className:"model-combobox-trigger",onClick:re,disabled:r,"aria-haspopup":"listbox","aria-expanded":p,"aria-label":l,children:[W&&t.jsx("span",{className:"model-combobox-trigger-icon",children:t.jsx(Kn,{provider:W,size:"sm"})}),t.jsx("span",{className:"model-combobox-trigger-text",children:E||a}),t.jsx("span",{className:"model-combobox-trigger-arrow",children:"▼"})]})}),C&&pe?Ha.createPortal(pe,C):null]})}function gm(e,n){return typeof n!="string"||n.length===0?e:`kb:${n}:${e}`}function Gn(e,n){if(typeof window>"u")return null;const s=window.localStorage?.getItem;return typeof s!="function"?null:s.call(window.localStorage,gm(e,n))}function cs(e,n,s){if(typeof window>"u")return;const a=window.localStorage?.setItem;typeof a=="function"&&a.call(window.localStorage,gm(e,s),n)}function Qa(e,n){if(typeof window>"u")return;const s=window.localStorage?.removeItem;typeof s=="function"&&s.call(window.localStorage,gm(e,n))}const Y_=1e4,Q_=1e3;function Pc(){const[e,n]=i.useState([]),[s,a]=i.useState(!0),[r,o]=i.useState(null),l=i.useRef(null),c=i.useRef(0),d=i.useCallback(async()=>{try{o(null);const b=await ac();n(b)}catch(b){o(b instanceof Error?b.message:"Failed to fetch nodes")}},[]);i.useEffect(()=>{let b=!1;async function y(){a(!0);try{const S=await ac();b||(n(S),o(null))}catch(S){b||o(S instanceof Error?S.message:"Failed to fetch nodes")}finally{b||a(!1)}}y();const N=()=>{if(document.visibilityState!=="visible")return;const S=Date.now();S-c.current<Q_||(c.current=S,d())};return document.addEventListener("visibilitychange",N),()=>{b=!0,document.removeEventListener("visibilitychange",N)}},[d]),i.useEffect(()=>{if(!s)return l.current=setInterval(()=>{d()},Y_),()=>{l.current&&(clearInterval(l.current),l.current=null)}},[s,d]);const u=i.useCallback(async b=>{const{projectMappings:y,...N}=b,S=await x1(N);if(y.length>0)try{await oE(S.id,y)}catch(C){const x=C instanceof Error?C.message:"Failed to persist project mappings";let k="";try{await _h(S.id)}catch(R){k=R instanceof Error?R.message:"Failed to unregister node after mapping failure"}throw await d(),k?new Error(`${x}. Cleanup also failed: ${k}`):new Error(x)}return await d(),S},[d]),h=i.useCallback(async(b,y)=>{const N=await y1(b,y);return n(S=>S.map(C=>C.id===b?N:C)),N},[]),m=i.useCallback(async b=>{await _h(b),n(y=>y.filter(N=>N.id!==b))},[]),f=i.useCallback(async b=>{const y=await N1(b);n(N=>N.map(S=>S.id===b?{...S,status:y.status,updatedAt:y.checkedAt}:S))},[]),p=i.useCallback(b=>w1(b),[]),g=i.useCallback(async(b,y)=>{const N=await k1(b,y);return n(S=>S.map(C=>C.id===b?{...C,dockerConfig:N}:C)),N},[]),w=i.useCallback(async b=>{const y=await j1(b);return"persistedVersion"in y?y:{persistedVersion:0,deployedVersion:null,needsRecreate:!1}},[]),v=i.useCallback(async b=>v1(b),[]);return{nodes:e,loading:s,error:r,refresh:d,register:u,update:h,unregister:m,healthCheck:f,fetchDockerConfig:p,patchDockerConfig:g,fetchDockerDiff:w,discoverRemoteProjects:v}}const uo="kb-quick-entry-text",X_=["image/png","image/jpeg","image/gif","image/webp"];function Z_(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}function pd(e,n){return e&&n?`${e}/${n}`:""}function fd(e){if(!e)return{provider:void 0,modelId:void 0};const n=e.indexOf("/");return n===-1?{provider:void 0,modelId:void 0}:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Tx({onCreate:e,addToast:n,tasks:s=[],availableModels:a,onPlanningMode:r,onSubtaskBreakdown:o,projectId:l,autoExpand:c=!0,favoriteProviders:d,favoriteModels:u,onToggleFavorite:h,onToggleModelFavorite:m}){const[f,p]=i.useState(()=>typeof window<"u"&&Gn(uo,l)||""),[g,w]=i.useState(!1),[v,b]=i.useState(!1),[y,N]=i.useState(!1),S=i.useRef(null),C=i.useRef(null),x=i.useRef(!1),k=i.useRef(l),[R,z]=i.useState([]),_=i.useRef([]),[A,X]=i.useState([]),[H,M]=i.useState(!1),[T,F]=i.useState(""),[W,oe]=i.useState(null),[D,E]=i.useState([]),[P,$]=i.useState(void 0),[j,q]=i.useState(!1),[le,fe]=i.useState(!1),[Ce,Ae]=i.useState(!1),[re,Z]=i.useState(!1),[pe,ie]=i.useState(!1),[ve,ne]=i.useState(null),[L,Y]=i.useState(void 0),[ue,B]=i.useState(void 0),[xe,je]=i.useState(void 0),[se,Ue]=i.useState(void 0),[De,dt]=i.useState(void 0),[Pe,ce]=i.useState(void 0),Ee=i.useRef(null),Oe=i.useRef(null),ht=i.useRef(null),Ve=i.useRef(null),ge=i.useRef(null),me=i.useRef(null),$e=i.useRef(null),mt=i.useRef(null),[jt,tt]=i.useState(null),[bt,Ie]=i.useState(null),[Xe,rt]=i.useState(null),[It,_t]=i.useState(null),We=i.useRef(null),J=i.useRef(null),[ke,ot]=i.useState(null),[ye]=i.useState(()=>typeof document<"u"?document.body:null),[it,He]=i.useState(!1),[he,et]=i.useState(null),[vt,Ct]=i.useState(a??[]),[Et,Tt]=i.useState([]),[Jt,cn]=i.useState([]),[Vt,hn]=i.useState(null),[dn,An]=i.useState(void 0),[nn,Dn]=i.useState(!1),[Nn,zt]=i.useState(Ps),[sn,xn]=i.useState(void 0),{nodes:Xt}=Pc(),[Yt,rn]=i.useState(!1),[Zt,en]=i.useState(!1),un=i.useRef(null),Qt=i.useRef(null),[pn,Dt]=i.useState(null),Bt=d??Et,be=u??Jt,Re=!e;i.useEffect(()=>{if(a)Ct(a),He(!1),et(null);else{let ee=!1;return He(!0),et(null),Ws().then(_e=>{ee||(Ct(_e.models),d||Tt(_e.favoriteProviders),u||cn(_e.favoriteModels))}).catch(_e=>{ee||et(Me(_e)||"Failed to load models")}).finally(()=>{ee||He(!1)}),Rc(l).then(_e=>{ee||hn(_e)}).catch(()=>{}),()=>{ee=!0}}},[a,d,u,l]);const nt=pd(L,ue),ut=pd(xe,se),Ye=pd(De,Pe),lt=!!(L&&ue),wt=!!(xe&&se),Q=!!(De&&Pe),ae=Number(lt)+Number(wt)+Number(Q),Ke=dn?Vt?.modelPresets?.find(ee=>ee.id===dn)?.name??"Models":ae>0?`${ae} model${ae===1?"":"s"}`:"Models",gt=i.useCallback((ee,_e)=>{if(!ee||!_e)return"Using default";const ft=vt.find(Ot=>Ot.provider===ee&&Ot.id===_e);return ft?`${ft.provider}/${ft.id}`:`${ee}/${_e}`},[vt]);i.useEffect(()=>{p(Gn(uo,l)||"")},[l]),i.useEffect(()=>{typeof window<"u"&&cs(uo,f,l)},[f,l]),i.useEffect(()=>{k.current!==l&&(k.current=l,E([]),$(void 0),oe(null),q(!1),tt(null))},[l]),i.useEffect(()=>{typeof window<"u"&&localStorage.removeItem("kb-quick-entry-expanded")},[]),i.useEffect(()=>{_.current=R},[R]),i.useEffect(()=>()=>{_.current.forEach(ee=>URL.revokeObjectURL(ee.previewUrl))},[]);const Wt=i.useCallback(()=>{const ee=S.current;if(!ee)return;ee.style.height="auto";const _e=Math.min(ee.scrollHeight,200);ee.style.height=`${_e}px`},[]);i.useEffect(()=>{v&&Wt()},[f,v,Wt]),i.useEffect(()=>{if(!g&&f===""&&S.current){const ee=setTimeout(()=>{S.current?.focus()},0);return()=>clearTimeout(ee)}},[g,f]),i.useEffect(()=>{H||F("")},[H]),i.useEffect(()=>{if(!Yt)return;const ee=_e=>{const ft=_e.target,Ot=un.current?.contains(ft),O=Qt.current?.contains(ft);!Ot&&!O&&rn(!1)};return document.addEventListener("mousedown",ee),()=>document.removeEventListener("mousedown",ee)},[Yt]),i.useEffect(()=>{if(!pe)return;const ee=_e=>{const ft=_e.target,Ot=Ee.current?.contains(ft),O=Oe.current?.contains(ft),qe=ft instanceof Element&&ft.closest?.(".model-combobox-dropdown--portal")!=null;!Ot&&!O&&!qe&&(ie(!1),ne(null))};return document.addEventListener("mousedown",ee),()=>document.removeEventListener("mousedown",ee)},[pe]),i.useEffect(()=>{if(!le)return;const ee=_e=>{const ft=_e.target;ge.current?.contains(ft)||me.current?.contains(ft)||(fe(!1),Ie(null))};return document.addEventListener("mousedown",ee),()=>document.removeEventListener("mousedown",ee)},[le]),i.useEffect(()=>{if(!j)return;const ee=_e=>{const ft=_e.target;ht.current?.contains(ft)||Ve.current?.contains(ft)||(q(!1),tt(null))};return document.addEventListener("mousedown",ee),()=>document.removeEventListener("mousedown",ee)},[j]),i.useEffect(()=>{if(!Ce)return;const ee=_e=>{const ft=_e.target;$e.current?.contains(ft)||mt.current?.contains(ft)||(Ae(!1),rt(null))};return document.addEventListener("mousedown",ee),()=>document.removeEventListener("mousedown",ee)},[Ce]);const fn=i.useCallback(()=>{R.forEach(ee=>URL.revokeObjectURL(ee.previewUrl)),z([]),C.current&&(C.current.value=""),p(""),X([]),oe(null),q(!1),tt(null),fe(!1),Ie(null),Ae(!1),rt(null),Y(void 0),B(void 0),je(void 0),Ue(void 0),dt(void 0),ce(void 0),An(void 0),Dn(!1),zt(Ps),xn(void 0),M(!1),ie(!1),_t(null),ne(null),rn(!1),en(!1),b(!1),N(!1),x.current=!0,S.current&&(S.current.style.height="auto"),typeof window<"u"&&Qa(uo,l)},[R,l]),Rn=i.useCallback(ee=>{if(!ee||ee.length===0)return;const _e=[];for(let ft=0;ft<ee.length;ft++){const Ot=ee[ft];X_.includes(Ot.type)&&_e.push({file:Ot,previewUrl:URL.createObjectURL(Ot)})}_e.length>0&&z(ft=>[...ft,..._e])},[]),wn=i.useCallback(ee=>{g||Rn(ee.clipboardData?.files)},[Rn,g]),mn=i.useCallback(ee=>{z(_e=>{const ft=_e[ee];return ft&&URL.revokeObjectURL(ft.previewUrl),_e.filter((Ot,O)=>O!==ee)})},[]),Un=i.useCallback(async()=>{const ee=f.trim();if(!ee||g||!e)return;const _e=f;w(!0),p("");try{const ft=await e({description:ee,column:"triage",dependencies:A.length?A:void 0,...W?{assignedAgentId:W}:{},modelPresetId:dn,modelProvider:lt?L:void 0,modelId:lt?ue:void 0,validatorModelProvider:wt?xe:void 0,validatorModelId:wt?se:void 0,planningModelProvider:Q?De:void 0,planningModelId:Q?Pe:void 0,...nn?{executionMode:"fast"}:{},priority:Nn,nodeId:sn});if(ft&&R.length>0){const Ot=[];for(const O of R)try{await Ic(ft.id,O.file,l)}catch{Ot.push(O.file.name)}Ot.length>0&&n(`Failed to upload: ${Ot.join(", ")}`,"error")}fn()}catch(ft){p(_e),n(Me(ft)||"Failed to create task","error")}finally{w(!1)}},[f,g,e,A,W,lt,L,ue,wt,xe,se,Q,De,Pe,R,l,n,fn,nn,Nn,sn]),de=i.useCallback(ee=>{if(ee.key==="Enter"){if(ee.shiftKey&&v)return;ee.preventDefault(),Un()}else if(ee.key==="Escape"){if(ee.preventDefault(),ve){ne(null);return}if(pe){ie(!1),_t(null);return}if(H){M(!1);return}if(Yt){rn(!1);return}if(le){fe(!1),Ie(null);return}if(Ce){Ae(!1),rt(null);return}if(j){q(!1),tt(null);return}f.trim()&&(p(""),S.current&&(S.current.style.height="auto"),typeof window<"u"&&Qa(uo,l)),b(!1),N(!1),S.current?.blur()}},[Un,f,v,H,j,le,pe,ve,Yt,Ce,l,N]),st=i.useCallback(()=>{x.current&&(x.current=!1)},[]),ct=i.useCallback(()=>{c&&b(!0)},[c]),kt=i.useCallback(ee=>{X(_e=>_e.includes(ee)?_e.filter(ft=>ft!==ee):[..._e,ee])},[]),G=i.useCallback(()=>{const ee=window.visualViewport;return ee&&ee.width>0&&ee.height>0?{width:ee.width,height:ee.height,offsetTop:ee.offsetTop,offsetLeft:ee.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),ze=i.useCallback(()=>{const ee=Ee.current;if(!ee)return;const _e=ee.getBoundingClientRect(),{width:ft,height:Ot,offsetTop:O,offsetLeft:qe}=G(),Ze=16,Je=16,pt=4,At=ft<=768,Lt=Math.min(At?Ot*.6:Ot*.5,360),ln=Math.max(_e.width*1.35,320),kn=At?Math.min(ft-Ze*2,360):ln,te=Math.min(kn,Math.max(ft-Ze*2,240)),Fe=_e.top-O,Ge=_e.bottom-O,Ft=_e.left-qe,tn=Ot-Ge,Mn=Fe,is=Math.max(tn-Je-pt,160),Vn=Math.max(Mn-Je-pt,160),as=tn<Lt&&Mn>tn,ps=Math.max(Math.min(as?Vn:is,Lt),160),Ss=Math.min(Math.max(Ft,Ze),ft-Ze-te)+qe,Ma=as?Math.max(Je+O,Fe-ps-pt+O):Math.min(Ge+pt+O,Ot+O-Je-ps);_t({top:Ma,left:Ss,width:te,maxHeight:ps})},[G]),Ut=i.useCallback(()=>{const ee=un.current?.querySelector(".refine-button");if(!ee)return;const _e=ee.getBoundingClientRect(),{width:ft,height:Ot,offsetTop:O,offsetLeft:qe}=G(),Ze=8,Je=12,pt=4,At=Math.min(200,Math.max(Ot-Je*2,160)),Lt=Math.min(200,ft-Ze*2),ln=_e.top-O,kn=_e.bottom-O,te=_e.left-qe,Fe=Ot-kn,Ge=ln,Ft=Fe<At&&Ge>Fe,tn=Math.min(Math.max(te,Ze),ft-Ze-Lt)+qe,Mn=Ft?Math.max(Je+O,ln-At-pt+O):Math.min(kn+pt+O,Ot+O-Je-At);Dt({top:Mn,left:tn})},[G]),gn=i.useCallback(()=>{const ee=We.current;if(!ee)return;const _e=ee.getBoundingClientRect(),{width:ft,height:Ot,offsetTop:O,offsetLeft:qe}=G(),Ze=16,Je=16,pt=4,At=ft<=768,Lt=Math.min(At?Ot*.6:Ot*.5,320),ln=At?Math.min(ft-Ze*2,360):Math.max(_e.width,280),kn=Math.min(ln,Math.max(ft-Ze*2,240)),te=_e.top-O,Fe=_e.bottom-O,Ge=_e.left-qe,Ft=Ot-Fe,tn=te,Mn=Math.max(Ft-Je-pt,200),is=Math.max(tn-Je-pt,200),Vn=Ft<Lt&&tn>Ft,as=Math.max(Math.min(Vn?is:Mn,Lt),200),ps=Math.min(Math.max(Ge,Ze),ft-Ze-kn)+qe,Ss=Vn?Math.max(Je+O,te-as-pt+O):Math.min(Fe+pt+O,Ot+O-Je-as);ot({top:Ss,left:ps,width:kn,maxHeight:as})},[G]),In=i.useCallback(()=>{const ee=ht.current?.querySelector("button");if(!ee)return;const _e=ee.getBoundingClientRect(),{width:ft,height:Ot,offsetTop:O,offsetLeft:qe}=G(),Ze=16,Je=16,pt=4,At=ft<=768,Lt=Math.min(At?Ot*.6:Ot*.5,320),ln=At?Math.min(ft-Ze*2,280):Math.max(_e.width,240),kn=Math.min(ln,Math.max(ft-Ze*2,200)),te=_e.top-O,Fe=_e.bottom-O,Ge=_e.left-qe,Ft=Ot-Fe,tn=te,Mn=Math.max(Ft-Je-pt,160),is=Math.max(tn-Je-pt,160),Vn=Ft<Lt&&tn>Ft,as=Math.max(Math.min(Vn?is:Mn,Lt),160),ps=Math.min(Math.max(Ge,Ze),ft-Ze-kn)+qe,Ss=Vn?Math.max(Je+O,te-as-pt+O):Math.min(Fe+pt+O,Ot+O-Je-as);tt({top:Ss,left:ps,width:kn,maxHeight:as})},[G]),Ne=i.useCallback(()=>{const ee=ge.current?.querySelector("button");if(!ee)return;const _e=ee.getBoundingClientRect(),{width:ft,height:Ot,offsetTop:O,offsetLeft:qe}=G(),Ze=16,Je=16,pt=4,At=ft<=768,Lt=Math.min(At?Ot*.6:Ot*.5,320),ln=At?Math.min(ft-Ze*2,280):Math.max(_e.width,240),kn=Math.min(ln,Math.max(ft-Ze*2,200)),te=_e.top-O,Fe=_e.bottom-O,Ge=_e.left-qe,Ft=Ot-Fe,tn=te,Mn=Math.max(Ft-Je-pt,160),is=Math.max(tn-Je-pt,160),Vn=Ft<Lt&&tn>Ft,as=Math.max(Math.min(Vn?is:Mn,Lt),160),ps=Math.min(Math.max(Ge,Ze),ft-Ze-kn)+qe,Ss=Vn?Math.max(Je+O,te-as-pt+O):Math.min(Fe+pt+O,Ot+O-Je-as);Ie({top:Ss,left:ps,width:kn,maxHeight:as})},[G]),xt=i.useCallback(()=>{const ee=$e.current?.querySelector("button");if(!ee)return;const _e=ee.getBoundingClientRect(),{width:ft,height:Ot,offsetTop:O,offsetLeft:qe}=G(),Ze=16,Je=16,pt=4,At=220,Lt=Math.min(Math.max(_e.width,200),Math.max(ft-Ze*2,200)),ln=_e.top-O,kn=_e.bottom-O,te=_e.left-qe,Fe=Ot-kn,Ge=ln,Ft=Math.max(Fe-Je-pt,160),tn=Math.max(Ge-Je-pt,160),Mn=Fe<At&&Ge>Fe,is=Math.max(Math.min(Mn?tn:Ft,At),160),Vn=Math.min(Math.max(te,Ze),ft-Ze-Lt)+qe,as=Mn?Math.max(Je+O,ln-is-pt+O):Math.min(kn+pt+O,Ot+O-Je-is);rt({top:as,left:Vn,width:Lt,maxHeight:is})},[G]);i.useEffect(()=>{if(!pe)return;const ee=()=>ze();window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0);const _e=window.visualViewport;return _e&&(_e.addEventListener("resize",ee),_e.addEventListener("scroll",ee)),()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),_e&&(_e.removeEventListener("resize",ee),_e.removeEventListener("scroll",ee))}},[pe,ze]),i.useEffect(()=>{if(!Yt)return;const ee=()=>Ut();window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0);const _e=window.visualViewport;return _e&&(_e.addEventListener("resize",ee),_e.addEventListener("scroll",ee)),()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),_e&&(_e.removeEventListener("resize",ee),_e.removeEventListener("scroll",ee))}},[Yt,Ut]),i.useEffect(()=>{if(!H)return;const ee=()=>gn();window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0);const _e=window.visualViewport;return _e&&(_e.addEventListener("resize",ee),_e.addEventListener("scroll",ee)),()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),_e&&(_e.removeEventListener("resize",ee),_e.removeEventListener("scroll",ee))}},[H,gn]),i.useEffect(()=>{if(!j)return;const ee=()=>In();window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0);const _e=window.visualViewport;return _e&&(_e.addEventListener("resize",ee),_e.addEventListener("scroll",ee)),()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),_e&&(_e.removeEventListener("resize",ee),_e.removeEventListener("scroll",ee))}},[j,In]),i.useEffect(()=>{if(!le)return;const ee=()=>Ne();window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0);const _e=window.visualViewport;return _e&&(_e.addEventListener("resize",ee),_e.addEventListener("scroll",ee)),()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),_e&&(_e.removeEventListener("resize",ee),_e.removeEventListener("scroll",ee))}},[le,Ne]),i.useEffect(()=>{if(!Ce)return;const ee=()=>xt();window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0);const _e=window.visualViewport;return _e&&(_e.addEventListener("resize",ee),_e.addEventListener("scroll",ee)),()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),_e&&(_e.removeEventListener("resize",ee),_e.removeEventListener("scroll",ee))}},[Ce,xt]);const Mt=i.useCallback(ee=>{const _e=fd(ee);dt(_e.provider),ce(_e.modelId)},[]),Gt=i.useCallback(ee=>{const _e=fd(ee);Y(_e.provider),B(_e.modelId)},[]),Sn=i.useCallback(ee=>{const _e=fd(ee);je(_e.provider),Ue(_e.modelId)},[]),on=i.useCallback(async ee=>{if(h){h(ee);return}const _e=Et,Ot=_e.includes(ee)?_e.filter(O=>O!==ee):[ee,..._e];Tt(Ot);try{await Jn({favoriteProviders:Ot,favoriteModels:Jt})}catch{Tt(_e)}},[Et,Jt,h]),qt=i.useCallback(async ee=>{if(m){m(ee);return}const _e=Jt,Ot=_e.includes(ee)?_e.filter(O=>O!==ee):[ee,..._e];cn(Ot);try{await Jn({favoriteProviders:Et,favoriteModels:Ot})}catch{cn(_e)}},[Jt,Et,m]),Pt=i.useCallback(()=>{const ee=f.trim();if(!ee){n("Enter a description first","error");return}r?.(ee),fn()},[f,r,n,fn]),Hn=i.useCallback(()=>{const ee=f.trim();if(!ee){n("Enter a description first","error");return}o?.(ee),fn()},[f,o,n,fn]),qn=i.useCallback(()=>{Un()},[Un]),ns=i.useCallback(async ee=>{const _e=f.trim();if(!(!_e||Zt)){rn(!1),en(!0);try{const ft=await Qb(_e,ee,l);p(ft),n("Description refined with AI","success"),S.current&&(S.current.style.height="auto",S.current.style.height=`${Math.min(S.current.scrollHeight,200)}px`)}catch(ft){const Ot=Xb(ft);n(Ot,"error")}finally{en(!1)}}},[f,Zt,n,l]),ss=(ee,_e)=>ee.length>_e?ee.slice(0,_e)+"…":ee,ms=i.useCallback(async()=>{if(a){Ct(a),et(null),He(!1);return}He(!0),et(null);try{const ee=await Ws();Ct(ee.models),d||Tt(ee.favoriteProviders),u||cn(ee.favoriteModels)}catch(ee){et(Me(ee)||"Failed to load models")}finally{He(!1)}},[a,d,u]),ys=i.useCallback(async()=>{if(D.length>0&&P===l){q(!0),In();return}Z(!0);try{const ee=await Yr(void 0,l);E(ee),$(l),q(!0),In()}catch(ee){const _e=Me(ee);n(_e?`Failed to load agents: ${_e}`:"Failed to load agents","error"),q(!1)}finally{Z(!1)}},[D.length,P,l,n,In]),On=(W?D.find(ee=>ee.id===W):void 0)?.name??W,ws=sn?Xt.find(ee=>ee.id===sn):void 0,Rs=y,Ns=i.useCallback(()=>{N(ee=>{const _e=!ee;return b(_e),_e})},[]);return t.jsxs("div",{className:`quick-entry-box ${y?"quick-entry-box--expanded":"quick-entry-box--collapsed"}`,"data-testid":"quick-entry-box",children:[t.jsx("div",{className:"description-with-refine",children:t.jsxs("div",{className:"quick-entry-main-row",children:[t.jsx("div",{className:"quick-entry-textarea-wrap",children:t.jsx("textarea",{ref:S,className:`quick-entry-input ${v?"quick-entry-input--expanded":""}`,placeholder:g?"Creating...":"Add a task...",value:f,onChange:ee=>p(ee.target.value),onKeyDown:de,onPaste:wn,onFocus:ct,onBlur:st,disabled:g||Re,"data-testid":"quick-entry-input",rows:2,"aria-controls":"quick-entry-controls","aria-expanded":y})}),t.jsx("button",{type:"button",className:"btn btn-sm quick-entry-toggle",onClick:Ns,"aria-expanded":y,"aria-controls":"quick-entry-controls","data-testid":"quick-entry-toggle",title:y?"Collapse":"Expand",children:y?t.jsx(pi,{size:14}):t.jsx(jn,{size:14})})]})}),t.jsxs("div",{id:"quick-entry-controls",className:"quick-entry-controls",hidden:!Rs,"aria-hidden":!Rs,children:[Rs&&!g&&t.jsxs("div",{className:"quick-entry-actions","data-testid":"quick-entry-actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Pt,onMouseDown:ee=>ee.preventDefault(),disabled:!f.trim(),"data-testid":"plan-button",title:"Open planning mode with current description",children:[t.jsx(Ui,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Plan"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Hn,onMouseDown:ee=>ee.preventDefault(),disabled:!f.trim(),"data-testid":"subtask-button",title:"Break down into AI-generated subtasks",children:[t.jsx(Cc,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Subtask"]}),t.jsxs("div",{className:"refine-trigger-wrap",ref:un,children:[t.jsxs("button",{type:"button",className:`btn btn-sm refine-button ${Zt?"refine-button--loading":""}`,onClick:()=>{rn(ee=>{const _e=!ee;return _e?Ut():Dt(null),_e})},disabled:!f.trim()||Zt,"data-testid":"refine-button",title:"Refine description with AI",children:[t.jsx(fs,{size:12,style:{verticalAlign:"middle"}}),Zt?"Refining...":"Refine"]}),Yt&&ye&&pn&&Ha.createPortal(t.jsxs("div",{ref:Qt,className:"refine-menu refine-menu--portal",onMouseDown:ee=>ee.preventDefault(),style:{position:"fixed",top:`${pn.top}px`,left:`${pn.left}px`},children:[t.jsxs("div",{className:"refine-menu-item",onClick:()=>ns("clarify"),"data-testid":"refine-clarify",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Clarify"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Make the description clearer and more specific"})]}),t.jsxs("div",{className:"refine-menu-item",onClick:()=>ns("add-details"),"data-testid":"refine-add-details",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Add details"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Add implementation details and context"})]}),t.jsxs("div",{className:"refine-menu-item",onClick:()=>ns("expand"),"data-testid":"refine-expand",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Expand"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Expand into a more comprehensive description"})]}),t.jsxs("div",{className:"refine-menu-item",onClick:()=>ns("simplify"),"data-testid":"refine-simplify",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Simplify"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Simplify and make more concise"})]})]}),ye)]}),t.jsx("div",{className:"dep-trigger-wrap",children:t.jsxs("button",{ref:We,type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-deps",onClick:()=>{M(ee=>{const _e=!ee;return _e?(ie(!1),_t(null),ne(null),q(!1),tt(null),fe(!1),Ie(null),Ae(!1),rt(null),gn()):ot(null),_e})},children:[t.jsx(Tr,{size:12,style:{verticalAlign:"middle"}}),A.length>0?`${A.length} deps`:"Deps"]})}),H&&ye&&ke&&(()=>{const ee=T.toLowerCase(),_e=(ee?s.filter(ft=>ft.id.toLowerCase().includes(ee)||ft.title&&ft.title.toLowerCase().includes(ee)||ft.description&&ft.description.toLowerCase().includes(ee)):[...s]).sort((ft,Ot)=>{const O=Ot.createdAt.localeCompare(ft.createdAt);if(O!==0)return O;const qe=parseInt(ft.id.slice(ft.id.lastIndexOf("-")+1),10)||0;return(parseInt(Ot.id.slice(Ot.id.lastIndexOf("-")+1),10)||0)-qe});return Ha.createPortal(t.jsxs("div",{ref:J,className:"dep-dropdown dep-dropdown--portal",onMouseDown:ft=>ft.preventDefault(),style:{position:"fixed",top:`${ke.top}px`,left:`${ke.left}px`,width:`${ke.width}px`,maxHeight:ke.maxHeight?`${ke.maxHeight}px`:void 0,overflowY:ke.maxHeight?"auto":void 0},children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:T,onChange:ft=>F(ft.target.value),onClick:ft=>ft.stopPropagation()}),_e.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No existing tasks"}):_e.map(ft=>t.jsxs("div",{className:`dep-dropdown-item${A.includes(ft.id)?" selected":""}`,onMouseDown:Ot=>Ot.preventDefault(),onClick:()=>kt(ft.id),children:[t.jsx("span",{className:"dep-dropdown-id",children:ft.id}),t.jsx("span",{className:"dep-dropdown-title",children:ss(ft.title||ft.description||ft.id,60)})]},ft.id))]}),ye)})(),t.jsxs("button",{type:"button",className:"btn btn-sm","data-testid":"quick-entry-attach",onClick:()=>C.current?.click(),children:[t.jsx($b,{size:12,style:{verticalAlign:"middle"}}),R.length>0?`Attach (${R.length})`:"Attach"]}),t.jsxs("button",{ref:Ee,type:"button",className:"btn btn-sm","data-testid":"quick-entry-models",onClick:()=>{M(!1),q(!1),tt(null),fe(!1),Ie(null),Ae(!1),rt(null),ne(null),ie(!0),ze()},children:[t.jsx(Uo,{size:12,style:{verticalAlign:"middle"}}),Ke]}),t.jsx("div",{className:"node-trigger-wrap",ref:ge,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-node-button",onClick:()=>{M(!1),q(!1),tt(null),ie(!1),_t(null),ne(null),Ae(!1),rt(null),fe(ee=>{const _e=!ee;return _e?Ne():Ie(null),_e})},children:[t.jsx(Ho,{size:12,style:{verticalAlign:"middle"}}),` ${ws?.name??"Node"}`,ws&&t.jsx("span",{className:"quick-entry-node-status",children:t.jsx(Ya,{status:ws.status,showLabel:!0})})]})}),le&&ye&&bt&&Ha.createPortal(t.jsxs("div",{ref:me,className:"dep-dropdown node-picker-dropdown node-picker-dropdown--portal",onMouseDown:ee=>ee.preventDefault(),style:{position:"fixed",top:`${bt.top}px`,left:`${bt.left}px`,width:`${bt.width}px`,maxHeight:bt.maxHeight?`${bt.maxHeight}px`:void 0,overflowY:bt.maxHeight?"auto":void 0},children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select execution node"}),t.jsx("div",{className:`dep-dropdown-item node-picker-item${sn==null?" selected":""}`,onMouseDown:ee=>ee.preventDefault(),onClick:()=>{xn(void 0),fe(!1),Ie(null)},children:t.jsx("span",{className:"node-picker-item-name",children:"Project default / local"})}),Xt.map(ee=>t.jsxs("div",{className:`dep-dropdown-item node-picker-item${sn===ee.id?" selected":""}`,onMouseDown:_e=>_e.preventDefault(),onClick:()=>{xn(ee.id),fe(!1),Ie(null)},children:[t.jsx("span",{className:"quick-entry-node-status",children:t.jsx(Ya,{status:ee.status})}),t.jsx("span",{className:"node-picker-item-name",children:ee.name}),t.jsx("span",{className:"node-picker-item-status",children:Z_(ee.status)})]},ee.id))]}),ye),t.jsx("div",{className:"agent-trigger-wrap",ref:ht,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{j?(q(!1),tt(null)):(fe(!1),Ie(null),Ae(!1),rt(null),ys())},"data-testid":"quick-entry-agent-button",children:[t.jsx(es,{size:12,style:{verticalAlign:"middle"}}),On?` ${On}`:" Agent"]})}),j&&ye&&jt&&Ha.createPortal(t.jsxs("div",{ref:Ve,className:"dep-dropdown agent-picker-dropdown agent-picker-dropdown--portal",onMouseDown:ee=>ee.preventDefault(),style:{position:"fixed",top:`${jt.top}px`,left:`${jt.left}px`,width:`${jt.width}px`,maxHeight:jt.maxHeight?`${jt.maxHeight}px`:void 0,overflowY:jt.maxHeight?"auto":void 0},children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select agent"}),re&&t.jsx("div",{className:"dep-dropdown-empty",children:"Loading agents..."}),!re&&D.map(ee=>t.jsxs("div",{className:`dep-dropdown-item${W===ee.id?" selected":""}`,onMouseDown:_e=>_e.preventDefault(),onClick:()=>{oe(ee.id===W?null:ee.id),q(!1),tt(null)},children:[t.jsx(es,{size:12,style:{marginRight:6}}),t.jsx("span",{className:"dep-dropdown-id",children:ee.role}),t.jsx("span",{className:"dep-dropdown-title",children:ee.name})]},ee.id)),!re&&D.length===0&&t.jsx("div",{className:"dep-dropdown-empty",children:"No agents available"}),W&&t.jsx("div",{className:"dep-dropdown-item",onMouseDown:ee=>ee.preventDefault(),onClick:()=>{oe(null),q(!1),tt(null)},children:t.jsx("span",{className:"dep-dropdown-title",children:"Clear selection"})})]}),ye),t.jsx("div",{className:"priority-trigger-wrap",ref:$e,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-priority-button",onClick:()=>{M(!1),q(!1),tt(null),fe(!1),Ie(null),ie(!1),_t(null),ne(null),Ae(ee=>{const _e=!ee;return _e?xt():rt(null),_e})},children:[t.jsx(Nk,{size:12,style:{verticalAlign:"middle"}}),` ${Nn[0].toUpperCase()}${Nn.slice(1)}`]})}),Ce&&ye&&Xe&&Ha.createPortal(t.jsxs("div",{ref:mt,className:"dep-dropdown priority-picker-dropdown priority-picker-dropdown--portal",onMouseDown:ee=>ee.preventDefault(),style:{position:"fixed",top:`${Xe.top}px`,left:`${Xe.left}px`,width:`${Xe.width}px`,maxHeight:Xe.maxHeight?`${Xe.maxHeight}px`:void 0,overflowY:Xe.maxHeight?"auto":void 0},children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select priority"}),Ea.map(ee=>{const _e=`${ee[0].toUpperCase()}${ee.slice(1)}`;return t.jsx("div",{className:`dep-dropdown-item${Nn===ee?" selected":""}`,"data-testid":`quick-entry-priority-option-${ee}`,onMouseDown:ft=>ft.preventDefault(),onClick:()=>{zt(ee),Ae(!1),rt(null)},children:t.jsx("span",{className:"dep-dropdown-title",children:_e})},ee)})]}),ye),t.jsx("button",{type:"button",className:`btn btn-sm ${nn?"btn-primary":""}`,onClick:()=>Dn(ee=>!ee),onMouseDown:ee=>ee.preventDefault(),"aria-pressed":nn,"data-testid":"quick-entry-fast-toggle",title:"Toggle fast execution mode",children:"Fast"}),t.jsxs("button",{type:"button",className:"btn btn-task-create btn-sm",onClick:qn,onMouseDown:ee=>ee.preventDefault(),disabled:!f.trim()||g,"data-testid":"quick-entry-save",title:"Create task",children:[t.jsx(Lb,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Save"]})]}),R.length>0&&t.jsx("div",{className:"inline-create-previews",children:R.map((ee,_e)=>t.jsxs("div",{className:"inline-create-preview",children:[t.jsx("img",{src:ee.previewUrl,alt:ee.file.name}),t.jsx("button",{type:"button",className:"inline-create-preview-remove",onClick:()=>mn(_e),disabled:g,title:"Remove image","data-testid":`quick-entry-preview-remove-${_e}`,children:"×"})]},ee.previewUrl))}),pe&&ye&&It&&Ha.createPortal(t.jsx("div",{ref:Oe,className:"model-nested-menu model-nested-menu--portal",onMouseDown:ee=>ee.preventDefault(),"data-testid":"model-nested-menu",style:{position:"fixed",top:`${It.top}px`,left:`${It.left}px`,width:`${It.width}px`,maxHeight:It.maxHeight?`${It.maxHeight}px`:void 0,overflowY:It.maxHeight?"auto":void 0},children:ve===null?t.jsxs("div",{className:"model-menu-items",children:[t.jsxs("button",{type:"button",className:`model-menu-item ${Q?"model-menu-item--active":""}`,onClick:()=>ne("plan"),"data-testid":"model-menu-plan",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(Ui,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Plan"]}),t.jsx("span",{className:"model-menu-item-value",children:Q?gt(De,Pe):"Using default"}),t.jsx(Wn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]}),t.jsxs("button",{type:"button",className:`model-menu-item ${lt?"model-menu-item--active":""}`,onClick:()=>ne("executor"),"data-testid":"model-menu-executor",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(fs,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Executor"]}),t.jsx("span",{className:"model-menu-item-value",children:lt?gt(L,ue):"Using default"}),t.jsx(Wn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]}),t.jsxs("button",{type:"button",className:`model-menu-item ${wt?"model-menu-item--active":""}`,onClick:()=>ne("validator"),"data-testid":"model-menu-validator",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(Uo,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Reviewer"]}),t.jsx("span",{className:"model-menu-item-value",children:wt?gt(xe,se):"Using default"}),t.jsx(Wn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]})]}):t.jsxs("div",{className:"model-submenu",children:[t.jsxs("button",{type:"button",className:"model-submenu-back",onClick:()=>ne(null),"data-testid":"model-submenu-back",children:[t.jsx(jn,{size:12,style:{transform:"rotate(90deg)",marginRight:4}}),"Back"]}),t.jsxs("div",{className:"model-submenu-header",children:[ve==="plan"&&"Plan Model",ve==="executor"&&"Executor Model",ve==="validator"&&"Reviewer Model"]}),t.jsx(Ms,{models:vt,value:ve==="plan"?Ye:ve==="executor"?nt:ut,onChange:ve==="plan"?Mt:ve==="executor"?Gt:Sn,placeholder:"Using default",disabled:it,id:`model-${ve}-select`,label:`${ve} model`,favoriteProviders:Bt,onToggleFavorite:on,favoriteModels:be,onToggleModelFavorite:qt}),he&&t.jsxs("div",{className:"model-submenu-error",children:[t.jsx("span",{children:he}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:ms,children:"Retry"})]})]})}),ye)]}),t.jsx("input",{ref:C,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:ee=>{Rn(ee.target.files),ee.currentTarget.value=""},"data-testid":"quick-entry-file-input"}),t.jsx("div",{className:"quick-entry-hint",children:"Enter to create · Esc to cancel"})]})}function eM(e){return um(e)||e}function tM(e){const n=new Map(e.map(l=>[l.id,l])),s=[],a=new Set,r=new Set;function o(l){if(a.has(l)||r.has(l))return;r.add(l);const c=n.get(l);if(c)for(const d of c.dependencies||[])n.has(d)&&o(d);r.delete(l),a.add(l),s.push(l)}for(const l of e)o(l.id);return s}function nM(e,n,s){const a=e.filter(g=>g.worktree),r=e.filter(g=>!g.worktree),o=new Map;for(const g of a){const w=g.worktree,v=o.get(w)||[];v.push(g),o.set(w,v)}const l=new Map(n.map(g=>[g.id,g])),d=n.filter(g=>g.column==="todo").filter(g=>!g.paused&&(g.dependencies||[]).every(w=>{const v=l.get(w);return v&&(v.column==="done"||v.column==="in-review"||v.column==="archived")})),h=tM(d).map(g=>l.get(g)).filter(g=>g!==void 0&&d.includes(g)),m=[],f=Array.from(o.keys());for(const g of f)m.push({label:eM(g),activeTasks:o.get(g),queuedTasks:[]});r.length>0&&m.push({label:"Unassigned",activeTasks:r,queuedTasks:[]});const p=h.slice(0,s);return p.length>0&&m.push({label:"Up Next",activeTasks:[],queuedTasks:p}),m}const bp=100,gd=50,xp=25;function sM({column:e,tasks:n,projectId:s,maxConcurrent:a,onMoveTask:r,onPauseTask:o,onOpenDetail:l,addToast:c,onQuickCreate:d,onNewTask:u,autoMerge:h,onToggleAutoMerge:m,globalPaused:f,onUpdateTask:p,onRetryTask:g,onArchiveTask:w,onUnarchiveTask:v,onDeleteTask:b,onArchiveAllDone:y,collapsed:N,onToggleCollapse:S,allTasks:C,availableModels:x,onPlanningMode:k,onSubtaskBreakdown:R,onOpenDetailWithTab:z,favoriteProviders:_,favoriteModels:A,onToggleFavorite:X,onToggleModelFavorite:H,isSearchActive:M,taskStuckTimeoutMs:T,onOpenMission:F,lastFetchTimeMs:W,workflowStepNameLookup:oe,blockerFanoutMap:D}){const[E,P]=i.useState(!1),[$,j]=i.useState(gd),[q,le]=i.useState(!1),[fe,Ce]=i.useState(!1),[Ae,re]=i.useState(!1),[Z,pe]=i.useState(!1),ie=i.useRef(null),ve=FE(n.length),{confirm:ne}=ai();i.useEffect(()=>{if(!q)return;function $e(jt){ie.current?.contains(jt.target)||le(!1)}function mt(jt){jt.key==="Escape"&&le(!1)}return document.addEventListener("mousedown",$e),document.addEventListener("keydown",mt),()=>{document.removeEventListener("mousedown",$e),document.removeEventListener("keydown",mt)}},[q]);const L=e==="archived",Y=L&&N,ue=!L&&!M&&e!=="in-progress"&&n.length>bp;i.useEffect(()=>{j($e=>e==="in-progress"||L||n.length<=bp?gd:Math.min(Math.max($e,gd),n.length))},[e,L,n.length]);const B=i.useCallback($e=>{L||($e.preventDefault(),$e.dataTransfer.dropEffect="move",P(!0))},[L]),xe=i.useCallback($e=>{$e.currentTarget.contains($e.relatedTarget)||P(!1)},[]),je=i.useCallback(async $e=>{$e.preventDefault(),P(!1);const mt=$e.dataTransfer.getData("text/plain");if(!mt)return;const jt=n.find(tt=>tt.id===mt);if(!(jt&&jt.column===e))try{const bt=(C?.find(rt=>rt.id===mt)??jt)?.steps.some(rt=>rt.status!=="pending")??!1,Ie=(e==="todo"||e==="triage")&&bt;let Xe;if(Ie){if(await ne({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))Xe={preserveProgress:!0};else if(!await ne({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await r(mt,e,Xe)}catch(tt){c(Me(tt),"error")}},[c,C,e,ne,r,n]),se=i.useMemo(()=>e!=="in-progress"?[]:nM(n,n,a),[e,n,a]),Ue=i.useMemo(()=>ue?n.slice(0,$):n,[ue,n,$]),De=Math.max(0,n.length-Ue.length),dt=i.useCallback(()=>{j($e=>Math.min($e+xp,n.length))},[n.length]),Pe=i.useCallback(async()=>{if(le(!1),!(n.length===0||!await ne({title:"Replan All Tasks",message:`Move all ${n.length} todo task${n.length===1?"":"s"} back to planning to be replanned?`}))){Ce(!0);try{const mt=await Promise.allSettled(n.map(bt=>r(bt.id,"triage"))),jt=mt.filter(bt=>bt.status==="rejected").length,tt=mt.length-jt;jt===0?c(`Moved ${tt} task${tt===1?"":"s"} to planning for replanning`,"success"):c(`Moved ${tt} of ${mt.length} tasks; ${jt} failed`,"error")}finally{Ce(!1)}}},[n,r,c,ne]),ce=i.useMemo(()=>n.filter($e=>!$e.paused&&!$e.assignedAgentId),[n]),Ee=ce.length,Oe=e==="todo"||e==="in-progress"||e==="in-review",ht=fe||Ae||Z,Ve=i.useCallback(async()=>{if(!(!o||(le(!1),Ee===0)||!await ne({title:"Stop All Tasks",message:`Stop all ${Ee} ${gs[e].toLowerCase()} task${Ee===1?"":"s"}?`,danger:!0}))){re(!0);try{const mt=await Promise.allSettled(ce.map(bt=>o(bt.id))),jt=mt.filter(bt=>bt.status==="rejected").length,tt=mt.length-jt;jt===0?c(`Stopped ${tt} task${tt===1?"":"s"}`,"success"):c(`Stopped ${tt} of ${mt.length} tasks; ${jt} failed`,"error")}finally{re(!1)}}},[o,Ee,e,ce,c,ne]),ge=i.useCallback(async()=>{if(le(!1),n.length===0||!await ne({title:"Move All to Todo",message:`Move all ${n.length} ${gs[e].toLowerCase()} task${n.length===1?"":"s"} to Todo?`}))return;const mt=n.some(tt=>tt.steps.some(bt=>bt.status!=="pending"));let jt=!1;if(mt){if(await ne({title:"Preserve Progress?",message:"Some tasks have completed steps. Keep progress before moving to Todo?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))jt=!0;else if(!await ne({title:"Reset Progress?",message:"Reset step progress for tasks before moving to Todo?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}pe(!0);try{const tt=await Promise.allSettled(n.map(Xe=>r(Xe.id,"todo",jt?{preserveProgress:!0}:void 0))),bt=tt.filter(Xe=>Xe.status==="rejected").length,Ie=tt.length-bt;bt===0?c(`Moved ${Ie} task${Ie===1?"":"s"} to Todo`,"success"):c(`Moved ${Ie} of ${tt.length} tasks to Todo; ${bt} failed`,"error")}finally{pe(!1)}},[n,e,r,c,ne]),me=i.useCallback(async()=>{if(!(!y||n.length===0||!await ne({title:"Archive All Done",message:`Archive all ${n.length} done tasks?`,danger:!0})))try{const mt=await y();c(`Archived ${mt.length} tasks`,"success")}catch(mt){c(Me(mt)||"Failed to archive tasks","error")}},[y,n.length,c,ne]);return t.jsxs("div",{className:`column${E?" drag-over":""}${L?" column-archived":""}${Y?" column-collapsed":""}`,"data-column":e,onDragOver:B,onDragLeave:xe,onDrop:je,children:[t.jsxs("div",{className:"column-header",children:[t.jsx("div",{className:`column-dot dot-${e}`}),t.jsx("h2",{children:gs[e]}),t.jsx("span",{className:`column-count${ve?" count-flash":""}`,children:n.length}),e==="in-review"&&m&&t.jsxs("label",{className:"auto-merge-toggle",title:h?"Auto-merge enabled":"Auto-merge disabled",children:[t.jsx("input",{type:"checkbox",checked:!!h,onChange:m}),t.jsx("span",{className:"toggle-slider"}),t.jsx("span",{className:"toggle-label",children:"Auto-merge"})]}),u&&t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:u,children:"+ New Task"}),e==="done"&&y&&t.jsx("button",{className:"btn btn-icon btn-sm",onClick:me,disabled:n.length===0,title:"Archive all done tasks","aria-label":"Archive all done tasks",children:t.jsx(Wr,{})}),L&&S&&t.jsx("button",{className:"btn btn-icon btn-sm",onClick:S,title:N?"Expand archived tasks":"Collapse archived tasks","aria-label":N?"Expand archived tasks":"Collapse archived tasks",children:N?t.jsx(jn,{size:16}):t.jsx(pi,{size:16})}),Oe&&t.jsxs("div",{className:"column-menu",ref:ie,children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>le($e=>!$e),"aria-haspopup":"menu","aria-expanded":q,"aria-label":`${gs[e]} column actions`,title:"Column actions",disabled:ht,children:t.jsx(ak,{})}),q&&t.jsxs("div",{className:"column-menu-popover",role:"menu",children:[e==="todo"&&t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void Pe(),disabled:n.length===0||fe,children:["Replan All",t.jsxs("span",{className:"column-menu-item-hint",children:["Move ",n.length," task",n.length===1?"":"s"," to Planning"]})]}),(e==="in-progress"||e==="in-review")&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void Ve(),disabled:Ee===0||Ae||!o,children:["Stop All",t.jsx("span",{className:"column-menu-item-hint",children:n.length===0?"No tasks in this column":Ee===0?"No manually pausable tasks":`Pause ${Ee} active unassigned task${Ee===1?"":"s"}`})]}),t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void ge(),disabled:n.length===0||Z,children:["Move All to Todo",t.jsxs("span",{className:"column-menu-item-hint",children:["Move ",n.length," task",n.length===1?"":"s"," to Todo"]})]})]})]})]})]}),!Y&&t.jsx("p",{className:"column-desc",children:MN[e]}),!Y&&t.jsxs("div",{className:"column-body",children:[e==="triage"&&d&&t.jsx(Tx,{onCreate:d,addToast:c,tasks:C??[],availableModels:x,onPlanningMode:k,onSubtaskBreakdown:R,projectId:s,autoExpand:!1,favoriteProviders:_,favoriteModels:A,onToggleFavorite:X,onToggleModelFavorite:H}),e==="in-progress"?se.length===0?t.jsx("div",{className:"empty-column",children:"No tasks"}):se.map($e=>t.jsx(Ix,{label:$e.label,activeTasks:$e.activeTasks,queuedTasks:$e.queuedTasks,projectId:s,onOpenDetail:l,addToast:c,globalPaused:f,onUpdateTask:p,onRetryTask:g,onOpenDetailWithTab:z,taskStuckTimeoutMs:T,onOpenMission:F,lastFetchTimeMs:W,workflowStepNameLookup:oe,blockerFanoutMap:D},$e.label)):n.length===0?t.jsx("div",{className:"empty-column",children:"No tasks"}):t.jsxs(t.Fragment,{children:[Ue.map($e=>t.jsx(Wo,{task:$e,projectId:s,onOpenDetail:l,addToast:c,globalPaused:f,onUpdateTask:p,onRetryTask:g,onArchiveTask:w,onUnarchiveTask:v,onDeleteTask:b,onOpenDetailWithTab:z,taskStuckTimeoutMs:T,onOpenMission:F,onMoveTask:r,lastFetchTimeMs:W,workflowStepNameLookup:oe,fanout:D?.get($e.id)},$e.id)),ue&&De>0&&t.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:dt,children:["Load ",Math.min(xp,De)," more (",De," remaining)"]})]}),t.jsx(ya,{slotId:"board-column-footer",projectId:s})]})]})}const Px=i.memo(sM);Px.displayName="Column";function iM(e,n){return e.length!==n.length?!1:e.every((s,a)=>s===n[a])}const vp=new Map;function aM(e,n){if(e.size!==n.size)return!1;for(const[s,a]of e)if(n.get(s)!==a)return!1;return!0}function rM({tasks:e,projectId:n,maxConcurrent:s,onMoveTask:a,onPauseTask:r,onOpenDetail:o,addToast:l,onQuickCreate:c,onNewTask:d,autoMerge:u,onToggleAutoMerge:h,globalPaused:m,onUpdateTask:f,onRetryTask:p,onArchiveTask:g,onUnarchiveTask:w,onDeleteTask:v,onArchiveAllDone:b,onLoadArchivedTasks:y,searchQuery:N="",availableModels:S,onPlanningMode:C,onSubtaskBreakdown:x,onOpenDetailWithTab:k,favoriteProviders:R,favoriteModels:z,onToggleFavorite:_,onToggleModelFavorite:A,taskStuckTimeoutMs:X,onOpenMission:H,staleHighFanoutBlockerAgeThresholdMs:M,lastFetchTimeMs:T}){const[F,W]=i.useState(!0),oe=i.useRef(!1),[D,E]=i.useState(vp),P=i.useRef(null),$=o_(e,{staleHighFanoutAgeThresholdMs:M}),j=N.trim()!=="",q=i.useRef({triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]}),le=i.useCallback(()=>{W(Ce=>{const Ae=!Ce;return!Ae&&!oe.current&&y&&(oe.current=!0,y()),Ae})},[y]),fe=i.useMemo(()=>{const Ce={triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]};for(const Z of e){const pe=im(Z.column)?Z.column:tc;(Ce[pe]??Ce[tc]).push(Z)}const Ae=q.current,re={};for(const Z of va){const pe=fx(Ce[Z],Z);re[Z]=iM(Ae[Z],pe)?Ae[Z]:pe}return q.current=re,re},[e]);return i.useEffect(()=>{let Ce=!1;return sl(n).then(Ae=>{if(Ce)return;const re=new Map(Ae.map(Z=>[Z.id,Z.name]));E(Z=>aM(Z,re)?Z:re)}).catch(()=>{Ce||E(Ae=>Ae.size===0?Ae:vp)}),()=>{Ce=!0}},[n]),i.useEffect(()=>{if(!window.matchMedia("(max-width: 768px)").matches)return;let Ce=null,Ae=null;const re=()=>{const ne=P.current;ne&&(ne.offsetWidth,ne.scrollLeft=0)},Z=()=>{if(typeof window.requestAnimationFrame=="function"){Ce!==null&&window.cancelAnimationFrame(Ce),Ce=window.requestAnimationFrame(()=>{Ce=null,re()});return}Ae!==null&&clearTimeout(Ae),Ae=setTimeout(()=>{Ae=null,re()},0)},pe=ne=>{const L=window.visualViewport?.scale??1;(ne.persisted||L>1.0001)&&Z()};Z(),window.addEventListener("pageshow",pe);const ie=window.visualViewport;let ve=null;return ie&&(ve=()=>{Z(),ie.removeEventListener("resize",ve),ve=null},ie.addEventListener("resize",ve)),()=>{window.removeEventListener("pageshow",pe),ve&&ie?.removeEventListener("resize",ve),Ce!==null&&window.cancelAnimationFrame(Ce),Ae!==null&&clearTimeout(Ae)}},[]),t.jsx(t.Fragment,{children:t.jsx("main",{className:"board",id:"board",ref:P,children:va.map(Ce=>t.jsx(Px,{column:Ce,tasks:fe[Ce],projectId:n,maxConcurrent:s,onMoveTask:a,onPauseTask:r,onOpenDetail:o,addToast:l,globalPaused:m,onUpdateTask:f,onRetryTask:p,onArchiveTask:g,onUnarchiveTask:w,onDeleteTask:v,allTasks:e,availableModels:S,onOpenDetailWithTab:k,favoriteProviders:R,favoriteModels:z,onToggleFavorite:_,onToggleModelFavorite:A,isSearchActive:j,taskStuckTimeoutMs:X,onOpenMission:H,lastFetchTimeMs:T,workflowStepNameLookup:D,blockerFanoutMap:$,...Ce==="triage"?{onQuickCreate:c,onNewTask:d,onPlanningMode:C,onSubtaskBreakdown:x}:{},...Ce==="in-review"?{autoMerge:u,onToggleAutoMerge:h}:{},...Ce==="done"?{onArchiveAllDone:b}:{},...Ce==="archived"?{collapsed:F,onToggleCollapse:le}:{}},Ce))})})}function qi(e,n,s){i.useEffect(()=>{if(!n)return;const a=e.current;if(!a)return;if(typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)&&window.innerWidth<=768){a.style.removeProperty("width"),a.style.removeProperty("height");return}try{const u=localStorage.getItem(s);if(u){const{width:h,height:m}=JSON.parse(u);typeof h=="number"&&h>0&&(a.style.width=`${h}px`),typeof m=="number"&&m>0&&(a.style.height=`${m}px`)}}catch{}if(typeof ResizeObserver>"u")return;let o=a.offsetWidth,l=a.offsetHeight,c=null;const d=new ResizeObserver(()=>{const u=a.offsetWidth,h=a.offsetHeight;u===o&&h===l||(o=u,l=h,c&&clearTimeout(c),c=setTimeout(()=>{try{localStorage.setItem(s,JSON.stringify({width:u,height:h}))}catch{}},200))});return d.observe(a),()=>{d.disconnect(),c&&clearTimeout(c)}},[e,n,s])}function oM(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}let Ar=0,Oo=null;function lM(){if(typeof window>"u")return;if(Ar>0){Ar+=1;return}const e=document.documentElement,n=document.body;Oo={htmlOverflow:e.style.overflow,bodyPosition:n.style.position,bodyTop:n.style.top,bodyLeft:n.style.left,bodyRight:n.style.right,bodyWidth:n.style.width,bodyOverflow:n.style.overflow,scrollY:window.scrollY},e.style.overflow="hidden",n.style.position="fixed",n.style.top=`-${Oo.scrollY}px`,n.style.left="0",n.style.right="0",n.style.width="100%",n.style.overflow="hidden",Ar=1}function cM(){if(typeof window>"u"||Ar===0||(Ar-=1,Ar>0||!Oo))return;const e=document.documentElement,n=document.body,{htmlOverflow:s,bodyPosition:a,bodyTop:r,bodyLeft:o,bodyRight:l,bodyWidth:c,bodyOverflow:d,scrollY:u}=Oo;e.style.overflow=s,n.style.position=a,n.style.top=r,n.style.left=o,n.style.right=l,n.style.width=c,n.style.overflow=d,Oo=null,window.scrollTo(0,0)}function _i(e){i.useEffect(()=>{if(!(!e||!oM()))return lM(),()=>{cM()}},[e])}function ra(e){const n=i.useRef(!1),s=i.useCallback(r=>{n.current=r.target===r.currentTarget},[]),a=i.useCallback(r=>{const o=n.current&&r.target===r.currentTarget;n.current=!1,o&&e()},[e]);return{onMouseDown:s,onMouseUp:a}}function dM(e,n){const s={};return(e[e.length-1]===""?[...e,""]:e).join((s.padRight?" ":"")+","+(s.padLeft===!1?"":" ")).trim()}const uM=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,mM=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,hM={};function yp(e,n){return(hM.jsx?mM:uM).test(e)}const pM=/[ \t\n\f\r]/g;function fM(e){return typeof e=="object"?e.type==="text"?wp(e.value):!1:wp(e)}function wp(e){return e.replace(pM,"")===""}class ll{constructor(n,s,a){this.normal=s,this.property=n,a&&(this.space=a)}}ll.prototype.normal={};ll.prototype.property={};ll.prototype.space=void 0;function $x(e,n){const s={},a={};for(const r of e)Object.assign(s,r.property),Object.assign(a,r.normal);return new ll(s,a,n)}function Mu(e){return e.toLowerCase()}class Ys{constructor(n,s){this.attribute=s,this.property=n}}Ys.prototype.attribute="";Ys.prototype.booleanish=!1;Ys.prototype.boolean=!1;Ys.prototype.commaOrSpaceSeparated=!1;Ys.prototype.commaSeparated=!1;Ys.prototype.defined=!1;Ys.prototype.mustUseProperty=!1;Ys.prototype.number=!1;Ys.prototype.overloadedBoolean=!1;Ys.prototype.property="";Ys.prototype.spaceSeparated=!1;Ys.prototype.space=void 0;let gM=0;const En=nr(),xs=nr(),Au=nr(),Rt=nr(),Zn=nr(),Rr=nr(),Xs=nr();function nr(){return 2**++gM}const Ru=Object.freeze(Object.defineProperty({__proto__:null,boolean:En,booleanish:xs,commaOrSpaceSeparated:Xs,commaSeparated:Rr,number:Rt,overloadedBoolean:Au,spaceSeparated:Zn},Symbol.toStringTag,{value:"Module"})),bd=Object.keys(Ru);class bm extends Ys{constructor(n,s,a,r){let o=-1;if(super(n,s),kp(this,"space",r),typeof a=="number")for(;++o<bd.length;){const l=bd[o];kp(this,bd[o],(a&Ru[l])===Ru[l])}}}bm.prototype.defined=!0;function kp(e,n,s){s&&(e[n]=s)}function Xr(e){const n={},s={};for(const[a,r]of Object.entries(e.properties)){const o=new bm(a,e.transform(e.attributes||{},a),r,e.space);e.mustUseProperty&&e.mustUseProperty.includes(a)&&(o.mustUseProperty=!0),n[a]=o,s[Mu(a)]=a,s[Mu(o.attribute)]=a}return new ll(n,s,e.space)}const Dx=Xr({properties:{ariaActiveDescendant:null,ariaAtomic:xs,ariaAutoComplete:null,ariaBusy:xs,ariaChecked:xs,ariaColCount:Rt,ariaColIndex:Rt,ariaColSpan:Rt,ariaControls:Zn,ariaCurrent:null,ariaDescribedBy:Zn,ariaDetails:null,ariaDisabled:xs,ariaDropEffect:Zn,ariaErrorMessage:null,ariaExpanded:xs,ariaFlowTo:Zn,ariaGrabbed:xs,ariaHasPopup:null,ariaHidden:xs,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Zn,ariaLevel:Rt,ariaLive:null,ariaModal:xs,ariaMultiLine:xs,ariaMultiSelectable:xs,ariaOrientation:null,ariaOwns:Zn,ariaPlaceholder:null,ariaPosInSet:Rt,ariaPressed:xs,ariaReadOnly:xs,ariaRelevant:null,ariaRequired:xs,ariaRoleDescription:Zn,ariaRowCount:Rt,ariaRowIndex:Rt,ariaRowSpan:Rt,ariaSelected:xs,ariaSetSize:Rt,ariaSort:null,ariaValueMax:Rt,ariaValueMin:Rt,ariaValueNow:Rt,ariaValueText:null,role:null},transform(e,n){return n==="role"?n:"aria-"+n.slice(4).toLowerCase()}});function Lx(e,n){return n in e?e[n]:n}function Ox(e,n){return Lx(e,n.toLowerCase())}const bM=Xr({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:Rr,acceptCharset:Zn,accessKey:Zn,action:null,allow:null,allowFullScreen:En,allowPaymentRequest:En,allowUserMedia:En,alt:null,as:null,async:En,autoCapitalize:null,autoComplete:Zn,autoFocus:En,autoPlay:En,blocking:Zn,capture:null,charSet:null,checked:En,cite:null,className:Zn,cols:Rt,colSpan:null,content:null,contentEditable:xs,controls:En,controlsList:Zn,coords:Rt|Rr,crossOrigin:null,data:null,dateTime:null,decoding:null,default:En,defer:En,dir:null,dirName:null,disabled:En,download:Au,draggable:xs,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:En,formTarget:null,headers:Zn,height:Rt,hidden:Au,high:Rt,href:null,hrefLang:null,htmlFor:Zn,httpEquiv:Zn,id:null,imageSizes:null,imageSrcSet:null,inert:En,inputMode:null,integrity:null,is:null,isMap:En,itemId:null,itemProp:Zn,itemRef:Zn,itemScope:En,itemType:Zn,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:En,low:Rt,manifest:null,max:null,maxLength:Rt,media:null,method:null,min:null,minLength:Rt,multiple:En,muted:En,name:null,nonce:null,noModule:En,noValidate:En,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:En,optimum:Rt,pattern:null,ping:Zn,placeholder:null,playsInline:En,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:En,referrerPolicy:null,rel:Zn,required:En,reversed:En,rows:Rt,rowSpan:Rt,sandbox:Zn,scope:null,scoped:En,seamless:En,selected:En,shadowRootClonable:En,shadowRootDelegatesFocus:En,shadowRootMode:null,shape:null,size:Rt,sizes:null,slot:null,span:Rt,spellCheck:xs,src:null,srcDoc:null,srcLang:null,srcSet:null,start:Rt,step:null,style:null,tabIndex:Rt,target:null,title:null,translate:null,type:null,typeMustMatch:En,useMap:null,value:xs,width:Rt,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Zn,axis:null,background:null,bgColor:null,border:Rt,borderColor:null,bottomMargin:Rt,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:En,declare:En,event:null,face:null,frame:null,frameBorder:null,hSpace:Rt,leftMargin:Rt,link:null,longDesc:null,lowSrc:null,marginHeight:Rt,marginWidth:Rt,noResize:En,noHref:En,noShade:En,noWrap:En,object:null,profile:null,prompt:null,rev:null,rightMargin:Rt,rules:null,scheme:null,scrolling:xs,standby:null,summary:null,text:null,topMargin:Rt,valueType:null,version:null,vAlign:null,vLink:null,vSpace:Rt,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:En,disableRemotePlayback:En,prefix:null,property:null,results:Rt,security:null,unselectable:null},space:"html",transform:Ox}),xM=Xr({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:Xs,accentHeight:Rt,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:Rt,amplitude:Rt,arabicForm:null,ascent:Rt,attributeName:null,attributeType:null,azimuth:Rt,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:Rt,by:null,calcMode:null,capHeight:Rt,className:Zn,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:Rt,diffuseConstant:Rt,direction:null,display:null,dur:null,divisor:Rt,dominantBaseline:null,download:En,dx:null,dy:null,edgeMode:null,editable:null,elevation:Rt,enableBackground:null,end:null,event:null,exponent:Rt,externalResourcesRequired:null,fill:null,fillOpacity:Rt,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:Rr,g2:Rr,glyphName:Rr,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:Rt,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:Rt,horizOriginX:Rt,horizOriginY:Rt,id:null,ideographic:Rt,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:Rt,k:Rt,k1:Rt,k2:Rt,k3:Rt,k4:Rt,kernelMatrix:Xs,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:Rt,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:Rt,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:Rt,overlineThickness:Rt,paintOrder:null,panose1:null,path:null,pathLength:Rt,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Zn,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:Rt,pointsAtY:Rt,pointsAtZ:Rt,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:Xs,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:Xs,rev:Xs,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:Xs,requiredFeatures:Xs,requiredFonts:Xs,requiredFormats:Xs,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:Rt,specularExponent:Rt,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:Rt,strikethroughThickness:Rt,string:null,stroke:null,strokeDashArray:Xs,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:Rt,strokeOpacity:Rt,strokeWidth:null,style:null,surfaceScale:Rt,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:Xs,tabIndex:Rt,tableValues:null,target:null,targetX:Rt,targetY:Rt,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:Xs,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:Rt,underlineThickness:Rt,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:Rt,values:null,vAlphabetic:Rt,vMathematical:Rt,vectorEffect:null,vHanging:Rt,vIdeographic:Rt,version:null,vertAdvY:Rt,vertOriginX:Rt,vertOriginY:Rt,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:Rt,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:Lx}),Fx=Xr({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,n){return"xlink:"+n.slice(5).toLowerCase()}}),zx=Xr({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:Ox}),Bx=Xr({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,n){return"xml:"+n.slice(3).toLowerCase()}}),vM={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},yM=/[A-Z]/g,jp=/-[a-z]/g,wM=/^data[-\w.:]+$/i;function kM(e,n){const s=Mu(n);let a=n,r=Ys;if(s in e.normal)return e.property[e.normal[s]];if(s.length>4&&s.slice(0,4)==="data"&&wM.test(n)){if(n.charAt(4)==="-"){const o=n.slice(5).replace(jp,NM);a="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=n.slice(4);if(!jp.test(o)){let l=o.replace(yM,jM);l.charAt(0)!=="-"&&(l="-"+l),n="data"+l}}r=bm}return new r(a,n)}function jM(e){return"-"+e.toLowerCase()}function NM(e){return e.charAt(1).toUpperCase()}const SM=$x([Dx,bM,Fx,zx,Bx],"html"),xm=$x([Dx,xM,Fx,zx,Bx],"svg");function CM(e){return e.join(" ").trim()}var gr={},xd,Np;function EM(){if(Np)return xd;Np=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,s=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,r=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,c=/^\s+|\s+$/g,d=`
|
|
654
|
+
`,u="/",h="*",m="",f="comment",p="declaration";function g(v,b){if(typeof v!="string")throw new TypeError("First argument must be a string");if(!v)return[];b=b||{};var y=1,N=1;function S(M){var T=M.match(n);T&&(y+=T.length);var F=M.lastIndexOf(d);N=~F?M.length-F:N+M.length}function C(){var M={line:y,column:N};return function(T){return T.position=new x(M),z(),T}}function x(M){this.start=M,this.end={line:y,column:N},this.source=b.source}x.prototype.content=v;function k(M){var T=new Error(b.source+":"+y+":"+N+": "+M);if(T.reason=M,T.filename=b.source,T.line=y,T.column=N,T.source=v,!b.silent)throw T}function R(M){var T=M.exec(v);if(T){var F=T[0];return S(F),v=v.slice(F.length),T}}function z(){R(s)}function _(M){var T;for(M=M||[];T=A();)T!==!1&&M.push(T);return M}function A(){var M=C();if(!(u!=v.charAt(0)||h!=v.charAt(1))){for(var T=2;m!=v.charAt(T)&&(h!=v.charAt(T)||u!=v.charAt(T+1));)++T;if(T+=2,m===v.charAt(T-1))return k("End of comment missing");var F=v.slice(2,T-2);return N+=2,S(F),v=v.slice(T),N+=2,M({type:f,comment:F})}}function X(){var M=C(),T=R(a);if(T){if(A(),!R(r))return k("property missing ':'");var F=R(o),W=M({type:p,property:w(T[0].replace(e,m)),value:F?w(F[0].replace(e,m)):m});return R(l),W}}function H(){var M=[];_(M);for(var T;T=X();)T!==!1&&(M.push(T),_(M));return M}return z(),H()}function w(v){return v?v.replace(c,m):m}return xd=g,xd}var Sp;function _M(){if(Sp)return gr;Sp=1;var e=gr&&gr.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(gr,"__esModule",{value:!0}),gr.default=s;const n=e(EM());function s(a,r){let o=null;if(!a||typeof a!="string")return o;const l=(0,n.default)(a),c=typeof r=="function";return l.forEach(d=>{if(d.type!=="declaration")return;const{property:u,value:h}=d;c?r(u,h,d):h&&(o=o||{},o[u]=h)}),o}return gr}var mo={},Cp;function MM(){if(Cp)return mo;Cp=1,Object.defineProperty(mo,"__esModule",{value:!0}),mo.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,s=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,r=/^-(ms)-/,o=function(u){return!u||s.test(u)||e.test(u)},l=function(u,h){return h.toUpperCase()},c=function(u,h){return"".concat(h,"-")},d=function(u,h){return h===void 0&&(h={}),o(u)?u:(u=u.toLowerCase(),h.reactCompat?u=u.replace(r,c):u=u.replace(a,c),u.replace(n,l))};return mo.camelCase=d,mo}var ho,Ep;function AM(){if(Ep)return ho;Ep=1;var e=ho&&ho.__importDefault||function(r){return r&&r.__esModule?r:{default:r}},n=e(_M()),s=MM();function a(r,o){var l={};return!r||typeof r!="string"||(0,n.default)(r,function(c,d){c&&d&&(l[(0,s.camelCase)(c,o)]=d)}),l}return a.default=a,ho=a,ho}var RM=AM();const IM=Nb(RM),Ux=Hx("end"),vm=Hx("start");function Hx(e){return n;function n(s){const a=s&&s.position&&s.position[e]||{};if(typeof a.line=="number"&&a.line>0&&typeof a.column=="number"&&a.column>0)return{line:a.line,column:a.column,offset:typeof a.offset=="number"&&a.offset>-1?a.offset:void 0}}}function TM(e){const n=vm(e),s=Ux(e);if(n&&s)return{start:n,end:s}}function Fo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?_p(e.position):"start"in e||"end"in e?_p(e):"line"in e||"column"in e?Iu(e):""}function Iu(e){return Mp(e&&e.line)+":"+Mp(e&&e.column)}function _p(e){return Iu(e&&e.start)+"-"+Iu(e&&e.end)}function Mp(e){return e&&typeof e=="number"?e:1}class zs extends Error{constructor(n,s,a){super(),typeof s=="string"&&(a=s,s=void 0);let r="",o={},l=!1;if(s&&("line"in s&&"column"in s?o={place:s}:"start"in s&&"end"in s?o={place:s}:"type"in s?o={ancestors:[s],place:s.position}:o={...s}),typeof n=="string"?r=n:!o.cause&&n&&(l=!0,r=n.message,o.cause=n),!o.ruleId&&!o.source&&typeof a=="string"){const d=a.indexOf(":");d===-1?o.ruleId=a:(o.source=a.slice(0,d),o.ruleId=a.slice(d+1))}if(!o.place&&o.ancestors&&o.ancestors){const d=o.ancestors[o.ancestors.length-1];d&&(o.place=d.position)}const c=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=c?c.column:void 0,this.fatal=void 0,this.file="",this.message=r,this.line=c?c.line:void 0,this.name=Fo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=l&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}zs.prototype.file="";zs.prototype.name="";zs.prototype.reason="";zs.prototype.message="";zs.prototype.stack="";zs.prototype.column=void 0;zs.prototype.line=void 0;zs.prototype.ancestors=void 0;zs.prototype.cause=void 0;zs.prototype.fatal=void 0;zs.prototype.place=void 0;zs.prototype.ruleId=void 0;zs.prototype.source=void 0;const ym={}.hasOwnProperty,PM=new Map,$M=/[A-Z]/g,DM=new Set(["table","tbody","thead","tfoot","tr"]),LM=new Set(["td","th"]),qx="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function OM(e,n){if(!n||n.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const s=n.filePath||void 0;let a;if(n.development){if(typeof n.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=WM(s,n.jsxDEV)}else{if(typeof n.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof n.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=VM(s,n.jsx,n.jsxs)}const r={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:a,elementAttributeNameCase:n.elementAttributeNameCase||"react",evaluater:n.createEvaluater?n.createEvaluater():void 0,filePath:s,ignoreInvalidStyle:n.ignoreInvalidStyle||!1,passKeys:n.passKeys!==!1,passNode:n.passNode||!1,schema:n.space==="svg"?xm:SM,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},o=Vx(r,e,void 0);return o&&typeof o!="string"?o:r.create(e,r.Fragment,{children:o||void 0},void 0)}function Vx(e,n,s){if(n.type==="element")return FM(e,n,s);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return zM(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return UM(e,n,s);if(n.type==="mdxjsEsm")return BM(e,n);if(n.type==="root")return HM(e,n,s);if(n.type==="text")return qM(e,n)}function FM(e,n,s){const a=e.schema;let r=a;n.tagName.toLowerCase()==="svg"&&a.space==="html"&&(r=xm,e.schema=r),e.ancestors.push(n);const o=Gx(e,n.tagName,!1),l=GM(e,n);let c=km(e,n);return DM.has(n.tagName)&&(c=c.filter(function(d){return typeof d=="string"?!fM(d):!0})),Wx(e,l,o,n),wm(l,c),e.ancestors.pop(),e.schema=a,e.create(n,o,l,s)}function zM(e,n){if(n.data&&n.data.estree&&e.evaluater){const a=n.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}Go(e,n.position)}function BM(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Go(e,n.position)}function UM(e,n,s){const a=e.schema;let r=a;n.name==="svg"&&a.space==="html"&&(r=xm,e.schema=r),e.ancestors.push(n);const o=n.name===null?e.Fragment:Gx(e,n.name,!0),l=KM(e,n),c=km(e,n);return Wx(e,l,o,n),wm(l,c),e.ancestors.pop(),e.schema=a,e.create(n,o,l,s)}function HM(e,n,s){const a={};return wm(a,km(e,n)),e.create(n,e.Fragment,a,s)}function qM(e,n){return n.value}function Wx(e,n,s,a){typeof s!="string"&&s!==e.Fragment&&e.passNode&&(n.node=a)}function wm(e,n){if(n.length>0){const s=n.length>1?n:n[0];s&&(e.children=s)}}function VM(e,n,s){return a;function a(r,o,l,c){const u=Array.isArray(l.children)?s:n;return c?u(o,l,c):u(o,l)}}function WM(e,n){return s;function s(a,r,o,l){const c=Array.isArray(o.children),d=vm(a);return n(r,o,l,c,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function GM(e,n){const s={};let a,r;for(r in n.properties)if(r!=="children"&&ym.call(n.properties,r)){const o=JM(e,r,n.properties[r]);if(o){const[l,c]=o;e.tableCellAlignToStyle&&l==="align"&&typeof c=="string"&&LM.has(n.tagName)?a=c:s[l]=c}}if(a){const o=s.style||(s.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return s}function KM(e,n){const s={};for(const a of n.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const o=a.data.estree.body[0];o.type;const l=o.expression;l.type;const c=l.properties[0];c.type,Object.assign(s,e.evaluater.evaluateExpression(c.argument))}else Go(e,n.position);else{const r=a.name;let o;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const c=a.value.data.estree.body[0];c.type,o=e.evaluater.evaluateExpression(c.expression)}else Go(e,n.position);else o=a.value===null?!0:a.value;s[r]=o}return s}function km(e,n){const s=[];let a=-1;const r=e.passKeys?new Map:PM;for(;++a<n.children.length;){const o=n.children[a];let l;if(e.passKeys){const d=o.type==="element"?o.tagName:o.type==="mdxJsxFlowElement"||o.type==="mdxJsxTextElement"?o.name:void 0;if(d){const u=r.get(d)||0;l=d+"-"+u,r.set(d,u+1)}}const c=Vx(e,o,l);c!==void 0&&s.push(c)}return s}function JM(e,n,s){const a=kM(e.schema,n);if(!(s==null||typeof s=="number"&&Number.isNaN(s))){if(Array.isArray(s)&&(s=a.commaSeparated?dM(s):CM(s)),a.property==="style"){let r=typeof s=="object"?s:YM(e,String(s));return e.stylePropertyNameCase==="css"&&(r=QM(r)),["style",r]}return[e.elementAttributeNameCase==="react"&&a.space?vM[a.property]||a.property:a.attribute,s]}}function YM(e,n){try{return IM(n,{reactCompat:!0})}catch(s){if(e.ignoreInvalidStyle)return{};const a=s,r=new zs("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:a,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=qx+"#cannot-parse-style-attribute",r}}function Gx(e,n,s){let a;if(!s)a={type:"Literal",value:n};else if(n.includes(".")){const r=n.split(".");let o=-1,l;for(;++o<r.length;){const c=yp(r[o])?{type:"Identifier",name:r[o]}:{type:"Literal",value:r[o]};l=l?{type:"MemberExpression",object:l,property:c,computed:!!(o&&c.type==="Literal"),optional:!1}:c}a=l}else a=yp(n)&&!/^[a-z]/.test(n)?{type:"Identifier",name:n}:{type:"Literal",value:n};if(a.type==="Literal"){const r=a.value;return ym.call(e.components,r)?e.components[r]:r}if(e.evaluater)return e.evaluater.evaluateExpression(a);Go(e)}function Go(e,n){const s=new zs("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:n,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw s.file=e.filePath||void 0,s.url=qx+"#cannot-handle-mdx-estrees-without-createevaluater",s}function QM(e){const n={};let s;for(s in e)ym.call(e,s)&&(n[XM(s)]=e[s]);return n}function XM(e){let n=e.replace($M,ZM);return n.slice(0,3)==="ms-"&&(n="-"+n),n}function ZM(e){return"-"+e.toLowerCase()}const vd={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},e2={};function jm(e,n){const s=e2,a=typeof s.includeImageAlt=="boolean"?s.includeImageAlt:!0,r=typeof s.includeHtml=="boolean"?s.includeHtml:!0;return Kx(e,a,r)}function Kx(e,n,s){if(t2(e)){if("value"in e)return e.type==="html"&&!s?"":e.value;if(n&&"alt"in e&&e.alt)return e.alt;if("children"in e)return Ap(e.children,n,s)}return Array.isArray(e)?Ap(e,n,s):""}function Ap(e,n,s){const a=[];let r=-1;for(;++r<e.length;)a[r]=Kx(e[r],n,s);return a.join("")}function t2(e){return!!(e&&typeof e=="object")}const Rp=document.createElement("i");function Nm(e){const n="&"+e+";";Rp.innerHTML=n;const s=Rp.textContent;return s.charCodeAt(s.length-1)===59&&e!=="semi"||s===n?!1:s}function ei(e,n,s,a){const r=e.length;let o=0,l;if(n<0?n=-n>r?0:r+n:n=n>r?r:n,s=s>0?s:0,a.length<1e4)l=Array.from(a),l.unshift(n,s),e.splice(...l);else for(s&&e.splice(n,s);o<a.length;)l=a.slice(o,o+1e4),l.unshift(n,0),e.splice(...l),o+=1e4,n+=1e4}function ui(e,n){return e.length>0?(ei(e,e.length,0,n),e):n}const Ip={}.hasOwnProperty;function Jx(e){const n={};let s=-1;for(;++s<e.length;)n2(n,e[s]);return n}function n2(e,n){let s;for(s in n){const r=(Ip.call(e,s)?e[s]:void 0)||(e[s]={}),o=n[s];let l;if(o)for(l in o){Ip.call(r,l)||(r[l]=[]);const c=o[l];s2(r[l],Array.isArray(c)?c:c?[c]:[])}}}function s2(e,n){let s=-1;const a=[];for(;++s<n.length;)(n[s].add==="after"?e:a).push(n[s]);ei(e,0,0,a)}function Yx(e,n){const s=Number.parseInt(e,n);return s<9||s===11||s>13&&s<32||s>126&&s<160||s>55295&&s<57344||s>64975&&s<65008||(s&65535)===65535||(s&65535)===65534||s>1114111?"�":String.fromCodePoint(s)}function Si(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const qs=_a(/[A-Za-z]/),Fs=_a(/[\dA-Za-z]/),i2=_a(/[#-'*+\--9=?A-Z^-~]/);function lc(e){return e!==null&&(e<32||e===127)}const Tu=_a(/\d/),a2=_a(/[\dA-Fa-f]/),r2=_a(/[!-/:-@[-`{-~]/);function an(e){return e!==null&&e<-2}function Yn(e){return e!==null&&(e<0||e===32)}function Pn(e){return e===-2||e===-1||e===32}const $c=_a(/\p{P}|\p{S}/u),Xa=_a(/\s/);function _a(e){return n;function n(s){return s!==null&&s>-1&&e.test(String.fromCharCode(s))}}function Zr(e){const n=[];let s=-1,a=0,r=0;for(;++s<e.length;){const o=e.charCodeAt(s);let l="";if(o===37&&Fs(e.charCodeAt(s+1))&&Fs(e.charCodeAt(s+2)))r=2;else if(o<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(o))||(l=String.fromCharCode(o));else if(o>55295&&o<57344){const c=e.charCodeAt(s+1);o<56320&&c>56319&&c<57344?(l=String.fromCharCode(o,c),r=1):l="�"}else l=String.fromCharCode(o);l&&(n.push(e.slice(a,s),encodeURIComponent(l)),a=s+r+1,l=""),r&&(s+=r,r=0)}return n.join("")+e.slice(a)}function Ln(e,n,s,a){const r=a?a-1:Number.POSITIVE_INFINITY;let o=0;return l;function l(d){return Pn(d)?(e.enter(s),c(d)):n(d)}function c(d){return Pn(d)&&o++<r?(e.consume(d),c):(e.exit(s),n(d))}}const o2={tokenize:l2};function l2(e){const n=e.attempt(this.parser.constructs.contentInitial,a,r);let s;return n;function a(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),Ln(e,n,"linePrefix")}function r(c){return e.enter("paragraph"),o(c)}function o(c){const d=e.enter("chunkText",{contentType:"text",previous:s});return s&&(s.next=d),s=d,l(c)}function l(c){if(c===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(c);return}return an(c)?(e.consume(c),e.exit("chunkText"),o):(e.consume(c),l)}}const c2={tokenize:d2},Tp={tokenize:u2};function d2(e){const n=this,s=[];let a=0,r,o,l;return c;function c(N){if(a<s.length){const S=s[a];return n.containerState=S[1],e.attempt(S[0].continuation,d,u)(N)}return u(N)}function d(N){if(a++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const S=n.events.length;let C=S,x;for(;C--;)if(n.events[C][0]==="exit"&&n.events[C][1].type==="chunkFlow"){x=n.events[C][1].end;break}b(a);let k=S;for(;k<n.events.length;)n.events[k][1].end={...x},k++;return ei(n.events,C+1,0,n.events.slice(S)),n.events.length=k,u(N)}return c(N)}function u(N){if(a===s.length){if(!r)return f(N);if(r.currentConstruct&&r.currentConstruct.concrete)return g(N);n.interrupt=!!(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(Tp,h,m)(N)}function h(N){return r&&y(),b(a),f(N)}function m(N){return n.parser.lazy[n.now().line]=a!==s.length,l=n.now().offset,g(N)}function f(N){return n.containerState={},e.attempt(Tp,p,g)(N)}function p(N){return a++,s.push([n.currentConstruct,n.containerState]),f(N)}function g(N){if(N===null){r&&y(),b(0),e.consume(N);return}return r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{_tokenizer:r,contentType:"flow",previous:o}),w(N)}function w(N){if(N===null){v(e.exit("chunkFlow"),!0),b(0),e.consume(N);return}return an(N)?(e.consume(N),v(e.exit("chunkFlow")),a=0,n.interrupt=void 0,c):(e.consume(N),w)}function v(N,S){const C=n.sliceStream(N);if(S&&C.push(null),N.previous=o,o&&(o.next=N),o=N,r.defineSkip(N.start),r.write(C),n.parser.lazy[N.start.line]){let x=r.events.length;for(;x--;)if(r.events[x][1].start.offset<l&&(!r.events[x][1].end||r.events[x][1].end.offset>l))return;const k=n.events.length;let R=k,z,_;for(;R--;)if(n.events[R][0]==="exit"&&n.events[R][1].type==="chunkFlow"){if(z){_=n.events[R][1].end;break}z=!0}for(b(a),x=k;x<n.events.length;)n.events[x][1].end={..._},x++;ei(n.events,R+1,0,n.events.slice(k)),n.events.length=x}}function b(N){let S=s.length;for(;S-- >N;){const C=s[S];n.containerState=C[1],C[0].exit.call(n,e)}s.length=N}function y(){r.write([null]),o=void 0,r=void 0,n.containerState._closeFlow=void 0}}function u2(e,n,s){return Ln(e,e.attempt(this.parser.constructs.document,n,s),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Or(e){if(e===null||Yn(e)||Xa(e))return 1;if($c(e))return 2}function Dc(e,n,s){const a=[];let r=-1;for(;++r<e.length;){const o=e[r].resolveAll;o&&!a.includes(o)&&(n=o(n,s),a.push(o))}return n}const Pu={name:"attention",resolveAll:m2,tokenize:h2};function m2(e,n){let s=-1,a,r,o,l,c,d,u,h;for(;++s<e.length;)if(e[s][0]==="enter"&&e[s][1].type==="attentionSequence"&&e[s][1]._close){for(a=s;a--;)if(e[a][0]==="exit"&&e[a][1].type==="attentionSequence"&&e[a][1]._open&&n.sliceSerialize(e[a][1]).charCodeAt(0)===n.sliceSerialize(e[s][1]).charCodeAt(0)){if((e[a][1]._close||e[s][1]._open)&&(e[s][1].end.offset-e[s][1].start.offset)%3&&!((e[a][1].end.offset-e[a][1].start.offset+e[s][1].end.offset-e[s][1].start.offset)%3))continue;d=e[a][1].end.offset-e[a][1].start.offset>1&&e[s][1].end.offset-e[s][1].start.offset>1?2:1;const m={...e[a][1].end},f={...e[s][1].start};Pp(m,-d),Pp(f,d),l={type:d>1?"strongSequence":"emphasisSequence",start:m,end:{...e[a][1].end}},c={type:d>1?"strongSequence":"emphasisSequence",start:{...e[s][1].start},end:f},o={type:d>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[s][1].start}},r={type:d>1?"strong":"emphasis",start:{...l.start},end:{...c.end}},e[a][1].end={...l.start},e[s][1].start={...c.end},u=[],e[a][1].end.offset-e[a][1].start.offset&&(u=ui(u,[["enter",e[a][1],n],["exit",e[a][1],n]])),u=ui(u,[["enter",r,n],["enter",l,n],["exit",l,n],["enter",o,n]]),u=ui(u,Dc(n.parser.constructs.insideSpan.null,e.slice(a+1,s),n)),u=ui(u,[["exit",o,n],["enter",c,n],["exit",c,n],["exit",r,n]]),e[s][1].end.offset-e[s][1].start.offset?(h=2,u=ui(u,[["enter",e[s][1],n],["exit",e[s][1],n]])):h=0,ei(e,a-1,s-a+3,u),s=a+u.length-h-2;break}}for(s=-1;++s<e.length;)e[s][1].type==="attentionSequence"&&(e[s][1].type="data");return e}function h2(e,n){const s=this.parser.constructs.attentionMarkers.null,a=this.previous,r=Or(a);let o;return l;function l(d){return o=d,e.enter("attentionSequence"),c(d)}function c(d){if(d===o)return e.consume(d),c;const u=e.exit("attentionSequence"),h=Or(d),m=!h||h===2&&r||s.includes(d),f=!r||r===2&&h||s.includes(a);return u._open=!!(o===42?m:m&&(r||!f)),u._close=!!(o===42?f:f&&(h||!m)),n(d)}}function Pp(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const p2={name:"autolink",tokenize:f2};function f2(e,n,s){let a=0;return r;function r(p){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),o}function o(p){return qs(p)?(e.consume(p),l):p===64?s(p):u(p)}function l(p){return p===43||p===45||p===46||Fs(p)?(a=1,c(p)):u(p)}function c(p){return p===58?(e.consume(p),a=0,d):(p===43||p===45||p===46||Fs(p))&&a++<32?(e.consume(p),c):(a=0,u(p))}function d(p){return p===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.exit("autolink"),n):p===null||p===32||p===60||lc(p)?s(p):(e.consume(p),d)}function u(p){return p===64?(e.consume(p),h):i2(p)?(e.consume(p),u):s(p)}function h(p){return Fs(p)?m(p):s(p)}function m(p){return p===46?(e.consume(p),a=0,h):p===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.exit("autolink"),n):f(p)}function f(p){if((p===45||Fs(p))&&a++<63){const g=p===45?f:m;return e.consume(p),g}return s(p)}}const cl={partial:!0,tokenize:g2};function g2(e,n,s){return a;function a(o){return Pn(o)?Ln(e,r,"linePrefix")(o):r(o)}function r(o){return o===null||an(o)?n(o):s(o)}}const Qx={continuation:{tokenize:x2},exit:v2,name:"blockQuote",tokenize:b2};function b2(e,n,s){const a=this;return r;function r(l){if(l===62){const c=a.containerState;return c.open||(e.enter("blockQuote",{_container:!0}),c.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(l),e.exit("blockQuoteMarker"),o}return s(l)}function o(l){return Pn(l)?(e.enter("blockQuotePrefixWhitespace"),e.consume(l),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(l))}}function x2(e,n,s){const a=this;return r;function r(l){return Pn(l)?Ln(e,o,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l):o(l)}function o(l){return e.attempt(Qx,n,s)(l)}}function v2(e){e.exit("blockQuote")}const Xx={name:"characterEscape",tokenize:y2};function y2(e,n,s){return a;function a(o){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(o),e.exit("escapeMarker"),r}function r(o){return r2(o)?(e.enter("characterEscapeValue"),e.consume(o),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):s(o)}}const Zx={name:"characterReference",tokenize:w2};function w2(e,n,s){const a=this;let r=0,o,l;return c;function c(m){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(m),e.exit("characterReferenceMarker"),d}function d(m){return m===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(m),e.exit("characterReferenceMarkerNumeric"),u):(e.enter("characterReferenceValue"),o=31,l=Fs,h(m))}function u(m){return m===88||m===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(m),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,l=a2,h):(e.enter("characterReferenceValue"),o=7,l=Tu,h(m))}function h(m){if(m===59&&r){const f=e.exit("characterReferenceValue");return l===Fs&&!Nm(a.sliceSerialize(f))?s(m):(e.enter("characterReferenceMarker"),e.consume(m),e.exit("characterReferenceMarker"),e.exit("characterReference"),n)}return l(m)&&r++<o?(e.consume(m),h):s(m)}}const $p={partial:!0,tokenize:j2},Dp={concrete:!0,name:"codeFenced",tokenize:k2};function k2(e,n,s){const a=this,r={partial:!0,tokenize:C};let o=0,l=0,c;return d;function d(x){return u(x)}function u(x){const k=a.events[a.events.length-1];return o=k&&k[1].type==="linePrefix"?k[2].sliceSerialize(k[1],!0).length:0,c=x,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),h(x)}function h(x){return x===c?(l++,e.consume(x),h):l<3?s(x):(e.exit("codeFencedFenceSequence"),Pn(x)?Ln(e,m,"whitespace")(x):m(x))}function m(x){return x===null||an(x)?(e.exit("codeFencedFence"),a.interrupt?n(x):e.check($p,w,S)(x)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),f(x))}function f(x){return x===null||an(x)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),m(x)):Pn(x)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),Ln(e,p,"whitespace")(x)):x===96&&x===c?s(x):(e.consume(x),f)}function p(x){return x===null||an(x)?m(x):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(x))}function g(x){return x===null||an(x)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),m(x)):x===96&&x===c?s(x):(e.consume(x),g)}function w(x){return e.attempt(r,S,v)(x)}function v(x){return e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),b}function b(x){return o>0&&Pn(x)?Ln(e,y,"linePrefix",o+1)(x):y(x)}function y(x){return x===null||an(x)?e.check($p,w,S)(x):(e.enter("codeFlowValue"),N(x))}function N(x){return x===null||an(x)?(e.exit("codeFlowValue"),y(x)):(e.consume(x),N)}function S(x){return e.exit("codeFenced"),n(x)}function C(x,k,R){let z=0;return _;function _(T){return x.enter("lineEnding"),x.consume(T),x.exit("lineEnding"),A}function A(T){return x.enter("codeFencedFence"),Pn(T)?Ln(x,X,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(T):X(T)}function X(T){return T===c?(x.enter("codeFencedFenceSequence"),H(T)):R(T)}function H(T){return T===c?(z++,x.consume(T),H):z>=l?(x.exit("codeFencedFenceSequence"),Pn(T)?Ln(x,M,"whitespace")(T):M(T)):R(T)}function M(T){return T===null||an(T)?(x.exit("codeFencedFence"),k(T)):R(T)}}}function j2(e,n,s){const a=this;return r;function r(l){return l===null?s(l):(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o)}function o(l){return a.parser.lazy[a.now().line]?s(l):n(l)}}const yd={name:"codeIndented",tokenize:S2},N2={partial:!0,tokenize:C2};function S2(e,n,s){const a=this;return r;function r(u){return e.enter("codeIndented"),Ln(e,o,"linePrefix",5)(u)}function o(u){const h=a.events[a.events.length-1];return h&&h[1].type==="linePrefix"&&h[2].sliceSerialize(h[1],!0).length>=4?l(u):s(u)}function l(u){return u===null?d(u):an(u)?e.attempt(N2,l,d)(u):(e.enter("codeFlowValue"),c(u))}function c(u){return u===null||an(u)?(e.exit("codeFlowValue"),l(u)):(e.consume(u),c)}function d(u){return e.exit("codeIndented"),n(u)}}function C2(e,n,s){const a=this;return r;function r(l){return a.parser.lazy[a.now().line]?s(l):an(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),r):Ln(e,o,"linePrefix",5)(l)}function o(l){const c=a.events[a.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(l):an(l)?r(l):s(l)}}const E2={name:"codeText",previous:M2,resolve:_2,tokenize:A2};function _2(e){let n=e.length-4,s=3,a,r;if((e[s][1].type==="lineEnding"||e[s][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(a=s;++a<n;)if(e[a][1].type==="codeTextData"){e[s][1].type="codeTextPadding",e[n][1].type="codeTextPadding",s+=2,n-=2;break}}for(a=s-1,n++;++a<=n;)r===void 0?a!==n&&e[a][1].type!=="lineEnding"&&(r=a):(a===n||e[a][1].type==="lineEnding")&&(e[r][1].type="codeTextData",a!==r+2&&(e[r][1].end=e[a-1][1].end,e.splice(r+2,a-r-2),n-=a-r-2,a=r+2),r=void 0);return e}function M2(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function A2(e,n,s){let a=0,r,o;return l;function l(m){return e.enter("codeText"),e.enter("codeTextSequence"),c(m)}function c(m){return m===96?(e.consume(m),a++,c):(e.exit("codeTextSequence"),d(m))}function d(m){return m===null?s(m):m===32?(e.enter("space"),e.consume(m),e.exit("space"),d):m===96?(o=e.enter("codeTextSequence"),r=0,h(m)):an(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),d):(e.enter("codeTextData"),u(m))}function u(m){return m===null||m===32||m===96||an(m)?(e.exit("codeTextData"),d(m)):(e.consume(m),u)}function h(m){return m===96?(e.consume(m),r++,h):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),n(m)):(o.type="codeTextData",u(m))}}class R2{constructor(n){this.left=n?[...n]:[],this.right=[]}get(n){if(n<0||n>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+n+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return n<this.left.length?this.left[n]:this.right[this.right.length-n+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(n,s){const a=s??Number.POSITIVE_INFINITY;return a<this.left.length?this.left.slice(n,a):n>this.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(n,s,a){const r=s||0;this.setCursor(Math.trunc(n));const o=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return a&&po(this.left,a),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(n){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(n)}pushMany(n){this.setCursor(Number.POSITIVE_INFINITY),po(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),po(this.right,n.reverse())}setCursor(n){if(!(n===this.left.length||n>this.left.length&&this.right.length===0||n<0&&this.left.length===0))if(n<this.left.length){const s=this.left.splice(n,Number.POSITIVE_INFINITY);po(this.right,s.reverse())}else{const s=this.right.splice(this.left.length+this.right.length-n,Number.POSITIVE_INFINITY);po(this.left,s.reverse())}}}function po(e,n){let s=0;if(n.length<1e4)e.push(...n);else for(;s<n.length;)e.push(...n.slice(s,s+1e4)),s+=1e4}function ev(e){const n={};let s=-1,a,r,o,l,c,d,u;const h=new R2(e);for(;++s<h.length;){for(;s in n;)s=n[s];if(a=h.get(s),s&&a[1].type==="chunkFlow"&&h.get(s-1)[1].type==="listItemPrefix"&&(d=a[1]._tokenizer.events,o=0,o<d.length&&d[o][1].type==="lineEndingBlank"&&(o+=2),o<d.length&&d[o][1].type==="content"))for(;++o<d.length&&d[o][1].type!=="content";)d[o][1].type==="chunkText"&&(d[o][1]._isInFirstContentOfListItem=!0,o++);if(a[0]==="enter")a[1].contentType&&(Object.assign(n,I2(h,s)),s=n[s],u=!0);else if(a[1]._container){for(o=s,r=void 0;o--;)if(l=h.get(o),l[1].type==="lineEnding"||l[1].type==="lineEndingBlank")l[0]==="enter"&&(r&&(h.get(r)[1].type="lineEndingBlank"),l[1].type="lineEnding",r=o);else if(!(l[1].type==="linePrefix"||l[1].type==="listItemIndent"))break;r&&(a[1].end={...h.get(r)[1].start},c=h.slice(r,s),c.unshift(a),h.splice(r,s-r+1,c))}}return ei(e,0,Number.POSITIVE_INFINITY,h.slice(0)),!u}function I2(e,n){const s=e.get(n)[1],a=e.get(n)[2];let r=n-1;const o=[];let l=s._tokenizer;l||(l=a.parser[s.contentType](s.start),s._contentTypeTextTrailing&&(l._contentTypeTextTrailing=!0));const c=l.events,d=[],u={};let h,m,f=-1,p=s,g=0,w=0;const v=[w];for(;p;){for(;e.get(++r)[1]!==p;);o.push(r),p._tokenizer||(h=a.sliceStream(p),p.next||h.push(null),m&&l.defineSkip(p.start),p._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(h),p._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),m=p,p=p.next}for(p=s;++f<c.length;)c[f][0]==="exit"&&c[f-1][0]==="enter"&&c[f][1].type===c[f-1][1].type&&c[f][1].start.line!==c[f][1].end.line&&(w=f+1,v.push(w),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(l.events=[],p?(p._tokenizer=void 0,p.previous=void 0):v.pop(),f=v.length;f--;){const b=c.slice(v[f],v[f+1]),y=o.pop();d.push([y,y+b.length-1]),e.splice(y,2,b)}for(d.reverse(),f=-1;++f<d.length;)u[g+d[f][0]]=g+d[f][1],g+=d[f][1]-d[f][0]-1;return u}const T2={resolve:$2,tokenize:D2},P2={partial:!0,tokenize:L2};function $2(e){return ev(e),e}function D2(e,n){let s;return a;function a(c){return e.enter("content"),s=e.enter("chunkContent",{contentType:"content"}),r(c)}function r(c){return c===null?o(c):an(c)?e.check(P2,l,o)(c):(e.consume(c),r)}function o(c){return e.exit("chunkContent"),e.exit("content"),n(c)}function l(c){return e.consume(c),e.exit("chunkContent"),s.next=e.enter("chunkContent",{contentType:"content",previous:s}),s=s.next,r}}function L2(e,n,s){const a=this;return r;function r(l){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),Ln(e,o,"linePrefix")}function o(l){if(l===null||an(l))return s(l);const c=a.events[a.events.length-1];return!a.parser.constructs.disable.null.includes("codeIndented")&&c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(l):e.interrupt(a.parser.constructs.flow,s,n)(l)}}function tv(e,n,s,a,r,o,l,c,d){const u=d||Number.POSITIVE_INFINITY;let h=0;return m;function m(b){return b===60?(e.enter(a),e.enter(r),e.enter(o),e.consume(b),e.exit(o),f):b===null||b===32||b===41||lc(b)?s(b):(e.enter(a),e.enter(l),e.enter(c),e.enter("chunkString",{contentType:"string"}),w(b))}function f(b){return b===62?(e.enter(o),e.consume(b),e.exit(o),e.exit(r),e.exit(a),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),p(b))}function p(b){return b===62?(e.exit("chunkString"),e.exit(c),f(b)):b===null||b===60||an(b)?s(b):(e.consume(b),b===92?g:p)}function g(b){return b===60||b===62||b===92?(e.consume(b),p):p(b)}function w(b){return!h&&(b===null||b===41||Yn(b))?(e.exit("chunkString"),e.exit(c),e.exit(l),e.exit(a),n(b)):h<u&&b===40?(e.consume(b),h++,w):b===41?(e.consume(b),h--,w):b===null||b===32||b===40||lc(b)?s(b):(e.consume(b),b===92?v:w)}function v(b){return b===40||b===41||b===92?(e.consume(b),w):w(b)}}function nv(e,n,s,a,r,o){const l=this;let c=0,d;return u;function u(p){return e.enter(a),e.enter(r),e.consume(p),e.exit(r),e.enter(o),h}function h(p){return c>999||p===null||p===91||p===93&&!d||p===94&&!c&&"_hiddenFootnoteSupport"in l.parser.constructs?s(p):p===93?(e.exit(o),e.enter(r),e.consume(p),e.exit(r),e.exit(a),n):an(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),h):(e.enter("chunkString",{contentType:"string"}),m(p))}function m(p){return p===null||p===91||p===93||an(p)||c++>999?(e.exit("chunkString"),h(p)):(e.consume(p),d||(d=!Pn(p)),p===92?f:m)}function f(p){return p===91||p===92||p===93?(e.consume(p),c++,m):m(p)}}function sv(e,n,s,a,r,o){let l;return c;function c(f){return f===34||f===39||f===40?(e.enter(a),e.enter(r),e.consume(f),e.exit(r),l=f===40?41:f,d):s(f)}function d(f){return f===l?(e.enter(r),e.consume(f),e.exit(r),e.exit(a),n):(e.enter(o),u(f))}function u(f){return f===l?(e.exit(o),d(l)):f===null?s(f):an(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),Ln(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),h(f))}function h(f){return f===l||f===null||an(f)?(e.exit("chunkString"),u(f)):(e.consume(f),f===92?m:h)}function m(f){return f===l||f===92?(e.consume(f),h):h(f)}}function zo(e,n){let s;return a;function a(r){return an(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),s=!0,a):Pn(r)?Ln(e,a,s?"linePrefix":"lineSuffix")(r):n(r)}}const O2={name:"definition",tokenize:z2},F2={partial:!0,tokenize:B2};function z2(e,n,s){const a=this;let r;return o;function o(p){return e.enter("definition"),l(p)}function l(p){return nv.call(a,e,c,s,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function c(p){return r=Si(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),d):s(p)}function d(p){return Yn(p)?zo(e,u)(p):u(p)}function u(p){return tv(e,h,s,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function h(p){return e.attempt(F2,m,m)(p)}function m(p){return Pn(p)?Ln(e,f,"whitespace")(p):f(p)}function f(p){return p===null||an(p)?(e.exit("definition"),a.parser.defined.push(r),n(p)):s(p)}}function B2(e,n,s){return a;function a(c){return Yn(c)?zo(e,r)(c):s(c)}function r(c){return sv(e,o,s,"definitionTitle","definitionTitleMarker","definitionTitleString")(c)}function o(c){return Pn(c)?Ln(e,l,"whitespace")(c):l(c)}function l(c){return c===null||an(c)?n(c):s(c)}}const U2={name:"hardBreakEscape",tokenize:H2};function H2(e,n,s){return a;function a(o){return e.enter("hardBreakEscape"),e.consume(o),r}function r(o){return an(o)?(e.exit("hardBreakEscape"),n(o)):s(o)}}const q2={name:"headingAtx",resolve:V2,tokenize:W2};function V2(e,n){let s=e.length-2,a=3,r,o;return e[a][1].type==="whitespace"&&(a+=2),s-2>a&&e[s][1].type==="whitespace"&&(s-=2),e[s][1].type==="atxHeadingSequence"&&(a===s-1||s-4>a&&e[s-2][1].type==="whitespace")&&(s-=a+1===s?2:4),s>a&&(r={type:"atxHeadingText",start:e[a][1].start,end:e[s][1].end},o={type:"chunkText",start:e[a][1].start,end:e[s][1].end,contentType:"text"},ei(e,a,s-a+1,[["enter",r,n],["enter",o,n],["exit",o,n],["exit",r,n]])),e}function W2(e,n,s){let a=0;return r;function r(h){return e.enter("atxHeading"),o(h)}function o(h){return e.enter("atxHeadingSequence"),l(h)}function l(h){return h===35&&a++<6?(e.consume(h),l):h===null||Yn(h)?(e.exit("atxHeadingSequence"),c(h)):s(h)}function c(h){return h===35?(e.enter("atxHeadingSequence"),d(h)):h===null||an(h)?(e.exit("atxHeading"),n(h)):Pn(h)?Ln(e,c,"whitespace")(h):(e.enter("atxHeadingText"),u(h))}function d(h){return h===35?(e.consume(h),d):(e.exit("atxHeadingSequence"),c(h))}function u(h){return h===null||h===35||Yn(h)?(e.exit("atxHeadingText"),c(h)):(e.consume(h),u)}}const G2=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Lp=["pre","script","style","textarea"],K2={concrete:!0,name:"htmlFlow",resolveTo:Q2,tokenize:X2},J2={partial:!0,tokenize:eA},Y2={partial:!0,tokenize:Z2};function Q2(e){let n=e.length;for(;n--&&!(e[n][0]==="enter"&&e[n][1].type==="htmlFlow"););return n>1&&e[n-2][1].type==="linePrefix"&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2)),e}function X2(e,n,s){const a=this;let r,o,l,c,d;return u;function u(j){return h(j)}function h(j){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(j),m}function m(j){return j===33?(e.consume(j),f):j===47?(e.consume(j),o=!0,w):j===63?(e.consume(j),r=3,a.interrupt?n:E):qs(j)?(e.consume(j),l=String.fromCharCode(j),v):s(j)}function f(j){return j===45?(e.consume(j),r=2,p):j===91?(e.consume(j),r=5,c=0,g):qs(j)?(e.consume(j),r=4,a.interrupt?n:E):s(j)}function p(j){return j===45?(e.consume(j),a.interrupt?n:E):s(j)}function g(j){const q="CDATA[";return j===q.charCodeAt(c++)?(e.consume(j),c===q.length?a.interrupt?n:X:g):s(j)}function w(j){return qs(j)?(e.consume(j),l=String.fromCharCode(j),v):s(j)}function v(j){if(j===null||j===47||j===62||Yn(j)){const q=j===47,le=l.toLowerCase();return!q&&!o&&Lp.includes(le)?(r=1,a.interrupt?n(j):X(j)):G2.includes(l.toLowerCase())?(r=6,q?(e.consume(j),b):a.interrupt?n(j):X(j)):(r=7,a.interrupt&&!a.parser.lazy[a.now().line]?s(j):o?y(j):N(j))}return j===45||Fs(j)?(e.consume(j),l+=String.fromCharCode(j),v):s(j)}function b(j){return j===62?(e.consume(j),a.interrupt?n:X):s(j)}function y(j){return Pn(j)?(e.consume(j),y):_(j)}function N(j){return j===47?(e.consume(j),_):j===58||j===95||qs(j)?(e.consume(j),S):Pn(j)?(e.consume(j),N):_(j)}function S(j){return j===45||j===46||j===58||j===95||Fs(j)?(e.consume(j),S):C(j)}function C(j){return j===61?(e.consume(j),x):Pn(j)?(e.consume(j),C):N(j)}function x(j){return j===null||j===60||j===61||j===62||j===96?s(j):j===34||j===39?(e.consume(j),d=j,k):Pn(j)?(e.consume(j),x):R(j)}function k(j){return j===d?(e.consume(j),d=null,z):j===null||an(j)?s(j):(e.consume(j),k)}function R(j){return j===null||j===34||j===39||j===47||j===60||j===61||j===62||j===96||Yn(j)?C(j):(e.consume(j),R)}function z(j){return j===47||j===62||Pn(j)?N(j):s(j)}function _(j){return j===62?(e.consume(j),A):s(j)}function A(j){return j===null||an(j)?X(j):Pn(j)?(e.consume(j),A):s(j)}function X(j){return j===45&&r===2?(e.consume(j),F):j===60&&r===1?(e.consume(j),W):j===62&&r===4?(e.consume(j),P):j===63&&r===3?(e.consume(j),E):j===93&&r===5?(e.consume(j),D):an(j)&&(r===6||r===7)?(e.exit("htmlFlowData"),e.check(J2,$,H)(j)):j===null||an(j)?(e.exit("htmlFlowData"),H(j)):(e.consume(j),X)}function H(j){return e.check(Y2,M,$)(j)}function M(j){return e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),T}function T(j){return j===null||an(j)?H(j):(e.enter("htmlFlowData"),X(j))}function F(j){return j===45?(e.consume(j),E):X(j)}function W(j){return j===47?(e.consume(j),l="",oe):X(j)}function oe(j){if(j===62){const q=l.toLowerCase();return Lp.includes(q)?(e.consume(j),P):X(j)}return qs(j)&&l.length<8?(e.consume(j),l+=String.fromCharCode(j),oe):X(j)}function D(j){return j===93?(e.consume(j),E):X(j)}function E(j){return j===62?(e.consume(j),P):j===45&&r===2?(e.consume(j),E):X(j)}function P(j){return j===null||an(j)?(e.exit("htmlFlowData"),$(j)):(e.consume(j),P)}function $(j){return e.exit("htmlFlow"),n(j)}}function Z2(e,n,s){const a=this;return r;function r(l){return an(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o):s(l)}function o(l){return a.parser.lazy[a.now().line]?s(l):n(l)}}function eA(e,n,s){return a;function a(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(cl,n,s)}}const tA={name:"htmlText",tokenize:nA};function nA(e,n,s){const a=this;let r,o,l;return c;function c(E){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(E),d}function d(E){return E===33?(e.consume(E),u):E===47?(e.consume(E),C):E===63?(e.consume(E),N):qs(E)?(e.consume(E),R):s(E)}function u(E){return E===45?(e.consume(E),h):E===91?(e.consume(E),o=0,g):qs(E)?(e.consume(E),y):s(E)}function h(E){return E===45?(e.consume(E),p):s(E)}function m(E){return E===null?s(E):E===45?(e.consume(E),f):an(E)?(l=m,W(E)):(e.consume(E),m)}function f(E){return E===45?(e.consume(E),p):m(E)}function p(E){return E===62?F(E):E===45?f(E):m(E)}function g(E){const P="CDATA[";return E===P.charCodeAt(o++)?(e.consume(E),o===P.length?w:g):s(E)}function w(E){return E===null?s(E):E===93?(e.consume(E),v):an(E)?(l=w,W(E)):(e.consume(E),w)}function v(E){return E===93?(e.consume(E),b):w(E)}function b(E){return E===62?F(E):E===93?(e.consume(E),b):w(E)}function y(E){return E===null||E===62?F(E):an(E)?(l=y,W(E)):(e.consume(E),y)}function N(E){return E===null?s(E):E===63?(e.consume(E),S):an(E)?(l=N,W(E)):(e.consume(E),N)}function S(E){return E===62?F(E):N(E)}function C(E){return qs(E)?(e.consume(E),x):s(E)}function x(E){return E===45||Fs(E)?(e.consume(E),x):k(E)}function k(E){return an(E)?(l=k,W(E)):Pn(E)?(e.consume(E),k):F(E)}function R(E){return E===45||Fs(E)?(e.consume(E),R):E===47||E===62||Yn(E)?z(E):s(E)}function z(E){return E===47?(e.consume(E),F):E===58||E===95||qs(E)?(e.consume(E),_):an(E)?(l=z,W(E)):Pn(E)?(e.consume(E),z):F(E)}function _(E){return E===45||E===46||E===58||E===95||Fs(E)?(e.consume(E),_):A(E)}function A(E){return E===61?(e.consume(E),X):an(E)?(l=A,W(E)):Pn(E)?(e.consume(E),A):z(E)}function X(E){return E===null||E===60||E===61||E===62||E===96?s(E):E===34||E===39?(e.consume(E),r=E,H):an(E)?(l=X,W(E)):Pn(E)?(e.consume(E),X):(e.consume(E),M)}function H(E){return E===r?(e.consume(E),r=void 0,T):E===null?s(E):an(E)?(l=H,W(E)):(e.consume(E),H)}function M(E){return E===null||E===34||E===39||E===60||E===61||E===96?s(E):E===47||E===62||Yn(E)?z(E):(e.consume(E),M)}function T(E){return E===47||E===62||Yn(E)?z(E):s(E)}function F(E){return E===62?(e.consume(E),e.exit("htmlTextData"),e.exit("htmlText"),n):s(E)}function W(E){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(E),e.exit("lineEnding"),oe}function oe(E){return Pn(E)?Ln(e,D,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E):D(E)}function D(E){return e.enter("htmlTextData"),l(E)}}const Sm={name:"labelEnd",resolveAll:rA,resolveTo:oA,tokenize:lA},sA={tokenize:cA},iA={tokenize:dA},aA={tokenize:uA};function rA(e){let n=-1;const s=[];for(;++n<e.length;){const a=e[n][1];if(s.push(e[n]),a.type==="labelImage"||a.type==="labelLink"||a.type==="labelEnd"){const r=a.type==="labelImage"?4:2;a.type="data",n+=r}}return e.length!==s.length&&ei(e,0,e.length,s),e}function oA(e,n){let s=e.length,a=0,r,o,l,c;for(;s--;)if(r=e[s][1],o){if(r.type==="link"||r.type==="labelLink"&&r._inactive)break;e[s][0]==="enter"&&r.type==="labelLink"&&(r._inactive=!0)}else if(l){if(e[s][0]==="enter"&&(r.type==="labelImage"||r.type==="labelLink")&&!r._balanced&&(o=s,r.type!=="labelLink")){a=2;break}}else r.type==="labelEnd"&&(l=s);const d={type:e[o][1].type==="labelLink"?"link":"image",start:{...e[o][1].start},end:{...e[e.length-1][1].end}},u={type:"label",start:{...e[o][1].start},end:{...e[l][1].end}},h={type:"labelText",start:{...e[o+a+2][1].end},end:{...e[l-2][1].start}};return c=[["enter",d,n],["enter",u,n]],c=ui(c,e.slice(o+1,o+a+3)),c=ui(c,[["enter",h,n]]),c=ui(c,Dc(n.parser.constructs.insideSpan.null,e.slice(o+a+4,l-3),n)),c=ui(c,[["exit",h,n],e[l-2],e[l-1],["exit",u,n]]),c=ui(c,e.slice(l+1)),c=ui(c,[["exit",d,n]]),ei(e,o,e.length,c),e}function lA(e,n,s){const a=this;let r=a.events.length,o,l;for(;r--;)if((a.events[r][1].type==="labelImage"||a.events[r][1].type==="labelLink")&&!a.events[r][1]._balanced){o=a.events[r][1];break}return c;function c(f){return o?o._inactive?m(f):(l=a.parser.defined.includes(Si(a.sliceSerialize({start:o.end,end:a.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(f),e.exit("labelMarker"),e.exit("labelEnd"),d):s(f)}function d(f){return f===40?e.attempt(sA,h,l?h:m)(f):f===91?e.attempt(iA,h,l?u:m)(f):l?h(f):m(f)}function u(f){return e.attempt(aA,h,m)(f)}function h(f){return n(f)}function m(f){return o._balanced=!0,s(f)}}function cA(e,n,s){return a;function a(m){return e.enter("resource"),e.enter("resourceMarker"),e.consume(m),e.exit("resourceMarker"),r}function r(m){return Yn(m)?zo(e,o)(m):o(m)}function o(m){return m===41?h(m):tv(e,l,c,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(m)}function l(m){return Yn(m)?zo(e,d)(m):h(m)}function c(m){return s(m)}function d(m){return m===34||m===39||m===40?sv(e,u,s,"resourceTitle","resourceTitleMarker","resourceTitleString")(m):h(m)}function u(m){return Yn(m)?zo(e,h)(m):h(m)}function h(m){return m===41?(e.enter("resourceMarker"),e.consume(m),e.exit("resourceMarker"),e.exit("resource"),n):s(m)}}function dA(e,n,s){const a=this;return r;function r(c){return nv.call(a,e,o,l,"reference","referenceMarker","referenceString")(c)}function o(c){return a.parser.defined.includes(Si(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)))?n(c):s(c)}function l(c){return s(c)}}function uA(e,n,s){return a;function a(o){return e.enter("reference"),e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),r}function r(o){return o===93?(e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),e.exit("reference"),n):s(o)}}const mA={name:"labelStartImage",resolveAll:Sm.resolveAll,tokenize:hA};function hA(e,n,s){const a=this;return r;function r(c){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(c),e.exit("labelImageMarker"),o}function o(c){return c===91?(e.enter("labelMarker"),e.consume(c),e.exit("labelMarker"),e.exit("labelImage"),l):s(c)}function l(c){return c===94&&"_hiddenFootnoteSupport"in a.parser.constructs?s(c):n(c)}}const pA={name:"labelStartLink",resolveAll:Sm.resolveAll,tokenize:fA};function fA(e,n,s){const a=this;return r;function r(l){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(l),e.exit("labelMarker"),e.exit("labelLink"),o}function o(l){return l===94&&"_hiddenFootnoteSupport"in a.parser.constructs?s(l):n(l)}}const wd={name:"lineEnding",tokenize:gA};function gA(e,n){return s;function s(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),Ln(e,n,"linePrefix")}}const Yl={name:"thematicBreak",tokenize:bA};function bA(e,n,s){let a=0,r;return o;function o(u){return e.enter("thematicBreak"),l(u)}function l(u){return r=u,c(u)}function c(u){return u===r?(e.enter("thematicBreakSequence"),d(u)):a>=3&&(u===null||an(u))?(e.exit("thematicBreak"),n(u)):s(u)}function d(u){return u===r?(e.consume(u),a++,d):(e.exit("thematicBreakSequence"),Pn(u)?Ln(e,c,"whitespace")(u):c(u))}}const Gs={continuation:{tokenize:wA},exit:jA,name:"list",tokenize:yA},xA={partial:!0,tokenize:NA},vA={partial:!0,tokenize:kA};function yA(e,n,s){const a=this,r=a.events[a.events.length-1];let o=r&&r[1].type==="linePrefix"?r[2].sliceSerialize(r[1],!0).length:0,l=0;return c;function c(p){const g=a.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(g==="listUnordered"?!a.containerState.marker||p===a.containerState.marker:Tu(p)){if(a.containerState.type||(a.containerState.type=g,e.enter(g,{_container:!0})),g==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Yl,s,u)(p):u(p);if(!a.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(p)}return s(p)}function d(p){return Tu(p)&&++l<10?(e.consume(p),d):(!a.interrupt||l<2)&&(a.containerState.marker?p===a.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),u(p)):s(p)}function u(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||p,e.check(cl,a.interrupt?s:h,e.attempt(xA,f,m))}function h(p){return a.containerState.initialBlankLine=!0,o++,f(p)}function m(p){return Pn(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),f):s(p)}function f(p){return a.containerState.size=o+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(p)}}function wA(e,n,s){const a=this;return a.containerState._closeFlow=void 0,e.check(cl,r,o);function r(c){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,Ln(e,n,"listItemIndent",a.containerState.size+1)(c)}function o(c){return a.containerState.furtherBlankLines||!Pn(c)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,l(c)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(vA,n,l)(c))}function l(c){return a.containerState._closeFlow=!0,a.interrupt=void 0,Ln(e,e.attempt(Gs,n,s),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c)}}function kA(e,n,s){const a=this;return Ln(e,r,"listItemIndent",a.containerState.size+1);function r(o){const l=a.events[a.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===a.containerState.size?n(o):s(o)}}function jA(e){e.exit(this.containerState.type)}function NA(e,n,s){const a=this;return Ln(e,r,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function r(o){const l=a.events[a.events.length-1];return!Pn(o)&&l&&l[1].type==="listItemPrefixWhitespace"?n(o):s(o)}}const Op={name:"setextUnderline",resolveTo:SA,tokenize:CA};function SA(e,n){let s=e.length,a,r,o;for(;s--;)if(e[s][0]==="enter"){if(e[s][1].type==="content"){a=s;break}e[s][1].type==="paragraph"&&(r=s)}else e[s][1].type==="content"&&e.splice(s,1),!o&&e[s][1].type==="definition"&&(o=s);const l={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",o?(e.splice(r,0,["enter",l,n]),e.splice(o+1,0,["exit",e[a][1],n]),e[a][1].end={...e[o][1].end}):e[a][1]=l,e.push(["exit",l,n]),e}function CA(e,n,s){const a=this;let r;return o;function o(u){let h=a.events.length,m;for(;h--;)if(a.events[h][1].type!=="lineEnding"&&a.events[h][1].type!=="linePrefix"&&a.events[h][1].type!=="content"){m=a.events[h][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||m)?(e.enter("setextHeadingLine"),r=u,l(u)):s(u)}function l(u){return e.enter("setextHeadingLineSequence"),c(u)}function c(u){return u===r?(e.consume(u),c):(e.exit("setextHeadingLineSequence"),Pn(u)?Ln(e,d,"lineSuffix")(u):d(u))}function d(u){return u===null||an(u)?(e.exit("setextHeadingLine"),n(u)):s(u)}}const EA={tokenize:_A};function _A(e){const n=this,s=e.attempt(cl,a,e.attempt(this.parser.constructs.flowInitial,r,Ln(e,e.attempt(this.parser.constructs.flow,r,e.attempt(T2,r)),"linePrefix")));return s;function a(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),n.currentConstruct=void 0,s}function r(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),n.currentConstruct=void 0,s}}const MA={resolveAll:av()},AA=iv("string"),RA=iv("text");function iv(e){return{resolveAll:av(e==="text"?IA:void 0),tokenize:n};function n(s){const a=this,r=this.parser.constructs[e],o=s.attempt(r,l,c);return l;function l(h){return u(h)?o(h):c(h)}function c(h){if(h===null){s.consume(h);return}return s.enter("data"),s.consume(h),d}function d(h){return u(h)?(s.exit("data"),o(h)):(s.consume(h),d)}function u(h){if(h===null)return!0;const m=r[h];let f=-1;if(m)for(;++f<m.length;){const p=m[f];if(!p.previous||p.previous.call(a,a.previous))return!0}return!1}}}function av(e){return n;function n(s,a){let r=-1,o;for(;++r<=s.length;)o===void 0?s[r]&&s[r][1].type==="data"&&(o=r,r++):(!s[r]||s[r][1].type!=="data")&&(r!==o+2&&(s[o][1].end=s[r-1][1].end,s.splice(o+2,r-o-2),r=o+2),o=void 0);return e?e(s,a):s}}function IA(e,n){let s=0;for(;++s<=e.length;)if((s===e.length||e[s][1].type==="lineEnding")&&e[s-1][1].type==="data"){const a=e[s-1][1],r=n.sliceStream(a);let o=r.length,l=-1,c=0,d;for(;o--;){const u=r[o];if(typeof u=="string"){for(l=u.length;u.charCodeAt(l-1)===32;)c++,l--;if(l)break;l=-1}else if(u===-2)d=!0,c++;else if(u!==-1){o++;break}}if(n._contentTypeTextTrailing&&s===e.length&&(c=0),c){const u={type:s===e.length||d||c<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?l:a.start._bufferIndex+l,_index:a.start._index+o,line:a.end.line,column:a.end.column-c,offset:a.end.offset-c},end:{...a.end}};a.end={...u.start},a.start.offset===a.end.offset?Object.assign(a,u):(e.splice(s,0,["enter",u,n],["exit",u,n]),s+=2)}s++}return e}const TA={42:Gs,43:Gs,45:Gs,48:Gs,49:Gs,50:Gs,51:Gs,52:Gs,53:Gs,54:Gs,55:Gs,56:Gs,57:Gs,62:Qx},PA={91:O2},$A={[-2]:yd,[-1]:yd,32:yd},DA={35:q2,42:Yl,45:[Op,Yl],60:K2,61:Op,95:Yl,96:Dp,126:Dp},LA={38:Zx,92:Xx},OA={[-5]:wd,[-4]:wd,[-3]:wd,33:mA,38:Zx,42:Pu,60:[p2,tA],91:pA,92:[U2,Xx],93:Sm,95:Pu,96:E2},FA={null:[Pu,MA]},zA={null:[42,95]},BA={null:[]},UA=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:zA,contentInitial:PA,disable:BA,document:TA,flow:DA,flowInitial:$A,insideSpan:FA,string:LA,text:OA},Symbol.toStringTag,{value:"Module"}));function HA(e,n,s){let a={_bufferIndex:-1,_index:0,line:s&&s.line||1,column:s&&s.column||1,offset:s&&s.offset||0};const r={},o=[];let l=[],c=[];const d={attempt:k(C),check:k(x),consume:y,enter:N,exit:S,interrupt:k(x,{interrupt:!0})},u={code:null,containerState:{},defineSkip:w,events:[],now:g,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:m};let h=n.tokenize.call(u,d);return n.resolveAll&&o.push(n),u;function m(A){return l=ui(l,A),v(),l[l.length-1]!==null?[]:(R(n,0),u.events=Dc(o,u.events,u),u.events)}function f(A,X){return VA(p(A),X)}function p(A){return qA(l,A)}function g(){const{_bufferIndex:A,_index:X,line:H,column:M,offset:T}=a;return{_bufferIndex:A,_index:X,line:H,column:M,offset:T}}function w(A){r[A.line]=A.column,_()}function v(){let A;for(;a._index<l.length;){const X=l[a._index];if(typeof X=="string")for(A=a._index,a._bufferIndex<0&&(a._bufferIndex=0);a._index===A&&a._bufferIndex<X.length;)b(X.charCodeAt(a._bufferIndex));else b(X)}}function b(A){h=h(A)}function y(A){an(A)?(a.line++,a.column=1,a.offset+=A===-3?2:1,_()):A!==-1&&(a.column++,a.offset++),a._bufferIndex<0?a._index++:(a._bufferIndex++,a._bufferIndex===l[a._index].length&&(a._bufferIndex=-1,a._index++)),u.previous=A}function N(A,X){const H=X||{};return H.type=A,H.start=g(),u.events.push(["enter",H,u]),c.push(H),H}function S(A){const X=c.pop();return X.end=g(),u.events.push(["exit",X,u]),X}function C(A,X){R(A,X.from)}function x(A,X){X.restore()}function k(A,X){return H;function H(M,T,F){let W,oe,D,E;return Array.isArray(M)?$(M):"tokenize"in M?$([M]):P(M);function P(fe){return Ce;function Ce(Ae){const re=Ae!==null&&fe[Ae],Z=Ae!==null&&fe.null,pe=[...Array.isArray(re)?re:re?[re]:[],...Array.isArray(Z)?Z:Z?[Z]:[]];return $(pe)(Ae)}}function $(fe){return W=fe,oe=0,fe.length===0?F:j(fe[oe])}function j(fe){return Ce;function Ce(Ae){return E=z(),D=fe,fe.partial||(u.currentConstruct=fe),fe.name&&u.parser.constructs.disable.null.includes(fe.name)?le():fe.tokenize.call(X?Object.assign(Object.create(u),X):u,d,q,le)(Ae)}}function q(fe){return A(D,E),T}function le(fe){return E.restore(),++oe<W.length?j(W[oe]):F}}}function R(A,X){A.resolveAll&&!o.includes(A)&&o.push(A),A.resolve&&ei(u.events,X,u.events.length-X,A.resolve(u.events.slice(X),u)),A.resolveTo&&(u.events=A.resolveTo(u.events,u))}function z(){const A=g(),X=u.previous,H=u.currentConstruct,M=u.events.length,T=Array.from(c);return{from:M,restore:F};function F(){a=A,u.previous=X,u.currentConstruct=H,u.events.length=M,c=T,_()}}function _(){a.line in r&&a.column<2&&(a.column=r[a.line],a.offset+=r[a.line]-1)}}function qA(e,n){const s=n.start._index,a=n.start._bufferIndex,r=n.end._index,o=n.end._bufferIndex;let l;if(s===r)l=[e[s].slice(a,o)];else{if(l=e.slice(s,r),a>-1){const c=l[0];typeof c=="string"?l[0]=c.slice(a):l.shift()}o>0&&l.push(e[r].slice(0,o))}return l}function VA(e,n){let s=-1;const a=[];let r;for(;++s<e.length;){const o=e[s];let l;if(typeof o=="string")l=o;else switch(o){case-5:{l="\r";break}case-4:{l=`
|
|
655
|
+
`;break}case-3:{l=`\r
|
|
656
|
+
`;break}case-2:{l=n?" ":" ";break}case-1:{if(!n&&r)continue;l=" ";break}default:l=String.fromCharCode(o)}r=o===-2,a.push(l)}return a.join("")}function WA(e){const a={constructs:Jx([UA,...(e||{}).extensions||[]]),content:r(o2),defined:[],document:r(c2),flow:r(EA),lazy:{},string:r(AA),text:r(RA)};return a;function r(o){return l;function l(c){return HA(a,o,c)}}}function GA(e){for(;!ev(e););return e}const Fp=/[\0\t\n\r]/g;function KA(){let e=1,n="",s=!0,a;return r;function r(o,l,c){const d=[];let u,h,m,f,p;for(o=n+(typeof o=="string"?o.toString():new TextDecoder(l||void 0).decode(o)),m=0,n="",s&&(o.charCodeAt(0)===65279&&m++,s=void 0);m<o.length;){if(Fp.lastIndex=m,u=Fp.exec(o),f=u&&u.index!==void 0?u.index:o.length,p=o.charCodeAt(f),!u){n=o.slice(m);break}if(p===10&&m===f&&a)d.push(-3),a=void 0;else switch(a&&(d.push(-5),a=void 0),m<f&&(d.push(o.slice(m,f)),e+=f-m),p){case 0:{d.push(65533),e++;break}case 9:{for(h=Math.ceil(e/4)*4,d.push(-2);e++<h;)d.push(-1);break}case 10:{d.push(-4),e=1;break}default:a=!0,e=1}m=f+1}return c&&(a&&d.push(-5),n&&d.push(n),d.push(null)),d}}const JA=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function YA(e){return e.replace(JA,QA)}function QA(e,n,s){if(n)return n;if(s.charCodeAt(0)===35){const r=s.charCodeAt(1),o=r===120||r===88;return Yx(s.slice(o?2:1),o?16:10)}return Nm(s)||e}const rv={}.hasOwnProperty;function XA(e,n,s){return n&&typeof n=="object"&&(s=n,n=void 0),ZA(s)(GA(WA(s).document().write(KA()(e,n,!0))))}function ZA(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(xe),autolinkProtocol:z,autolinkEmail:z,atxHeading:o(L),blockQuote:o(Z),characterEscape:z,characterReference:z,codeFenced:o(pe),codeFencedFenceInfo:l,codeFencedFenceMeta:l,codeIndented:o(pe,l),codeText:o(ie,l),codeTextData:z,data:z,codeFlowValue:z,definition:o(ve),definitionDestinationString:l,definitionLabelString:l,definitionTitleString:l,emphasis:o(ne),hardBreakEscape:o(Y),hardBreakTrailing:o(Y),htmlFlow:o(ue,l),htmlFlowData:z,htmlText:o(ue,l),htmlTextData:z,image:o(B),label:l,link:o(xe),listItem:o(se),listItemValue:f,listOrdered:o(je,m),listUnordered:o(je),paragraph:o(Ue),reference:j,referenceString:l,resourceDestinationString:l,resourceTitleString:l,setextHeading:o(L),strong:o(De),thematicBreak:o(Pe)},exit:{atxHeading:d(),atxHeadingSequence:C,autolink:d(),autolinkEmail:re,autolinkProtocol:Ae,blockQuote:d(),characterEscapeValue:_,characterReferenceMarkerHexadecimal:le,characterReferenceMarkerNumeric:le,characterReferenceValue:fe,characterReference:Ce,codeFenced:d(v),codeFencedFence:w,codeFencedFenceInfo:p,codeFencedFenceMeta:g,codeFlowValue:_,codeIndented:d(b),codeText:d(T),codeTextData:_,data:_,definition:d(),definitionDestinationString:S,definitionLabelString:y,definitionTitleString:N,emphasis:d(),hardBreakEscape:d(X),hardBreakTrailing:d(X),htmlFlow:d(H),htmlFlowData:_,htmlText:d(M),htmlTextData:_,image:d(W),label:D,labelText:oe,lineEnding:A,link:d(F),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:q,resourceDestinationString:E,resourceTitleString:P,resource:$,setextHeading:d(R),setextHeadingLineSequence:k,setextHeadingText:x,strong:d(),thematicBreak:d()}};ov(n,(e||{}).mdastExtensions||[]);const s={};return a;function a(ce){let Ee={type:"root",children:[]};const Oe={stack:[Ee],tokenStack:[],config:n,enter:c,exit:u,buffer:l,resume:h,data:s},ht=[];let Ve=-1;for(;++Ve<ce.length;)if(ce[Ve][1].type==="listOrdered"||ce[Ve][1].type==="listUnordered")if(ce[Ve][0]==="enter")ht.push(Ve);else{const ge=ht.pop();Ve=r(ce,ge,Ve)}for(Ve=-1;++Ve<ce.length;){const ge=n[ce[Ve][0]];rv.call(ge,ce[Ve][1].type)&&ge[ce[Ve][1].type].call(Object.assign({sliceSerialize:ce[Ve][2].sliceSerialize},Oe),ce[Ve][1])}if(Oe.tokenStack.length>0){const ge=Oe.tokenStack[Oe.tokenStack.length-1];(ge[1]||zp).call(Oe,void 0,ge[0])}for(Ee.position={start:pa(ce.length>0?ce[0][1].start:{line:1,column:1,offset:0}),end:pa(ce.length>0?ce[ce.length-2][1].end:{line:1,column:1,offset:0})},Ve=-1;++Ve<n.transforms.length;)Ee=n.transforms[Ve](Ee)||Ee;return Ee}function r(ce,Ee,Oe){let ht=Ee-1,Ve=-1,ge=!1,me,$e,mt,jt;for(;++ht<=Oe;){const tt=ce[ht];switch(tt[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{tt[0]==="enter"?Ve++:Ve--,jt=void 0;break}case"lineEndingBlank":{tt[0]==="enter"&&(me&&!jt&&!Ve&&!mt&&(mt=ht),jt=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:jt=void 0}if(!Ve&&tt[0]==="enter"&&tt[1].type==="listItemPrefix"||Ve===-1&&tt[0]==="exit"&&(tt[1].type==="listUnordered"||tt[1].type==="listOrdered")){if(me){let bt=ht;for($e=void 0;bt--;){const Ie=ce[bt];if(Ie[1].type==="lineEnding"||Ie[1].type==="lineEndingBlank"){if(Ie[0]==="exit")continue;$e&&(ce[$e][1].type="lineEndingBlank",ge=!0),Ie[1].type="lineEnding",$e=bt}else if(!(Ie[1].type==="linePrefix"||Ie[1].type==="blockQuotePrefix"||Ie[1].type==="blockQuotePrefixWhitespace"||Ie[1].type==="blockQuoteMarker"||Ie[1].type==="listItemIndent"))break}mt&&(!$e||mt<$e)&&(me._spread=!0),me.end=Object.assign({},$e?ce[$e][1].start:tt[1].end),ce.splice($e||ht,0,["exit",me,tt[2]]),ht++,Oe++}if(tt[1].type==="listItemPrefix"){const bt={type:"listItem",_spread:!1,start:Object.assign({},tt[1].start),end:void 0};me=bt,ce.splice(ht,0,["enter",bt,tt[2]]),ht++,Oe++,mt=void 0,jt=!0}}}return ce[Ee][1]._spread=ge,Oe}function o(ce,Ee){return Oe;function Oe(ht){c.call(this,ce(ht),ht),Ee&&Ee.call(this,ht)}}function l(){this.stack.push({type:"fragment",children:[]})}function c(ce,Ee,Oe){this.stack[this.stack.length-1].children.push(ce),this.stack.push(ce),this.tokenStack.push([Ee,Oe||void 0]),ce.position={start:pa(Ee.start),end:void 0}}function d(ce){return Ee;function Ee(Oe){ce&&ce.call(this,Oe),u.call(this,Oe)}}function u(ce,Ee){const Oe=this.stack.pop(),ht=this.tokenStack.pop();if(ht)ht[0].type!==ce.type&&(Ee?Ee.call(this,ce,ht[0]):(ht[1]||zp).call(this,ce,ht[0]));else throw new Error("Cannot close `"+ce.type+"` ("+Fo({start:ce.start,end:ce.end})+"): it’s not open");Oe.position.end=pa(ce.end)}function h(){return jm(this.stack.pop())}function m(){this.data.expectingFirstListItemValue=!0}function f(ce){if(this.data.expectingFirstListItemValue){const Ee=this.stack[this.stack.length-2];Ee.start=Number.parseInt(this.sliceSerialize(ce),10),this.data.expectingFirstListItemValue=void 0}}function p(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.lang=ce}function g(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.meta=ce}function w(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function v(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.value=ce.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function b(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.value=ce.replace(/(\r?\n|\r)$/g,"")}function y(ce){const Ee=this.resume(),Oe=this.stack[this.stack.length-1];Oe.label=Ee,Oe.identifier=Si(this.sliceSerialize(ce)).toLowerCase()}function N(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.title=ce}function S(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.url=ce}function C(ce){const Ee=this.stack[this.stack.length-1];if(!Ee.depth){const Oe=this.sliceSerialize(ce).length;Ee.depth=Oe}}function x(){this.data.setextHeadingSlurpLineEnding=!0}function k(ce){const Ee=this.stack[this.stack.length-1];Ee.depth=this.sliceSerialize(ce).codePointAt(0)===61?1:2}function R(){this.data.setextHeadingSlurpLineEnding=void 0}function z(ce){const Oe=this.stack[this.stack.length-1].children;let ht=Oe[Oe.length-1];(!ht||ht.type!=="text")&&(ht=dt(),ht.position={start:pa(ce.start),end:void 0},Oe.push(ht)),this.stack.push(ht)}function _(ce){const Ee=this.stack.pop();Ee.value+=this.sliceSerialize(ce),Ee.position.end=pa(ce.end)}function A(ce){const Ee=this.stack[this.stack.length-1];if(this.data.atHardBreak){const Oe=Ee.children[Ee.children.length-1];Oe.position.end=pa(ce.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&n.canContainEols.includes(Ee.type)&&(z.call(this,ce),_.call(this,ce))}function X(){this.data.atHardBreak=!0}function H(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.value=ce}function M(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.value=ce}function T(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.value=ce}function F(){const ce=this.stack[this.stack.length-1];if(this.data.inReference){const Ee=this.data.referenceType||"shortcut";ce.type+="Reference",ce.referenceType=Ee,delete ce.url,delete ce.title}else delete ce.identifier,delete ce.label;this.data.referenceType=void 0}function W(){const ce=this.stack[this.stack.length-1];if(this.data.inReference){const Ee=this.data.referenceType||"shortcut";ce.type+="Reference",ce.referenceType=Ee,delete ce.url,delete ce.title}else delete ce.identifier,delete ce.label;this.data.referenceType=void 0}function oe(ce){const Ee=this.sliceSerialize(ce),Oe=this.stack[this.stack.length-2];Oe.label=YA(Ee),Oe.identifier=Si(Ee).toLowerCase()}function D(){const ce=this.stack[this.stack.length-1],Ee=this.resume(),Oe=this.stack[this.stack.length-1];if(this.data.inReference=!0,Oe.type==="link"){const ht=ce.children;Oe.children=ht}else Oe.alt=Ee}function E(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.url=ce}function P(){const ce=this.resume(),Ee=this.stack[this.stack.length-1];Ee.title=ce}function $(){this.data.inReference=void 0}function j(){this.data.referenceType="collapsed"}function q(ce){const Ee=this.resume(),Oe=this.stack[this.stack.length-1];Oe.label=Ee,Oe.identifier=Si(this.sliceSerialize(ce)).toLowerCase(),this.data.referenceType="full"}function le(ce){this.data.characterReferenceType=ce.type}function fe(ce){const Ee=this.sliceSerialize(ce),Oe=this.data.characterReferenceType;let ht;Oe?(ht=Yx(Ee,Oe==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):ht=Nm(Ee);const Ve=this.stack[this.stack.length-1];Ve.value+=ht}function Ce(ce){const Ee=this.stack.pop();Ee.position.end=pa(ce.end)}function Ae(ce){_.call(this,ce);const Ee=this.stack[this.stack.length-1];Ee.url=this.sliceSerialize(ce)}function re(ce){_.call(this,ce);const Ee=this.stack[this.stack.length-1];Ee.url="mailto:"+this.sliceSerialize(ce)}function Z(){return{type:"blockquote",children:[]}}function pe(){return{type:"code",lang:null,meta:null,value:""}}function ie(){return{type:"inlineCode",value:""}}function ve(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ne(){return{type:"emphasis",children:[]}}function L(){return{type:"heading",depth:0,children:[]}}function Y(){return{type:"break"}}function ue(){return{type:"html",value:""}}function B(){return{type:"image",title:null,url:"",alt:null}}function xe(){return{type:"link",title:null,url:"",children:[]}}function je(ce){return{type:"list",ordered:ce.type==="listOrdered",start:null,spread:ce._spread,children:[]}}function se(ce){return{type:"listItem",spread:ce._spread,checked:null,children:[]}}function Ue(){return{type:"paragraph",children:[]}}function De(){return{type:"strong",children:[]}}function dt(){return{type:"text",value:""}}function Pe(){return{type:"thematicBreak"}}}function pa(e){return{line:e.line,column:e.column,offset:e.offset}}function ov(e,n){let s=-1;for(;++s<n.length;){const a=n[s];Array.isArray(a)?ov(e,a):eR(e,a)}}function eR(e,n){let s;for(s in n)if(rv.call(n,s))switch(s){case"canContainEols":{const a=n[s];a&&e[s].push(...a);break}case"transforms":{const a=n[s];a&&e[s].push(...a);break}case"enter":case"exit":{const a=n[s];a&&Object.assign(e[s],a);break}}}function zp(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+Fo({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+Fo({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+Fo({start:n.start,end:n.end})+") is still open")}function tR(e){const n=this;n.parser=s;function s(a){return XA(a,{...n.data("settings"),...e,extensions:n.data("micromarkExtensions")||[],mdastExtensions:n.data("fromMarkdownExtensions")||[]})}}function nR(e,n){const s={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(n),!0)};return e.patch(n,s),e.applyData(n,s)}function sR(e,n){const s={type:"element",tagName:"br",properties:{},children:[]};return e.patch(n,s),[e.applyData(n,s),{type:"text",value:`
|
|
657
|
+
`}]}function iR(e,n){const s=n.value?n.value+`
|
|
658
|
+
`:"",a={},r=n.lang?n.lang.split(/\s+/):[];r.length>0&&(a.className=["language-"+r[0]]);let o={type:"element",tagName:"code",properties:a,children:[{type:"text",value:s}]};return n.meta&&(o.data={meta:n.meta}),e.patch(n,o),o=e.applyData(n,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(n,o),o}function aR(e,n){const s={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function rR(e,n){const s={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function oR(e,n){const s=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=String(n.identifier).toUpperCase(),r=Zr(a.toLowerCase()),o=e.footnoteOrder.indexOf(a);let l,c=e.footnoteCounts.get(a);c===void 0?(c=0,e.footnoteOrder.push(a),l=e.footnoteOrder.length):l=o+1,c+=1,e.footnoteCounts.set(a,c);const d={type:"element",tagName:"a",properties:{href:"#"+s+"fn-"+r,id:s+"fnref-"+r+(c>1?"-"+c:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(n,d);const u={type:"element",tagName:"sup",properties:{},children:[d]};return e.patch(n,u),e.applyData(n,u)}function lR(e,n){const s={type:"element",tagName:"h"+n.depth,properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function cR(e,n){if(e.options.allowDangerousHtml){const s={type:"raw",value:n.value};return e.patch(n,s),e.applyData(n,s)}}function lv(e,n){const s=n.referenceType;let a="]";if(s==="collapsed"?a+="[]":s==="full"&&(a+="["+(n.label||n.identifier)+"]"),n.type==="imageReference")return[{type:"text",value:"!["+n.alt+a}];const r=e.all(n),o=r[0];o&&o.type==="text"?o.value="["+o.value:r.unshift({type:"text",value:"["});const l=r[r.length-1];return l&&l.type==="text"?l.value+=a:r.push({type:"text",value:a}),r}function dR(e,n){const s=String(n.identifier).toUpperCase(),a=e.definitionById.get(s);if(!a)return lv(e,n);const r={src:Zr(a.url||""),alt:n.alt};a.title!==null&&a.title!==void 0&&(r.title=a.title);const o={type:"element",tagName:"img",properties:r,children:[]};return e.patch(n,o),e.applyData(n,o)}function uR(e,n){const s={src:Zr(n.url)};n.alt!==null&&n.alt!==void 0&&(s.alt=n.alt),n.title!==null&&n.title!==void 0&&(s.title=n.title);const a={type:"element",tagName:"img",properties:s,children:[]};return e.patch(n,a),e.applyData(n,a)}function mR(e,n){const s={type:"text",value:n.value.replace(/\r?\n|\r/g," ")};e.patch(n,s);const a={type:"element",tagName:"code",properties:{},children:[s]};return e.patch(n,a),e.applyData(n,a)}function hR(e,n){const s=String(n.identifier).toUpperCase(),a=e.definitionById.get(s);if(!a)return lv(e,n);const r={href:Zr(a.url||"")};a.title!==null&&a.title!==void 0&&(r.title=a.title);const o={type:"element",tagName:"a",properties:r,children:e.all(n)};return e.patch(n,o),e.applyData(n,o)}function pR(e,n){const s={href:Zr(n.url)};n.title!==null&&n.title!==void 0&&(s.title=n.title);const a={type:"element",tagName:"a",properties:s,children:e.all(n)};return e.patch(n,a),e.applyData(n,a)}function fR(e,n,s){const a=e.all(n),r=s?gR(s):cv(n),o={},l=[];if(typeof n.checked=="boolean"){const h=a[0];let m;h&&h.type==="element"&&h.tagName==="p"?m=h:(m={type:"element",tagName:"p",properties:{},children:[]},a.unshift(m)),m.children.length>0&&m.children.unshift({type:"text",value:" "}),m.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:n.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let c=-1;for(;++c<a.length;){const h=a[c];(r||c!==0||h.type!=="element"||h.tagName!=="p")&&l.push({type:"text",value:`
|
|
659
|
+
`}),h.type==="element"&&h.tagName==="p"&&!r?l.push(...h.children):l.push(h)}const d=a[a.length-1];d&&(r||d.type!=="element"||d.tagName!=="p")&&l.push({type:"text",value:`
|
|
660
|
+
`});const u={type:"element",tagName:"li",properties:o,children:l};return e.patch(n,u),e.applyData(n,u)}function gR(e){let n=!1;if(e.type==="list"){n=e.spread||!1;const s=e.children;let a=-1;for(;!n&&++a<s.length;)n=cv(s[a])}return n}function cv(e){const n=e.spread;return n??e.children.length>1}function bR(e,n){const s={},a=e.all(n);let r=-1;for(typeof n.start=="number"&&n.start!==1&&(s.start=n.start);++r<a.length;){const l=a[r];if(l.type==="element"&&l.tagName==="li"&&l.properties&&Array.isArray(l.properties.className)&&l.properties.className.includes("task-list-item")){s.className=["contains-task-list"];break}}const o={type:"element",tagName:n.ordered?"ol":"ul",properties:s,children:e.wrap(a,!0)};return e.patch(n,o),e.applyData(n,o)}function xR(e,n){const s={type:"element",tagName:"p",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function vR(e,n){const s={type:"root",children:e.wrap(e.all(n))};return e.patch(n,s),e.applyData(n,s)}function yR(e,n){const s={type:"element",tagName:"strong",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function wR(e,n){const s=e.all(n),a=s.shift(),r=[];if(a){const l={type:"element",tagName:"thead",properties:{},children:e.wrap([a],!0)};e.patch(n.children[0],l),r.push(l)}if(s.length>0){const l={type:"element",tagName:"tbody",properties:{},children:e.wrap(s,!0)},c=vm(n.children[1]),d=Ux(n.children[n.children.length-1]);c&&d&&(l.position={start:c,end:d}),r.push(l)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(r,!0)};return e.patch(n,o),e.applyData(n,o)}function kR(e,n,s){const a=s?s.children:void 0,o=(a?a.indexOf(n):1)===0?"th":"td",l=s&&s.type==="table"?s.align:void 0,c=l?l.length:n.children.length;let d=-1;const u=[];for(;++d<c;){const m=n.children[d],f={},p=l?l[d]:void 0;p&&(f.align=p);let g={type:"element",tagName:o,properties:f,children:[]};m&&(g.children=e.all(m),e.patch(m,g),g=e.applyData(m,g)),u.push(g)}const h={type:"element",tagName:"tr",properties:{},children:e.wrap(u,!0)};return e.patch(n,h),e.applyData(n,h)}function jR(e,n){const s={type:"element",tagName:"td",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}const Bp=9,Up=32;function NR(e){const n=String(e),s=/\r?\n|\r/g;let a=s.exec(n),r=0;const o=[];for(;a;)o.push(Hp(n.slice(r,a.index),r>0,!0),a[0]),r=a.index+a[0].length,a=s.exec(n);return o.push(Hp(n.slice(r),r>0,!1)),o.join("")}function Hp(e,n,s){let a=0,r=e.length;if(n){let o=e.codePointAt(a);for(;o===Bp||o===Up;)a++,o=e.codePointAt(a)}if(s){let o=e.codePointAt(r-1);for(;o===Bp||o===Up;)r--,o=e.codePointAt(r-1)}return r>a?e.slice(a,r):""}function SR(e,n){const s={type:"text",value:NR(String(n.value))};return e.patch(n,s),e.applyData(n,s)}function CR(e,n){const s={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,s),e.applyData(n,s)}const ER={blockquote:nR,break:sR,code:iR,delete:aR,emphasis:rR,footnoteReference:oR,heading:lR,html:cR,imageReference:dR,image:uR,inlineCode:mR,linkReference:hR,link:pR,listItem:fR,list:bR,paragraph:xR,root:vR,strong:yR,table:wR,tableCell:jR,tableRow:kR,text:SR,thematicBreak:CR,toml:kl,yaml:kl,definition:kl,footnoteDefinition:kl};function kl(){}const dv=-1,Lc=0,Bo=1,cc=2,Cm=3,Em=4,_m=5,Mm=6,uv=7,mv=8,qp=typeof self=="object"?self:globalThis,_R=(e,n)=>{const s=(r,o)=>(e.set(o,r),r),a=r=>{if(e.has(r))return e.get(r);const[o,l]=n[r];switch(o){case Lc:case dv:return s(l,r);case Bo:{const c=s([],r);for(const d of l)c.push(a(d));return c}case cc:{const c=s({},r);for(const[d,u]of l)c[a(d)]=a(u);return c}case Cm:return s(new Date(l),r);case Em:{const{source:c,flags:d}=l;return s(new RegExp(c,d),r)}case _m:{const c=s(new Map,r);for(const[d,u]of l)c.set(a(d),a(u));return c}case Mm:{const c=s(new Set,r);for(const d of l)c.add(a(d));return c}case uv:{const{name:c,message:d}=l;return s(new qp[c](d),r)}case mv:return s(BigInt(l),r);case"BigInt":return s(Object(BigInt(l)),r);case"ArrayBuffer":return s(new Uint8Array(l).buffer,l);case"DataView":{const{buffer:c}=new Uint8Array(l);return s(new DataView(c),l)}}return s(new qp[o](l),r)};return a},Vp=e=>_R(new Map,e)(0),br="",{toString:MR}={},{keys:AR}=Object,fo=e=>{const n=typeof e;if(n!=="object"||!e)return[Lc,n];const s=MR.call(e).slice(8,-1);switch(s){case"Array":return[Bo,br];case"Object":return[cc,br];case"Date":return[Cm,br];case"RegExp":return[Em,br];case"Map":return[_m,br];case"Set":return[Mm,br];case"DataView":return[Bo,s]}return s.includes("Array")?[Bo,s]:s.includes("Error")?[uv,s]:[cc,s]},jl=([e,n])=>e===Lc&&(n==="function"||n==="symbol"),RR=(e,n,s,a)=>{const r=(l,c)=>{const d=a.push(l)-1;return s.set(c,d),d},o=l=>{if(s.has(l))return s.get(l);let[c,d]=fo(l);switch(c){case Lc:{let h=l;switch(d){case"bigint":c=mv,h=l.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);h=null;break;case"undefined":return r([dv],l)}return r([c,h],l)}case Bo:{if(d){let f=l;return d==="DataView"?f=new Uint8Array(l.buffer):d==="ArrayBuffer"&&(f=new Uint8Array(l)),r([d,[...f]],l)}const h=[],m=r([c,h],l);for(const f of l)h.push(o(f));return m}case cc:{if(d)switch(d){case"BigInt":return r([d,l.toString()],l);case"Boolean":case"Number":case"String":return r([d,l.valueOf()],l)}if(n&&"toJSON"in l)return o(l.toJSON());const h=[],m=r([c,h],l);for(const f of AR(l))(e||!jl(fo(l[f])))&&h.push([o(f),o(l[f])]);return m}case Cm:return r([c,l.toISOString()],l);case Em:{const{source:h,flags:m}=l;return r([c,{source:h,flags:m}],l)}case _m:{const h=[],m=r([c,h],l);for(const[f,p]of l)(e||!(jl(fo(f))||jl(fo(p))))&&h.push([o(f),o(p)]);return m}case Mm:{const h=[],m=r([c,h],l);for(const f of l)(e||!jl(fo(f)))&&h.push(o(f));return m}}const{message:u}=l;return r([c,{name:d,message:u}],l)};return o},Wp=(e,{json:n,lossy:s}={})=>{const a=[];return RR(!(n||s),!!n,new Map,a)(e),a},dc=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?Vp(Wp(e,n)):structuredClone(e):(e,n)=>Vp(Wp(e,n));function IR(e,n){const s=[{type:"text",value:"↩"}];return n>1&&s.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(n)}]}),s}function TR(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function PR(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",s=e.options.footnoteBackContent||IR,a=e.options.footnoteBackLabel||TR,r=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",l=e.options.footnoteLabelProperties||{className:["sr-only"]},c=[];let d=-1;for(;++d<e.footnoteOrder.length;){const u=e.footnoteById.get(e.footnoteOrder[d]);if(!u)continue;const h=e.all(u),m=String(u.identifier).toUpperCase(),f=Zr(m.toLowerCase());let p=0;const g=[],w=e.footnoteCounts.get(m);for(;w!==void 0&&++p<=w;){g.length>0&&g.push({type:"text",value:" "});let y=typeof s=="string"?s:s(d,p);typeof y=="string"&&(y={type:"text",value:y}),g.push({type:"element",tagName:"a",properties:{href:"#"+n+"fnref-"+f+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof a=="string"?a:a(d,p),className:["data-footnote-backref"]},children:Array.isArray(y)?y:[y]})}const v=h[h.length-1];if(v&&v.type==="element"&&v.tagName==="p"){const y=v.children[v.children.length-1];y&&y.type==="text"?y.value+=" ":v.children.push({type:"text",value:" "}),v.children.push(...g)}else h.push(...g);const b={type:"element",tagName:"li",properties:{id:n+"fn-"+f},children:e.wrap(h,!0)};e.patch(u,b),c.push(b)}if(c.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...dc(l),id:"footnote-label"},children:[{type:"text",value:r}]},{type:"text",value:`
|
|
661
|
+
`},{type:"element",tagName:"ol",properties:{},children:e.wrap(c,!0)},{type:"text",value:`
|
|
662
|
+
`}]}}const Oc=(function(e){if(e==null)return OR;if(typeof e=="function")return Fc(e);if(typeof e=="object")return Array.isArray(e)?$R(e):DR(e);if(typeof e=="string")return LR(e);throw new Error("Expected function, string, or object as test")});function $R(e){const n=[];let s=-1;for(;++s<e.length;)n[s]=Oc(e[s]);return Fc(a);function a(...r){let o=-1;for(;++o<n.length;)if(n[o].apply(this,r))return!0;return!1}}function DR(e){const n=e;return Fc(s);function s(a){const r=a;let o;for(o in e)if(r[o]!==n[o])return!1;return!0}}function LR(e){return Fc(n);function n(s){return s&&s.type===e}}function Fc(e){return n;function n(s,a,r){return!!(FR(s)&&e.call(this,s,typeof a=="number"?a:void 0,r||void 0))}}function OR(){return!0}function FR(e){return e!==null&&typeof e=="object"&&"type"in e}const hv=[],zR=!0,$u=!1,BR="skip";function pv(e,n,s,a){let r;typeof n=="function"&&typeof s!="function"?(a=s,s=n):r=n;const o=Oc(r),l=a?-1:1;c(e,void 0,[])();function c(d,u,h){const m=d&&typeof d=="object"?d:{};if(typeof m.type=="string"){const p=typeof m.tagName=="string"?m.tagName:typeof m.name=="string"?m.name:void 0;Object.defineProperty(f,"name",{value:"node ("+(d.type+(p?"<"+p+">":""))+")"})}return f;function f(){let p=hv,g,w,v;if((!n||o(d,u,h[h.length-1]||void 0))&&(p=UR(s(d,h)),p[0]===$u))return p;if("children"in d&&d.children){const b=d;if(b.children&&p[0]!==BR)for(w=(a?b.children.length:-1)+l,v=h.concat(b);w>-1&&w<b.children.length;){const y=b.children[w];if(g=c(y,w,v)(),g[0]===$u)return g;w=typeof g[1]=="number"?g[1]:w+l}}return p}}}function UR(e){return Array.isArray(e)?e:typeof e=="number"?[zR,e]:e==null?hv:[e]}function Am(e,n,s,a){let r,o,l;typeof n=="function"&&typeof s!="function"?(o=void 0,l=n,r=s):(o=n,l=s,r=a),pv(e,o,c,r);function c(d,u){const h=u[u.length-1],m=h?h.children.indexOf(d):void 0;return l(d,m,h)}}const Du={}.hasOwnProperty,HR={};function qR(e,n){const s=n||HR,a=new Map,r=new Map,o=new Map,l={...ER,...s.handlers},c={all:u,applyData:WR,definitionById:a,footnoteById:r,footnoteCounts:o,footnoteOrder:[],handlers:l,one:d,options:s,patch:VR,wrap:KR};return Am(e,function(h){if(h.type==="definition"||h.type==="footnoteDefinition"){const m=h.type==="definition"?a:r,f=String(h.identifier).toUpperCase();m.has(f)||m.set(f,h)}}),c;function d(h,m){const f=h.type,p=c.handlers[f];if(Du.call(c.handlers,f)&&p)return p(c,h,m);if(c.options.passThrough&&c.options.passThrough.includes(f)){if("children"in h){const{children:w,...v}=h,b=dc(v);return b.children=c.all(h),b}return dc(h)}return(c.options.unknownHandler||GR)(c,h,m)}function u(h){const m=[];if("children"in h){const f=h.children;let p=-1;for(;++p<f.length;){const g=c.one(f[p],h);if(g){if(p&&f[p-1].type==="break"&&(!Array.isArray(g)&&g.type==="text"&&(g.value=Gp(g.value)),!Array.isArray(g)&&g.type==="element")){const w=g.children[0];w&&w.type==="text"&&(w.value=Gp(w.value))}Array.isArray(g)?m.push(...g):m.push(g)}}}return m}}function VR(e,n){e.position&&(n.position=TM(e))}function WR(e,n){let s=n;if(e&&e.data){const a=e.data.hName,r=e.data.hChildren,o=e.data.hProperties;if(typeof a=="string")if(s.type==="element")s.tagName=a;else{const l="children"in s?s.children:[s];s={type:"element",tagName:a,properties:{},children:l}}s.type==="element"&&o&&Object.assign(s.properties,dc(o)),"children"in s&&s.children&&r!==null&&r!==void 0&&(s.children=r)}return s}function GR(e,n){const s=n.data||{},a="value"in n&&!(Du.call(s,"hProperties")||Du.call(s,"hChildren"))?{type:"text",value:n.value}:{type:"element",tagName:"div",properties:{},children:e.all(n)};return e.patch(n,a),e.applyData(n,a)}function KR(e,n){const s=[];let a=-1;for(n&&s.push({type:"text",value:`
|
|
663
|
+
`});++a<e.length;)a&&s.push({type:"text",value:`
|
|
664
|
+
`}),s.push(e[a]);return n&&e.length>0&&s.push({type:"text",value:`
|
|
665
|
+
`}),s}function Gp(e){let n=0,s=e.charCodeAt(n);for(;s===9||s===32;)n++,s=e.charCodeAt(n);return e.slice(n)}function Kp(e,n){const s=qR(e,n),a=s.one(e,void 0),r=PR(s),o=Array.isArray(a)?{type:"root",children:a}:a||{type:"root",children:[]};return r&&o.children.push({type:"text",value:`
|
|
666
|
+
`},r),o}function JR(e,n){return e&&"run"in e?async function(s,a){const r=Kp(s,{file:a,...n});await e.run(r,a)}:function(s,a){return Kp(s,{file:a,...e||n})}}function Jp(e){if(e)throw e}var kd,Yp;function YR(){if(Yp)return kd;Yp=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,s=Object.defineProperty,a=Object.getOwnPropertyDescriptor,r=function(u){return typeof Array.isArray=="function"?Array.isArray(u):n.call(u)==="[object Array]"},o=function(u){if(!u||n.call(u)!=="[object Object]")return!1;var h=e.call(u,"constructor"),m=u.constructor&&u.constructor.prototype&&e.call(u.constructor.prototype,"isPrototypeOf");if(u.constructor&&!h&&!m)return!1;var f;for(f in u);return typeof f>"u"||e.call(u,f)},l=function(u,h){s&&h.name==="__proto__"?s(u,h.name,{enumerable:!0,configurable:!0,value:h.newValue,writable:!0}):u[h.name]=h.newValue},c=function(u,h){if(h==="__proto__")if(e.call(u,h)){if(a)return a(u,h).value}else return;return u[h]};return kd=function d(){var u,h,m,f,p,g,w=arguments[0],v=1,b=arguments.length,y=!1;for(typeof w=="boolean"&&(y=w,w=arguments[1]||{},v=2),(w==null||typeof w!="object"&&typeof w!="function")&&(w={});v<b;++v)if(u=arguments[v],u!=null)for(h in u)m=c(w,h),f=c(u,h),w!==f&&(y&&f&&(o(f)||(p=r(f)))?(p?(p=!1,g=m&&r(m)?m:[]):g=m&&o(m)?m:{},l(w,{name:h,newValue:d(y,g,f)})):typeof f<"u"&&l(w,{name:h,newValue:f}));return w},kd}var QR=YR();const jd=Nb(QR);function Lu(e){if(typeof e!="object"||e===null)return!1;const n=Object.getPrototypeOf(e);return(n===null||n===Object.prototype||Object.getPrototypeOf(n)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function XR(){const e=[],n={run:s,use:a};return n;function s(...r){let o=-1;const l=r.pop();if(typeof l!="function")throw new TypeError("Expected function as last argument, not "+l);c(null,...r);function c(d,...u){const h=e[++o];let m=-1;if(d){l(d);return}for(;++m<r.length;)(u[m]===null||u[m]===void 0)&&(u[m]=r[m]);r=u,h?ZR(h,c)(...u):l(null,...u)}}function a(r){if(typeof r!="function")throw new TypeError("Expected `middelware` to be a function, not "+r);return e.push(r),n}}function ZR(e,n){let s;return a;function a(...l){const c=e.length>l.length;let d;c&&l.push(r);try{d=e.apply(this,l)}catch(u){const h=u;if(c&&s)throw h;return r(h)}c||(d&&d.then&&typeof d.then=="function"?d.then(o,r):d instanceof Error?r(d):o(d))}function r(l,...c){s||(s=!0,n(l,...c))}function o(l){r(null,l)}}const Oi={basename:eI,dirname:tI,extname:nI,join:sI,sep:"/"};function eI(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');dl(e);let s=0,a=-1,r=e.length,o;if(n===void 0||n.length===0||n.length>e.length){for(;r--;)if(e.codePointAt(r)===47){if(o){s=r+1;break}}else a<0&&(o=!0,a=r+1);return a<0?"":e.slice(s,a)}if(n===e)return"";let l=-1,c=n.length-1;for(;r--;)if(e.codePointAt(r)===47){if(o){s=r+1;break}}else l<0&&(o=!0,l=r+1),c>-1&&(e.codePointAt(r)===n.codePointAt(c--)?c<0&&(a=r):(c=-1,a=l));return s===a?a=l:a<0&&(a=e.length),e.slice(s,a)}function tI(e){if(dl(e),e.length===0)return".";let n=-1,s=e.length,a;for(;--s;)if(e.codePointAt(s)===47){if(a){n=s;break}}else a||(a=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function nI(e){dl(e);let n=e.length,s=-1,a=0,r=-1,o=0,l;for(;n--;){const c=e.codePointAt(n);if(c===47){if(l){a=n+1;break}continue}s<0&&(l=!0,s=n+1),c===46?r<0?r=n:o!==1&&(o=1):r>-1&&(o=-1)}return r<0||s<0||o===0||o===1&&r===s-1&&r===a+1?"":e.slice(r,s)}function sI(...e){let n=-1,s;for(;++n<e.length;)dl(e[n]),e[n]&&(s=s===void 0?e[n]:s+"/"+e[n]);return s===void 0?".":iI(s)}function iI(e){dl(e);const n=e.codePointAt(0)===47;let s=aI(e,!n);return s.length===0&&!n&&(s="."),s.length>0&&e.codePointAt(e.length-1)===47&&(s+="/"),n?"/"+s:s}function aI(e,n){let s="",a=0,r=-1,o=0,l=-1,c,d;for(;++l<=e.length;){if(l<e.length)c=e.codePointAt(l);else{if(c===47)break;c=47}if(c===47){if(!(r===l-1||o===1))if(r!==l-1&&o===2){if(s.length<2||a!==2||s.codePointAt(s.length-1)!==46||s.codePointAt(s.length-2)!==46){if(s.length>2){if(d=s.lastIndexOf("/"),d!==s.length-1){d<0?(s="",a=0):(s=s.slice(0,d),a=s.length-1-s.lastIndexOf("/")),r=l,o=0;continue}}else if(s.length>0){s="",a=0,r=l,o=0;continue}}n&&(s=s.length>0?s+"/..":"..",a=2)}else s.length>0?s+="/"+e.slice(r+1,l):s=e.slice(r+1,l),a=l-r-1;r=l,o=0}else c===46&&o>-1?o++:o=-1}return s}function dl(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const rI={cwd:oI};function oI(){return"/"}function Ou(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function lI(e){if(typeof e=="string")e=new URL(e);else if(!Ou(e)){const n=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw n.code="ERR_INVALID_ARG_TYPE",n}if(e.protocol!=="file:"){const n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return cI(e)}function cI(e){if(e.hostname!==""){const a=new TypeError('File URL host must be "localhost" or empty on darwin');throw a.code="ERR_INVALID_FILE_URL_HOST",a}const n=e.pathname;let s=-1;for(;++s<n.length;)if(n.codePointAt(s)===37&&n.codePointAt(s+1)===50){const a=n.codePointAt(s+2);if(a===70||a===102){const r=new TypeError("File URL path must not include encoded / characters");throw r.code="ERR_INVALID_FILE_URL_PATH",r}}return decodeURIComponent(n)}const Nd=["history","path","basename","stem","extname","dirname"];class fv{constructor(n){let s;n?Ou(n)?s={path:n}:typeof n=="string"||dI(n)?s={value:n}:s=n:s={},this.cwd="cwd"in s?"":rI.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let a=-1;for(;++a<Nd.length;){const o=Nd[a];o in s&&s[o]!==void 0&&s[o]!==null&&(this[o]=o==="history"?[...s[o]]:s[o])}let r;for(r in s)Nd.includes(r)||(this[r]=s[r])}get basename(){return typeof this.path=="string"?Oi.basename(this.path):void 0}set basename(n){Cd(n,"basename"),Sd(n,"basename"),this.path=Oi.join(this.dirname||"",n)}get dirname(){return typeof this.path=="string"?Oi.dirname(this.path):void 0}set dirname(n){Qp(this.basename,"dirname"),this.path=Oi.join(n||"",this.basename)}get extname(){return typeof this.path=="string"?Oi.extname(this.path):void 0}set extname(n){if(Sd(n,"extname"),Qp(this.dirname,"extname"),n){if(n.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(n.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=Oi.join(this.dirname,this.stem+(n||""))}get path(){return this.history[this.history.length-1]}set path(n){Ou(n)&&(n=lI(n)),Cd(n,"path"),this.path!==n&&this.history.push(n)}get stem(){return typeof this.path=="string"?Oi.basename(this.path,this.extname):void 0}set stem(n){Cd(n,"stem"),Sd(n,"stem"),this.path=Oi.join(this.dirname||"",n+(this.extname||""))}fail(n,s,a){const r=this.message(n,s,a);throw r.fatal=!0,r}info(n,s,a){const r=this.message(n,s,a);return r.fatal=void 0,r}message(n,s,a){const r=new zs(n,s,a);return this.path&&(r.name=this.path+":"+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(n){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(n||void 0).decode(this.value)}}function Sd(e,n){if(e&&e.includes(Oi.sep))throw new Error("`"+n+"` cannot be a path: did not expect `"+Oi.sep+"`")}function Cd(e,n){if(!e)throw new Error("`"+n+"` cannot be empty")}function Qp(e,n){if(!e)throw new Error("Setting `"+n+"` requires `path` to be set too")}function dI(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const uI=(function(e){const a=this.constructor.prototype,r=a[e],o=function(){return r.apply(o,arguments)};return Object.setPrototypeOf(o,a),o}),mI={}.hasOwnProperty;class Rm extends uI{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=XR()}copy(){const n=new Rm;let s=-1;for(;++s<this.attachers.length;){const a=this.attachers[s];n.use(...a)}return n.data(jd(!0,{},this.namespace)),n}data(n,s){return typeof n=="string"?arguments.length===2?(Md("data",this.frozen),this.namespace[n]=s,this):mI.call(this.namespace,n)&&this.namespace[n]||void 0:n?(Md("data",this.frozen),this.namespace=n,this):this.namespace}freeze(){if(this.frozen)return this;const n=this;for(;++this.freezeIndex<this.attachers.length;){const[s,...a]=this.attachers[this.freezeIndex];if(a[0]===!1)continue;a[0]===!0&&(a[0]=void 0);const r=s.call(n,...a);typeof r=="function"&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(n){this.freeze();const s=Nl(n),a=this.parser||this.Parser;return Ed("parse",a),a(String(s),s)}process(n,s){const a=this;return this.freeze(),Ed("process",this.parser||this.Parser),_d("process",this.compiler||this.Compiler),s?r(void 0,s):new Promise(r);function r(o,l){const c=Nl(n),d=a.parse(c);a.run(d,c,function(h,m,f){if(h||!m||!f)return u(h);const p=m,g=a.stringify(p,f);fI(g)?f.value=g:f.result=g,u(h,f)});function u(h,m){h||!m?l(h):o?o(m):s(void 0,m)}}}processSync(n){let s=!1,a;return this.freeze(),Ed("processSync",this.parser||this.Parser),_d("processSync",this.compiler||this.Compiler),this.process(n,r),Zp("processSync","process",s),a;function r(o,l){s=!0,Jp(o),a=l}}run(n,s,a){Xp(n),this.freeze();const r=this.transformers;return!a&&typeof s=="function"&&(a=s,s=void 0),a?o(void 0,a):new Promise(o);function o(l,c){const d=Nl(s);r.run(n,d,u);function u(h,m,f){const p=m||n;h?c(h):l?l(p):a(void 0,p,f)}}}runSync(n,s){let a=!1,r;return this.run(n,s,o),Zp("runSync","run",a),r;function o(l,c){Jp(l),r=c,a=!0}}stringify(n,s){this.freeze();const a=Nl(s),r=this.compiler||this.Compiler;return _d("stringify",r),Xp(n),r(n,a)}use(n,...s){const a=this.attachers,r=this.namespace;if(Md("use",this.frozen),n!=null)if(typeof n=="function")d(n,s);else if(typeof n=="object")Array.isArray(n)?c(n):l(n);else throw new TypeError("Expected usable value, not `"+n+"`");return this;function o(u){if(typeof u=="function")d(u,[]);else if(typeof u=="object")if(Array.isArray(u)){const[h,...m]=u;d(h,m)}else l(u);else throw new TypeError("Expected usable value, not `"+u+"`")}function l(u){if(!("plugins"in u)&&!("settings"in u))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");c(u.plugins),u.settings&&(r.settings=jd(!0,r.settings,u.settings))}function c(u){let h=-1;if(u!=null)if(Array.isArray(u))for(;++h<u.length;){const m=u[h];o(m)}else throw new TypeError("Expected a list of plugins, not `"+u+"`")}function d(u,h){let m=-1,f=-1;for(;++m<a.length;)if(a[m][0]===u){f=m;break}if(f===-1)a.push([u,...h]);else if(h.length>0){let[p,...g]=h;const w=a[f][1];Lu(w)&&Lu(p)&&(p=jd(!0,w,p)),a[f]=[u,p,...g]}}}}const hI=new Rm().freeze();function Ed(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function _d(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Md(e,n){if(n)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Xp(e){if(!Lu(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Zp(e,n,s){if(!s)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function Nl(e){return pI(e)?e:new fv(e)}function pI(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function fI(e){return typeof e=="string"||gI(e)}function gI(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const bI="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",ef=[],tf={allowDangerousHtml:!0},xI=/^(https?|ircs?|mailto|xmpp)$/i,vI=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function ti(e){const n=yI(e),s=wI(e);return kI(n.runSync(n.parse(s),s),e)}function yI(e){const n=e.rehypePlugins||ef,s=e.remarkPlugins||ef,a=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...tf}:tf;return hI().use(tR).use(s).use(JR,a).use(n)}function wI(e){const n=e.children||"",s=new fv;return typeof n=="string"&&(s.value=n),s}function kI(e,n){const s=n.allowedElements,a=n.allowElement,r=n.components,o=n.disallowedElements,l=n.skipHtml,c=n.unwrapDisallowed,d=n.urlTransform||jI;for(const h of vI)Object.hasOwn(n,h.from)&&(""+h.from+(h.to?"use `"+h.to+"` instead":"remove it")+bI+h.id,void 0);return Am(e,u),OM(e,{Fragment:t.Fragment,components:r,ignoreInvalidStyle:!0,jsx:t.jsx,jsxs:t.jsxs,passKeys:!0,passNode:!0});function u(h,m,f){if(h.type==="raw"&&f&&typeof m=="number")return l?f.children.splice(m,1):f.children[m]={type:"text",value:h.value},m;if(h.type==="element"){let p;for(p in vd)if(Object.hasOwn(vd,p)&&Object.hasOwn(h.properties,p)){const g=h.properties[p],w=vd[p];(w===null||w.includes(h.tagName))&&(h.properties[p]=d(String(g||""),p,h))}}if(h.type==="element"){let p=s?!s.includes(h.tagName):o?o.includes(h.tagName):!1;if(!p&&a&&typeof m=="number"&&(p=!a(h,m,f)),p&&f&&typeof m=="number")return c&&h.children?f.children.splice(m,1,...h.children):f.children.splice(m,1),m}}}function jI(e){const n=e.indexOf(":"),s=e.indexOf("?"),a=e.indexOf("#"),r=e.indexOf("/");return n===-1||r!==-1&&n>r||s!==-1&&n>s||a!==-1&&n>a||xI.test(e.slice(0,n))?e:""}function nf(e,n){const s=String(e);if(typeof n!="string")throw new TypeError("Expected character");let a=0,r=s.indexOf(n);for(;r!==-1;)a++,r=s.indexOf(n,r+n.length);return a}function NI(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function SI(e,n,s){const r=Oc((s||{}).ignore||[]),o=CI(n);let l=-1;for(;++l<o.length;)pv(e,"text",c);function c(u,h){let m=-1,f;for(;++m<h.length;){const p=h[m],g=f?f.children:void 0;if(r(p,g?g.indexOf(p):void 0,f))return;f=p}if(f)return d(u,h)}function d(u,h){const m=h[h.length-1],f=o[l][0],p=o[l][1];let g=0;const v=m.children.indexOf(u);let b=!1,y=[];f.lastIndex=0;let N=f.exec(u.value);for(;N;){const S=N.index,C={index:N.index,input:N.input,stack:[...h,u]};let x=p(...N,C);if(typeof x=="string"&&(x=x.length>0?{type:"text",value:x}:void 0),x===!1?f.lastIndex=S+1:(g!==S&&y.push({type:"text",value:u.value.slice(g,S)}),Array.isArray(x)?y.push(...x):x&&y.push(x),g=S+N[0].length,b=!0),!f.global)break;N=f.exec(u.value)}return b?(g<u.value.length&&y.push({type:"text",value:u.value.slice(g)}),m.children.splice(v,1,...y)):y=[u],v+y.length}}function CI(e){const n=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const s=!e[0]||Array.isArray(e[0])?e:[e];let a=-1;for(;++a<s.length;){const r=s[a];n.push([EI(r[0]),_I(r[1])])}return n}function EI(e){return typeof e=="string"?new RegExp(NI(e),"g"):e}function _I(e){return typeof e=="function"?e:function(){return e}}const Ad="phrasing",Rd=["autolink","link","image","label"];function MI(){return{transforms:[DI],enter:{literalAutolink:RI,literalAutolinkEmail:Id,literalAutolinkHttp:Id,literalAutolinkWww:Id},exit:{literalAutolink:$I,literalAutolinkEmail:PI,literalAutolinkHttp:II,literalAutolinkWww:TI}}}function AI(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Ad,notInConstruct:Rd},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Ad,notInConstruct:Rd},{character:":",before:"[ps]",after:"\\/",inConstruct:Ad,notInConstruct:Rd}]}}function RI(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function Id(e){this.config.enter.autolinkProtocol.call(this,e)}function II(e){this.config.exit.autolinkProtocol.call(this,e)}function TI(e){this.config.exit.data.call(this,e);const n=this.stack[this.stack.length-1];n.type,n.url="http://"+this.sliceSerialize(e)}function PI(e){this.config.exit.autolinkEmail.call(this,e)}function $I(e){this.exit(e)}function DI(e){SI(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,LI],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,OI]],{ignore:["link","linkReference"]})}function LI(e,n,s,a,r){let o="";if(!gv(r)||(/^w/i.test(n)&&(s=n+s,n="",o="http://"),!FI(s)))return!1;const l=zI(s+a);if(!l[0])return!1;const c={type:"link",title:null,url:o+n+l[0],children:[{type:"text",value:n+l[0]}]};return l[1]?[c,{type:"text",value:l[1]}]:c}function OI(e,n,s,a){return!gv(a,!0)||/[-\d_]$/.test(s)?!1:{type:"link",title:null,url:"mailto:"+n+"@"+s,children:[{type:"text",value:n+"@"+s}]}}function FI(e){const n=e.split(".");return!(n.length<2||n[n.length-1]&&(/_/.test(n[n.length-1])||!/[a-zA-Z\d]/.test(n[n.length-1]))||n[n.length-2]&&(/_/.test(n[n.length-2])||!/[a-zA-Z\d]/.test(n[n.length-2])))}function zI(e){const n=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!n)return[e,void 0];e=e.slice(0,n.index);let s=n[0],a=s.indexOf(")");const r=nf(e,"(");let o=nf(e,")");for(;a!==-1&&r>o;)e+=s.slice(0,a+1),s=s.slice(a+1),a=s.indexOf(")"),o++;return[e,s]}function gv(e,n){const s=e.input.charCodeAt(e.index-1);return(e.index===0||Xa(s)||$c(s))&&(!n||s!==47)}bv.peek=JI;function BI(){this.buffer()}function UI(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function HI(){this.buffer()}function qI(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function VI(e){const n=this.resume(),s=this.stack[this.stack.length-1];s.type,s.identifier=Si(this.sliceSerialize(e)).toLowerCase(),s.label=n}function WI(e){this.exit(e)}function GI(e){const n=this.resume(),s=this.stack[this.stack.length-1];s.type,s.identifier=Si(this.sliceSerialize(e)).toLowerCase(),s.label=n}function KI(e){this.exit(e)}function JI(){return"["}function bv(e,n,s,a){const r=s.createTracker(a);let o=r.move("[^");const l=s.enter("footnoteReference"),c=s.enter("reference");return o+=r.move(s.safe(s.associationId(e),{after:"]",before:o})),c(),l(),o+=r.move("]"),o}function YI(){return{enter:{gfmFootnoteCallString:BI,gfmFootnoteCall:UI,gfmFootnoteDefinitionLabelString:HI,gfmFootnoteDefinition:qI},exit:{gfmFootnoteCallString:VI,gfmFootnoteCall:WI,gfmFootnoteDefinitionLabelString:GI,gfmFootnoteDefinition:KI}}}function QI(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:s,footnoteReference:bv},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function s(a,r,o,l){const c=o.createTracker(l);let d=c.move("[^");const u=o.enter("footnoteDefinition"),h=o.enter("label");return d+=c.move(o.safe(o.associationId(a),{before:d,after:"]"})),h(),d+=c.move("]:"),a.children&&a.children.length>0&&(c.shift(4),d+=c.move((n?`
|
|
667
|
+
`:" ")+o.indentLines(o.containerFlow(a,c.current()),n?xv:XI))),u(),d}}function XI(e,n,s){return n===0?e:xv(e,n,s)}function xv(e,n,s){return(s?"":" ")+e}const ZI=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];vv.peek=iT;function eT(){return{canContainEols:["delete"],enter:{strikethrough:nT},exit:{strikethrough:sT}}}function tT(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:ZI}],handlers:{delete:vv}}}function nT(e){this.enter({type:"delete",children:[]},e)}function sT(e){this.exit(e)}function vv(e,n,s,a){const r=s.createTracker(a),o=s.enter("strikethrough");let l=r.move("~~");return l+=s.containerPhrasing(e,{...r.current(),before:l,after:"~"}),l+=r.move("~~"),o(),l}function iT(){return"~"}function aT(e){return e.length}function rT(e,n){const s=n||{},a=(s.align||[]).concat(),r=s.stringLength||aT,o=[],l=[],c=[],d=[];let u=0,h=-1;for(;++h<e.length;){const w=[],v=[];let b=-1;for(e[h].length>u&&(u=e[h].length);++b<e[h].length;){const y=oT(e[h][b]);if(s.alignDelimiters!==!1){const N=r(y);v[b]=N,(d[b]===void 0||N>d[b])&&(d[b]=N)}w.push(y)}l[h]=w,c[h]=v}let m=-1;if(typeof a=="object"&&"length"in a)for(;++m<u;)o[m]=sf(a[m]);else{const w=sf(a);for(;++m<u;)o[m]=w}m=-1;const f=[],p=[];for(;++m<u;){const w=o[m];let v="",b="";w===99?(v=":",b=":"):w===108?v=":":w===114&&(b=":");let y=s.alignDelimiters===!1?1:Math.max(1,d[m]-v.length-b.length);const N=v+"-".repeat(y)+b;s.alignDelimiters!==!1&&(y=v.length+y+b.length,y>d[m]&&(d[m]=y),p[m]=y),f[m]=N}l.splice(1,0,f),c.splice(1,0,p),h=-1;const g=[];for(;++h<l.length;){const w=l[h],v=c[h];m=-1;const b=[];for(;++m<u;){const y=w[m]||"";let N="",S="";if(s.alignDelimiters!==!1){const C=d[m]-(v[m]||0),x=o[m];x===114?N=" ".repeat(C):x===99?C%2?(N=" ".repeat(C/2+.5),S=" ".repeat(C/2-.5)):(N=" ".repeat(C/2),S=N):S=" ".repeat(C)}s.delimiterStart!==!1&&!m&&b.push("|"),s.padding!==!1&&!(s.alignDelimiters===!1&&y==="")&&(s.delimiterStart!==!1||m)&&b.push(" "),s.alignDelimiters!==!1&&b.push(N),b.push(y),s.alignDelimiters!==!1&&b.push(S),s.padding!==!1&&b.push(" "),(s.delimiterEnd!==!1||m!==u-1)&&b.push("|")}g.push(s.delimiterEnd===!1?b.join("").replace(/ +$/,""):b.join(""))}return g.join(`
|
|
668
|
+
`)}function oT(e){return e==null?"":String(e)}function sf(e){const n=typeof e=="string"?e.codePointAt(0):0;return n===67||n===99?99:n===76||n===108?108:n===82||n===114?114:0}function lT(e,n,s,a){const r=s.enter("blockquote"),o=s.createTracker(a);o.move("> "),o.shift(2);const l=s.indentLines(s.containerFlow(e,o.current()),cT);return r(),l}function cT(e,n,s){return">"+(s?"":" ")+e}function dT(e,n){return af(e,n.inConstruct,!0)&&!af(e,n.notInConstruct,!1)}function af(e,n,s){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return s;let a=-1;for(;++a<n.length;)if(e.includes(n[a]))return!0;return!1}function rf(e,n,s,a){let r=-1;for(;++r<s.unsafe.length;)if(s.unsafe[r].character===`
|
|
669
|
+
`&&dT(s.stack,s.unsafe[r]))return/[ \t]/.test(a.before)?"":" ";return`\\
|
|
670
|
+
`}function uT(e,n){const s=String(e);let a=s.indexOf(n),r=a,o=0,l=0;if(typeof n!="string")throw new TypeError("Expected substring");for(;a!==-1;)a===r?++o>l&&(l=o):o=1,r=a+n.length,a=s.indexOf(n,r);return l}function mT(e,n){return!!(n.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function hT(e){const n=e.options.fence||"`";if(n!=="`"&&n!=="~")throw new Error("Cannot serialize code with `"+n+"` for `options.fence`, expected `` ` `` or `~`");return n}function pT(e,n,s,a){const r=hT(s),o=e.value||"",l=r==="`"?"GraveAccent":"Tilde";if(mT(e,s)){const m=s.enter("codeIndented"),f=s.indentLines(o,fT);return m(),f}const c=s.createTracker(a),d=r.repeat(Math.max(uT(o,r)+1,3)),u=s.enter("codeFenced");let h=c.move(d);if(e.lang){const m=s.enter(`codeFencedLang${l}`);h+=c.move(s.safe(e.lang,{before:h,after:" ",encode:["`"],...c.current()})),m()}if(e.lang&&e.meta){const m=s.enter(`codeFencedMeta${l}`);h+=c.move(" "),h+=c.move(s.safe(e.meta,{before:h,after:`
|
|
671
|
+
`,encode:["`"],...c.current()})),m()}return h+=c.move(`
|
|
672
|
+
`),o&&(h+=c.move(o+`
|
|
673
|
+
`)),h+=c.move(d),u(),h}function fT(e,n,s){return(s?"":" ")+e}function Im(e){const n=e.options.quote||'"';if(n!=='"'&&n!=="'")throw new Error("Cannot serialize title with `"+n+"` for `options.quote`, expected `\"`, or `'`");return n}function gT(e,n,s,a){const r=Im(s),o=r==='"'?"Quote":"Apostrophe",l=s.enter("definition");let c=s.enter("label");const d=s.createTracker(a);let u=d.move("[");return u+=d.move(s.safe(s.associationId(e),{before:u,after:"]",...d.current()})),u+=d.move("]: "),c(),!e.url||/[\0- \u007F]/.test(e.url)?(c=s.enter("destinationLiteral"),u+=d.move("<"),u+=d.move(s.safe(e.url,{before:u,after:">",...d.current()})),u+=d.move(">")):(c=s.enter("destinationRaw"),u+=d.move(s.safe(e.url,{before:u,after:e.title?" ":`
|
|
674
|
+
`,...d.current()}))),c(),e.title&&(c=s.enter(`title${o}`),u+=d.move(" "+r),u+=d.move(s.safe(e.title,{before:u,after:r,...d.current()})),u+=d.move(r),c()),l(),u}function bT(e){const n=e.options.emphasis||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize emphasis with `"+n+"` for `options.emphasis`, expected `*`, or `_`");return n}function Ko(e){return"&#x"+e.toString(16).toUpperCase()+";"}function uc(e,n,s){const a=Or(e),r=Or(n);return a===void 0?r===void 0?s==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:a===1?r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}yv.peek=xT;function yv(e,n,s,a){const r=bT(s),o=s.enter("emphasis"),l=s.createTracker(a),c=l.move(r);let d=l.move(s.containerPhrasing(e,{after:r,before:c,...l.current()}));const u=d.charCodeAt(0),h=uc(a.before.charCodeAt(a.before.length-1),u,r);h.inside&&(d=Ko(u)+d.slice(1));const m=d.charCodeAt(d.length-1),f=uc(a.after.charCodeAt(0),m,r);f.inside&&(d=d.slice(0,-1)+Ko(m));const p=l.move(r);return o(),s.attentionEncodeSurroundingInfo={after:f.outside,before:h.outside},c+d+p}function xT(e,n,s){return s.options.emphasis||"*"}function vT(e,n){let s=!1;return Am(e,function(a){if("value"in a&&/\r?\n|\r/.test(a.value)||a.type==="break")return s=!0,$u}),!!((!e.depth||e.depth<3)&&jm(e)&&(n.options.setext||s))}function yT(e,n,s,a){const r=Math.max(Math.min(6,e.depth||1),1),o=s.createTracker(a);if(vT(e,s)){const h=s.enter("headingSetext"),m=s.enter("phrasing"),f=s.containerPhrasing(e,{...o.current(),before:`
|
|
675
|
+
`,after:`
|
|
676
|
+
`});return m(),h(),f+`
|
|
677
|
+
`+(r===1?"=":"-").repeat(f.length-(Math.max(f.lastIndexOf("\r"),f.lastIndexOf(`
|
|
678
|
+
`))+1))}const l="#".repeat(r),c=s.enter("headingAtx"),d=s.enter("phrasing");o.move(l+" ");let u=s.containerPhrasing(e,{before:"# ",after:`
|
|
679
|
+
`,...o.current()});return/^[\t ]/.test(u)&&(u=Ko(u.charCodeAt(0))+u.slice(1)),u=u?l+" "+u:l,s.options.closeAtx&&(u+=" "+l),d(),c(),u}wv.peek=wT;function wv(e){return e.value||""}function wT(){return"<"}kv.peek=kT;function kv(e,n,s,a){const r=Im(s),o=r==='"'?"Quote":"Apostrophe",l=s.enter("image");let c=s.enter("label");const d=s.createTracker(a);let u=d.move("![");return u+=d.move(s.safe(e.alt,{before:u,after:"]",...d.current()})),u+=d.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=s.enter("destinationLiteral"),u+=d.move("<"),u+=d.move(s.safe(e.url,{before:u,after:">",...d.current()})),u+=d.move(">")):(c=s.enter("destinationRaw"),u+=d.move(s.safe(e.url,{before:u,after:e.title?" ":")",...d.current()}))),c(),e.title&&(c=s.enter(`title${o}`),u+=d.move(" "+r),u+=d.move(s.safe(e.title,{before:u,after:r,...d.current()})),u+=d.move(r),c()),u+=d.move(")"),l(),u}function kT(){return"!"}jv.peek=jT;function jv(e,n,s,a){const r=e.referenceType,o=s.enter("imageReference");let l=s.enter("label");const c=s.createTracker(a);let d=c.move("![");const u=s.safe(e.alt,{before:d,after:"]",...c.current()});d+=c.move(u+"]["),l();const h=s.stack;s.stack=[],l=s.enter("reference");const m=s.safe(s.associationId(e),{before:d,after:"]",...c.current()});return l(),s.stack=h,o(),r==="full"||!u||u!==m?d+=c.move(m+"]"):r==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function jT(){return"!"}Nv.peek=NT;function Nv(e,n,s){let a=e.value||"",r="`",o=-1;for(;new RegExp("(^|[^`])"+r+"([^`]|$)").test(a);)r+="`";for(/[^ \r\n]/.test(a)&&(/^[ \r\n]/.test(a)&&/[ \r\n]$/.test(a)||/^`|`$/.test(a))&&(a=" "+a+" ");++o<s.unsafe.length;){const l=s.unsafe[o],c=s.compilePattern(l);let d;if(l.atBreak)for(;d=c.exec(a);){let u=d.index;a.charCodeAt(u)===10&&a.charCodeAt(u-1)===13&&u--,a=a.slice(0,u)+" "+a.slice(d.index+1)}}return r+a+r}function NT(){return"`"}function Sv(e,n){const s=jm(e);return!!(!n.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(s===e.url||"mailto:"+s===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}Cv.peek=ST;function Cv(e,n,s,a){const r=Im(s),o=r==='"'?"Quote":"Apostrophe",l=s.createTracker(a);let c,d;if(Sv(e,s)){const h=s.stack;s.stack=[],c=s.enter("autolink");let m=l.move("<");return m+=l.move(s.containerPhrasing(e,{before:m,after:">",...l.current()})),m+=l.move(">"),c(),s.stack=h,m}c=s.enter("link"),d=s.enter("label");let u=l.move("[");return u+=l.move(s.containerPhrasing(e,{before:u,after:"](",...l.current()})),u+=l.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=s.enter("destinationLiteral"),u+=l.move("<"),u+=l.move(s.safe(e.url,{before:u,after:">",...l.current()})),u+=l.move(">")):(d=s.enter("destinationRaw"),u+=l.move(s.safe(e.url,{before:u,after:e.title?" ":")",...l.current()}))),d(),e.title&&(d=s.enter(`title${o}`),u+=l.move(" "+r),u+=l.move(s.safe(e.title,{before:u,after:r,...l.current()})),u+=l.move(r),d()),u+=l.move(")"),c(),u}function ST(e,n,s){return Sv(e,s)?"<":"["}Ev.peek=CT;function Ev(e,n,s,a){const r=e.referenceType,o=s.enter("linkReference");let l=s.enter("label");const c=s.createTracker(a);let d=c.move("[");const u=s.containerPhrasing(e,{before:d,after:"]",...c.current()});d+=c.move(u+"]["),l();const h=s.stack;s.stack=[],l=s.enter("reference");const m=s.safe(s.associationId(e),{before:d,after:"]",...c.current()});return l(),s.stack=h,o(),r==="full"||!u||u!==m?d+=c.move(m+"]"):r==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function CT(){return"["}function Tm(e){const n=e.options.bullet||"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bullet`, expected `*`, `+`, or `-`");return n}function ET(e){const n=Tm(e),s=e.options.bulletOther;if(!s)return n==="*"?"-":"*";if(s!=="*"&&s!=="+"&&s!=="-")throw new Error("Cannot serialize items with `"+s+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(s===n)throw new Error("Expected `bullet` (`"+n+"`) and `bulletOther` (`"+s+"`) to be different");return s}function _T(e){const n=e.options.bulletOrdered||".";if(n!=="."&&n!==")")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOrdered`, expected `.` or `)`");return n}function _v(e){const n=e.options.rule||"*";if(n!=="*"&&n!=="-"&&n!=="_")throw new Error("Cannot serialize rules with `"+n+"` for `options.rule`, expected `*`, `-`, or `_`");return n}function MT(e,n,s,a){const r=s.enter("list"),o=s.bulletCurrent;let l=e.ordered?_T(s):Tm(s);const c=e.ordered?l==="."?")":".":ET(s);let d=n&&s.bulletLastUsed?l===s.bulletLastUsed:!1;if(!e.ordered){const h=e.children?e.children[0]:void 0;if((l==="*"||l==="-")&&h&&(!h.children||!h.children[0])&&s.stack[s.stack.length-1]==="list"&&s.stack[s.stack.length-2]==="listItem"&&s.stack[s.stack.length-3]==="list"&&s.stack[s.stack.length-4]==="listItem"&&s.indexStack[s.indexStack.length-1]===0&&s.indexStack[s.indexStack.length-2]===0&&s.indexStack[s.indexStack.length-3]===0&&(d=!0),_v(s)===l&&h){let m=-1;for(;++m<e.children.length;){const f=e.children[m];if(f&&f.type==="listItem"&&f.children&&f.children[0]&&f.children[0].type==="thematicBreak"){d=!0;break}}}}d&&(l=c),s.bulletCurrent=l;const u=s.containerFlow(e,a);return s.bulletLastUsed=l,s.bulletCurrent=o,r(),u}function AT(e){const n=e.options.listItemIndent||"one";if(n!=="tab"&&n!=="one"&&n!=="mixed")throw new Error("Cannot serialize items with `"+n+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return n}function RT(e,n,s,a){const r=AT(s);let o=s.bulletCurrent||Tm(s);n&&n.type==="list"&&n.ordered&&(o=(typeof n.start=="number"&&n.start>-1?n.start:1)+(s.options.incrementListMarker===!1?0:n.children.indexOf(e))+o);let l=o.length+1;(r==="tab"||r==="mixed"&&(n&&n.type==="list"&&n.spread||e.spread))&&(l=Math.ceil(l/4)*4);const c=s.createTracker(a);c.move(o+" ".repeat(l-o.length)),c.shift(l);const d=s.enter("listItem"),u=s.indentLines(s.containerFlow(e,c.current()),h);return d(),u;function h(m,f,p){return f?(p?"":" ".repeat(l))+m:(p?o:o+" ".repeat(l-o.length))+m}}function IT(e,n,s,a){const r=s.enter("paragraph"),o=s.enter("phrasing"),l=s.containerPhrasing(e,a);return o(),r(),l}const TT=Oc(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function PT(e,n,s,a){return(e.children.some(function(l){return TT(l)})?s.containerPhrasing:s.containerFlow).call(s,e,a)}function $T(e){const n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}Mv.peek=DT;function Mv(e,n,s,a){const r=$T(s),o=s.enter("strong"),l=s.createTracker(a),c=l.move(r+r);let d=l.move(s.containerPhrasing(e,{after:r,before:c,...l.current()}));const u=d.charCodeAt(0),h=uc(a.before.charCodeAt(a.before.length-1),u,r);h.inside&&(d=Ko(u)+d.slice(1));const m=d.charCodeAt(d.length-1),f=uc(a.after.charCodeAt(0),m,r);f.inside&&(d=d.slice(0,-1)+Ko(m));const p=l.move(r+r);return o(),s.attentionEncodeSurroundingInfo={after:f.outside,before:h.outside},c+d+p}function DT(e,n,s){return s.options.strong||"*"}function LT(e,n,s,a){return s.safe(e.value,a)}function OT(e){const n=e.options.ruleRepetition||3;if(n<3)throw new Error("Cannot serialize rules with repetition `"+n+"` for `options.ruleRepetition`, expected `3` or more");return n}function FT(e,n,s){const a=(_v(s)+(s.options.ruleSpaces?" ":"")).repeat(OT(s));return s.options.ruleSpaces?a.slice(0,-1):a}const Av={blockquote:lT,break:rf,code:pT,definition:gT,emphasis:yv,hardBreak:rf,heading:yT,html:wv,image:kv,imageReference:jv,inlineCode:Nv,link:Cv,linkReference:Ev,list:MT,listItem:RT,paragraph:IT,root:PT,strong:Mv,text:LT,thematicBreak:FT};function zT(){return{enter:{table:BT,tableData:of,tableHeader:of,tableRow:HT},exit:{codeText:qT,table:UT,tableData:Td,tableHeader:Td,tableRow:Td}}}function BT(e){const n=e._align;this.enter({type:"table",align:n.map(function(s){return s==="none"?null:s}),children:[]},e),this.data.inTable=!0}function UT(e){this.exit(e),this.data.inTable=void 0}function HT(e){this.enter({type:"tableRow",children:[]},e)}function Td(e){this.exit(e)}function of(e){this.enter({type:"tableCell",children:[]},e)}function qT(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,VT));const s=this.stack[this.stack.length-1];s.type,s.value=n,this.exit(e)}function VT(e,n){return n==="|"?n:e}function WT(e){const n=e||{},s=n.tableCellPadding,a=n.tablePipeAlign,r=n.stringLength,o=s?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:`
|
|
680
|
+
`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:l,tableCell:d,tableRow:c}};function l(p,g,w,v){return u(h(p,w,v),p.align)}function c(p,g,w,v){const b=m(p,w,v),y=u([b]);return y.slice(0,y.indexOf(`
|
|
681
|
+
`))}function d(p,g,w,v){const b=w.enter("tableCell"),y=w.enter("phrasing"),N=w.containerPhrasing(p,{...v,before:o,after:o});return y(),b(),N}function u(p,g){return rT(p,{align:g,alignDelimiters:a,padding:s,stringLength:r})}function h(p,g,w){const v=p.children;let b=-1;const y=[],N=g.enter("table");for(;++b<v.length;)y[b]=m(v[b],g,w);return N(),y}function m(p,g,w){const v=p.children;let b=-1;const y=[],N=g.enter("tableRow");for(;++b<v.length;)y[b]=d(v[b],p,g,w);return N(),y}function f(p,g,w){let v=Av.inlineCode(p,g,w);return w.stack.includes("tableCell")&&(v=v.replace(/\|/g,"\\$&")),v}}function GT(){return{exit:{taskListCheckValueChecked:lf,taskListCheckValueUnchecked:lf,paragraph:JT}}}function KT(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:YT}}}function lf(e){const n=this.stack[this.stack.length-2];n.type,n.checked=e.type==="taskListCheckValueChecked"}function JT(e){const n=this.stack[this.stack.length-2];if(n&&n.type==="listItem"&&typeof n.checked=="boolean"){const s=this.stack[this.stack.length-1];s.type;const a=s.children[0];if(a&&a.type==="text"){const r=n.children;let o=-1,l;for(;++o<r.length;){const c=r[o];if(c.type==="paragraph"){l=c;break}}l===s&&(a.value=a.value.slice(1),a.value.length===0?s.children.shift():s.position&&a.position&&typeof a.position.start.offset=="number"&&(a.position.start.column++,a.position.start.offset++,s.position.start=Object.assign({},a.position.start)))}}this.exit(e)}function YT(e,n,s,a){const r=e.children[0],o=typeof e.checked=="boolean"&&r&&r.type==="paragraph",l="["+(e.checked?"x":" ")+"] ",c=s.createTracker(a);o&&c.move(l);let d=Av.listItem(e,n,s,{...a,...c.current()});return o&&(d=d.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,u)),d;function u(h){return h+l}}function QT(){return[MI(),YI(),eT(),zT(),GT()]}function XT(e){return{extensions:[AI(),QI(e),tT(),WT(e),KT()]}}const ZT={tokenize:aP,partial:!0},Rv={tokenize:rP,partial:!0},Iv={tokenize:oP,partial:!0},Tv={tokenize:lP,partial:!0},eP={tokenize:cP,partial:!0},Pv={name:"wwwAutolink",tokenize:sP,previous:Dv},$v={name:"protocolAutolink",tokenize:iP,previous:Lv},oa={name:"emailAutolink",tokenize:nP,previous:Ov},Vi={};function tP(){return{text:Vi}}let Ua=48;for(;Ua<123;)Vi[Ua]=oa,Ua++,Ua===58?Ua=65:Ua===91&&(Ua=97);Vi[43]=oa;Vi[45]=oa;Vi[46]=oa;Vi[95]=oa;Vi[72]=[oa,$v];Vi[104]=[oa,$v];Vi[87]=[oa,Pv];Vi[119]=[oa,Pv];function nP(e,n,s){const a=this;let r,o;return l;function l(m){return!Fu(m)||!Ov.call(a,a.previous)||Pm(a.events)?s(m):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),c(m))}function c(m){return Fu(m)?(e.consume(m),c):m===64?(e.consume(m),d):s(m)}function d(m){return m===46?e.check(eP,h,u)(m):m===45||m===95||Fs(m)?(o=!0,e.consume(m),d):h(m)}function u(m){return e.consume(m),r=!0,d}function h(m){return o&&r&&qs(a.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),n(m)):s(m)}}function sP(e,n,s){const a=this;return r;function r(l){return l!==87&&l!==119||!Dv.call(a,a.previous)||Pm(a.events)?s(l):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(ZT,e.attempt(Rv,e.attempt(Iv,o),s),s)(l))}function o(l){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),n(l)}}function iP(e,n,s){const a=this;let r="",o=!1;return l;function l(m){return(m===72||m===104)&&Lv.call(a,a.previous)&&!Pm(a.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),r+=String.fromCodePoint(m),e.consume(m),c):s(m)}function c(m){if(qs(m)&&r.length<5)return r+=String.fromCodePoint(m),e.consume(m),c;if(m===58){const f=r.toLowerCase();if(f==="http"||f==="https")return e.consume(m),d}return s(m)}function d(m){return m===47?(e.consume(m),o?u:(o=!0,d)):s(m)}function u(m){return m===null||lc(m)||Yn(m)||Xa(m)||$c(m)?s(m):e.attempt(Rv,e.attempt(Iv,h),s)(m)}function h(m){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),n(m)}}function aP(e,n,s){let a=0;return r;function r(l){return(l===87||l===119)&&a<3?(a++,e.consume(l),r):l===46&&a===3?(e.consume(l),o):s(l)}function o(l){return l===null?s(l):n(l)}}function rP(e,n,s){let a,r,o;return l;function l(u){return u===46||u===95?e.check(Tv,d,c)(u):u===null||Yn(u)||Xa(u)||u!==45&&$c(u)?d(u):(o=!0,e.consume(u),l)}function c(u){return u===95?a=!0:(r=a,a=void 0),e.consume(u),l}function d(u){return r||a||!o?s(u):n(u)}}function oP(e,n){let s=0,a=0;return r;function r(l){return l===40?(s++,e.consume(l),r):l===41&&a<s?o(l):l===33||l===34||l===38||l===39||l===41||l===42||l===44||l===46||l===58||l===59||l===60||l===63||l===93||l===95||l===126?e.check(Tv,n,o)(l):l===null||Yn(l)||Xa(l)?n(l):(e.consume(l),r)}function o(l){return l===41&&a++,e.consume(l),r}}function lP(e,n,s){return a;function a(c){return c===33||c===34||c===39||c===41||c===42||c===44||c===46||c===58||c===59||c===63||c===95||c===126?(e.consume(c),a):c===38?(e.consume(c),o):c===93?(e.consume(c),r):c===60||c===null||Yn(c)||Xa(c)?n(c):s(c)}function r(c){return c===null||c===40||c===91||Yn(c)||Xa(c)?n(c):a(c)}function o(c){return qs(c)?l(c):s(c)}function l(c){return c===59?(e.consume(c),a):qs(c)?(e.consume(c),l):s(c)}}function cP(e,n,s){return a;function a(o){return e.consume(o),r}function r(o){return Fs(o)?s(o):n(o)}}function Dv(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||Yn(e)}function Lv(e){return!qs(e)}function Ov(e){return!(e===47||Fu(e))}function Fu(e){return e===43||e===45||e===46||e===95||Fs(e)}function Pm(e){let n=e.length,s=!1;for(;n--;){const a=e[n][1];if((a.type==="labelLink"||a.type==="labelImage")&&!a._balanced){s=!0;break}if(a._gfmAutolinkLiteralWalkedInto){s=!1;break}}return e.length>0&&!s&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),s}const dP={tokenize:xP,partial:!0};function uP(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:fP,continuation:{tokenize:gP},exit:bP}},text:{91:{name:"gfmFootnoteCall",tokenize:pP},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:mP,resolveTo:hP}}}}function mP(e,n,s){const a=this;let r=a.events.length;const o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let l;for(;r--;){const d=a.events[r][1];if(d.type==="labelImage"){l=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return c;function c(d){if(!l||!l._balanced)return s(d);const u=Si(a.sliceSerialize({start:l.end,end:a.now()}));return u.codePointAt(0)!==94||!o.includes(u.slice(1))?s(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),n(d))}}function hP(e,n){let s=e.length;for(;s--;)if(e[s][1].type==="labelImage"&&e[s][0]==="enter"){e[s][1];break}e[s+1][1].type="data",e[s+3][1].type="gfmFootnoteCallLabelMarker";const a={type:"gfmFootnoteCall",start:Object.assign({},e[s+3][1].start),end:Object.assign({},e[e.length-1][1].end)},r={type:"gfmFootnoteCallMarker",start:Object.assign({},e[s+3][1].end),end:Object.assign({},e[s+3][1].end)};r.end.column++,r.end.offset++,r.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},r.end),end:Object.assign({},e[e.length-1][1].start)},l={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},c=[e[s+1],e[s+2],["enter",a,n],e[s+3],e[s+4],["enter",r,n],["exit",r,n],["enter",o,n],["enter",l,n],["exit",l,n],["exit",o,n],e[e.length-2],e[e.length-1],["exit",a,n]];return e.splice(s,e.length-s+1,...c),e}function pP(e,n,s){const a=this,r=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o=0,l;return c;function c(m){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),d}function d(m){return m!==94?s(m):(e.enter("gfmFootnoteCallMarker"),e.consume(m),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(m){if(o>999||m===93&&!l||m===null||m===91||Yn(m))return s(m);if(m===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return r.includes(Si(a.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):s(m)}return Yn(m)||(l=!0),o++,e.consume(m),m===92?h:u}function h(m){return m===91||m===92||m===93?(e.consume(m),o++,u):u(m)}}function fP(e,n,s){const a=this,r=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o,l=0,c;return d;function d(g){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(g){return g===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",h):s(g)}function h(g){if(l>999||g===93&&!c||g===null||g===91||Yn(g))return s(g);if(g===93){e.exit("chunkString");const w=e.exit("gfmFootnoteDefinitionLabelString");return o=Si(a.sliceSerialize(w)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return Yn(g)||(c=!0),l++,e.consume(g),g===92?m:h}function m(g){return g===91||g===92||g===93?(e.consume(g),l++,h):h(g)}function f(g){return g===58?(e.enter("definitionMarker"),e.consume(g),e.exit("definitionMarker"),r.includes(o)||r.push(o),Ln(e,p,"gfmFootnoteDefinitionWhitespace")):s(g)}function p(g){return n(g)}}function gP(e,n,s){return e.check(cl,n,e.attempt(dP,n,s))}function bP(e){e.exit("gfmFootnoteDefinition")}function xP(e,n,s){const a=this;return Ln(e,r,"gfmFootnoteDefinitionIndent",5);function r(o){const l=a.events[a.events.length-1];return l&&l[1].type==="gfmFootnoteDefinitionIndent"&&l[2].sliceSerialize(l[1],!0).length===4?n(o):s(o)}}function vP(e){let s=(e||{}).singleTilde;const a={name:"strikethrough",tokenize:o,resolveAll:r};return s==null&&(s=!0),{text:{126:a},insideSpan:{null:[a]},attentionMarkers:{null:[126]}};function r(l,c){let d=-1;for(;++d<l.length;)if(l[d][0]==="enter"&&l[d][1].type==="strikethroughSequenceTemporary"&&l[d][1]._close){let u=d;for(;u--;)if(l[u][0]==="exit"&&l[u][1].type==="strikethroughSequenceTemporary"&&l[u][1]._open&&l[d][1].end.offset-l[d][1].start.offset===l[u][1].end.offset-l[u][1].start.offset){l[d][1].type="strikethroughSequence",l[u][1].type="strikethroughSequence";const h={type:"strikethrough",start:Object.assign({},l[u][1].start),end:Object.assign({},l[d][1].end)},m={type:"strikethroughText",start:Object.assign({},l[u][1].end),end:Object.assign({},l[d][1].start)},f=[["enter",h,c],["enter",l[u][1],c],["exit",l[u][1],c],["enter",m,c]],p=c.parser.constructs.insideSpan.null;p&&ei(f,f.length,0,Dc(p,l.slice(u+1,d),c)),ei(f,f.length,0,[["exit",m,c],["enter",l[d][1],c],["exit",l[d][1],c],["exit",h,c]]),ei(l,u-1,d-u+3,f),d=u+f.length-2;break}}for(d=-1;++d<l.length;)l[d][1].type==="strikethroughSequenceTemporary"&&(l[d][1].type="data");return l}function o(l,c,d){const u=this.previous,h=this.events;let m=0;return f;function f(g){return u===126&&h[h.length-1][1].type!=="characterEscape"?d(g):(l.enter("strikethroughSequenceTemporary"),p(g))}function p(g){const w=Or(u);if(g===126)return m>1?d(g):(l.consume(g),m++,p);if(m<2&&!s)return d(g);const v=l.exit("strikethroughSequenceTemporary"),b=Or(g);return v._open=!b||b===2&&!!w,v._close=!w||w===2&&!!b,c(g)}}}class yP{constructor(){this.map=[]}add(n,s,a){wP(this,n,s,a)}consume(n){if(this.map.sort(function(o,l){return o[0]-l[0]}),this.map.length===0)return;let s=this.map.length;const a=[];for(;s>0;)s-=1,a.push(n.slice(this.map[s][0]+this.map[s][1]),this.map[s][2]),n.length=this.map[s][0];a.push(n.slice()),n.length=0;let r=a.pop();for(;r;){for(const o of r)n.push(o);r=a.pop()}this.map.length=0}}function wP(e,n,s,a){let r=0;if(!(s===0&&a.length===0)){for(;r<e.map.length;){if(e.map[r][0]===n){e.map[r][1]+=s,e.map[r][2].push(...a);return}r+=1}e.map.push([n,s,a])}}function kP(e,n){let s=!1;const a=[];for(;n<e.length;){const r=e[n];if(s){if(r[0]==="enter")r[1].type==="tableContent"&&a.push(e[n+1][1].type==="tableDelimiterMarker"?"left":"none");else if(r[1].type==="tableContent"){if(e[n-1][1].type==="tableDelimiterMarker"){const o=a.length-1;a[o]=a[o]==="left"?"center":"right"}}else if(r[1].type==="tableDelimiterRow")break}else r[0]==="enter"&&r[1].type==="tableDelimiterRow"&&(s=!0);n+=1}return a}function jP(){return{flow:{null:{name:"table",tokenize:NP,resolveAll:SP}}}}function NP(e,n,s){const a=this;let r=0,o=0,l;return c;function c(_){let A=a.events.length-1;for(;A>-1;){const M=a.events[A][1].type;if(M==="lineEnding"||M==="linePrefix")A--;else break}const X=A>-1?a.events[A][1].type:null,H=X==="tableHead"||X==="tableRow"?x:d;return H===x&&a.parser.lazy[a.now().line]?s(_):H(_)}function d(_){return e.enter("tableHead"),e.enter("tableRow"),u(_)}function u(_){return _===124||(l=!0,o+=1),h(_)}function h(_){return _===null?s(_):an(_)?o>1?(o=0,a.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(_),e.exit("lineEnding"),p):s(_):Pn(_)?Ln(e,h,"whitespace")(_):(o+=1,l&&(l=!1,r+=1),_===124?(e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),l=!0,h):(e.enter("data"),m(_)))}function m(_){return _===null||_===124||Yn(_)?(e.exit("data"),h(_)):(e.consume(_),_===92?f:m)}function f(_){return _===92||_===124?(e.consume(_),m):m(_)}function p(_){return a.interrupt=!1,a.parser.lazy[a.now().line]?s(_):(e.enter("tableDelimiterRow"),l=!1,Pn(_)?Ln(e,g,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(_):g(_))}function g(_){return _===45||_===58?v(_):_===124?(l=!0,e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),w):C(_)}function w(_){return Pn(_)?Ln(e,v,"whitespace")(_):v(_)}function v(_){return _===58?(o+=1,l=!0,e.enter("tableDelimiterMarker"),e.consume(_),e.exit("tableDelimiterMarker"),b):_===45?(o+=1,b(_)):_===null||an(_)?S(_):C(_)}function b(_){return _===45?(e.enter("tableDelimiterFiller"),y(_)):C(_)}function y(_){return _===45?(e.consume(_),y):_===58?(l=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(_),e.exit("tableDelimiterMarker"),N):(e.exit("tableDelimiterFiller"),N(_))}function N(_){return Pn(_)?Ln(e,S,"whitespace")(_):S(_)}function S(_){return _===124?g(_):_===null||an(_)?!l||r!==o?C(_):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(_)):C(_)}function C(_){return s(_)}function x(_){return e.enter("tableRow"),k(_)}function k(_){return _===124?(e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),k):_===null||an(_)?(e.exit("tableRow"),n(_)):Pn(_)?Ln(e,k,"whitespace")(_):(e.enter("data"),R(_))}function R(_){return _===null||_===124||Yn(_)?(e.exit("data"),k(_)):(e.consume(_),_===92?z:R)}function z(_){return _===92||_===124?(e.consume(_),R):R(_)}}function SP(e,n){let s=-1,a=!0,r=0,o=[0,0,0,0],l=[0,0,0,0],c=!1,d=0,u,h,m;const f=new yP;for(;++s<e.length;){const p=e[s],g=p[1];p[0]==="enter"?g.type==="tableHead"?(c=!1,d!==0&&(cf(f,n,d,u,h),h=void 0,d=0),u={type:"table",start:Object.assign({},g.start),end:Object.assign({},g.end)},f.add(s,0,[["enter",u,n]])):g.type==="tableRow"||g.type==="tableDelimiterRow"?(a=!0,m=void 0,o=[0,0,0,0],l=[0,s+1,0,0],c&&(c=!1,h={type:"tableBody",start:Object.assign({},g.start),end:Object.assign({},g.end)},f.add(s,0,[["enter",h,n]])),r=g.type==="tableDelimiterRow"?2:h?3:1):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")?(a=!1,l[2]===0&&(o[1]!==0&&(l[0]=l[1],m=Sl(f,n,o,r,void 0,m),o=[0,0,0,0]),l[2]=s)):g.type==="tableCellDivider"&&(a?a=!1:(o[1]!==0&&(l[0]=l[1],m=Sl(f,n,o,r,void 0,m)),o=l,l=[o[1],s,0,0])):g.type==="tableHead"?(c=!0,d=s):g.type==="tableRow"||g.type==="tableDelimiterRow"?(d=s,o[1]!==0?(l[0]=l[1],m=Sl(f,n,o,r,s,m)):l[1]!==0&&(m=Sl(f,n,l,r,s,m)),r=0):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")&&(l[3]=s)}for(d!==0&&cf(f,n,d,u,h),f.consume(n.events),s=-1;++s<n.events.length;){const p=n.events[s];p[0]==="enter"&&p[1].type==="table"&&(p[1]._align=kP(n.events,s))}return e}function Sl(e,n,s,a,r,o){const l=a===1?"tableHeader":a===2?"tableDelimiter":"tableData",c="tableContent";s[0]!==0&&(o.end=Object.assign({},Cr(n.events,s[0])),e.add(s[0],0,[["exit",o,n]]));const d=Cr(n.events,s[1]);if(o={type:l,start:Object.assign({},d),end:Object.assign({},d)},e.add(s[1],0,[["enter",o,n]]),s[2]!==0){const u=Cr(n.events,s[2]),h=Cr(n.events,s[3]),m={type:c,start:Object.assign({},u),end:Object.assign({},h)};if(e.add(s[2],0,[["enter",m,n]]),a!==2){const f=n.events[s[2]],p=n.events[s[3]];if(f[1].end=Object.assign({},p[1].end),f[1].type="chunkText",f[1].contentType="text",s[3]>s[2]+1){const g=s[2]+1,w=s[3]-s[2]-1;e.add(g,w,[])}}e.add(s[3]+1,0,[["exit",m,n]])}return r!==void 0&&(o.end=Object.assign({},Cr(n.events,r)),e.add(r,0,[["exit",o,n]]),o=void 0),o}function cf(e,n,s,a,r){const o=[],l=Cr(n.events,s);r&&(r.end=Object.assign({},l),o.push(["exit",r,n])),a.end=Object.assign({},l),o.push(["exit",a,n]),e.add(s+1,0,o)}function Cr(e,n){const s=e[n],a=s[0]==="enter"?"start":"end";return s[1][a]}const CP={name:"tasklistCheck",tokenize:_P};function EP(){return{text:{91:CP}}}function _P(e,n,s){const a=this;return r;function r(d){return a.previous!==null||!a._gfmTasklistFirstContentOfListItem?s(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),o)}function o(d){return Yn(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),l):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),l):s(d)}function l(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),c):s(d)}function c(d){return an(d)?n(d):Pn(d)?e.check({tokenize:MP},n,s)(d):s(d)}}function MP(e,n,s){return Ln(e,a,"whitespace");function a(r){return r===null?s(r):n(r)}}function AP(e){return Jx([tP(),uP(),vP(e),jP(),EP()])}const RP={};function ni(e){const n=this,s=e||RP,a=n.data(),r=a.micromarkExtensions||(a.micromarkExtensions=[]),o=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),l=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);r.push(AP(s)),o.push(QT()),l.push(XT(s))}const IP=45e3,TP=3e3,PP=2e3,$P=1500,df="fusion:sse-client-id";let xr=null;const wa=new Map;function uf(){const e=typeof globalThis<"u"?globalThis.crypto:void 0;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function Fv(){if(!(typeof window>"u")){if(xr)return xr;try{const e=window.sessionStorage.getItem(df);if(e)return xr=e,e;const n=uf();return window.sessionStorage.setItem(df,n),xr=n,n}catch{return xr=uf(),xr}}}function zv(e){if(!(typeof window>"u"))try{return{parsed:new URL(e,window.location.origin),preserveRelativePath:e.startsWith("/")}}catch{return}}function Bv(e){return e.origin===window.location.origin&&e.pathname==="/api/events"}function DP(e){const n=Fv();if(!n)return e;const s=zv(e);return!s||!Bv(s.parsed)?e:(s.parsed.searchParams.set("clientId",n),s.preserveRelativePath?`${s.parsed.pathname}${s.parsed.search}${s.parsed.hash}`:s.parsed.toString())}function $m(e,n){const s=Fv();if(!s)return;const a=zv(e);if(!a||!Bv(a.parsed))return;const r=new URL(`/api/events/${n}`,window.location.origin);r.searchParams.set("clientId",s);const o=a.parsed.searchParams.get("projectId");return o&&r.searchParams.set("projectId",o),Ci(`${r.pathname}${r.search}${r.hash}`)}function LP(e){if(typeof window>"u")return;const n=$m(e.url,"disconnect");if(!n)return;const s=window.navigator?.sendBeacon?.bind(window.navigator);s&&s(n)||typeof window.fetch=="function"&&window.fetch(n,{method:"POST",keepalive:!0}).catch(()=>{})}function zc(e){e.keepaliveTimer&&(clearInterval(e.keepaliveTimer),e.keepaliveTimer=null)}function mf(e){if(typeof window>"u"||typeof window.fetch!="function")return;const n=$m(e.url,"keepalive");if(!n)return;const s=typeof AbortController<"u"?new AbortController:null,a=s?window.setTimeout(()=>s.abort(),$P):null;window.fetch(n,{method:"POST",cache:"no-store",signal:s?.signal}).catch(()=>{}).finally(()=>{a!==null&&window.clearTimeout(a)})}function OP(e){zc(e),$m(e.url,"keepalive")&&(mf(e),e.keepaliveTimer=window.setInterval(()=>{mf(e)},PP))}if(typeof window<"u"){const e=()=>{for(const s of Array.from(wa.values()))if(!s.closed){if(zc(s),LP(s),s.es){try{s.es.close()}catch{}s.es=null}s.closed=!0}},n=s=>{if(s.persisted)for(const a of Array.from(wa.values()))a.subscribers.size!==0&&(a.closed=!1,Dm(a))};window.addEventListener("pagehide",e),window.addEventListener("beforeunload",e),window.addEventListener("pageshow",n)}function Ro(e){e.heartbeatTimer&&clearTimeout(e.heartbeatTimer),e.heartbeatTimer=setTimeout(()=>{Uv(e)},IP)}function Uv(e){if(e.heartbeatTimer&&(clearTimeout(e.heartbeatTimer),e.heartbeatTimer=null),e.es&&(e.es.close(),e.es=null),zc(e),e.nativeListeners.clear(),e.closed||e.subscribers.size===0||e.reconnectTimer)return;const n=wa.get(e.url);if(!(!n||n!==e)){for(const s of e.subscribers)s.onReconnect?.();e.reconnectTimer=setTimeout(()=>{if(e.reconnectTimer=null,e.closed)return;const s=wa.get(e.url);s&&s===e&&e.subscribers.size>0&&Dm(e)},TP)}}function Dm(e){if(e.es||e.closed)return;e.reconnectTimer&&(clearTimeout(e.reconnectTimer),e.reconnectTimer=null);const n=new EventSource(Ci(DP(e.url)));e.es=n,OP(e),n.addEventListener("open",()=>{Ro(e);const s=e.hasOpenedOnce;e.hasOpenedOnce=!0;for(const a of e.subscribers)a.onOpen?.(),s&&a.onReconnect?.()}),n.addEventListener("error",s=>{for(const a of e.subscribers)a.onError?.(s);Uv(e)}),n.addEventListener("message",()=>Ro(e)),n.addEventListener("heartbeat",()=>Ro(e)),Hv(e),Ro(e)}function Hv(e){if(!e.es)return;const n=new Set;for(const s of e.subscribers)for(const a of s.events.keys())n.add(a);for(const s of n){if(e.nativeListeners.has(s))continue;const a=r=>{Ro(e);const o=r;for(const l of e.subscribers){const c=l.events.get(s);if(c)for(const d of c)d(o)}};e.nativeListeners.set(s,a),e.es.addEventListener(s,a)}}function FP(e){e.closed=!0,e.heartbeatTimer&&clearTimeout(e.heartbeatTimer),zc(e),e.reconnectTimer&&clearTimeout(e.reconnectTimer),e.es&&e.es.close(),e.es=null,e.nativeListeners.clear(),wa.delete(e.url)}function fi(e,n={}){let s=wa.get(e);s||(s={url:e,es:null,subscribers:new Set,nativeListeners:new Map,heartbeatTimer:null,keepaliveTimer:null,reconnectTimer:null,hasOpenedOnce:!1,closed:!1},wa.set(e,s));const a={events:new Map,onOpen:n.onOpen,onReconnect:n.onReconnect,onError:n.onError};if(n.events)for(const[l,c]of Object.entries(n.events)){let d=a.events.get(l);d||(d=new Set,a.events.set(l,d)),d.add(c)}s.subscribers.add(a);const r=!!s.es&&s.hasOpenedOnce;Dm(s),Hv(s),r&&queueMicrotask(()=>{s.subscribers.has(a)&&a.onOpen?.()});let o=!0;return()=>{if(!o)return;o=!1;const l=wa.get(e);l&&(l.subscribers.delete(a),l.subscribers.size===0&&FP(l))}}const hf=100;function qv(e,n,s){const[a,r]=i.useState([]),[o,l]=i.useState(!1),[c,d]=i.useState(!1),[u,h]=i.useState(null),[m,f]=i.useState(!1),p=i.useRef(null),g=i.useRef(!1),w=i.useRef(0),v=i.useRef(e),b=i.useRef(s),y=i.useRef(n),N=i.useRef(0);(v.current!==e||b.current!==s||y.current!==n)&&(v.current=e,b.current=s,y.current=n,w.current++,g.current=!0,r([]),l(!1),d(!1),h(null),f(!1),p.current&&(p.current(),p.current=null)),i.useEffect(()=>{if(!e||!n){p.current&&(p.current(),p.current=null);return}const k=w.current,R=++N.current;g.current=!1;const z=e,_=s;async function A(){if(!z)return;l(!0),f(!1);try{const H=await hh(z,_,{limit:hf});if(g.current||w.current!==k||N.current!==R)return;r(H.entries),d(H.hasMore),h(H.total)}catch{if(g.current||w.current!==k||N.current!==R)return;r([]),d(!1),h(null)}finally{!g.current&&w.current===k&&N.current===R&&l(!1)}const X=_?`?projectId=${encodeURIComponent(_)}`:"";p.current=fi(`/api/tasks/${z}/logs/stream${X}`,{events:{"agent:log":H=>{if(!(g.current||w.current!==k))try{const M=JSON.parse(H.data);r(T=>[...T,M]),h(T=>T!==null?T+1:null)}catch{}}}})}return A(),()=>{g.current=!0,p.current&&(p.current(),p.current=null)}},[e,n,s]);const C=i.useCallback(async()=>{if(!e||m)return;const k=w.current,R=a.length,z=e;f(!0);try{const _=await hh(z,s,{limit:hf,offset:R});if(g.current||w.current!==k)return;r(A=>[..._.entries,...A]),d(_.hasMore),h(_.total)}catch{}finally{f(!1)}},[e,s,a.length,m]),x=i.useCallback(()=>r([]),[]);return{entries:a,loading:o,clear:x,loadMore:C,hasMore:c,total:u,loadingMore:m}}const Vv=i.createContext(null);function zP({openFile:e,children:n}){return t.jsx(Vv.Provider,{value:{openFile:e},children:n})}function BP(){return i.useContext(Vv)}const UP=/(?<![\w@-])((?:[A-Za-z0-9_./@-]+\/)+[A-Za-z0-9_./@-]+\.[A-Za-z0-9]{1,8}(?::\d+(?::\d+)?)?|(?:Dockerfile|Makefile|AGENTS\.md|README\.md|README)(?::\d+(?::\d+)?)?)(?![\w-])/g,HP=["http://","https://","mailto:","git@","ftp://"],qP=new Set(["Dockerfile","Makefile","AGENTS.md","README.md","README"]);function Wv(e){const n=/^(.*?)(?::(\d+)(?::(\d+))?)?$/.exec(e);return n?{path:n[1]??e,line:n[2]?Number.parseInt(n[2],10):void 0,col:n[3]?Number.parseInt(n[3],10):void 0}:{path:e}}function VP(e){return/^v?\d+(?:\.\d+)+$/.test(e)}function WP(e){return e.includes("/")||qP.has(e)}function GP(e,n,s){const a=e.slice(Math.max(0,n-16),n).toLowerCase();if(s.startsWith("//")||HP.some(o=>a.endsWith(o)))return!0;const{path:r}=Wv(s);return!!(VP(r)||!WP(r))}function KP({path:e,line:n,col:s,children:a}){const r=BP();return r?t.jsx("button",{type:"button",className:"file-path-link",onClick:()=>r.openFile(e,{line:n,col:s}),children:a??e}):t.jsx("span",{children:a??e})}function Es(e,n){if(!e)return[e];const s=[];let a=0,r=0;for(const o of e.matchAll(UP)){const l=o[0],c=o.index??0,d=c+l.length;if(GP(e,c,l))continue;c>a&&s.push(e.slice(a,c));const{path:u,line:h,col:m}=Wv(l);s.push(t.jsx(KP,{path:u,line:h,col:m,children:l},`file-path-${c}-${r}`)),a=d,r+=1}return a===0?[e]:(a<e.length&&s.push(e.slice(a)),s)}function Ks(e){if(typeof e=="string"){const n=Es(e);return n.length===1?n[0]:t.jsx(t.Fragment,{children:n})}return Array.isArray(e)?ka.Children.map(e,n=>Ks(n)):!i.isValidElement(e)||typeof e.type=="string"&&["button","code","pre"].includes(e.type)||e.props.children===void 0?e:i.cloneElement(e,void 0,ka.Children.map(e.props.children,n=>Ks(n)))}const pf="fn-agent-log-markdown",ff="fn-agent-log-tool-output";function gf(e,n){if(typeof window>"u")return n;try{const s=window.localStorage.getItem(e);return s===null?n:s==="true"}catch{return n}}function bf(e,n){if(!(typeof window>"u"))try{window.localStorage.setItem(e,n?"true":"false")}catch{}}function JP(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(r/60),l=Math.floor(o/24);return r<1?"just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString()}const xf={p:({children:e,...n})=>t.jsx("p",{...n,children:Ks(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Ks(e)}),code:({children:e,...n})=>{const s=typeof e=="string"?e:ka.Children.toArray(e).join(""),a=Es(s);return a.length===1&&typeof a[0]=="string"?t.jsx("code",{...n,children:e}):t.jsx("code",{...n,children:a})},pre:({children:e,...n})=>t.jsx("pre",{...n,style:{overflowX:"auto",maxWidth:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e}),table:({children:e,...n})=>t.jsx("table",{...n,style:{display:"block",overflowX:"auto",maxWidth:"100%"},children:e})},Gv=50,YP={triage:"Plan"};function vf(e){return e.scrollHeight-(e.scrollTop+e.clientHeight)<=Gv}function zu(e){return[e.taskId,e.timestamp,e.agent??"",e.type,e.text,e.detail??""].join("|")}function QP(e){const n=new Map;return e.map(s=>{const a=zu(s),r=n.get(a)??0;return n.set(a,r+1),`${a}|${r}`})}function Kv(e){return e==="tool"||e==="tool_result"||e==="tool_error"}function Pd({detail:e}){const[n,s]=i.useState(!1),a=i.useId(),r=e.split(`
|
|
682
|
+
`).length,o=n?"Hide output":`Show output${r>1?` (${r} lines)`:""}`;return t.jsxs("div",{className:"agent-log-tool-detail-wrapper",children:[t.jsxs("button",{type:"button",className:"agent-log-tool-detail-toggle",onClick:()=>s(l=>!l),"aria-expanded":n,"aria-controls":a,"data-testid":"tool-detail-toggle",children:[n?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14}),t.jsx("span",{children:o})]}),t.jsx("div",{id:a,className:n?"agent-log-tool-detail-content":"agent-log-tool-detail-content agent-log-tool-detail-content--collapsed","data-testid":"tool-detail-content",children:t.jsx("pre",{className:"agent-log-tool-detail",children:Es(e)})})]})}function XP(e,n){return e.agent?Kv(e.type)?!0:!n||n.agent!==e.agent||n.type!==e.type:!1}function ZP(e,n){const s=[];for(let a=0;a<e.length;a+=1){const{entry:r,hiddenToolBoundaryId:o}=e[a],l=n[a]??`${zu(r)}|fallback`,c=a>0?e[a-1]:void 0,d=c?.entry,u=XP(r,d)||c!==void 0&&c.hiddenToolBoundaryId!==o;if(r.type==="text"||r.type==="thinking"){const h=[r];let m=a+1;for(;m<e.length;){const p=e[m],g=p.entry;if(g.type!==r.type||g.agent!==r.agent||p.hiddenToolBoundaryId!==o)break;h.push(g),m+=1}const f=n[m-1]??`${zu(e[m-1].entry)}|fallback`;s.push({kind:r.type,entries:h,key:`${l}->${f}`,showBadge:u}),a=m-1;continue}s.push({kind:"single",entry:r,key:l,showBadge:u})}return s}function e$({entries:e,loading:n,executorModel:s,validatorModel:a,planningModel:r,hasMore:o=!1,onLoadMore:l,loadingMore:c=!1,totalCount:d=null}){const u=i.useRef(null),h=i.useRef(0),m=i.useRef(0),f=i.useRef(null),p=i.useRef(null),[g,w]=i.useState(()=>gf(pf,!0)),[v,b]=i.useState(()=>gf(ff,!0)),[y,N]=i.useState(!1),[S,C]=i.useState(!1),[x,k]=i.useState(!0);i.useEffect(()=>{bf(pf,g)},[g]),i.useEffect(()=>{bf(ff,v)},[v]);const R=i.useMemo(()=>{if(v)return e.map(P=>({entry:P,hiddenToolBoundaryId:0}));const D=[];let E=0;for(const P of e){if(Kv(P.type)){E+=1;continue}D.push({entry:P,hiddenToolBoundaryId:E})}return D},[e,v]),z=i.useMemo(()=>R.map(D=>D.entry),[R]),_=i.useMemo(()=>QP(z),[z]),A=i.useMemo(()=>ZP(R,_),[R,_]);i.useLayoutEffect(()=>{const D=u.current;if(!D)return;const E=e.length,P=h.current,$=m.current||D.scrollHeight,j=_[0]??null,q=_[_.length-1]??null,le=f.current!==j,fe=p.current!==q;if(E>P)if(P===0)D.scrollTop=D.scrollHeight;else{const Ce=$-(D.scrollTop+D.clientHeight)<=Gv,Ae=fe&&!le,re=le&&!fe;if(Ae&&Ce&&(D.scrollTop=D.scrollHeight),re){const Z=D.scrollHeight-$;Z>0&&(D.scrollTop+=Z)}}h.current=E,m.current=D.scrollHeight,f.current=j,p.current=q,k(vf(D))},[e,_]);const X=i.useCallback(()=>{const D=u.current;D&&k(vf(D))},[]),H=i.useCallback(()=>{const D=u.current;D&&(D.scrollTop=D.scrollHeight,k(!0))},[]),M=i.useCallback(D=>{D.key==="Escape"&&y&&N(!1)},[y]);i.useEffect(()=>{if(y)return document.addEventListener("keydown",M),()=>{document.removeEventListener("keydown",M)}},[y,M]);const T=s?.provider&&s?.modelId,F=a?.provider&&a?.modelId,W=r?.provider&&r?.modelId,oe=i.useMemo(()=>{const D=[];return T&&D.push({role:"Executor",provider:s.provider,modelId:s.modelId}),F&&D.push({role:"Reviewer",provider:a.provider,modelId:a.modelId}),W&&D.push({role:"Planning",provider:r.provider,modelId:r.modelId}),D},[T,s,F,a,W,r]);return n&&e.length===0?t.jsx("div",{className:"agent-log-viewer","data-testid":"agent-log-viewer",children:t.jsx("div",{className:"agent-log-loading",children:"Loading agent logs…"})}):e.length===0?t.jsx("div",{className:"agent-log-viewer","data-testid":"agent-log-viewer",children:t.jsx("div",{className:"agent-log-empty",children:"No agent output yet."})}):t.jsxs("div",{className:`agent-log-viewer agent-log-viewer--streaming${y?" agent-log-viewer--fullscreen":""}`,"data-testid":"agent-log-viewer",children:[t.jsxs("div",{className:"agent-log-model-header","data-testid":"agent-log-model-header",children:[t.jsxs("div",{className:"agent-log-model-icons",children:[oe.map(D=>t.jsx(Kn,{provider:D.provider,size:"sm"},`${D.role}-${D.provider}-${D.modelId??"default"}`)),t.jsx("button",{className:"agent-log-model-expand-btn",onClick:()=>C(D=>!D),"aria-label":S?"Collapse model details":"Expand model details","aria-expanded":S,"aria-controls":"agent-log-model-details","data-testid":"agent-log-model-expand",children:S?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14})})]}),t.jsxs("div",{className:"agent-log-model-header-toggle",children:[t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>w(D=>!D),"aria-label":g?"Switch to plain text mode":"Switch to markdown mode","aria-pressed":g,"data-testid":"agent-log-mode-toggle",title:g?"Show raw text":"Show formatted markdown",children:g?"Markdown":"Plain"}),t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>b(D=>!D),"aria-label":v?"Hide tool output":"Show tool output","aria-pressed":v,"data-testid":"agent-log-tool-output-toggle",title:v?"Hide tool calls and results":"Show tool calls and results",children:v?"Tools: On":"Tools: Off"}),t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>N(D=>!D),"aria-label":y?"Exit full screen":"Expand agent log to full screen","data-testid":"agent-log-fullscreen-toggle",title:y?"Exit full screen":"Expand agent log to full screen",children:y?t.jsx(Zo,{size:14}):t.jsx(_c,{size:14})})]}),S&&t.jsxs("div",{id:"agent-log-model-details",className:"agent-log-model-details",children:[t.jsxs("div",{className:"agent-log-model-group",children:[t.jsx("span",{className:"agent-log-model-label",children:"Executor:"}),T?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Kn,{provider:s.provider,size:"sm"}),t.jsxs("span",{children:[s.provider,"/",s.modelId]})]}):t.jsx("span",{className:"model-badge-default",children:"Using default"})]}),t.jsxs("div",{className:"agent-log-model-group",children:[t.jsx("span",{className:"agent-log-model-label",children:"Reviewer:"}),F?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Kn,{provider:a.provider,size:"sm"}),t.jsxs("span",{children:[a.provider,"/",a.modelId]})]}):t.jsx("span",{className:"model-badge-default",children:"Using default"})]}),t.jsxs("div",{className:"agent-log-model-group",children:[t.jsx("span",{className:"agent-log-model-label",children:"Planning:"}),W?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Kn,{provider:r.provider,size:"sm"}),t.jsxs("span",{children:[r.provider,"/",r.modelId]})]}):t.jsx("span",{className:"model-badge-default",children:"Using default"})]})]})]}),t.jsxs("div",{ref:u,className:"agent-log-viewer-scroll",onScroll:X,children:[d!==null&&t.jsxs("div",{className:"agent-log-summary","data-testid":"agent-log-summary",children:["Showing ",z.length," of ",d," entries",!v&&e.length!==z.length?` (${e.length-z.length} tool entries hidden)`:""]}),o&&l&&t.jsx("div",{className:"agent-log-load-more","data-testid":"agent-log-load-more",children:t.jsx("button",{className:"agent-log-mode-toggle",onClick:l,disabled:c,"data-testid":"agent-log-load-more-button",children:c?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:14,className:"animate-spin"}),"Loading…"]}):"Load More"})}),A.map(D=>{const E=D.kind==="single"?D.entry:D.entries[0],P=D.showBadge?t.jsx("span",{className:"agent-log-timestamp","data-testid":"agent-log-timestamp",children:JP(E.timestamp)}):null,$=D.showBadge?t.jsxs("span",{className:"agent-log-badge-row",children:[t.jsxs("span",{className:"agent-log-agent-badge",children:["[",YP[E.agent]??E.agent,"]"]}),P]}):null;if(D.kind==="single"){const{entry:q}=D;if(q.type==="tool")return t.jsxs("div",{className:"agent-log-tool",children:[$,t.jsxs("div",{className:"agent-log-tool-title",children:["⚡ ",q.text]}),q.detail?t.jsx(Pd,{detail:q.detail,type:"tool"}):null]},D.key);if(q.type==="tool_result")return t.jsxs("div",{className:"agent-log-tool-result",children:[$,t.jsxs("div",{className:"agent-log-tool-title",children:["✓ ",q.text]}),q.detail?t.jsx(Pd,{detail:q.detail,type:"tool_result"}):null]},D.key);if(q.type==="tool_error")return t.jsxs("div",{className:"agent-log-tool-error",children:[$,t.jsxs("div",{className:"agent-log-tool-title",children:["✗ ",q.text]}),q.detail?t.jsx(Pd,{detail:q.detail,type:"tool_error"}):null]},D.key)}const j=D.kind==="single"?E.text:D.entries.map(q=>q.text).join("");return D.kind==="thinking"?t.jsxs("div",{className:"agent-log-thinking",children:[$,g?t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:xf,children:j})}):t.jsx("pre",{className:"agent-log-plain-block",children:Es(j)})]},D.key):t.jsxs("div",{className:"agent-log-text",children:[$,g?t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:xf,children:j})}):t.jsx("pre",{className:"agent-log-plain-block",children:Es(j)})]},D.key)}),!x&&t.jsxs("button",{type:"button",className:"agent-log-return-to-live",onClick:H,"data-testid":"agent-log-return-to-live",children:[t.jsx(jn,{size:12}),t.jsx("span",{children:"Live"})]})]})]})}function Fr(e){return e??void 0}function Cl(e){return{provider:Fr(e.modelProvider),modelId:Fr(e.modelId)}}function El(e){return{provider:Fr(e.validatorModelProvider),modelId:Fr(e.validatorModelId)}}function _l(e){return{provider:Fr(e.planningModelProvider),modelId:Fr(e.planningModelId)}}function t$(e,n){return Fb(e,n)}function n$(e,n){return zb(e,n)}function s$(e,n){return Bb(e,n)}function $d(e){if(!e)return{provider:void 0,modelId:void 0};const n=e.indexOf("/");return{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Dd(e){return e.provider&&e.modelId?`${e.provider}/${e.modelId}`:""}function Ld(e,n){return e.provider===n.provider&&e.modelId===n.modelId}function i$(e,n){const a={executor:"Executor",validator:"Reviewer",planning:"Planning"}[e]||e;return!n.provider||!n.modelId?`${a} model set to default`:`${a} model set to ${n.provider}/${n.modelId}`}function a$({task:e,addToast:n,onTaskUpdated:s,settings:a}){const[r,o]=i.useState([]),[l,c]=i.useState([]),[d,u]=i.useState([]),[h,m]=i.useState(!1),[f,p]=i.useState(null),[g,w]=i.useState(()=>Cl(e)),[v,b]=i.useState(()=>Cl(e)),[y,N]=i.useState(()=>El(e)),[S,C]=i.useState(()=>El(e)),[x,k]=i.useState(()=>_l(e)),[R,z]=i.useState(()=>_l(e)),[_,A]=i.useState(()=>e.thinkingLevel??null),[X,H]=i.useState(()=>e.thinkingLevel??null),[M,T]=i.useState(null),F=i.useRef(e.id);i.useEffect(()=>{m(!0),p(null),Ws().then(ne=>{o(ne.models),c(ne.favoriteProviders),u(ne.favoriteModels)}).catch(ne=>{p(ne.message||"Failed to load models")}).finally(()=>{m(!1)})},[]);const W=i.useCallback(async ne=>{const L=l,ue=L.includes(ne)?L.filter(B=>B!==ne):[ne,...L];c(ue);try{await Jn({favoriteProviders:ue,favoriteModels:d})}catch{c(L),n("Failed to update favorites","error")}},[l,d,n]),oe=i.useCallback(async ne=>{const L=d,ue=L.includes(ne)?L.filter(B=>B!==ne):[ne,...L];u(ue);try{await Jn({favoriteProviders:l,favoriteModels:ue})}catch{u(L),n("Failed to update model favorites","error")}},[d,l,n]);i.useEffect(()=>{F.current=e.id;const ne=Cl(e),L=El(e),Y=_l(e);w(ne),b(ne),N(L),C(L),k(Y),z(Y);const ue=e.thinkingLevel??null;A(ue),H(ue),T(null)},[e.id,e.modelProvider,e.modelId,e.validatorModelProvider,e.validatorModelId,e.planningModelProvider,e.planningModelId,e.thinkingLevel]);const D=i.useMemo(()=>Dd(g),[g]),E=i.useMemo(()=>Dd(y),[y]),P=i.useMemo(()=>Dd(x),[x]),$=i.useMemo(()=>t$(e,a),[e,a]),j=i.useMemo(()=>n$(e,a),[e,a]),q=i.useMemo(()=>s$(e,a),[e,a]),le=M!==null,fe=i.useCallback(async(ne,L)=>{const Y=e.id,ue=v,B=S,xe=R;T(ne);try{const je=s?ne==="executor"?{modelProvider:L.provider??null,modelId:L.modelId??null}:ne==="validator"?{validatorModelProvider:L.provider??null,validatorModelId:L.modelId??null}:{planningModelProvider:L.provider??null,planningModelId:L.modelId??null}:{modelProvider:(ne==="executor"?L:v).provider??null,modelId:(ne==="executor"?L:v).modelId??null,validatorModelProvider:(ne==="validator"?L:S).provider??null,validatorModelId:(ne==="validator"?L:S).modelId??null,planningModelProvider:(ne==="planning"?L:R).provider??null,planningModelId:(ne==="planning"?L:R).modelId??null},se=await Ds(Y,je);if(F.current!==Y)return;const Ue=Cl(se),De=El(se),dt=_l(se);b(Ue),w(Ue),C(De),N(De),z(dt),k(dt),s?.(se),n(i$(ne,{executor:Ue,validator:De,planning:dt}[ne]),"success")}catch(je){if(F.current!==Y)return;ne==="executor"?w(ue):ne==="validator"?N(B):k(xe),n(Me(je)||"Failed to save model settings","error")}finally{F.current===Y&&T(null)}},[e.id,v,S,R,n,s]),Ce=i.useCallback(ne=>{const L=$d(ne);w(L),!Ld(L,v)&&fe("executor",L)},[v,fe]),Ae=i.useCallback(ne=>{const L=$d(ne);N(L),!Ld(L,S)&&fe("validator",L)},[S,fe]),re=i.useCallback(ne=>{const L=$d(ne);k(L),!Ld(L,R)&&fe("planning",L)},[R,fe]),Z=i.useCallback(async ne=>{const L=e.id,Y=X,ue=ne===""?null:ne;A(ue),T("thinking");try{const B=await Ds(L,{thinkingLevel:ue});if(F.current!==L)return;const xe=B.thinkingLevel??null;H(xe),A(xe),s?.(B);const je=a?.defaultThinkingLevel??"off";n(xe===null?`Thinking level set to default (${je})`:`Thinking level set to ${xe}`,"success")}catch(B){if(F.current!==L)return;A(Y),n(Me(B)||"Failed to save thinking level","error")}finally{F.current===L&&T(null)}},[e.id,X,a,n,s]),pe=!v.provider&&!v.modelId,ie=!S.provider&&!S.modelId,ve=!R.provider&&!R.modelId;return t.jsxs("div",{className:"model-selector-tab",children:[t.jsx("h4",{children:"Model Configuration"}),t.jsx("p",{className:"model-selector-intro",children:"Override the AI models used for this task. When not specified, project or global defaults are used."}),h?t.jsx("div",{className:"model-selector-loading",children:"Loading available models…"}):f?t.jsxs("div",{className:"model-selector-error",children:["Error loading models: ",f,t.jsx("button",{className:"btn btn-sm",onClick:()=>{m(!0),p(null),Ws().then(ne=>{o(ne.models),c(ne.favoriteProviders),u(ne.favoriteModels)}).catch(ne=>p(ne.message)).finally(()=>m(!1))},style:{marginLeft:"8px"},children:"Retry"})]}):r.length===0?t.jsx("div",{className:"model-selector-empty",children:"No models available. Configure authentication in Settings to enable model selection."}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"executorModel",children:"Executor Model"}),t.jsx("div",{className:"model-selector-current",children:pe?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",$.provider&&$.modelId?` (${$.provider}/${$.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[v.provider&&t.jsx(Kn,{provider:v.provider,size:"sm"}),v.provider,"/",v.modelId]})}),t.jsx(Ms,{id:"executorModel",label:"Executor Model",value:D,onChange:Ce,models:r,disabled:le,placeholder:"Select executor model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:d,onToggleModelFavorite:oe}),t.jsx("small",{children:"The AI model used to implement this task."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"validatorModel",children:"Reviewer Model"}),t.jsx("div",{className:"model-selector-current",children:ie?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",j.provider&&j.modelId?` (${j.provider}/${j.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[S.provider&&t.jsx(Kn,{provider:S.provider,size:"sm"}),S.provider,"/",S.modelId]})}),t.jsx(Ms,{id:"validatorModel",label:"Reviewer Model",value:E,onChange:Ae,models:r,disabled:le,placeholder:"Select reviewer model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:d,onToggleModelFavorite:oe}),t.jsx("small",{children:"The AI model used to review code and plans for this task."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"planningModel",children:"Planning Model"}),t.jsx("div",{className:"model-selector-current",children:ve?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",q.provider&&q.modelId?` (${q.provider}/${q.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[R.provider&&t.jsx(Kn,{provider:R.provider,size:"sm"}),R.provider,"/",R.modelId]})}),t.jsx(Ms,{id:"planningModel",label:"Planning Model",value:P,onChange:re,models:r,disabled:le,placeholder:"Select planning model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:d,onToggleModelFavorite:oe}),t.jsx("small",{children:"The AI model used for task specification (triage phase)."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"thinkingLevel",children:"Thinking Level"}),t.jsx("div",{className:"model-selector-current",children:X===null?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default (",a?.defaultThinkingLevel??"off",")"]}):t.jsx("span",{className:"model-badge model-badge-custom",children:X})}),t.jsxs("select",{id:"thinkingLevel",value:_??"",onChange:ne=>Z(ne.target.value),disabled:le,className:"thinking-level-select",children:[t.jsxs("option",{value:"",children:["Default (",a?.defaultThinkingLevel??"off",")"]}),t.jsx("option",{value:"off",children:"Off"}),t.jsx("option",{value:"minimal",children:"Minimal"}),t.jsx("option",{value:"low",children:"Low"}),t.jsx("option",{value:"medium",children:"Medium"}),t.jsx("option",{value:"high",children:"High"})]}),t.jsx("small",{children:"Controls the reasoning effort for the AI agent. Higher levels use more tokens."})]}),t.jsx("div",{className:"model-selector-status",children:pe&&ie&&ve&&X===null?"Using project or global default models.":"Model settings are up to date."})]})]})}const r$={open:t.jsx(kc,{size:16}),closed:t.jsx(Xo,{size:16}),merged:t.jsx(Tb,{size:16})};function o$({taskId:e,projectId:n,prInfo:s,automationStatus:a,autoMerge:r=!1,isManualPrFlow:o=!1,prAuthAvailable:l,onPrCreated:c,onPrUpdated:d,addToast:u}){const[h,m]=i.useState(!1),[f,p]=i.useState(""),[g,w]=i.useState(""),[v,b]=i.useState(!1),[y,N]=i.useState(!1),[S,C]=i.useState(null),x=i.useCallback(async()=>{if(f.trim()){b(!0);try{const _=await KS(e,{title:f.trim(),body:g.trim()||void 0},n);c(_),m(!1),p(""),w(""),u(`Created PR #${_.number}`,"success")}catch(_){u(Me(_)||"Failed to create PR","error")}finally{b(!1)}}},[e,f,g,n,c,u]),k=i.useCallback(async()=>{if(s){N(!0);try{const _=await JS(e,n);C(_),d(_.prInfo),u("PR status refreshed","success")}catch(_){u(Me(_)||"Failed to refresh PR","error")}finally{N(!1)}}},[e,s,n,d,u]);if(!s)return a==="creating-pr"?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Zs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsx("div",{className:"pr-hint pr-hint--muted",children:"fn is creating a pull request automatically for this task."})]}):r?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Zs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsx("div",{className:"pr-hint pr-hint--muted",children:"Auto-merge will handle this task automatically."})]}):h?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Zs,{size:16,className:"pr-section-icon"}),"Create Pull Request"]}),t.jsxs("div",{className:"pr-form",children:[t.jsx("input",{type:"text",placeholder:"PR title",value:f,onChange:_=>p(_.target.value),disabled:v,className:"pr-input"}),t.jsx("textarea",{placeholder:"PR description (optional)",value:g,onChange:_=>w(_.target.value),disabled:v,className:"pr-textarea",rows:3}),t.jsxs("div",{className:"pr-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>m(!1),disabled:v,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:x,disabled:!f.trim()||v,children:v?"Creating…":"Create PR"})]})]})]}):t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Zs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>m(!0),disabled:!l,title:l?"Create a PR for this task":"PR auth unavailable — run 'gh auth login'",children:[t.jsx(Bn,{size:14,className:"pr-section-icon--sm"}),"Create PR"]}),o&&t.jsx("div",{className:"pr-hint pr-hint--subtle",children:"Use the footer action to run PR-first completion for this task."}),!l&&t.jsxs("div",{className:"pr-hint pr-hint--subtle",children:["Run ",t.jsx("code",{children:"gh auth login"})," to enable PR creation."]})]});const R=r$[s.status]??t.jsx(kc,{size:16}),z=S?.blockingReasons??[];return t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Zs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsxs("div",{className:`pr-card pr-card--status-${s.status}`,children:[t.jsxs("div",{className:"pr-header",children:[t.jsx("span",{className:"pr-status-icon",children:R}),t.jsx("span",{className:`pr-status-badge pr-status-badge--${s.status}`,children:s.status}),t.jsxs("span",{className:"pr-number",children:["#",s.number]}),t.jsx("div",{className:"pr-spacer"}),t.jsx("button",{className:"btn btn-sm pr-refresh-btn",onClick:k,disabled:y,title:"Refresh PR status",children:t.jsx(bs,{size:14,style:{verticalAlign:"middle",opacity:y?.5:1}})})]}),t.jsx("div",{className:"pr-title",children:s.title}),t.jsxs("div",{className:"pr-meta",children:[t.jsx("span",{children:s.headBranch}),t.jsx("span",{className:"pr-meta-arrow",children:"→"}),t.jsx("span",{children:s.baseBranch})]}),a==="merging-pr"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:"fn is merging this pull request automatically."}),a==="awaiting-pr-checks"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:z.length>0?`Waiting for: ${z.join("; ")}`:"Waiting for required checks or review feedback before auto-merge."}),s.status==="merged"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:"This PR is merged. fn will finish local cleanup and move the task to Done."}),t.jsxs("div",{className:"pr-footer",children:[s.commentCount>0&&t.jsxs("span",{className:"pr-comments",children:[t.jsx(na,{size:14}),s.commentCount]}),t.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"pr-link",children:[t.jsx(Ab,{size:14}),"View on GitHub"]})]})]})]})}const yf=2e3;function l$(e){const n=e.updatedAt||e.createdAt,s=new Date(n).toLocaleString();return e.updatedAt?`${s} (edited)`:s}function c$(e){return e==="agent"||e==="system"}function d$({task:e,onTaskUpdated:n,addToast:s,currentAuthor:a="user",projectId:r}){const[o,l]=i.useState(""),[c,d]=i.useState(null),[u,h]=i.useState(""),[m,f]=i.useState(!1),[p,g]=i.useState(null),w=i.useMemo(()=>[...e.comments||[]].sort((k,R)=>new Date(R.createdAt).getTime()-new Date(k.createdAt).getTime()),[e.comments]),v=o.length>yf;async function b(){const k=o.trim();if(k){f(!0);try{const R=await hS(e.id,k,r);l(""),n?.(R),s("Comment added","success")}catch(R){s(Me(R)||"Failed to add comment","error")}finally{f(!1)}}}async function y(k){const R=u.trim();if(R){f(!0);try{const z=await lS(e.id,k,R,r);d(null),h(""),n?.(z),s("Comment updated","success")}catch(z){s(Me(z)||"Failed to update comment","error")}finally{f(!1)}}}async function N(k){g(k);try{const R=await cS(e.id,k,r);n?.(R),s("Comment deleted","success")}catch(R){s(Me(R)||"Failed to delete comment","error")}finally{g(null)}}function S(k){k.key==="Enter"&&(k.ctrlKey||k.metaKey)&&(k.preventDefault(),b())}return t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Comments"}),w.length===0?t.jsx("div",{className:"detail-log-empty",children:"No comments yet."}):t.jsx("div",{className:"detail-activity-list",children:w.map(k=>{const R=k.author===a,z=c===k.id,_=c$(k.author);return t.jsxs("div",{className:"detail-log-entry",children:[t.jsxs("div",{className:"detail-log-header comments-header-row",children:[t.jsxs("div",{className:"comments-author-row",children:[_?t.jsx("span",{className:"ai-guidance-badge","data-testid":"ai-guidance-badge",children:"AI Guidance"}):t.jsx("strong",{children:k.author}),t.jsx("span",{className:"detail-log-timestamp",children:l$(k)})]}),R&&!z?t.jsxs("div",{className:"comments-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{d(k.id),h(k.text)},children:"Edit"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>void N(k.id),disabled:p===k.id,children:p===k.id?"Deleting…":"Delete"})]}):null]}),z?t.jsxs("div",{className:"comments-edit-form",children:[t.jsx("textarea",{value:u,onChange:A=>h(A.target.value),rows:3,className:"comments-textarea"}),t.jsxs("div",{className:"comments-edit-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{d(null),h("")},disabled:m,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void y(k.id),disabled:m||!u.trim(),children:"Save"})]})]}):t.jsx("div",{className:"detail-log-outcome comments-outcome-text",children:k.text})]},k.id)})}),t.jsxs("div",{className:"comments-compose-form",children:[t.jsx("textarea",{value:o,onChange:k=>l(k.target.value),onKeyDown:S,rows:3,placeholder:"Add a comment",className:"comments-textarea"}),t.jsxs("div",{className:"comments-footer-row",children:[t.jsxs("span",{className:`comments-char-count${v?" comments-char-count--over":""}`,children:[o.length," / ",yf]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void b(),disabled:m||!o.trim()||v,children:m?"Posting…":"Add Comment"})]})]})]})}const wf="Failed to load review data.",u$="No reviewer feedback yet — this task has not produced reviewer-agent feedback in direct mode.",kf="fn-task-review-markdown";function m$(e,n){if(typeof window>"u")return n;try{const s=window.localStorage.getItem(e);return s===null?n:s==="true"}catch{return n}}function h$(e,n){if(!(typeof window>"u"))try{window.localStorage.setItem(e,n?"true":"false")}catch{}}const p$={p:({children:e,...n})=>t.jsx("p",{...n,children:Ks(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Ks(e)}),code:({children:e,...n})=>t.jsx("code",{...n,children:Ks(e)}),pre:({children:e,...n})=>t.jsx("pre",{...n,style:{overflowX:"auto",maxWidth:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:Ks(e)}),table:({children:e,...n})=>t.jsx("table",{...n,style:{display:"block",overflowX:"auto",maxWidth:"100%"},children:e})};function go(e){return e?new Date(e).toLocaleString():"Never"}function f$(e){return e==="manual"?"Manual":e==="auto"?"Background":"Initial load"}function g$(e){const n=new Map(e.addressing.map(o=>[o.itemId,o])),s=e.items.map(o=>{const l=n.get(o.id);return{id:o.id,summary:o.summary??o.body.slice(0,120),body:o.body,path:o.path,createdAt:o.createdAt,status:l?.status??"queued",addressing:l,item:o}}),a=new Set(s.map(o=>o.id)),r=e.addressing.filter(o=>!a.has(o.itemId)&&o.snapshot).map(o=>({id:o.itemId,summary:o.snapshot?.summary??o.itemId,body:o.snapshot?.body??o.snapshot?.summary??o.itemId,path:o.snapshot?.filePath,createdAt:o.selectedAt,status:o.status,addressing:o}));return[...s,...r]}function b$({task:e,projectId:n,onTaskUpdated:s,addToast:a}){const[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState(!1),[h,m]=i.useState(!0),[f,p]=i.useState(null),[g,w]=i.useState(null),[v,b]=i.useState(e.reviewState??null),[y,N]=i.useState(()=>m$(kf,!0)),S=r.length>0&&!d,C=v?.source==="pull-request",x=i.useMemo(()=>v?g$(v):[],[v]);i.useEffect(()=>{h$(kf,y)},[y]),i.useEffect(()=>{let M=!1;return m(!0),p(null),p1(e.id,n).then(T=>{M||(b(T.reviewState),w(T.emptyMessage??null))}).catch(()=>{M||p(wf)}).finally(()=>{M||m(!1)}),()=>{M=!0}},[e.id,n]);const k=i.useMemo(()=>v?v.source==="pull-request"?`${v.summary?.reviewDecision??"REVIEW_REQUIRED"} · ${x.length} review item(s)`:`${v.summary?.summary??"reviewer-agent"} · ${x.length} review item(s)`:"No review feedback captured yet.",[v,x.length]),R=v?v.source==="pull-request"?v.summary?.reviewDecision:v.summary?.verdict:void 0,z=l?"refreshing":v?.refreshStatus??"ready",_=z==="error"?"status-dot status-dot--error":z==="refreshing"?"status-dot status-dot--pending":"status-dot status-dot--online",A=M=>o(T=>T.includes(M)?T.filter(F=>F!==M):[...T,M]),X=async()=>{try{p(null),c(!0);const M=await f1(e.id,n);if(b(M.reviewState),s?.({...e,reviewState:M.reviewState,prInfo:M.prInfo??e.prInfo}),M.reviewState.refreshStatus==="error"){const T=M.reviewState.refreshError??"Failed to refresh review data.";p(T),a(T,"error");return}a("Review refreshed","success")}catch(M){const T=M instanceof Error?M.message:wf;p(T),a(T,"error")}finally{c(!1)}},H=async()=>{try{if(!v)return;p(null),u(!0);const M=x.filter(F=>r.includes(F.id)).map(F=>{if(!F.item)return{id:F.id,source:v.source==="pull-request"?"pr-review":"reviewer-agent",threadId:F.addressing?.snapshot?.threadId,filePath:F.addressing?.snapshot?.filePath,lineNumber:F.addressing?.snapshot?.lineNumber,author:F.addressing?.snapshot?.authorLogin,summary:F.summary,body:F.body,url:F.addressing?.snapshot?.url};const W=F.item;return{id:F.item.id,source:v.source==="pull-request"?"pr-review":"reviewer-agent",threadId:typeof W.threadId=="string"?W.threadId:void 0,filePath:F.item.path,lineNumber:typeof W.line=="number"?W.line:void 0,author:F.item.author?.login,summary:F.item.summary??F.item.body.slice(0,120),body:F.item.body,url:typeof W.url=="string"?W.url:void 0}}),T=await g1(e.id,M,n);b(T.reviewState),s?.({...T.task,reviewState:T.reviewState}),o([]),a("Same-task AI revision started from selected review feedback","success")}catch(M){const T=M instanceof Error?M.message:"Failed to queue revision";p(T),a(T,"error")}finally{u(!1)}};return t.jsxs("div",{className:"task-review-tab",children:[t.jsxs("div",{className:"task-review-tab__header",children:[t.jsxs("div",{className:"task-review-tab__summary-wrap",children:[t.jsx("p",{className:"task-review-tab__summary",children:k}),R?t.jsx("span",{className:`task-review-tab__decision task-review-tab__decision--${R}`,children:R}):null]}),t.jsxs("div",{className:"task-review-tab__actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>N(M=>!M),"aria-pressed":y,"data-testid":"task-review-markdown-toggle",title:y?"Show raw text":"Show formatted markdown",children:y?"Markdown":"Plain"}),t.jsx("button",{className:"btn btn-sm",onClick:X,disabled:l||h,children:l?"Refreshing…":"Refresh"}),t.jsx("button",{className:"btn btn-primary btn-sm",disabled:!S,onClick:H,children:d?"Queueing…":"Request revision"})]})]}),t.jsxs("div",{className:"task-review-tab__meta task-review-tab__refresh-meta","aria-live":"polite",children:[t.jsx("span",{className:_,"aria-hidden":"true"}),t.jsxs("span",{children:[z==="error"?"Refresh failed":z==="refreshing"?"Refreshing":"Up to date"," · Last refreshed: ",go(v?.lastRefreshedAt)," · ",f$(v?.refreshSource)]})]}),h?t.jsx("div",{className:"task-review-tab__meta",children:"Loading review data…"}):null,!h&&f?t.jsx("div",{className:"task-review-tab__error",children:f}):null,!h&&!f&&!C&&x.length===0?t.jsx("div",{className:"task-review-tab__empty",children:g??u$}):null,!h&&!f&&x.length>0?t.jsx("ul",{className:"task-review-tab__list",children:x.map(M=>{const T=`task-review-item-checkbox-${M.id}`;return t.jsx("li",{className:"task-review-tab__item card",children:t.jsxs("div",{className:"task-review-tab__item-inner",children:[t.jsx("label",{htmlFor:T,className:"task-review-tab__direct-item task-review-tab__direct-item--selectable",children:t.jsxs("div",{className:"task-review-tab__summary-wrap",children:[t.jsx("input",{id:T,type:"checkbox",checked:r.includes(M.id),onChange:()=>A(M.id)}),t.jsxs("span",{className:"task-review-tab__item-summary",children:[M.path?`${M.path}: `:"",M.summary]}),t.jsx("span",{className:`task-review-tab__status task-review-tab__status--${M.status}`,children:M.status})]})}),t.jsx("div",{className:"task-review-tab__meta",children:go(M.createdAt)}),M.addressing?t.jsxs("div",{className:"task-review-tab__meta",children:["Selected: ",go(M.addressing.selectedAt),M.addressing.startedAt?` · Started: ${go(M.addressing.startedAt)}`:"",M.addressing.completedAt?` · Completed: ${go(M.addressing.completedAt)}`:"",M.addressing.error?` · Error: ${M.addressing.error}`:""]}):null,y?t.jsx("div",{className:"task-review-tab__body markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:p$,children:M.body})}):t.jsx("pre",{className:"task-review-tab__body",children:Es(M.body)})]})},M.id)})}):null,C&&!h&&!f&&x.length===0?t.jsx("div",{className:"task-review-tab__empty",children:"No review items yet."}):null]})}function x$(e){return e?e.slice(0,7):"Unknown"}function v$({task:e}){if(e.column!=="done"||!e.mergeDetails)return null;const n=e.mergeDetails;return t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Merge Details"}),t.jsxs("div",{className:"pr-card merge-details-card",children:[t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Status"}),t.jsx("span",{className:"detail-log-outcome",children:n.mergeConfirmed===!1?"Recorded without local merge confirmation":"Merged successfully"})]})}),t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Commit"}),t.jsx("span",{className:"detail-log-outcome",children:x$(n.commitSha)})]})}),t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Files changed"}),t.jsx("span",{className:"detail-log-outcome",children:n.filesChanged??0})]})}),t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Insertions / Deletions"}),t.jsxs("span",{className:"detail-log-outcome",children:["+",n.insertions??0," / -",n.deletions??0]})]})}),n.mergedAt?t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Merged at"}),t.jsx("span",{className:"detail-log-outcome",children:new Date(n.mergedAt).toLocaleString()})]})}):null,n.prNumber?t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"PR"}),e.prInfo?.url?t.jsxs("a",{className:"detail-source-link detail-log-outcome",href:e.prInfo.url,target:"_blank",rel:"noopener noreferrer",children:["#",n.prNumber]}):t.jsxs("span",{className:"detail-log-outcome",children:["#",n.prNumber]})]})}):null,n.mergeCommitMessage?t.jsxs("div",{className:"detail-log-entry",children:[t.jsx("div",{className:"detail-log-header",children:t.jsx("span",{className:"detail-log-action",children:"Message"})}),t.jsx("div",{className:"detail-log-outcome",children:n.mergeCommitMessage})]}):null]})]})}function Jv(e){return e.split(`
|
|
683
|
+
`).map((s,a)=>{let r="";return s.startsWith("+")&&!s.startsWith("+++")?r="diff-add":s.startsWith("-")&&!s.startsWith("---")?r="diff-del":s.startsWith("@@")&&(r="diff-hunk"),r?t.jsx("span",{className:r,children:`${s}
|
|
684
|
+
`},a):t.jsx(ka.Fragment,{children:`${s}
|
|
685
|
+
`},a)})}function y$(e){switch(e){case"added":return"A";case"deleted":return"D";case"modified":return"M";default:return"?"}}function w$({isOpen:e,taskId:n,files:s,stats:a,mergeDetails:r,column:o,onClose:l,onRefresh:c}){const[d,u]=i.useState(null),[h,m]=i.useState(!0),f=i.useRef(null);qi(f,e,"fusion:changes-diff-modal-size");const p=ra(l);i.useEffect(()=>{s.length>0&&d===null&&u(0)},[s,d]);const g=i.useCallback(()=>{u(y=>y!==null&&y>0?y-1:y)},[]),w=i.useCallback(()=>{u(y=>y!==null&&y<s.length-1?y+1:y)},[]);if(i.useEffect(()=>{if(!e)return;const y=N=>{if(N.key==="Escape"){l();return}N.key==="ArrowUp"&&(N.metaKey||N.ctrlKey)&&(N.preventDefault(),g()),N.key==="ArrowDown"&&(N.metaKey||N.ctrlKey)&&(N.preventDefault(),w())};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[e,l,g,w]),!e)return null;const v=d!==null?s[d]:null,b=o==="done";return t.jsx("div",{className:"modal-overlay open",...p,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal changes-diff-modal",ref:f,children:[t.jsxs("div",{className:"modal-header changes-diff-modal-header",children:[t.jsxs("div",{className:"changes-diff-header-title",children:[t.jsx(Ni,{size:18}),t.jsxs("span",{children:["Changes — ",n]}),t.jsxs("span",{className:"changes-stat-summary",children:[t.jsxs("span",{className:"diff-add",children:["+",a.additions]})," ",t.jsxs("span",{className:"diff-del",children:["-",a.deletions]})]})]}),t.jsxs("div",{className:"changes-diff-header-actions",children:[s.length>0&&t.jsxs("div",{className:"changes-nav",children:[t.jsx("button",{className:"btn btn-sm btn-icon",onClick:g,disabled:d===null||d<=0,title:"Previous file (Ctrl+↑)","aria-label":"Previous file",children:t.jsx(wc,{})}),t.jsx("span",{className:"changes-nav-indicator","aria-live":"polite",children:d!==null?`${d+1}/${s.length}`:`—/${s.length}`}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:w,disabled:d===null||d>=s.length-1,title:"Next file (Ctrl+↓)","aria-label":"Next file",children:t.jsx(Wn,{})})]}),t.jsx("button",{className:`btn btn-sm ${h?"btn-primary":""}`,onClick:()=>m(y=>!y),title:h?"Disable word wrap":"Enable word wrap","aria-label":"Toggle word wrap",children:t.jsx(tm,{size:14})}),c&&t.jsxs("button",{className:"btn btn-sm",onClick:c,children:[t.jsx(bs,{size:14}),"Refresh"]}),t.jsx("button",{className:"modal-close",onClick:l,"aria-label":"Close",children:t.jsx(yn,{size:20})})]})]}),t.jsxs("div",{className:"changes-diff-body",children:[t.jsxs("div",{className:"changes-diff-sidebar",children:[b&&r&&t.jsxs("div",{className:"commit-diff-meta",children:[r.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ir,{size:14}),t.jsx("code",{children:r.commitSha.slice(0,7)})]}),r.mergeCommitMessage&&t.jsx("div",{className:"commit-diff-message",children:r.mergeCommitMessage}),r.mergedAt&&t.jsxs("div",{className:"commit-diff-timestamp",children:["Merged ",new Date(r.mergedAt).toLocaleString()]})]}),t.jsx("div",{className:"changes-diff-file-list",children:s.map((y,N)=>t.jsxs("button",{className:`changes-diff-file-item ${d===N?"selected":""}`,onClick:()=>u(N),title:y.path,children:[t.jsx("span",{className:`changes-file-status changes-file-status--${y.status}`,children:y$(y.status)}),t.jsx("span",{className:"changes-diff-file-path",title:y.path,children:t.jsx("bdo",{dir:"ltr",children:y.path})}),t.jsxs("span",{className:"changes-diff-file-stat",children:["+",y.additions," -",y.deletions]})]},y.path))})]}),t.jsx("div",{className:"changes-diff-content",children:v?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"changes-diff-file-header-bar",children:[t.jsx("span",{className:"changes-diff-file-header-name",children:v.path}),t.jsxs("span",{className:"changes-diff-file-header-stats",children:["+",v.additions," -",v.deletions]})]}),v.patch?t.jsx("div",{className:"changes-diff-viewer",children:t.jsx("pre",{className:`changes-diff-patch ${h?"changes-diff-patch--wrap":"changes-diff-patch--nowrap"}`,children:t.jsx("code",{children:Jv(v.patch)})})}):t.jsx("div",{className:"changes-diff-empty",children:"No diff available for this file."})]}):t.jsxs("div",{className:"changes-diff-empty",children:[t.jsx(Ni,{size:48,opacity:.3}),t.jsx("p",{children:"Select a file to view its diff"})]})})]})]})})}function Yv(e){switch(e){case"added":return"A";case"deleted":return"D";case"modified":return"M";default:return"?"}}function Od(e,n,s){return t.jsxs("div",{className:"detail-section task-changes-tab",children:[n&&s&&t.jsxs("div",{className:"commit-diff-meta",children:[s.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ir,{size:14}),t.jsx("code",{children:s.commitSha.slice(0,7)})]}),s.mergedAt&&t.jsxs("div",{className:"commit-diff-timestamp",children:["Merged ",new Date(s.mergedAt).toLocaleString()]})]}),t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsxs("p",{children:[e.length," file",e.length===1?"":"s"," modified during execution."]}),t.jsx("span",{className:"task-changes-state-hint",children:n?"The recorded merge commit has no diff (likely collapsed into a squash on main). Showing file paths only — patches unavailable.":"The live worktree diff is empty. Showing the last file paths captured during execution — patches unavailable."})]}),t.jsx("div",{className:"changes-file-list task-changes-file-list--compact",children:e.map(a=>t.jsx("div",{className:"changes-file-item",children:t.jsxs("div",{className:"changes-file-header changes-file-header--static",children:[t.jsx("span",{className:"changes-file-status changes-file-status--unknown",title:"status unknown",children:Yv("unknown")}),t.jsx("span",{className:"changes-file-path",title:a,children:t.jsx("bdo",{dir:"ltr",children:a})})]})},a))})]})}function k$({taskId:e,worktree:n,projectId:s,column:a,mergeDetails:r,modifiedFiles:o}){const[l,c]=i.useState([]),[d,u]=i.useState({filesChanged:0,additions:0,deletions:0}),[h,m]=i.useState(!0),[f,p]=i.useState(null),[g,w]=i.useState([]),[v,b]=i.useState(null),[y,N]=i.useState(new Set),[S,C]=i.useState(null),[x,k]=i.useState(!0),[R,z]=i.useState(!1),_=a==="done",A=_&&!!r?.commitSha,X=a==="in-progress"||a==="in-review"||_,H=i.useCallback(async()=>{if(!X&&!_){m(!1);return}try{m(!0),p(null);const D=await T1(e,s);if(b(D.lineageId),w(D.associations),!X){c([]),u({filesChanged:0,additions:0,deletions:0});return}const E=await nx(e,void 0,s),P=E.files.map($=>({path:$.path,status:$.status,additions:$.additions,deletions:$.deletions,patch:$.patch}));c(P),u(E.stats),P.length>0&&(N(new Set([P[0].path])),C(0))}catch(D){_&&!r?.commitSha?(c([]),u({filesChanged:0,additions:0,deletions:0}),p(null)):p(Me(D)||"Failed to load task changes")}finally{m(!1)}},[e,s,X,_,r?.commitSha]);i.useEffect(()=>{H()},[H]);const M=D=>{N(E=>{const P=new Set(E);if(P.has(D))P.delete(D);else{P.add(D);const $=l.findIndex(j=>j.path===D);$!==-1&&C($)}return P})},T=D=>{if(D<0||D>=l.length)return;const E=l[D].path;N(new Set([E])),C(D)},F=S!==null&&S>0,W=S!==null&&S<l.length-1;if(h)return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--loading",children:[t.jsx("div",{className:"loading-spinner"}),t.jsx("span",{children:"Loading changes..."})]})});if(f)return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--error",children:[t.jsx(Vs,{size:16}),t.jsxs("span",{children:["Error loading changes: ",f]})]})});if(!_&&!n&&l.length===0)return o&&o.length>0?Od(o,!1):t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsx("p",{children:"No worktree available for this task."}),t.jsx("span",{className:"task-changes-state-hint",children:"Changes will be shown once the task is in progress."})]})});const oe=()=>t.jsxs("section",{className:"task-lineage-associations","aria-label":"Task commit associations",children:[t.jsxs("div",{className:"task-lineage-associations-header",children:[t.jsxs("h4",{children:[t.jsx(Ir,{size:16}),"Lineage commit associations"]}),v&&t.jsx("code",{className:"task-lineage-id",children:v})]}),g.length===0?t.jsx("p",{className:"task-lineage-associations-empty",children:"No associated commits recorded yet."}):t.jsx("div",{className:"task-lineage-associations-list",children:g.map(D=>{const E=D.matchedBy.replace(/-/g," ");return t.jsxs("article",{className:`task-lineage-association task-lineage-association--${D.confidence}`,children:[t.jsxs("div",{className:"task-lineage-association-main",children:[t.jsx("code",{className:"task-lineage-sha",children:D.commitSha.slice(0,7)}),t.jsx("span",{className:"task-lineage-subject",children:D.commitSubject})]}),t.jsxs("div",{className:"task-lineage-association-meta",children:[t.jsx("span",{children:new Date(D.authoredAt).toLocaleString()}),t.jsxs("span",{children:["Confidence: ",D.confidence]}),t.jsxs("span",{children:["Match: ",E]}),t.jsxs("span",{children:["Task snapshot: ",D.taskIdSnapshot]})]}),D.note&&t.jsx("p",{className:"task-lineage-note",children:D.note})]},`${D.commitSha}-${D.matchedBy}`)})})]});if(l.length===0){if(_&&!A){if(o&&o.length>0)return Od(o,!0,r);const D=r?.filesChanged,E=r?.insertions,P=r?.deletions,$=D!=null||E!=null||P!=null;return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsx("p",{children:"Detailed file changes unavailable."}),t.jsx("span",{className:"task-changes-state-hint",children:$?`Merge summary: ${D??0} file${(D??0)===1?"":"s"} changed, +${E??0} additions, -${P??0} deletions.`:"No merge commit was recorded for this task."})]})})}return o&&o.length>0?Od(o,_,r):t.jsxs("div",{className:"detail-section task-changes-tab",children:[oe(),t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsx("p",{children:"No files modified."}),t.jsx("span",{className:"task-changes-state-hint",children:_?"No file changes were recorded in the merge commit.":"The agent did not modify any files during execution."})]})]})}return t.jsxs("div",{className:"detail-section task-changes-tab",children:[oe(),_&&r&&t.jsxs("div",{className:"commit-diff-meta",children:[r.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ir,{size:14}),t.jsx("code",{children:r.commitSha.slice(0,7)})]}),r.mergeCommitMessage&&t.jsx("div",{className:"commit-diff-message",children:r.mergeCommitMessage}),r.mergedAt&&t.jsxs("div",{className:"commit-diff-timestamp",children:["Merged ",new Date(r.mergedAt).toLocaleString()]})]}),t.jsxs("div",{className:"changes-header",children:[t.jsxs("div",{className:"task-changes-header-title",children:[t.jsxs("h4",{children:[t.jsx(Ni,{size:16}),"Files Changed (",d.filesChanged,")"]}),t.jsxs("span",{className:"task-changes-stats changes-stat-summary",children:[t.jsxs("span",{className:"diff-add",children:["+",d.additions]})," ",t.jsxs("span",{className:"diff-del",children:["-",d.deletions]})]})]}),t.jsxs("div",{className:"changes-header-actions-wrapper",children:[t.jsxs("div",{className:"changes-header-actions",children:[l.length>0&&t.jsxs("div",{className:"changes-nav",children:[t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>F&&T(S-1),disabled:!F,title:"Previous file","aria-label":"Previous file",children:t.jsx(wc,{})}),t.jsx("span",{className:"changes-nav-indicator","aria-live":"polite",children:S!==null?`${S+1}/${l.length}`:`—/${l.length}`}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>W&&T(S+1),disabled:!W,title:"Next file","aria-label":"Next file",children:t.jsx(Wn,{})})]}),t.jsx("button",{className:`btn btn-sm ${x?"btn-primary":""}`,onClick:()=>k(D=>!D),title:x?"Disable word wrap":"Enable word wrap","aria-label":"Toggle word wrap",children:t.jsx(tm,{size:14})})]}),t.jsxs("div",{className:"changes-header-actions-secondary",children:[t.jsx("button",{className:"btn btn-sm",onClick:H,disabled:h,children:"Refresh"}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>z(!0),title:"Expand to full-screen diff view","aria-label":"Expand diff view",children:t.jsx(_c,{})})]})]})]}),t.jsx("div",{className:"changes-file-list task-changes-file-list--compact",children:l.map(D=>{const E=y.has(D.path);return t.jsxs("div",{className:`changes-file-item ${E?"expanded":""}`,children:[t.jsxs("button",{className:"changes-file-header",onClick:()=>M(D.path),children:[t.jsx("span",{className:"changes-file-toggle",children:E?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14})}),t.jsx("span",{className:`changes-file-status changes-file-status--${D.status}`,title:D.status,children:Yv(D.status)}),t.jsx("span",{className:"changes-file-path",title:D.path,children:t.jsx("bdo",{dir:"ltr",children:D.path})}),t.jsxs("span",{className:"changes-file-stat",title:`+${D.additions} -${D.deletions}`,children:["+",D.additions," -",D.deletions]})]}),E&&D.patch&&t.jsx("div",{className:"changes-file-content",children:t.jsx("pre",{className:`changes-diff-patch ${x?"changes-diff-patch--wrap":"changes-diff-patch--nowrap"}`,children:t.jsx("code",{children:Jv(D.patch)})})})]},D.path)})}),t.jsx(w$,{isOpen:R,taskId:e,files:l,stats:d,mergeDetails:r,column:a,onClose:()=>z(!1),onRefresh:H})]})}function jf(e){return{executorValue:e?.executorProvider&&e?.executorModelId?`${e.executorProvider}/${e.executorModelId}`:"",validatorValue:e?.validatorProvider&&e?.validatorModelId?`${e.validatorProvider}/${e.validatorModelId}`:""}}function j$(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/-+/g,"-").replace(/^[-_]+|[-_]+$/g,"").slice(0,32)||"preset"}function YB(e,n){const s=j$(e),a=new Set(n.map(c=>c.id));if(!a.has(s))return s;const r=30;let o=s,l=1;for(;a.has(o)&&l<100;){const c=`-${l}`;o=`${s.slice(0,r-c.length)}${c}`,l++}return o}function Nf(e){const n=e?.trim()??"";return Ac.test(n)?n:""}function Qv(e,n){const s=Nf(e?.githubTrackingDefaultRepo);return s||Nf(n?.githubTrackingDefaultRepo)}function N$(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}const Sf=["image/png","image/jpeg","image/gif","image/webp"];function S$(e,n,s){const a=e==="post-merge"?"phase-badge--post-merge":"phase-badge--pre-merge";return t.jsx("span",{className:`phase-badge ${a}`,"data-testid":`${s}-${n}`,children:e==="post-merge"?"Post-merge":"Pre-merge"})}function Xv({mode:e,description:n,onDescriptionChange:s,title:a,onTitleChange:r,dependencies:o,onDependenciesChange:l,branch:c,onBranchChange:d,baseBranch:u,onBaseBranchChange:h,nodeId:m,onNodeIdChange:f,nodeOptions:p,nodeOverrideDisabled:g=!1,nodeOverrideDisabledReason:w,priority:v,onPriorityChange:b,executorModel:y,onExecutorModelChange:N,validatorModel:S,onValidatorModelChange:C,planningModel:x,onPlanningModelChange:k,thinkingLevel:R,onThinkingLevelChange:z,presetMode:_,onPresetModeChange:A,selectedPresetId:X,onSelectedPresetIdChange:H,selectedWorkflowSteps:M,onWorkflowStepsChange:T,onDefaultOnApplied:F,pendingImages:W,onImagesChange:oe,tasks:D,projectId:E,disabled:P=!1,addToast:$,isActive:j=!0,onAutoSaveDescription:q,onPlanningMode:le,onSubtaskBreakdown:fe,onClose:Ce,renderBelowPrimary:Ae,renderBelowModelConfiguration:re,hideDependencies:Z,autoExpandMoreOptionsOnSelection:pe=!0,reviewLevel:ie,onReviewLevelChange:ve,executionMode:ne,onExecutionModeChange:L,githubTrackingEnabled:Y,onGithubTrackingEnabledChange:ue,githubRepoOverride:B,onGithubRepoOverrideChange:xe}){const je=(Z?!1:o.length>0)||W.length>0||M.length>0||_!=="default"||(v??Ps)!==Ps||y!==""||S!==""||(x||"")!==""||(R||"")!==""||ie!==void 0||ne==="fast"||(c||"")!==""||(u||"")!==""||(m||"")!==""||Y===!0||(B||"")!=="",[se,Ue]=i.useState(!1),[De,dt]=i.useState(pe?je:!1),[Pe,ce]=i.useState(""),[Ee,Oe]=i.useState([]),[ht,Ve]=i.useState([]),[ge,me]=i.useState([]),[$e,mt]=i.useState(!1),[jt,tt]=i.useState(null),[bt,Ie]=i.useState(null),[Xe,rt]=i.useState([]),[It,_t]=i.useState("idle"),[We,J]=i.useState(!1),[ke,ot]=i.useState(!1),[ye,it]=i.useState(!1),He=i.useRef(null),he=i.useRef(null),et=i.useRef(null),vt=i.useRef(null),Ct=i.useRef(null),Et=i.useRef(null),Tt=i.useRef(null),Jt=i.useRef(!1),cn=i.useRef(je),Vt=i.useRef(n.trim()),hn=i.useRef(n.trim());i.useEffect(()=>{j&&(mt(!0),Ws().then(Q=>{Oe(Q.models),Ve(Q.favoriteProviders),me(Q.favoriteModels)}).catch(()=>{}).finally(()=>mt(!1)),Rc(E).then(Q=>tt(Q)).catch(()=>tt(null)),sl(E).then(Q=>rt(Q.filter(ae=>ae.enabled))).catch(()=>rt([])),aa().then(Q=>Ie(Q)).catch(()=>Ie(null)))},[j,E]);const dn=jt?.modelPresets||[],An=dn.find(Q=>Q.id===X),nn=Qv(jt,bt),Dn=(B||"").trim(),Nn=Dn.length>0&&!Ac.test(Dn),zt=(Z?!1:o.length>0)||W.length>0||M.length>0||_!=="default"||(v??Ps)!==Ps||y!==""||S!==""||(x||"")!==""||(R||"")!==""||ie!==void 0||ne==="fast"||(c||"")!==""||(u||"")!==""||(m||"")!==""||Y===!0||(B||"")!=="";i.useEffect(()=>{if(e!=="create"||!j||!jt?.autoSelectModelPreset)return;const Q=(jt.defaultPresetBySize,void 0);if(Q){const ae=jf(Q);H(Q.id),A("preset"),N(ae.executorValue),C(ae.validatorValue)}},[j,jt,dn,e]);const sn=i.useRef(!1),xn=i.useRef(!1);i.useEffect(()=>{if(e!=="create"||!j||sn.current||Xe.length===0)return;const Q=Xe.filter(Ke=>Ke.defaultOn);if(Q.length===0)return;sn.current=!0;const ae=Q.map(Ke=>Ke.id);T(ae),F?.(ae)},[e,j,Xe]),i.useEffect(()=>{j||(sn.current=!1)},[j]),i.useEffect(()=>{e!=="create"||!j||ue&&(xn.current||jt&&(ue(jt.githubTrackingEnabledByDefault??!1),xn.current=!0))},[e,j,jt,ue]),i.useEffect(()=>{j||(xn.current=!1)},[j]),i.useEffect(()=>{if(!pe){cn.current=zt;return}zt&&!cn.current&&dt(!0),cn.current=zt},[zt,pe]),i.useEffect(()=>{De||(Ue(!1),ce(""))},[De]),i.useEffect(()=>{e!=="edit"||!j||vt.current&&(vt.current.focus(),vt.current.select())},[e,j]),i.useEffect(()=>{if(!se)return;const Q=ae=>{he.current&&!he.current.contains(ae.target)&&Ue(!1)};return document.addEventListener("mousedown",Q),()=>document.removeEventListener("mousedown",Q)},[se]),i.useEffect(()=>{(e!=="edit"||P)&&it(!1)},[e,P]),i.useEffect(()=>{if(e!=="edit"){_t("idle");return}const Q=n.trim();Vt.current=Q,hn.current=Q,_t("idle")},[e]),i.useEffect(()=>{if(e!=="edit"||!q||!j)return;const Q=n.trim(),ae=Vt.current;if(Q===ae||Q===hn.current){Et.current&&(clearTimeout(Et.current),Et.current=null),Jt.current||_t("idle");return}return Et.current&&clearTimeout(Et.current),Et.current=setTimeout(async()=>{if(!Jt.current){Jt.current=!0,_t("saving");try{await q(Q),hn.current=Q,_t("saved"),Tt.current&&clearTimeout(Tt.current),Tt.current=setTimeout(()=>{_t("idle"),Tt.current=null},2e3)}catch{_t("idle")}finally{Jt.current=!1,Et.current=null}}},1500),()=>{Et.current&&(clearTimeout(Et.current),Et.current=null)}},[e,n,q,j]),i.useEffect(()=>()=>{Et.current&&clearTimeout(Et.current),Tt.current&&clearTimeout(Tt.current)},[]),i.useEffect(()=>{if(!We)return;const Q=ae=>{He.current&&!He.current.contains(ae.target)&&J(!1)};return document.addEventListener("mousedown",Q),()=>document.removeEventListener("mousedown",Q)},[We]);const Xt=i.useCallback(Q=>{const ae=Q.clipboardData?.items;if(ae)for(let Ke=0;Ke<ae.length;Ke++){const gt=ae[Ke];if(gt.type.startsWith("image/")){const Wt=gt.getAsFile();if(Wt&&Sf.includes(Wt.type)){Q.preventDefault(),oe([...W,{file:Wt,previewUrl:URL.createObjectURL(Wt)}]);return}}}},[W,oe]),Yt=i.useCallback(Q=>{Q.preventDefault();const ae=Q.dataTransfer.files;for(let Ke=0;Ke<ae.length;Ke++){const gt=ae[Ke];if(Sf.includes(gt.type)){oe([...W,{file:gt,previewUrl:URL.createObjectURL(gt)}]);return}}},[W,oe]),rn=i.useCallback(Q=>{const ae=W[Q];ae&&URL.revokeObjectURL(ae.previewUrl),oe(W.filter((Ke,gt)=>gt!==Q))},[W,oe]),Zt=i.useCallback(Q=>{l(o.includes(Q)?o.filter(ae=>ae!==Q):[...o,Q])},[o,l]),en=(Q,ae)=>Q.length>ae?Q.slice(0,ae)+"…":Q,un=i.useCallback(Q=>{s(Q.target.value);const ae=Q.target;ae.style.height="auto",ae.style.height=ae.scrollHeight+"px"},[s]),Qt=i.useCallback(()=>{it(Q=>!Q)},[]),pn=i.useCallback(Q=>{!ye||Q.key!=="Escape"||(Q.preventDefault(),Q.stopPropagation(),it(!1))},[ye]),Dt=i.useCallback(async Q=>{const ae=n.trim();if(!(!ae||ke)){ot(!0);try{const Ke=await Qb(ae,Q,E);s(Ke),J(!1),$("Description refined with AI","success"),et.current&&(et.current.style.height="auto",et.current.style.height=et.current.scrollHeight+"px")}catch(Ke){const gt=Xb(Ke);$(gt,"error")}finally{ot(!1)}}},[n,ke,$,s,E]),Bt=i.useCallback(async Q=>{const ae=ht,gt=ae.includes(Q)?ae.filter(Wt=>Wt!==Q):[Q,...ae];Ve(gt);try{await Jn({favoriteProviders:gt,favoriteModels:ge})}catch{Ve(ae)}},[ht,ge]),be=i.useCallback(async Q=>{const ae=ge,gt=ae.includes(Q)?ae.filter(Wt=>Wt!==Q):[Q,...ae];me(gt);try{await Jn({favoriteProviders:ht,favoriteModels:gt})}catch{me(ae)}},[ge,ht]),Re=i.useCallback(Q=>{if(Q<=0)return;const ae=[...M];[ae[Q-1],ae[Q]]=[ae[Q],ae[Q-1]],T(ae)},[M,T]),nt=i.useCallback(Q=>{if(Q>=M.length-1)return;const ae=[...M];[ae[Q],ae[Q+1]]=[ae[Q+1],ae[Q]],T(ae)},[M,T]),ut=i.useCallback(Q=>{T(M.filter(ae=>ae!==Q))},[M,T]),Ye=new Map;for(const Q of Xe)Ye.set(Q.id,{name:Q.name,description:Q.description});const lt=D.filter(Q=>!o.includes(Q.id)).sort((Q,ae)=>{const Ke=ae.createdAt.localeCompare(Q.createdAt);if(Ke!==0)return Ke;const gt=parseInt(Q.id.slice(Q.id.lastIndexOf("-")+1),10)||0;return(parseInt(ae.id.slice(ae.id.lastIndexOf("-")+1),10)||0)-gt}),wt=Pe?lt.filter(Q=>Q.id.toLowerCase().includes(Pe.toLowerCase())||Q.title&&Q.title.toLowerCase().includes(Pe.toLowerCase())||Q.description&&Q.description.toLowerCase().includes(Pe.toLowerCase())):lt;return t.jsxs("div",{className:"task-form",onDrop:Yt,onDragOver:Q=>Q.preventDefault(),onPaste:Xt,children:[t.jsxs("div",{className:"task-form-primary-section",children:[e==="edit"&&r&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"task-form-title",children:"Title"}),t.jsx("input",{ref:vt,autoFocus:!0,id:"task-form-title",type:"text",className:"modal-edit-input",placeholder:"Task title",value:a||"",onChange:Q=>r(Q.target.value),disabled:P})]}),t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{htmlFor:"task-form-description",className:"description-label-row",children:[t.jsx("span",{children:"Description"}),t.jsx("span",{className:`description-auto-save-status${It==="idle"?"":" is-visible"}`,"aria-live":"polite",children:It==="saving"?"Saving...":It==="saved"?"Saved":""})]}),t.jsxs("div",{className:`description-with-refine${ye?" description--fullscreen":""}`,ref:He,onKeyDown:pn,children:[ye&&t.jsxs("div",{className:"description-fullscreen-header",children:[t.jsx("span",{children:"Editing Description"}),t.jsx("button",{type:"button",className:"btn btn-sm description-expand-btn",onClick:Qt,"aria-label":"Collapse description",title:"Collapse description",children:t.jsx(Zo,{size:14})})]}),t.jsx("textarea",{ref:et,autoFocus:e==="create",id:"task-form-description",value:n,onChange:un,placeholder:"What needs to be done?",rows:e==="edit"?8:5,disabled:P||ke}),(()=>{const Q=!!n.trim()&&!P;return t.jsxs(t.Fragment,{children:[!ye&&t.jsx("button",{type:"button",className:`btn btn-sm description-expand-btn${Q?" description-expand-btn--offset":" description-expand-btn--flush"}`,onClick:Qt,"aria-label":"Expand description",title:"Expand description",children:t.jsx(_c,{size:14})}),Q&&t.jsxs("button",{type:"button",className:`btn btn-sm refine-button ${ke?"refine-button--loading":""}`,onClick:()=>J(ae=>!ae),disabled:ke,"data-testid":"refine-button",title:"Refine description with AI",children:[t.jsx(fs,{size:12,style:{verticalAlign:"middle"}}),ke?"Refining...":"Refine"]})]})})(),We&&t.jsxs("div",{className:"refine-menu refine-menu--modal",onMouseDown:Q=>Q.preventDefault(),children:[t.jsxs("div",{className:"refine-menu-item",onClick:()=>Dt("clarify"),"data-testid":"refine-clarify",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Clarify"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Make the description clearer and more specific"})]}),t.jsxs("div",{className:"refine-menu-item",onClick:()=>Dt("add-details"),"data-testid":"refine-add-details",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Add details"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Add implementation details and context"})]}),t.jsxs("div",{className:"refine-menu-item",onClick:()=>Dt("expand"),"data-testid":"refine-expand",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Expand"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Expand into a more comprehensive description"})]}),t.jsxs("div",{className:"refine-menu-item",onClick:()=>Dt("simplify"),"data-testid":"refine-simplify",children:[t.jsx("div",{className:"refine-menu-item-title",children:"Simplify"}),t.jsx("div",{className:"refine-menu-item-desc",children:"Simplify and make more concise"})]})]})]})]}),e==="create"&&(le||fe)&&t.jsxs("div",{className:"task-form-description-actions","data-testid":"task-form-description-actions",children:[le&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{const Q=n.trim();if(!Q){$("Enter a description first","error");return}Ce?.(),le(Q)},disabled:P||!n.trim(),"data-testid":"task-form-plan-button",children:"Plan"}),fe&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{const Q=n.trim();if(!Q){$("Enter a description first","error");return}Ce?.(),fe(Q)},disabled:P||!n.trim(),"data-testid":"task-form-subtask-button",children:"Subtask"})]})]}),Ae,t.jsxs("button",{type:"button",className:"task-form-more-options-toggle",onClick:()=>dt(Q=>!Q),"aria-expanded":De,"aria-controls":"task-form-more-options",disabled:P,"data-testid":"task-form-more-options-toggle",children:[t.jsx("span",{children:"More options"}),De?t.jsx(pi,{size:14}):t.jsx(jn,{size:14})]}),t.jsxs("div",{id:"task-form-more-options",className:`task-form-more-options${De?"":" collapsed"}`,"aria-hidden":!De,hidden:!De,"data-testid":"task-form-more-options",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Attachments"}),W.length>0&&t.jsx("div",{className:"inline-create-previews",children:W.map((Q,ae)=>t.jsxs("div",{className:"inline-create-preview",children:[t.jsx("img",{src:Q.previewUrl,alt:Q.file.name}),t.jsx("button",{type:"button",className:"inline-create-preview-remove",onClick:()=>rn(ae),disabled:P,title:"Remove image",children:"×"})]},Q.previewUrl))}),t.jsx("input",{ref:Ct,type:"file",accept:"image/*",onChange:Q=>{const ae=Q.target.files?.[0];ae&&(oe([...W,{file:ae,previewUrl:URL.createObjectURL(ae)}]),Q.target.value="")},style:{display:"none"}}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Ct.current?.click(),disabled:P,children:"Attach Screenshot"}),t.jsx("small",{children:"You can also paste images or drag & drop"})]}),f&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"task-node-select",children:"Execution Node Override"}),t.jsxs("select",{id:"task-node-select",className:"select",value:m??"",onChange:Q=>f(Q.target.value||void 0),disabled:P||g,children:[t.jsx("option",{value:"",children:"Use project default / local"}),(p??[]).map(Q=>t.jsxs("option",{value:Q.id,children:[Q.name," (",N$(Q.status),")"]},Q.id))]}),(()=>{const Q=(p??[]).find(ae=>ae.id===m);return Q?t.jsx("div",{className:"task-form-node-status",children:t.jsx(Ya,{status:Q.status,showLabel:!0})}):null})(),t.jsx("small",{children:w??"Task override takes priority over project default node routing."})]}),!Z&&t.jsx(t.Fragment,{children:t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"dep-trigger-wrap",ref:he,children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>Ue(Q=>!Q),disabled:P,children:o.length>0?`${o.length} selected`:"Add dependencies"}),se&&t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:Pe,onChange:Q=>ce(Q.target.value),onClick:Q=>Q.stopPropagation()}),wt.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):wt.map(Q=>t.jsxs("div",{className:`dep-dropdown-item${o.includes(Q.id)?" selected":""}`,onClick:()=>Zt(Q.id),onMouseDown:ae=>ae.preventDefault(),children:[t.jsx("span",{className:"dep-dropdown-id",children:Q.id}),t.jsx("span",{className:"dep-dropdown-title",children:en(Q.title||Q.description||Q.id,30)})]},Q.id))]})]}),o.length>0&&t.jsx("div",{className:"selected-deps",children:o.map(Q=>t.jsxs("span",{className:"dep-chip",children:[Q,t.jsx("button",{type:"button",className:"dep-chip-remove",onClick:()=>Zt(Q),disabled:P,children:"×"})]},Q))})]})}),(d||h)&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Branch Settings"}),d&&t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"task-working-branch",className:"model-select-label",children:"Working branch"}),t.jsx("input",{id:"task-working-branch",className:"input",value:c||"",onChange:Q=>d(Q.target.value),placeholder:"e.g. feature/my-task",disabled:P})]}),h&&t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"task-base-branch",className:"model-select-label",children:"Merge target / base branch"}),t.jsx("input",{id:"task-base-branch",className:"input",value:u||"",onChange:Q=>h(Q.target.value),placeholder:"e.g. main",disabled:P})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Model Configuration"}),b&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"task-priority",className:"model-select-label",children:"Priority"}),t.jsx("select",{id:"task-priority","data-testid":"task-priority-select",value:v??Ps,onChange:Q=>b(Q.target.value),disabled:P,children:Ea.map(Q=>t.jsx("option",{value:Q,children:Q[0].toUpperCase()+Q.slice(1)},Q))})]}),L&&ne!==void 0&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"task-execution-mode",className:"model-select-label",children:"Execution mode"}),t.jsxs("select",{id:"task-execution-mode","data-testid":"task-form-execution-mode-select",value:ne,onChange:Q=>L(Q.target.value),disabled:P,children:[t.jsx("option",{value:"standard",children:"Standard"}),t.jsx("option",{value:"fast",children:"Fast"})]})]}),$e?t.jsx("div",{className:"model-selector-loading",children:"Loading models…"}):Ee.length===0?t.jsx("small",{children:"No models available. Configure authentication in Settings."}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"model-preset",className:"model-select-label",children:"Preset"}),t.jsxs("select",{id:"model-preset",value:_==="preset"?X:_,onChange:Q=>{const ae=Q.target.value;if(ae==="default"){A("default"),H(""),N(""),C("");return}if(ae==="custom"){A("custom"),H("");return}const Ke=dn.find(Wt=>Wt.id===ae),gt=jf(Ke);A("preset"),H(ae),N(gt.executorValue),C(gt.validatorValue)},disabled:P,children:[t.jsx("option",{value:"default",children:"Use default"}),dn.length>0?t.jsx("option",{disabled:!0,children:"──────────"}):null,dn.map(Q=>t.jsx("option",{value:Q.id,children:Q.name},Q.id)),t.jsx("option",{value:"custom",children:"Custom"})]})]}),_==="preset"&&An?t.jsxs("small",{children:["Using preset: ",An.name]}):null,_==="preset"?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>A("custom"),disabled:P,children:"Override"}):null,t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"executor-model",className:"model-select-label",children:"Executor"}),t.jsx(Ms,{id:"executor-model",label:"Executor Model",value:y,onChange:Q=>{A("custom"),H(""),N(Q)},models:Ee,disabled:P||_==="preset",favoriteProviders:ht,onToggleFavorite:Bt,favoriteModels:ge,onToggleModelFavorite:be})]}),t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"validator-model",className:"model-select-label",children:"Reviewer"}),t.jsx(Ms,{id:"validator-model",label:"Reviewer Model",value:S,onChange:Q=>{A("custom"),H(""),C(Q)},models:Ee,disabled:P||_==="preset",favoriteProviders:ht,onToggleFavorite:Bt,favoriteModels:ge,onToggleModelFavorite:be})]}),k&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"planning-model",className:"model-select-label",children:"Planning"}),t.jsx(Ms,{id:"planning-model",label:"Planning Model",value:x||"",onChange:Q=>{A("custom"),H(""),k(Q)},models:Ee,disabled:P||_==="preset",favoriteProviders:ht,onToggleFavorite:Bt,favoriteModels:ge,onToggleModelFavorite:be})]}),z&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"thinking-level",className:"model-select-label",children:"Thinking"}),t.jsxs("select",{id:"thinking-level",value:R||"",onChange:Q=>z(Q.target.value),disabled:P||_==="preset",children:[t.jsxs("option",{value:"",children:["Default (",jt?.defaultThinkingLevel??"off",")"]}),t.jsx("option",{value:"off",children:"Off"}),t.jsx("option",{value:"minimal",children:"Minimal"}),t.jsx("option",{value:"low",children:"Low"}),t.jsx("option",{value:"medium",children:"Medium"}),t.jsx("option",{value:"high",children:"High"})]})]}),ve&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"review-level",className:"model-select-label",children:"Review"}),t.jsxs("select",{id:"review-level",value:ie??"",onChange:Q=>ve(Q.target.value===""?void 0:parseInt(Q.target.value,10)),disabled:P,children:[t.jsx("option",{value:"",children:"Default (Auto — triage decides)"}),t.jsx("option",{value:"0",children:"0 — None"}),t.jsx("option",{value:"1",children:"1 — Plan Only"}),t.jsx("option",{value:"2",children:"2 — Plan and Code"}),t.jsx("option",{value:"3",children:"3 — Full"})]})]})]})]}),re,t.jsxs("div",{className:"form-group","data-testid":"workflow-steps-section",children:[t.jsx("label",{children:"Workflow Steps"}),t.jsxs("div",{className:"workflow-steps-section",children:[t.jsx("small",{className:"workflow-steps-description",children:"Select steps to run after task implementation completes"}),t.jsx("div",{className:"workflow-steps-list",children:Xe.length>0&&Xe.map(Q=>t.jsxs("label",{className:"checkbox-label workflow-step-item","data-testid":`workflow-step-checkbox-${Q.id}`,children:[t.jsx("input",{type:"checkbox",checked:M.includes(Q.id),onChange:ae=>{T(ae.target.checked?[...M,Q.id]:M.filter(Ke=>Ke!==Q.id))},disabled:P}),t.jsxs("div",{children:[t.jsxs("span",{className:"workflow-step-name",children:[Q.name,S$(Q.phase||"pre-merge",Q.id,"workflow-step-phase")]}),t.jsx("div",{className:"workflow-step-description",children:Q.description})]})]},Q.id))})]}),M.length>1&&t.jsxs("div",{className:"workflow-step-order","data-testid":"workflow-step-order",children:[t.jsx("small",{className:"workflow-step-order-label",children:"Execution order:"}),M.map((Q,ae)=>{const Ke=Ye.get(Q);return t.jsxs("div",{className:"workflow-step-order-item","data-testid":`workflow-step-order-item-${Q}`,children:[t.jsx("span",{className:"workflow-step-order-number",children:ae+1}),t.jsx("span",{className:"workflow-step-order-name",children:Ke?.name||Q}),t.jsxs("div",{className:"workflow-step-order-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Re(ae),disabled:P||ae===0,"data-testid":`workflow-step-move-up-${Q}`,title:"Move up",children:t.jsx(pi,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>nt(ae),disabled:P||ae===M.length-1,"data-testid":`workflow-step-move-down-${Q}`,title:"Move down",children:t.jsx(jn,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>ut(Q),disabled:P,"data-testid":`workflow-step-remove-${Q}`,title:"Remove",children:t.jsx(yn,{})})]})]},Q)})]})]}),(ue||xe)&&t.jsxs("div",{className:"form-group","data-testid":"task-form-github-tracking",children:[t.jsx("label",{children:"GitHub Tracking"}),ue&&t.jsxs("label",{className:"checkbox-label",htmlFor:"task-github-tracking-enabled",children:[t.jsx("input",{id:"task-github-tracking-enabled",type:"checkbox",checked:Y===!0,onChange:Q=>{xn.current=!0,ue(Q.target.checked)},disabled:P}),"Enable GitHub issue tracking for this task"]}),xe&&t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"task-github-repo-override",className:"model-select-label",children:"Repository (owner/repo)"}),t.jsx("input",{id:"task-github-repo-override",className:"input",value:B||"",onChange:Q=>xe(Q.target.value),placeholder:nn||"owner/repo",disabled:P}),Nn?t.jsx("div",{className:"form-error",children:"Repository must be in owner/repo format."}):null]})]})]})]})}const Fd={p:({children:e,...n})=>t.jsx("p",{...n,children:Ks(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Ks(e)}),code:({children:e,...n})=>t.jsx("code",{...n,children:Ks(e)}),pre:({children:e,className:n,...s})=>t.jsx("pre",{...s,className:["workflow-markdown-pre",n].filter(Boolean).join(" "),children:Ks(e)}),table:({children:e,className:n,...s})=>t.jsx("table",{...s,className:["workflow-markdown-table",n].filter(Boolean).join(" "),children:e})};function C$(e){switch(e){case"passed":return"Passed";case"failed":return"Failed";case"advisory_failure":return"Advisory failure";case"skipped":return"Skipped";case"pending":return"Running…";default:return e}}function E$(e,n){if(!e||!n)return null;const s=new Date(e).getTime(),r=new Date(n).getTime()-s;if(r<1e3)return`${r}ms`;const o=Math.round(r/1e3);if(o<60)return`${o}s`;const l=Math.floor(o/60),c=o%60;return`${l}m ${c}s`}function _$(e){return e?new Date(e).toLocaleString():null}function M$(e){const n=e.split(`
|
|
686
|
+
`);return n.length<=1?e:`${n.length} lines`}function Ml(e,n,s){const a=e==="post-merge"?"phase-badge--post-merge":"phase-badge--pre-merge";return t.jsx("span",{className:`phase-badge ${a}`,"data-testid":`${s}-${n}`,children:e==="post-merge"?"Post-merge":"Pre-merge"})}function A$({entries:e,startedAt:n,stepId:s}){const a=i.useRef(null),r=new Date(n).getTime(),o=e.filter(l=>new Date(l.timestamp).getTime()>=r);return i.useEffect(()=>{const l=a.current;l&&(l.scrollTop=l.scrollHeight)},[o.length]),o.length===0?t.jsx("div",{className:"workflow-live-log","data-testid":`workflow-live-log-${s}`,children:t.jsx("div",{className:"workflow-live-log-empty",children:"Waiting for agent output…"})}):t.jsx("div",{ref:a,className:"workflow-live-log","data-testid":`workflow-live-log-${s}`,children:o.map((l,c)=>l.type==="tool"?t.jsxs("div",{className:"workflow-live-log-tool",children:["⚡ ",Es(l.text),l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",Es(l.detail)]})]},c):l.type==="tool_result"?t.jsxs("div",{className:"workflow-live-log-tool-result",children:["✓ ",Es(l.text),l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",Es(l.detail)]})]},c):l.type==="tool_error"?t.jsxs("div",{className:"workflow-live-log-tool-error",children:["✗ ",Es(l.text),l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",Es(l.detail)]})]},c):l.type==="thinking"?t.jsx("div",{className:"workflow-live-log-thinking",children:Es(l.text)},c):t.jsx("span",{className:"workflow-live-log-text",children:Es(l.text)},c))})}function R$({taskId:e,results:n,loading:s,enabledWorkflowSteps:a,canEdit:r,projectId:o,isTaskInProgress:l,onWorkflowStepsChange:c}){const[d,u]=i.useState({}),[h,m]=i.useState({}),[f,p]=i.useState(null),[g,w]=i.useState([]),[v,b]=i.useState(!1),y=n.some(j=>j.status==="pending"),{entries:N}=qv(e,!!l&&y,o);i.useEffect(()=>{let j=!1;return sl(o).then(q=>{j||w(q.filter(le=>le.enabled))}).catch(()=>{j||w([])}),()=>{j=!0}},[o]);const S=a??[],C=i.useMemo(()=>g.map(j=>({id:j.id,name:j.name,description:j.description,phase:j.phase||"pre-merge"})),[g]),x=i.useMemo(()=>new Map(C.map(j=>[j.id,j])),[C]),k=j=>{u(q=>({...q,[j]:!q[j]}))},R=j=>{m(q=>{const le=q[j]??"markdown";return{...q,[j]:le==="markdown"?"plain":"markdown"}})},z=j=>{p(j)},_=()=>{p(null)};i.useEffect(()=>{if(!f)return;const j=q=>{q.key==="Escape"&&_()};return document.addEventListener("keydown",j),()=>{document.removeEventListener("keydown",j)}},[f]);const A=i.useCallback((j,q)=>{if(c){if(q){if(S.includes(j)){c(S);return}c([...S,j]);return}c(S.filter(le=>le!==j))}},[c,S]),X=i.useCallback(j=>{if(!c||j<=0)return;const q=[...S];[q[j-1],q[j]]=[q[j],q[j-1]],c(q)},[c,S]),H=i.useCallback(j=>{if(!c||j>=S.length-1)return;const q=[...S];[q[j],q[j+1]]=[q[j+1],q[j]],c(q)},[c,S]),M=i.useCallback(j=>{c&&c(S.filter(q=>q!==j))},[c,S]),T=n.length>0,F=S.length>0;i.useEffect(()=>{r||b(!1)},[r]);const W=i.useMemo(()=>S.map(j=>{const q=x.get(j);return{id:j,name:q?.name||j,description:q?.description||"Step definition not found.",phase:q?.phase||"pre-merge"}}),[S,x]),oe=()=>!r||!v||s?null:t.jsxs("div",{className:"workflow-results-editor","data-testid":"workflow-steps-editor",children:[t.jsxs("div",{className:"workflow-steps-section",children:[t.jsx("small",{className:"workflow-steps-description",children:"Select steps to run after task implementation completes"}),t.jsx("div",{className:"workflow-steps-list",children:C.map(j=>t.jsxs("label",{className:"checkbox-label workflow-step-item","data-testid":`workflow-step-checkbox-${j.id}`,children:[t.jsx("input",{type:"checkbox",checked:S.includes(j.id),onChange:q=>A(j.id,q.target.checked)}),t.jsxs("div",{children:[t.jsxs("span",{className:"workflow-step-name",children:[j.name,Ml(j.phase,j.id,"workflow-step-phase")]}),t.jsx("div",{className:"workflow-step-description",children:j.description})]})]},j.id))})]}),S.length>1&&t.jsxs("div",{className:"workflow-step-order","data-testid":"workflow-step-order",children:[t.jsx("small",{className:"workflow-step-order-label",children:"Execution order:"}),S.map((j,q)=>{const le=x.get(j);return t.jsxs("div",{className:"workflow-step-order-item","data-testid":`workflow-step-order-item-${j}`,children:[t.jsx("span",{className:"workflow-step-order-number",children:q+1}),t.jsx("span",{className:"workflow-step-order-name",children:le?.name||j}),t.jsxs("div",{className:"workflow-step-order-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>X(q),disabled:q===0,"data-testid":`workflow-step-move-up-${j}`,title:"Move up",children:t.jsx(pi,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>H(q),disabled:q===S.length-1,"data-testid":`workflow-step-move-down-${j}`,title:"Move down",children:t.jsx(jn,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>M(j),"data-testid":`workflow-step-remove-${j}`,title:"Remove",children:t.jsx(yn,{})})]})]},j)})]})]}),D=()=>{if(s)return t.jsxs("div",{className:"workflow-results-loading","data-testid":"workflow-results-loading",children:[t.jsx("div",{className:"workflow-results-spinner"}),t.jsx("span",{children:"Loading workflow results…"})]});if(!T)return t.jsxs("div",{className:"workflow-results-empty","data-testid":"workflow-results-empty",children:[t.jsx("p",{children:"No workflow steps configured for this task."}),t.jsx("p",{className:"workflow-results-empty-hint",children:"Pre-merge steps run after implementation, before merge. Post-merge steps run after merge succeeds."})]});const j=n.filter(re=>re.status==="passed").length,q=n.filter(re=>re.status==="failed").length,le=n.filter(re=>re.status==="advisory_failure"),fe=n.filter(re=>re.status==="skipped").length,Ce=n.filter(re=>re.status==="pending").length,Ae=[`${n.length} step${n.length!==1?"s":""}`];return j>0&&Ae.push(`${j} passed`),q>0&&Ae.push(`${q} failed`),le.length>0&&Ae.push(`${le.length} advisory`),fe>0&&Ae.push(`${fe} skipped`),Ce>0&&Ae.push(`${Ce} running`),t.jsxs("div",{className:"workflow-results-list","data-testid":"workflow-results-list",children:[t.jsx("div",{className:"workflow-results-summary-bar","data-testid":"workflow-results-summary",children:Ae.join(" · ")}),le.length>0&&t.jsxs("div",{className:"workflow-polish-notes","data-testid":"workflow-polish-notes",children:[t.jsx("h4",{children:"Polish notes"}),t.jsx("p",{children:"Advisory workflow steps flagged non-blocking improvements:"}),t.jsx("ul",{children:le.map((re,Z)=>t.jsxs("li",{children:[t.jsxs("strong",{children:[re.workflowStepName,":"]})," ",re.output||"Needs follow-up review."]},`advisory-${re.workflowStepId}-${Z}`))})]}),n.map((re,Z)=>{const pe=re.phase||"pre-merge",ie=d[re.workflowStepId]??!1;return t.jsxs("div",{className:`workflow-result-item workflow-result-item--${re.status}`,"data-testid":`workflow-result-item-${re.workflowStepId}`,children:[t.jsxs("div",{className:"workflow-result-header",children:[t.jsxs("div",{className:"workflow-result-name",children:[re.workflowStepName,Ml(pe,re.workflowStepId,"workflow-result-phase")]}),t.jsxs("div",{className:"workflow-result-badges",children:[re.verdict&&t.jsx("span",{className:`workflow-verdict-badge workflow-verdict-badge--${re.verdict}`,"data-testid":`workflow-verdict-badge-${re.workflowStepId}`,children:re.verdict}),t.jsx("span",{className:`workflow-result-badge workflow-result-badge--${re.status}`,"data-testid":`workflow-result-badge-${re.workflowStepId}`,children:C$(re.status)})]})]}),re.notes&&re.status!=="pending"&&t.jsxs("div",{className:"workflow-result-notes","data-testid":`workflow-result-notes-${re.workflowStepId}`,children:[t.jsx("span",{className:"workflow-result-notes-label",children:"Notes:"}),t.jsx(ti,{remarkPlugins:[ni],components:Fd,children:re.notes})]}),t.jsxs("div",{className:"workflow-result-meta",children:[re.startedAt&&t.jsxs("span",{className:"workflow-result-timestamp",children:["Started: ",_$(re.startedAt)]}),re.completedAt&&t.jsx("span",{className:"workflow-result-duration",children:E$(re.startedAt,re.completedAt)})]}),re.status==="pending"&&re.startedAt?t.jsx(A$,{entries:N,startedAt:re.startedAt,stepId:re.workflowStepId}):re.output?t.jsxs("div",{className:"workflow-result-output-section",children:[t.jsxs("div",{className:"workflow-result-output-header",children:[t.jsx("span",{className:"workflow-result-output-label",children:"Output:"}),t.jsx("button",{type:"button",className:"btn btn-sm workflow-result-toggle",onClick:()=>k(re.workflowStepId),"data-testid":`workflow-result-toggle-${re.workflowStepId}`,children:ie?"Hide output":"Show output"}),!ie&&t.jsx("span",{className:"workflow-result-output-preview","data-testid":`workflow-result-preview-${re.workflowStepId}`,children:M$(re.output)}),ie&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm workflow-result-mode-toggle",onClick:()=>R(re.workflowStepId),"data-testid":`workflow-result-mode-toggle-${re.workflowStepId}`,title:(h[re.workflowStepId]??"markdown")==="markdown"?"Switch to plain text":"Switch to markdown",children:(h[re.workflowStepId]??"markdown")==="markdown"?"Markdown":"Plain"}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm workflow-result-expand-toggle",onClick:()=>z(re.workflowStepId),"data-testid":`workflow-result-expand-${re.workflowStepId}`,title:"Expand output",children:t.jsx(_c,{size:12})})]})]}),ie&&t.jsx("div",{className:`workflow-result-output${(h[re.workflowStepId]??"markdown")==="markdown"?" workflow-result-output--markdown":""}`,"data-testid":`workflow-result-output-${re.workflowStepId}`,children:(h[re.workflowStepId]??"markdown")==="markdown"?t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:Fd,children:re.output})}):t.jsx("pre",{className:"workflow-result-output-text",children:Es(re.output??"")})})]}):null]},`${re.workflowStepId}-${Z}`)})]})},E=r?t.jsx("button",{type:"button",className:"btn btn-sm workflow-results-edit-toggle",onClick:()=>b(j=>!j),"data-testid":"workflow-steps-edit-toggle","aria-label":v?"Done editing workflow steps":"Edit workflow steps",title:v?"Done":"Edit",children:v?t.jsxs(t.Fragment,{children:[t.jsx(vs,{size:14}),"Done"]}):t.jsxs(t.Fragment,{children:[t.jsx(Hs,{size:14}),"Edit"]})}):null,P=!s&&!T&&F,$=r&&T;return t.jsxs("div",{className:"workflow-results-tab","data-task-id":e,children:[P?t.jsxs("div",{className:"workflow-configured-steps","data-testid":"workflow-configured-steps",children:[t.jsxs("div",{className:"workflow-configured-header","data-testid":"workflow-configured-header",children:[t.jsxs("div",{className:"workflow-configured-title-row",children:[t.jsx("h4",{children:"Configured Workflow Steps"}),t.jsxs("span",{className:"workflow-configured-count","data-testid":"workflow-configured-count",children:[W.length," step",W.length===1?"":"s"]})]}),E]}),t.jsx("div",{className:"workflow-configured-list","data-testid":"workflow-configured-list",children:W.map(j=>t.jsxs("div",{className:"workflow-configured-item","data-testid":`workflow-configured-step-${j.id}`,children:[t.jsxs("div",{className:"workflow-configured-name",children:[t.jsx("span",{className:"workflow-configured-name-text",children:j.name}),Ml(j.phase,j.id,"workflow-configured-phase")]}),t.jsx("p",{className:"workflow-configured-description",children:j.description})]},j.id))}),t.jsx("p",{className:"workflow-results-empty-hint",children:"Pre-merge steps run after implementation, before merge. Post-merge steps run after merge succeeds."}),oe()]}):t.jsxs(t.Fragment,{children:[$&&t.jsxs("div",{className:"workflow-results-edit-header","data-testid":"workflow-results-edit-header",children:[t.jsx("h4",{children:"Workflow Steps"}),E]}),D(),oe()]}),f&&(()=>{const j=n.find(fe=>fe.workflowStepId===f);if(!j)return null;const q=h[j.workflowStepId]??"markdown",le=j.phase||"pre-merge";return t.jsx("div",{className:"workflow-output-modal-overlay",onClick:fe=>{fe.target===fe.currentTarget&&_()},"data-testid":"workflow-output-modal",children:t.jsxs("div",{className:"workflow-output-modal",role:"dialog","aria-modal":"true",children:[t.jsxs("div",{className:"workflow-output-modal-header",children:[t.jsxs("div",{className:"workflow-output-modal-title",children:[t.jsx("span",{className:"workflow-output-modal-name",children:j.workflowStepName}),Ml(le,j.workflowStepId,"workflow-output-modal-phase")]}),t.jsxs("div",{className:"workflow-output-modal-controls",children:[t.jsx("button",{type:"button",className:"btn btn-sm workflow-result-mode-toggle",onClick:()=>R(j.workflowStepId),"data-testid":"workflow-output-modal-mode-toggle",title:q==="markdown"?"Switch to plain text":"Switch to markdown",children:q==="markdown"?"Markdown":"Plain"}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm workflow-output-modal-close",onClick:_,"data-testid":"workflow-output-modal-close","aria-label":"Close",children:t.jsx(yn,{size:16})})]})]}),t.jsx("div",{className:"workflow-output-modal-body",children:t.jsx("div",{className:`workflow-result-output workflow-result-output--expanded${q==="markdown"?" workflow-result-output--markdown":""}`,"data-testid":"workflow-output-modal-content",children:q==="markdown"?t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:Fd,children:j.output})}):t.jsx("pre",{className:"workflow-result-output-text",children:Es(j.output??"")})})})]})})})()]})}function I$(e){return e==="block"?"Block execution":e==="fallback-local"?"Fall back to local":"Not configured"}const T$=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]);function P$(e){return e!==void 0&&e!=="online"}function $$({task:e,settings:n,addToast:s,onTaskUpdated:a}){const[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState(null),[h,m]=i.useState(e.nodeId??""),[f,p]=i.useState(!1),g=i.useRef(e.id);i.useEffect(()=>{g.current=e.id,m(e.nodeId??""),p(!1)},[e.id,e.nodeId]),i.useEffect(()=>{c(!0),u(null),ac().then(_=>{o(_)}).catch(_=>{u(Me(_)||"Failed to load nodes")}).finally(()=>{c(!1)})},[]);const w=i.useMemo(()=>new Map(r.map(_=>[_.id,_])),[r]),v=i.useMemo(()=>[...r].sort((_,A)=>_.name.localeCompare(A.name)),[r]),b=n,y=e.nodeId??b?.defaultNodeId??null,N=e.nodeId?"Per-task override":b?.defaultNodeId?"Project default":"No routing",S=y?w.get(y):void 0,C=S?`${S.name} (${S.type})`:y?`${y} (node unavailable or unknown)`:"Local (no routing configured)",x=e.column==="in-progress"||T$.has(e.status),k=x||f||l,R=i.useCallback(async _=>{if(_===h)return;const A=e.id,X=h;m(_),p(!0);try{const H=await Ds(A,{nodeId:_||null});if(g.current!==A)return;m(H.nodeId??""),a?.(H),s(_?"Node override updated":"Node override cleared","success")}catch(H){if(g.current!==A)return;m(X),s(Me(H)||"Failed to update node override","error")}finally{g.current===A&&p(!1)}},[s,a,h,e.id]),z=i.useCallback(()=>{R("")},[R]);return t.jsxs("div",{className:"routing-tab",children:[t.jsx("h4",{children:"Task Routing"}),t.jsx("p",{className:"routing-tab__intro",children:"View the effective execution node and control per-task node override."}),t.jsxs("section",{className:"routing-tab__section",children:[t.jsx("h5",{children:"Routing Summary"}),t.jsxs("div",{className:"routing-summary-grid",role:"list",children:[t.jsxs("div",{className:"routing-summary-row",role:"listitem",children:[t.jsx("span",{className:"routing-summary-label",children:"Effective node"}),t.jsxs("span",{className:"routing-summary-value",children:[S?t.jsx(Ya,{status:S.status,compact:!0}):null,C,P$(S?.status)?t.jsx("span",{className:"routing-summary-warning",children:"Unhealthy"}):null]})]}),t.jsxs("div",{className:"routing-summary-row",role:"listitem",children:[t.jsx("span",{className:"routing-summary-label",children:"Routing source"}),t.jsx("span",{className:"routing-summary-value",children:N})]}),t.jsxs("div",{className:"routing-summary-row",role:"listitem",children:[t.jsx("span",{className:"routing-summary-label",children:"Unavailable-node policy"}),t.jsx("span",{className:"routing-summary-value",children:I$(b?.unavailableNodePolicy)})]})]}),x&&y?t.jsx("div",{className:"routing-tab__info-banner",children:"Routing is locked while this task is active. Node override cannot be changed until the task is no longer active."}):null]}),t.jsxs("section",{className:"routing-tab__section",children:[t.jsx("h5",{children:"Node Override"}),x?t.jsx("div",{className:"routing-tab__warning-banner",children:"Node override cannot be changed while the task is active."}):null,t.jsx("label",{className:"routing-tab__selector-label",htmlFor:`routing-node-${e.id}`,children:"Select execution node"}),t.jsxs("select",{id:`routing-node-${e.id}`,className:"select routing-tab__selector",value:h,disabled:k,onChange:_=>{R(_.target.value)},children:[t.jsx("option",{value:"",children:"Use project default"}),v.map(_=>t.jsxs("option",{value:_.id,title:`Status: ${_.status}`,children:[_.name," (",_.type,") — ",_.status]},_.id))]}),d?t.jsx("div",{className:"routing-tab__error",children:d}):null,e.nodeId?t.jsxs("div",{className:"routing-tab__override-row",children:[t.jsxs("span",{className:"routing-tab__override-text",children:["Override set to: ",w.get(e.nodeId)?.name??e.nodeId]}),t.jsx("button",{type:"button",className:"btn btn-sm",disabled:x||f,onClick:z,children:"Clear override"})]}):null]})]})}const D$=/^[a-zA-Z0-9_-]{1,64}$/,L$=200;function Cf(e){return e?new Date(e).toLocaleString():""}function O$(e,n=L$){return e.length<=n?e:e.substring(0,n)+"…"}function F$({taskId:e,addToast:n,onTaskUpdated:s,projectId:a,canEdit:r=!1}){const[o,l]=i.useState([]),[c,d]=i.useState(!0),[u,h]=i.useState(null),[m,f]=i.useState(""),[p,g]=i.useState(null),[w,v]=i.useState(""),[b,y]=i.useState(null),[N,S]=i.useState([]),[C,x]=i.useState(!1),[k,R]=i.useState(!1),[z,_]=i.useState(""),[A,X]=i.useState(""),[H,M]=i.useState(!1),[T,F]=i.useState(null),[W,oe]=i.useState(null),[D,E]=i.useState(!1),P=i.useCallback(async()=>{try{const Z=await dS(e,a);l(Z)}catch(Z){n(Me(Z)||"Failed to load documents","error")}finally{d(!1)}},[e,a,n]);i.useEffect(()=>{P()},[P]);async function $(Z){u===Z.key?(h(null),f(""),g(null),v(""),y(null),S([]),E(!1)):(h(Z.key),f(Z.content),g(null),v(""),y(null),S([]),E(!1))}async function j(Z){if(b===Z)y(null),S([]);else{y(Z),x(!0);try{const pe=await uS(e,Z,a);S(pe)}catch(pe){n(Me(pe)||"Failed to load revisions","error")}finally{x(!1)}}}function q(){u&&(g(u),v(m))}function le(){g(null),v("")}async function fe(){if(!(!p||!w.trim())){M(!0);try{await ph(e,p,w,{},a),g(null),v(""),await P();const Z=o.find(pe=>pe.key===p);Z&&f(Z.content),n("Document saved","success")}catch(Z){n(Me(Z)||"Failed to save document","error")}finally{M(!1)}}}async function Ce(){const Z=z.trim(),pe=A.trim();if(!Z){n("Document key is required","error");return}if(!D$.test(Z)){n("Invalid key format. Use 1-64 alphanumeric characters, hyphens, or underscores.","error");return}if(!pe){n("Content is required","error");return}M(!0);try{await ph(e,Z,pe,{},a),R(!1),_(""),X(""),await P(),n("Document created","success")}catch(ie){n(Me(ie)||"Failed to create document","error")}finally{M(!1)}}async function Ae(Z){F(Z);try{await mS(e,Z,a),oe(null),F(null),u===Z&&(h(null),f("")),b===Z&&(y(null),S([])),await P(),n("Document deleted","success")}catch(pe){n(Me(pe)||"Failed to delete document","error")}finally{F(null)}}function re(Z){f(Z.content),g(null),v("")}return c?t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Documents"}),t.jsx("div",{className:"detail-log-empty",children:"Loading documents…"})]}):t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Documents"}),k&&t.jsxs("div",{className:"task-document-create-form",children:[t.jsx("h5",{children:"New Document"}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"doc-key",children:"Key"}),t.jsx("input",{id:"doc-key",type:"text",className:"task-document-key-input",value:z,onChange:Z=>_(Z.target.value),placeholder:"e.g., plan, notes, research",disabled:H}),t.jsx("span",{className:"form-hint",children:"Alphanumeric, hyphens, underscores (1-64 chars)"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"doc-content",children:"Content"}),t.jsx("textarea",{id:"doc-content",value:A,onChange:Z=>X(Z.target.value),rows:6,placeholder:"Enter document content…",disabled:H})]}),t.jsxs("div",{className:"form-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{R(!1),_(""),X("")},disabled:H,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void Ce(),disabled:H||!z.trim()||!A.trim(),children:H?"Creating…":"Create"})]})]}),o.length===0&&!k?t.jsx("div",{className:"detail-log-empty",children:"No documents yet."}):t.jsx("div",{className:"task-documents-list",children:o.map(Z=>t.jsxs("div",{className:"task-document-card",children:[t.jsxs("div",{className:"task-document-card-header",children:[t.jsxs("div",{className:"task-document-card-title",children:[t.jsx(Na,{size:14}),t.jsx("span",{className:"task-document-key",children:Z.key}),t.jsxs("span",{className:"task-document-revision-badge",children:["v",Z.revision]})]}),t.jsxs("div",{className:"task-document-meta",children:[t.jsx("span",{className:"task-document-author",children:Z.author}),t.jsx("span",{className:"task-document-timestamp",children:Cf(Z.updatedAt||Z.createdAt)})]})]}),u===Z.key&&p!==Z.key&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"task-document-content-header",children:t.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>E(pe=>!pe),"aria-label":D?"Switch to plain text":"Switch to markdown","aria-pressed":D,title:D?"Switch to plain text":"Switch to markdown",children:D?"Markdown":"Plain"})}),t.jsx("div",{className:"task-document-content",children:D?t.jsx("div",{className:"task-document-content-markdown",children:t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],children:m})})}):t.jsx("pre",{className:"task-document-content-text",children:m})}),b===Z.key&&t.jsxs("div",{className:"task-document-revisions",children:[t.jsx("h5",{children:"Revision History"}),C?t.jsx("div",{className:"detail-log-empty",children:"Loading…"}):N.length<=1?t.jsx("div",{className:"detail-log-empty",children:"No previous revisions."}):t.jsx("div",{className:"task-document-revision-list",children:N.filter(pe=>pe.revision<Z.revision).sort((pe,ie)=>ie.revision-pe.revision).map(pe=>t.jsxs("div",{className:"task-document-revision-item",onClick:()=>re(pe),children:[t.jsxs("div",{className:"revision-header",children:[t.jsxs("span",{className:"revision-badge",children:["v",pe.revision]}),t.jsx("span",{className:"revision-author",children:pe.author}),t.jsx("span",{className:"revision-timestamp",children:Cf(pe.createdAt)})]}),t.jsx("div",{className:"revision-preview",children:O$(pe.content,100)})]},pe.id))})]})]}),p===Z.key&&t.jsxs("div",{className:"task-document-edit-form",children:[t.jsx("textarea",{value:w,onChange:pe=>v(pe.target.value),rows:10,disabled:H}),t.jsxs("div",{className:"form-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:le,disabled:H,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void fe(),disabled:H||!w.trim(),children:H?"Saving…":"Save"})]})]}),t.jsxs("div",{className:"task-document-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>void $(Z),children:u===Z.key?t.jsxs(t.Fragment,{children:[t.jsx(pi,{size:14})," Collapse"]}):t.jsxs(t.Fragment,{children:[t.jsx(jn,{size:14})," Expand"]})}),u===Z.key&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>void j(Z.key),children:[t.jsx(Wa,{size:14})," History"]}),r&&p!==Z.key&&t.jsx("button",{className:"btn btn-sm",onClick:q,children:"Edit"}),r&&(W===Z.key?t.jsxs("div",{className:"confirm-delete-actions",children:[t.jsx("span",{children:"Delete?"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>void Ae(Z.key),disabled:T===Z.key,children:T===Z.key?"…":"Yes"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>oe(null),disabled:T===Z.key,children:"No"})]}):t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>oe(Z.key),children:t.jsx(zn,{size:14})}))]})]})]},Z.key))}),r&&!k&&t.jsxs("button",{className:"btn btn-sm task-document-new-btn",onClick:()=>R(!0),children:[t.jsx(Bn,{size:14})," New Document"]})]})}function fa(e){return e.toLocaleString()}function z$(e){return`${(e*100).toFixed(1)}%`}function zd(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString()}function vr(e){if(e<1e3)return`${Math.round(e)} ms`;const n=e/1e3;if(n<60)return`${n.toFixed(1)} s`;const s=Math.floor(n/60),a=Math.round(n%60);return`${s}m ${a}s`}function B$(e){const n=Date.now(),s=e.map(o=>{if(!o.startedAt)return null;const l=new Date(o.startedAt).getTime();if(Number.isNaN(l))return null;let c;if(o.completedAt){const d=new Date(o.completedAt).getTime();if(Number.isNaN(d)||d<l)return null;c=d}else c=Math.max(l,n);return{name:o.workflowStepName||o.workflowStepId,durationMs:c-l}}).filter(o=>o!==null),a=Cx(e,n)??0,r=s.reduce((o,l)=>!o||l.durationMs>o.durationMs?l:o,void 0);return{timedStepCount:s.length,totalDurationMs:a,longestStep:r}}function U$({tokenUsage:e,loading:n,task:s}){const a=Date.now(),r=Nx(s?.log??[]),o=r.filter(b=>typeof b.durationMs=="number"),l=o.reduce((b,y)=>b+(y.durationMs??0),0),c=Sx(s?.log)??0,d=typeof s?.timedExecutionMs=="number"?s.timedExecutionMs:Math.max(l,c),u=o.reduce((b,y)=>!b||(y.durationMs??0)>(b.durationMs??0)?y:b,void 0),h=B$(s?.workflowStepResults??[]),m=s?_x(s,a):null,f=Ex(s?.executionStartedAt,s?.executionCompletedAt,a),p=x_(s?.firstExecutionAt,s?.executionCompletedAt,a),g=m??(typeof s?.timedExecutionMs=="number"?s.timedExecutionMs:f??d+h.totalDurationMs),w=p!=null&&p!==g,v=s?.steps?.length??0;return t.jsxs("section",{className:"task-token-stats-panel","aria-label":"Task execution statistics",children:[t.jsx("h4",{children:"Execution & Token Stats"}),t.jsxs("div",{className:"task-token-stats-panel__section",children:[t.jsx("h5",{children:"Execution Timing"}),t.jsxs("div",{className:"task-token-stats-panel__grid",role:"list","aria-label":"Execution timing metrics",children:[t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Timing events"}),t.jsx("span",{className:"task-token-stats-panel__value",children:r.length.toLocaleString()})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Timed duration"}),t.jsx("span",{className:"task-token-stats-panel__value",children:vr(d)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Workflow timed steps"}),t.jsx("span",{className:"task-token-stats-panel__value",children:h.timedStepCount.toLocaleString()})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Workflow runtime"}),t.jsx("span",{className:"task-token-stats-panel__value",children:vr(h.totalDurationMs)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Total execution time"}),t.jsx("span",{className:"task-token-stats-panel__value",children:vr(g)})]}),w?t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Wall-clock since first execution"}),t.jsx("span",{className:"task-token-stats-panel__value",children:vr(p)})]}):null]}),t.jsxs("dl",{className:"task-token-stats-panel__timestamps",children:[t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"Longest timing event"}),t.jsx("dd",{children:u?.durationMs?`${u.summary} (${vr(u.durationMs)})`:"No timed events recorded yet."})]}),t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"Longest workflow step"}),t.jsx("dd",{children:h.longestStep?`${h.longestStep.name} (${vr(h.longestStep.durationMs)})`:"No completed workflow step timings yet."})]})]})]}),t.jsxs("div",{className:"task-token-stats-panel__section",children:[t.jsx("h5",{children:"Execution Details"}),t.jsxs("dl",{className:"task-token-stats-panel__details",children:[t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Execution mode"}),t.jsx("dd",{children:s?.executionMode==="fast"?"Fast":"Standard"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Runtime status"}),t.jsx("dd",{children:s?.status??"Not set"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Paused"}),t.jsx("dd",{children:s?.paused?"Yes":"No"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Step progress"}),t.jsx("dd",{children:v>0?`${Math.min((s?.currentStep??0)+1,v)} / ${v}`:"No steps"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Retries (recovery / workflow / merge / task_done)"}),t.jsx("dd",{children:`${s?.recoveryRetryCount??0} / ${s?.workflowStepRetries??0} / ${s?.mergeRetries??0} / ${s?.taskDoneRetryCount??0}`})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Recovery state"}),t.jsx("dd",{children:s?.nextRecoveryAt?`Next recovery at ${zd(s.nextRecoveryAt)}`:"No scheduled recovery"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Self-heal counters"}),t.jsx("dd",{children:`stuck kills: ${s?.stuckKillCount??0}, post-review fixes: ${s?.postReviewFixCount??0}`})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Runtime links"}),t.jsx("dd",{children:[s?.assignedAgentId?`agent ${s.assignedAgentId}`:null,s?.checkedOutBy?`checkout ${s.checkedOutBy}`:null,s?.blockedBy?`blocked by ${s.blockedBy}`:null,s?.sessionFile?"has session":null].filter(Boolean).join(", ")||"No runtime links"})]})]})]}),t.jsxs("div",{className:"task-token-stats-panel__section",children:[t.jsx("h5",{children:"Token Usage"}),!e&&n?t.jsx("div",{className:"task-token-stats-panel__loading",role:"status","aria-live":"polite",children:"Loading token statistics…"}):e?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"task-token-stats-panel__grid",role:"list","aria-label":"Task token totals",children:[t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Input"}),t.jsx("span",{className:"task-token-stats-panel__value",children:fa(e.inputTokens)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Output"}),t.jsx("span",{className:"task-token-stats-panel__value",children:fa(e.outputTokens)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Cache read"}),t.jsx("span",{className:"task-token-stats-panel__value",children:fa(e.cachedTokens)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Cache write"}),t.jsx("span",{className:"task-token-stats-panel__value",children:fa(e.cacheWriteTokens??0)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Total"}),t.jsx("span",{className:"task-token-stats-panel__value",children:fa(e.totalTokens)})]})]}),t.jsxs("div",{className:"task-token-stats-panel__cache-ratio",children:[t.jsx("span",{className:"task-token-stats-panel__cache-ratio-label",children:"Cache hit ratio:"})," ",t.jsx("span",{className:"task-token-stats-panel__cache-ratio-value",children:e.inputTokens+e.cachedTokens>0?z$(e.cachedTokens/(e.inputTokens+e.cachedTokens)):"—"})]}),t.jsxs("div",{className:"task-token-stats-panel__cache-breakdown",children:["(read ",fa(e.cachedTokens)," / write ",fa(e.cacheWriteTokens??0)," / input ",fa(e.inputTokens),")"]}),t.jsxs("dl",{className:"task-token-stats-panel__timestamps",children:[t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"First used"}),t.jsx("dd",{children:t.jsx("time",{dateTime:e.firstUsedAt,children:zd(e.firstUsedAt)})})]}),t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"Last used"}),t.jsx("dd",{children:t.jsx("time",{dateTime:e.lastUsedAt,children:zd(e.lastUsedAt)})})]})]})]}):t.jsx("div",{className:"task-token-stats-panel__empty",role:"status",children:"No token usage recorded for this task yet."})]})]})}const Zv=/^In-review stall surfaced \[([^\]]+)\]/;function H$(e,n){if(!e.log?.length)return;const s=[...e.log].reverse();for(const[a,r]of s.entries()){const o=r.action.match(Zv);if(!(!o||o[1]!==n))return{entry:r,reversedIndex:a,code:n}}}const Lm=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]),Ef=/^Stale paused review surfaced \[([^\]]+)\]/,_f={p:({children:e,...n})=>t.jsx("p",{...n,children:Ks(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Ks(e)}),code:({children:e,...n})=>{const s=typeof e=="string"?e:ka.Children.toArray(e).join(""),a=Es(s);return a.length===1&&typeof a[0]=="string"?t.jsx("code",{...n,children:e}):t.jsx("code",{...n,children:a})}};function q$(e){let n=null;for(const s of e){if(s.agent!=="executor"||s.type!=="text")continue;const a=s.text.match(/^Executor using model: (.+?)\/(.+)$/);a&&(n={provider:a[1],modelId:a[2]})}return n}function V$(e){let n=null;for(const s of e){if(s.agent!=="reviewer"||s.type!=="text")continue;const a=s.text.match(/^Reviewer using model: (.+?)\/(.+)$/);a&&(n={provider:a[1],modelId:a[2]})}return n}function Mf(e){return(e.title??"").trim().length>0?!0:!!(e.description??"").split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)}function ey(e){const n=e?.runtimeConfig??void 0,s=typeof n?.model=="string"?n.model.trim():"";if(s){const o=s.indexOf("/");if(o>0&&o<s.length-1)return{provider:s.slice(0,o),modelId:s.slice(o+1)}}const a=typeof n?.modelProvider=="string"?n.modelProvider.trim():"",r=typeof n?.modelId=="string"?n.modelId.trim():"";return{provider:a||void 0,modelId:r||void 0}}function W$(e,n,s,a){const r=q$(n);if(r)return r;if(Lm.has(e.status??"")||e.column==="in-progress"){const o=ey(s);if(o.provider&&o.modelId)return o}return Fb(e,a)}function G$(e,n,s,a){const r=V$(n);if(r)return r;if(Lm.has(e.status??"")||e.column==="in-progress"){const o=ey(s);if(o.provider&&o.modelId)return o}return zb(e,a)}function K$(e){let n=null;for(const s of e){if(s.agent!=="triage"||s.type!=="text")continue;const a=s.text.match(/^Triage using model: (.+?)\/(.+)$/);a&&(n={provider:a[1],modelId:a[2]})}return n}function J$(e,n,s){if(e.planningModelProvider&&e.planningModelId)return{provider:e.planningModelProvider,modelId:e.planningModelId};const a=K$(n);return a||Bb(e,s)}function Y$(e){switch(e){case"done":return"var(--color-success)";case"in-progress":return"var(--in-progress)";case"skipped":return"var(--text-dim)";case"pending":default:return"var(--border)"}}function yr(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(r/60),l=Math.floor(o/24);return r<1?"just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function Q$(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function bo(e){const n=Math.max(1,Math.floor(e/6e4)),s=Math.floor(n/1440),a=Math.floor(n%1440/60),r=n%60;return s>0?`${s}d ${a}h`:a>0?`${a}h ${r}m`:`${r}m`}function Bd(e,n){return e.length>n?e.slice(0,n)+"…":e}function Af(e=[],n=[]){return e.length===n.length&&e.every((s,a)=>s===n[a])}function Ud(e){const n=e.indexOf("/");return!e||n===-1?null:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Hd(e){return e.trim()}function X$(e){const n=e.trim();return n.length>0?n:void 0}function Xi(e){return typeof e=="string"&&Ea.includes(e)?e:Ps}function Zi(e){return e==="fast"?"fast":"standard"}function Z$(e){const n=e?.issueUrl;return typeof n=="string"&&n.length>0?n:void 0}function e4(e){const n=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)(?:$|[/?#])/);if(!n)return null;const[,s,a,,r]=n;return{label:`${s}/${a}#${r}`,href:e}}function t4(e){const n=e?.findingLabel;if(typeof n=="string"&&n.length>0)return n;const s=e?.runId;return typeof s=="string"&&s.length>0?s:void 0}const n4=i.lazy(()=>Tn(()=>import("./AgentDetailView-Dx7T1-gM.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.AgentDetailView})));function s4(e,n={}){switch(e.sourceType){case"dashboard_ui":return{label:"Dashboard"};case"quick_chat":return{label:"Quick Chat"};case"chat_session":return{label:"Chat Session"};case"agent_heartbeat":return{label:n.sourceAgentName??e.sourceAgentId??"agent",sourceAgentId:e.sourceAgentId};case"automation":return{label:"Automation"};case"cron":return{label:"Scheduled Task"};case"workflow_step":return{label:"Workflow Step"};case"github_import":{const s=Z$(e.sourceMetadata),a=s?e4(s):null;return{label:"GitHub Import",contextInfo:s?a?.label??"Open issue":void 0,contextHref:s,contextInfoFull:s}}case"research":{const s=t4(e.sourceMetadata);return{label:"Research",contextInfo:s,contextInfoFull:s}}case"task_refine":return{label:"Refinement",parentTaskId:e.sourceParentTaskId};case"task_duplicate":return{label:"Duplicate",parentTaskId:e.sourceParentTaskId};case"cli":return{label:"CLI"};case"api":return{label:"API"};case"recovery":return{label:"Recovery"};case"unknown":default:return null}}const qd=200,i4=new Set(["triage","todo"]),a4=new Set(["triage","todo","in-progress","in-review"]);function ty({task:e,projectId:n,tasks:s=[],onOpenDetail:a,onMoveTask:r,onDeleteTask:o,onMergeTask:l,onRetryTask:c,onResetTask:d,onDuplicateTask:u,onTaskUpdated:h,addToast:m,prAuthAvailable:f,initialTab:p="definition",mobileHeaderMode:g="close",embedded:w=!1,onRequestClose:v}){const[b,y]=i.useState(p==="retries"?"definition":p),[N,S]=i.useState(()=>"prompt"in e?e:null),[C,x]=i.useState(()=>!("prompt"in e));i.useEffect(()=>{if("prompt"in e){S(e),x(!1);return}let K=!1;return x(!0),S(null),Ja(e.id,n).then(Se=>{K||(S(Se),x(!1))}).catch(()=>{K||x(!1)}),()=>{K=!0}},[e.id,n]);const k=N?{...N,...e,prompt:N.prompt,log:N.log,githubTracking:e.githubTracking??N.githubTracking}:{...e,prompt:""},R=e.status==="failed"||e.status==="stuck-killed"||e.status==="planning"||e.status==="needs-replan"||(e.stuckKillCount??0)>0||(e.recoveryRetryCount??0)>0||!!e.nextRecoveryAt,[z,_]=i.useState(null),[A,X]=i.useState(null),H=s4(k,{sourceAgentName:z?.name});i.useEffect(()=>{y(p==="retries"?"definition":p),p==="retries"&&ze(!0)},[p]),i.useEffect(()=>{D(!1)},[e.id]);const[M,T]=i.useState("activity"),[F,W]=i.useState(null),[oe,D]=i.useState(!1),[E,P]=i.useState(e.attachments||[]),[$,j]=i.useState(!1),[q,le]=i.useState(e.dependencies||[]),[fe,Ce]=i.useState(!1),[Ae,re]=i.useState(""),[Z,pe]=i.useState(null),[ie,ve]=i.useState([]),[ne,L]=i.useState(!1),[Y,ue]=i.useState(!1),[B,xe]=i.useState(!1),[je,se]=i.useState(!1),[Ue,De]=i.useState(!1),[dt,Pe]=i.useState(k.prompt||""),[ce,Ee]=i.useState(""),[Oe,ht]=i.useState(!1);i.useEffect(()=>{if(b!=="logs"||M!=="activity"){W(null);return}if(!F)return;const K=Hn.current?.querySelector('[data-stall-highlight="true"]');K&&typeof K.scrollIntoView=="function"&&K.scrollIntoView({block:"nearest",behavior:"smooth"})},[b,M,F]);const[Ve,ge]=i.useState(""),[me,$e]=i.useState(!1),[mt,jt]=i.useState(!1),[tt,bt]=i.useState(e.title||""),[Ie,Xe]=i.useState(e.description||""),[rt,It]=i.useState(e.dependencies||[]),[_t,We]=i.useState(e.branch??""),[J,ke]=i.useState(e.baseBranch??""),[ot,ye]=i.useState(""),[it,He]=i.useState(""),[he,et]=i.useState(""),[vt,Ct]=i.useState(""),[Et,Tt]=i.useState("default"),[Jt,cn]=i.useState(void 0),[Vt,hn]=i.useState(Ps),[dn,An]=i.useState(e.nodeId),[nn,Dn]=i.useState(Zi(e.executionMode)),[Nn,zt]=i.useState(""),[sn,xn]=i.useState(e.enabledWorkflowSteps||[]),[Xt,Yt]=i.useState(e.sourceIssue?.provider??""),[rn,Zt]=i.useState(e.sourceIssue?.repository??""),[en,un]=i.useState(e.sourceIssue?.externalIssueId??""),[Qt,pn]=i.useState(e.sourceIssue?.url??""),[Dt,Bt]=i.useState([]),[be,Re]=i.useState(!1),[nt,ut]=i.useState(Xi(e.priority)),[Ye,lt]=i.useState(!1),[wt,Q]=i.useState(Zi(e.executionMode)),[ae,Ke]=i.useState(!1),[gt,Wt]=i.useState(e.noCommitsExpected===!0),[fn,Rn]=i.useState(!1),wn=i.useRef(!1),[mn,Un]=i.useState(!1),[de,st]=i.useState(!1),[ct,kt]=i.useState(!1),[G,ze]=i.useState(p==="retries"),[Ut,gn]=i.useState(!1),[In,Ne]=i.useState(e.githubTracking?.repoOverride??""),[xt,Mt]=i.useState(null),[Gt,Sn]=i.useState(null),[on,qt]=i.useState(!1),Pt=i.useRef(null),Hn=i.useRef(null),qn=i.useRef(null),ns=i.useRef(null),{getSlotsForId:ss}=cx(n),ys=ss("task-detail-tab").map((K,Se)=>({entry:K,tabId:`plugin-${K.pluginId}-${Se}`})),hs=typeof b=="string"&&b.startsWith("plugin-")?ys.find(K=>K.tabId===b)??null:null;i.useEffect(()=>(wn.current=!0,()=>{wn.current=!1}),[]);const[On,ws]=i.useState(void 0),[Rs,Ns]=i.useState(null),[ee,_e]=i.useState([]),[ft,Ot]=i.useState(!1),[O,qe]=i.useState(e.enabledWorkflowSteps||[]),Ze=e.column==="in-progress"||Lm.has(e.status);i.useEffect(()=>{bt(e.title||""),Xe(e.description||""),We(e.branch??""),ke(e.baseBranch??""),Yt(e.sourceIssue?.provider??""),Zt(e.sourceIssue?.repository??""),un(e.sourceIssue?.externalIssueId??""),pn(e.sourceIssue?.url??""),Dn(Zi(e.executionMode)),kt(!1),gn(!1),Ne(k.githubTracking?.repoOverride??""),Mt(null),Sn(null),jt(!1)},[e.id,e.title,e.description,e.branch,e.baseBranch,e.sourceIssue,e.executionMode,k.githubTracking]),i.useEffect(()=>{qe(e.enabledWorkflowSteps||[])},[e.id,e.enabledWorkflowSteps]),i.useEffect(()=>{ut(Xi(e.priority))},[e.id,e.priority]),i.useEffect(()=>{Q(Zi(e.executionMode))},[e.id,e.executionMode]),i.useEffect(()=>{Wt(e.noCommitsExpected===!0)},[e.id,e.noCommitsExpected]),i.useEffect(()=>{xt!==null&&k.githubTracking?.enabled===!0===xt&&Mt(null)},[xt,k.githubTracking?.enabled]),i.useEffect(()=>{let K=!1;return Rc(n).then(Se=>{K||ws(Se)}).catch(()=>{}),aa().then(Se=>{K||Ns(Se)}).catch(()=>{K||Ns(null)}),()=>{K=!0}},[n]),i.useEffect(()=>{if(b!=="workflow")return;let K=!1;return Ot(!0),Q0(e.id,n).then(Se=>{K||_e(Se)}).catch(Se=>{K||m(`Failed to load workflow results: ${Me(Se)}`,"error")}).finally(()=>{K||Ot(!1)}),()=>{K=!0}},[b,e.id,n,m]),i.useEffect(()=>{if(b!=="workflow")return;const K=n?`?projectId=${encodeURIComponent(n)}`:"",Se=yt=>{try{const Ht=JSON.parse(yt.data);Ht.id===e.id&&Array.isArray(Ht.workflowStepResults)&&_e(Ht.workflowStepResults)}catch{}};return fi(`/api/events${K}`,{events:{"task:updated":Se}})},[b,e.id,n]),i.useEffect(()=>{fe||re("")},[fe]),i.useEffect(()=>{if(!e.assignedAgentId){pe(null);return}const K=ie.find(yt=>yt.id===e.assignedAgentId);if(K){pe(K);return}let Se=!1;return Su(e.assignedAgentId,n).then(yt=>{Se||pe(yt)}).catch(()=>{Se||pe(null)}),()=>{Se=!0}},[e.assignedAgentId,n,ie]),i.useEffect(()=>{if(!e.sourceAgentId){_(null);return}const K=ie.find(yt=>yt.id===e.sourceAgentId);if(K){_(K);return}let Se=!1;return Promise.resolve(Su(e.sourceAgentId,n)).then(yt=>{Se||_(yt??null)}).catch(()=>{Se||_(null)}),()=>{Se=!0}},[e.sourceAgentId,n,ie]),i.useEffect(()=>{L(!1)},[e.id]),i.useEffect(()=>{if(!(mn||de))return;const Se=yt=>{const Ht=yt.target,Fn=Pt.current?.contains(Ht),Pi=ns.current?.contains(Ht);!Fn&&mn&&Un(!1),!Pi&&de&&st(!1)};return document.addEventListener("mousedown",Se),()=>document.removeEventListener("mousedown",Se)},[mn,de]),i.useEffect(()=>{if(!(mn||de))return;const Se=yt=>{yt.key==="Escape"&&(yt.stopPropagation(),mn&&Un(!1),de&&st(!1))};return document.addEventListener("keydown",Se),()=>document.removeEventListener("keydown",Se)},[mn,de]),i.useEffect(()=>{De(!1),Pe(k.prompt||""),Ee("")},[e.id,k.prompt]);const Je=i4.has(e.column)&&!be,pt=a4.has(e.column)&&!be,At=xt??k.githubTracking?.enabled===!0,Lt=k.githubTracking?.issue,ln=C&&typeof e.githubTracking>"u",kn=Mf(e),te=pt&&!Lt&&!ln&&(!At||on&&k.githubTracking?.enabled!==!0),Fe=pt||At||!!Lt,Ge=e.retrySummary,Ft=[{key:"stuckKill",label:"Stuck kills",title:"Stuck-task detector forced agent kill retries",value:Ge?.stuckKill??0},{key:"recovery",label:"Recovery retries",title:"Transient executor recovery retries",value:Ge?.recovery??0},{key:"taskDone",label:"task_done retries",title:"Agent exited without task_done and task was retried",value:Ge?.taskDone??0},{key:"workflowStep",label:"Workflow retries",title:"Workflow step failure retries",value:Ge?.workflowStep??0},{key:"verification",label:"Verification bounces",title:"Verification failure bounce retries",value:Ge?.verification??0},{key:"postReviewFix",label:"Post-review fixes",title:"Post-review remediation retries",value:Ge?.postReviewFix??0},{key:"mergeConflict",label:"Merge conflict bounces",title:"Merge conflict bounce retries",value:Ge?.mergeConflict??0},{key:"branchConflict",label:"Branch conflict recovery",title:"FN-4068 branch-conflict recovery retries",value:Ge?.branchConflict??0},{key:"reviewerContext",label:"Reviewer context retries",title:"FN-4082 compact reviewer retry",value:Ge?.reviewerContext??0},{key:"reviewerFallback",label:"Reviewer fallback retries",title:"FN-4092 fallback-model retry",value:Ge?.reviewerFallback??0}].filter(K=>K.value>0),tn=ln?"Loading":Lt?"Linked":At?"Enabled":"Disabled",Mn=!Lt&&(on||ln),is=Qv(On??null,Rs),Vn=In.trim(),as=i.useCallback(async()=>{if(!pt||on)return;const K=!At;Mt(K),qt(!0);try{const Se=await Ds(e.id,{githubTracking:{enabled:K}},n);h?.(Se)}catch(Se){Mt(k.githubTracking?.enabled===!0),m(`Failed to update ${e.id}: ${Me(Se)}`,"error")}finally{wn.current&&qt(!1)}},[m,pt,At,on,h,n,k.githubTracking?.enabled,e.id]),ps=i.useCallback(async()=>{if(!(!pt||on)){if(Vn.length>0&&!Ac.test(Vn)){Sn("Repository override must be in owner/repo format");return}Sn(null),qt(!0);try{const K=await Ds(e.id,{githubTracking:{repoOverride:Vn.length>0?Vn:null}},n);h?.(K)}catch(K){m(`Failed to update ${e.id}: ${Me(K)}`,"error")}finally{wn.current&&qt(!1)}}},[m,pt,Vn,on,h,n,e.id]),Ss=i.useCallback(async()=>{if(!(!At||Lt||on)){if(!Mf(e)){m("Add a title before creating a tracking issue","info");return}qt(!0);try{const K=await Ds(e.id,{githubTracking:{enabled:!0}},n);h?.(K),m("Requested GitHub tracking issue creation","info")}catch(K){m(`Failed to update ${e.id}: ${Me(K)}`,"error")}finally{wn.current&&qt(!1)}}},[m,Lt,At,on,h,n,e]),Ma=i.useCallback(()=>{if(!Je)return;jt(!0),bt(e.title||""),Xe(e.description||""),It(e.dependencies||[]),We(e.branch??""),ke(e.baseBranch??"");const K=e.modelProvider&&e.modelId?`${e.modelProvider}/${e.modelId}`:"",Se=e.validatorModelProvider&&e.validatorModelId?`${e.validatorModelProvider}/${e.validatorModelId}`:"",yt=e.planningModelProvider&&e.planningModelId?`${e.planningModelProvider}/${e.planningModelId}`:"";ye(K),He(Se),et(yt),Ct(e.thinkingLevel??""),An(e.nodeId),Tt(K||Se||yt?"custom":"default"),zt(""),xn(e.enabledWorkflowSteps||[]),Dn(Zi(e.executionMode)),Yt(e.sourceIssue?.provider??""),Zt(e.sourceIssue?.repository??""),un(e.sourceIssue?.externalIssueId??""),pn(e.sourceIssue?.url??""),Bt([]),cn(e.reviewLevel),hn(Xi(e.priority))},[Je,e]),Wi=i.useCallback(()=>{jt(!1),bt(e.title||""),Xe(e.description||""),It(e.dependencies||[]),We(e.branch??""),ke(e.baseBranch??""),An(e.nodeId),Yt(e.sourceIssue?.provider??""),Zt(e.sourceIssue?.repository??""),un(e.sourceIssue?.externalIssueId??""),pn(e.sourceIssue?.url??""),hn(Xi(e.priority)),Dn(Zi(e.executionMode)),Dt.forEach(K=>URL.revokeObjectURL(K.previewUrl)),Bt([])},[e.title,e.description,e.dependencies,e.nodeId,e.priority,e.executionMode,Dt]),[ri,ca]=i.useState("idle"),Is=i.useRef(null),Mi=i.useRef(0),Aa=i.useCallback(K=>{const Se={},yt=tt.trim(),Ht=Ie.trim();yt&&yt!==(e.title??"")&&(Se.title=yt),K&&Ht&&Ht!==(e.description??"")&&(Se.description=Ht),Af(rt,e.dependencies??[])||(Se.dependencies=rt),Af(sn,e.enabledWorkflowSteps??[])||(Se.enabledWorkflowSteps=sn);const Fn=_t.trim()||null,Pi=e.branch??null;Fn!==Pi&&(Se.branch=Fn);const qc=J.trim()||null,Vc=e.baseBranch??null;qc!==Vc&&(Se.baseBranch=qc);const Jm=Ud(ot),nw=e.modelProvider&&e.modelId?`${e.modelProvider}/${e.modelId}`:"";ot!==nw&&(Se.modelProvider=Jm?.provider??null,Se.modelId=Jm?.modelId??null);const Ym=Ud(it),sw=e.validatorModelProvider&&e.validatorModelId?`${e.validatorModelProvider}/${e.validatorModelId}`:"";it!==sw&&(Se.validatorModelProvider=Ym?.provider??null,Se.validatorModelId=Ym?.modelId??null);const Qm=Ud(he),iw=e.planningModelProvider&&e.planningModelId?`${e.planningModelProvider}/${e.planningModelId}`:"";he!==iw&&(Se.planningModelProvider=Qm?.provider??null,Se.planningModelId=Qm?.modelId??null);const aw=e.thinkingLevel??"";vt!==aw&&(Se.thinkingLevel=vt!==""?vt:null),(e.nodeId??void 0)!==dn&&(Se.nodeId=dn??null),Jt!==e.reviewLevel&&(Se.reviewLevel=Jt),Vt!==Xi(e.priority)&&(Se.priority=Vt),nn!==Zi(e.executionMode)&&(Se.executionMode=nn==="fast"?"fast":null);const Wc=Hd(Xt),Gc=Hd(rn),hl=Hd(en),Kc=X$(Qt);if(Wc.length===0&&Gc.length===0&&hl.length===0&&!Kc)e.sourceIssue&&(Se.sourceIssue=null);else{if(!Wc||!Gc||!hl)return{updates:null,error:"Source issue provider, repository, and issue identifier are required"};const rw=Number.parseInt(hl,10),Jc=e.sourceIssue?.issueNumber??rw;if(!Number.isFinite(Jc)||Jc<=0)return{updates:null,error:"Source issue identifier must be numeric for new metadata"};const hr={provider:Wc,repository:Gc,externalIssueId:hl,issueNumber:Jc,...Kc?{url:Kc}:{}},pr=e.sourceIssue;(!pr||pr.provider!==hr.provider||pr.repository!==hr.repository||pr.externalIssueId!==hr.externalIssueId||pr.issueNumber!==hr.issueNumber||(pr.url??void 0)!==hr.url)&&(Se.sourceIssue=hr)}return{updates:Se,error:null}},[J,_t,rt,Ie,nn,ot,dn,he,Vt,Jt,sn,en,Xt,rn,Qt,vt,tt,it,e]),Ai=i.useCallback(async K=>{const{updates:Se,error:yt}=Aa(K);if(!Se)return ca("error"),yt&&m(`Failed to update ${e.id}: ${yt}`,"error"),!1;if(Object.keys(Se).length===0)return!0;const Ht=++Mi.current;Re(!0),ca("saving");try{const Fn=await Ds(e.id,Se,n);return Ht!==Mi.current?void 0:(h?.(Fn),ca("saved"),!0)}catch(Fn){return Ht===Mi.current&&(ca("error"),m(`Failed to update ${e.id}: ${Me(Fn)}`,"error")),!1}finally{wn.current&&Ht===Mi.current&&Re(!1)}},[m,Aa,h,n,e.id]),to=i.useCallback(async K=>{await Ai(!0)},[Ai]),Ra=i.useCallback(async()=>{await Ai(!0)&&(m(`Updated ${e.id}`,"success"),wn.current&&jt(!1))},[m,Ai,e.id]);i.useEffect(()=>{if(mt)return Is.current&&clearTimeout(Is.current),Is.current=setTimeout(()=>{Ai(!1)},700),()=>{Is.current&&(clearTimeout(Is.current),Is.current=null)}},[mt,tt,rt,_t,J,ot,it,he,vt,dn,Jt,Vt,nn,sn,Xt,rn,en,Qt,Ai]);const gi=i.useCallback(async K=>{const Se=Xi(K),yt=Xi(e.priority);if(Se===yt){ut(yt);return}const Ht=nt;ut(Se),lt(!0);try{const Fn=await Ds(e.id,{priority:Se},n);ut(Xi(Fn.priority)),h?.(Fn),m(`Priority updated to ${Xi(Fn.priority)}`,"success")}catch(Fn){ut(Ht),m(`Failed to update ${e.id}: ${Me(Fn)}`,"error")}finally{wn.current&<(!1)}},[e.id,e.priority,n,nt,h,m]),Ri=i.useCallback(async()=>{const Se=Zi(e.executionMode)==="fast"?"standard":"fast",yt=wt;Q(Se),Ke(!0);try{const Ht=await Ds(e.id,{executionMode:Se==="fast"?"fast":null},n),Fn=Zi(Ht.executionMode);Q(Fn),h?.(Ht),m(`Execution mode updated to ${Fn}`,"success")}catch(Ht){Q(yt),m(`Failed to update ${e.id}: ${Me(Ht)}`,"error")}finally{wn.current&&Ke(!1)}},[e.id,e.executionMode,n,wt,h,m]),da=i.useCallback(async()=>{const K=!gt,Se=gt;Wt(K),Rn(!0);try{const yt=await Ds(e.id,{noCommitsExpected:K},n),Ht=yt.noCommitsExpected===!0;Wt(Ht),h?.(yt),m(`No-commits expectation ${Ht?"enabled":"disabled"}`,"success")}catch(yt){Wt(Se),m(`Failed to update ${e.id}: ${Me(yt)}`,"error")}finally{wn.current&&Rn(!1)}},[e.id,n,gt,h,m]),Ii=i.useCallback(K=>{mt&&(K.key==="Escape"?(K.preventDefault(),Wi()):K.key==="Enter"&&(K.ctrlKey||K.metaKey)&&(K.preventDefault(),Ra()))},[mt,Wi,Ra]);i.useEffect(()=>{if(mt)return document.addEventListener("keydown",Ii),()=>document.removeEventListener("keydown",Ii)},[mt,Ii]);const Gi=i.useRef(null),{nodes:no}=Pc(),{confirm:ls}=ai(),oi=i.useCallback(async()=>{if(!(!Je||!Lt||on||!await ls({title:"Unlink GitHub issue?",message:"This stops Fusion from syncing with the linked GitHub issue. The issue itself will not be modified.",confirmLabel:"Unlink",danger:!0}))){qt(!0);try{const Se=await Ds(e.id,{githubTracking:{issue:null}},n);h?.(Se),m("GitHub issue unlinked","success")}catch(Se){m(`Failed to update ${e.id}: ${Me(Se)}`,"error")}finally{wn.current&&qt(!1)}}},[m,Je,ls,Lt,on,h,n,e.id]),{entries:Ti,loading:ir,loadMore:Ki,hasMore:ua,total:ma,loadingMore:bi}=qv(e.id,b==="logs"&&M==="agent-log",n),$n=i.useCallback(()=>{v?.()},[v]);i.useEffect(()=>{if(w)return;const K=Se=>{Se.key==="Escape"&&!mt&&$n()};return document.addEventListener("keydown",K),()=>document.removeEventListener("keydown",K)},[w,$n,mt]);const Ia=i.useCallback(async K=>{try{const Se=e.steps.some(Fn=>Fn.status!=="pending"),yt=(K==="todo"||K==="triage")&&Se;let Ht;if(yt){if(await ls({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))Ht={preserveProgress:!0};else if(!await ls({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await r(e.id,K,Ht),$n(),m(`Moved to ${gs[K]}`,"success")}catch(Se){m(Me(Se),"error")}},[e.id,e.steps,r,$n,m,ls]),ha=i.useCallback(async()=>{if(!await ls({title:"Delete Task",message:`Delete ${e.id}?`,danger:!0}))return;const Se=e.githubTracking?.enabled===!0?e.githubTracking.issue:void 0;let yt;if(Se?.owner&&Se.repo&&Se.number){const Ht=`${Se.owner}/${Se.repo}#${Se.number}`;await ls({title:"Linked GitHub Issue",message:`Choose what to do with ${Ht} when deleting ${e.id}.
|
|
687
|
+
|
|
688
|
+
Close the issue?`,confirmLabel:"Close Issue",cancelLabel:"More Options"})?yt="close":yt=await ls({title:"Delete Linked GitHub Issue",message:`Delete ${Ht} on GitHub, or leave it unchanged?`,confirmLabel:"Delete Issue",cancelLabel:"Leave Unchanged",danger:!0})?"delete":"leave"}try{yt?await o(e.id,{githubIssueAction:yt}):await o(e.id),$n();const Ht=Se?.owner&&Se.repo&&Se.number&&yt?` and ${yt==="close"?"closed":yt==="delete"?"deleted":"left"} issue ${Se.owner}/${Se.repo}#${Se.number}`:"";m(`Deleted ${e.id}${Ht}`,"info")}catch(Ht){const Fn=fm(Ht);if(!Fn||Fn.dependentIds.length===0){m(Me(Ht),"error");return}const Pi=Fn.dependentIds.join(", ");if(!await ls({title:"Force Delete Task",message:`${e.id} is a dependency of ${Pi}.
|
|
689
|
+
|
|
690
|
+
Delete anyway by removing these dependency references first?`,danger:!0}))return;try{await o(e.id,{removeDependencyReferences:!0,githubIssueAction:yt}),$n(),m(`Deleted ${e.id} after removing dependency references`,"info")}catch(Vc){m(Me(Vc),"error")}}},[e.githubTracking?.enabled,e.githubTracking?.issue,e.id,o,$n,m,ls]),Ji=i.useCallback(async()=>{await ls({title:"Merge Task",message:`Merge ${e.id} into the current branch?`})&&($n(),m(`Merging ${e.id}...`,"info"),l(e.id).then(Se=>{const yt=Se.merged?`Merged ${e.id} (branch: ${Se.branch})`:`Closed ${e.id} (${Se.error||"no branch to merge"})`;m(yt,"success")}).catch(Se=>{m(Me(Se),"error")}))},[e.id,l,$n,m,ls]),ar=i.useCallback(()=>{c&&($n(),c(e.id).then(()=>{m(`Retried ${e.id}`,"success")}).catch(K=>{m(Me(K),"error")}))},[e.id,c,$n,m]),rr=i.useCallback(()=>{d&&window.confirm(`This will erase all progress for ${e.id} and start the task from scratch. Continue?`)&&($n(),d(e.id).then(()=>{m(`Reset ${e.id} — fresh run will be allocated`,"success")}).catch(K=>{m(Me(K),"error")}))},[e.id,d,$n,m]),or=i.useCallback(async()=>{if(!(!u||!await ls({title:"Duplicate Task",message:`Duplicate ${e.id}? This will create a new task in Triage with the same description and prompt.`})))try{const Se=await u(e.id);$n(),m(`Duplicated ${e.id} → ${Se.id}`,"success")}catch(Se){m(Me(Se),"error")}},[e.id,u,$n,m,ls]),xi=e.paused||e.userPaused,Ta=i.useCallback(async()=>{try{xi?(await Gb(e.id,n),m(`Unpaused ${e.id}`,"success")):(await Wb(e.id,n),m(`Paused ${e.id}`,"success")),$n()}catch(K){m(Me(K),"error")}},[xi,e.id,$n,m]),Pa=i.useCallback(async()=>{try{await sS(e.id,n),m(`Plan approved — ${e.id} moved to Todo`,"success"),$n()}catch(K){m(Me(K),"error")}},[e.id,$n,m]),$a=i.useCallback(async()=>{if(await ls({title:"Reject Plan",message:"Reject this plan? The specification will be discarded and regenerated.",danger:!0}))try{await iS(e.id,n),m(`Plan rejected — ${e.id} returned to Planning for replanning`,"info"),$n()}catch(Se){m(Me(Se),"error")}},[e.id,$n,m,ls]),lr=i.useCallback(async()=>{if(await ls({title:"Rebuild Plan",message:"Rebuild the plan for this task? The task will move to planning for replanning."}))try{await fS(e.id,n),$n(),m(`Replanning ${e.id}...`,"info")}catch(Se){m(Me(Se),"error")}},[e.id,n,$n,m,ls]),Da=i.useCallback(()=>{ht(!0),ge("")},[]),Qs=i.useCallback(()=>{Un(!1),st(!1)},[]),Yi=i.useCallback(K=>{Qs(),Ia(K)},[Qs]),vi=i.useCallback(K=>{Qs(),K()},[Qs]),so=i.useCallback(()=>{Qs(),Ji()},[Qs,Ji]),Qi=i.useCallback(()=>{ht(!1),ge(""),$e(!1)},[]),cr=i.useCallback(async()=>{if(!Ve.trim()){m("Please enter feedback describing what needs refinement","error");return}if(Ve.length>2e3){m("Feedback must be 2000 characters or less","error");return}$e(!0);try{const K=await gS(e.id,Ve.trim(),n);m(`Refinement task created: ${K.id}`,"success"),$n()}catch(K){m(Me(K),"error")}finally{$e(!1)}},[e.id,Ve,m,$n]),yi=i.useCallback(async K=>{j(!0);try{const Se=await Ic(e.id,K,n);P(yt=>[...yt,Se]),m("Screenshot attached","success")}catch(Se){m(Me(Se),"error")}finally{j(!1)}},[e.id,m]),dr=i.useCallback(async K=>{const Se=K.target.files?.[0];Se&&(await yi(Se),Gi.current&&(Gi.current.value=""))},[yi]);i.useEffect(()=>{const K=Se=>{const yt=Se.clipboardData?.items;if(yt)for(let Ht=0;Ht<yt.length;Ht++){const Fn=yt[Ht];if(Fn.type.startsWith("image/")){const Pi=Fn.getAsFile();if(Pi){Se.preventDefault(),yi(Pi);return}}}};return document.addEventListener("paste",K),()=>document.removeEventListener("paste",K)},[yi]);const ur=i.useCallback(K=>{K.preventDefault()},[]),mr=i.useCallback(K=>{K.preventDefault();const Se=K.dataTransfer.files;for(let yt=0;yt<Se.length;yt++){const Ht=Se[yt];if(Ht.type.startsWith("image/")){yi(Ht);return}}},[yi]),La=i.useCallback(async K=>{try{await oS(e.id,K,n),P(Se=>Se.filter(yt=>yt.filename!==K)),m("Attachment deleted","info")}catch(Se){m(Me(Se),"error")}},[e.id,m]),U=i.useCallback(async K=>{const Se=O;qe(K);try{const yt=await Ds(e.id,{enabledWorkflowSteps:K},n);m("Workflow steps updated","success"),h?.(yt)}catch(yt){qe(Se),m(`Failed to update workflow steps: ${Me(yt)}`,"error")}},[e.id,n,O,h,m]),Te=i.useCallback(async()=>{ue(!0);try{const K=await Yr(void 0,n);ve(K),L(!0)}catch(K){m(`Failed to load agents: ${Me(K)}`,"error"),L(!1)}finally{ue(!1)}},[n,m]),Qe=i.useCallback(async K=>{try{const Se=await Ch(e.id,K,n),yt=ie.find(Ht=>Ht.id===K)??null;pe(yt||(Ht=>Ht?.id===K?Ht:null)),L(!1),h?.(Se),m("Assigned agent updated","success")}catch(Se){m(`Failed to assign agent: ${Me(Se)}`,"error")}},[e.id,n,ie,h,m]),Nt=i.useCallback(async()=>{try{const K=await Ch(e.id,null,n);pe(null),L(!1),h?.(K),m("Agent unassigned","success")}catch(K){m(`Failed to unassign agent: ${Me(K)}`,"error")}},[e.id,n,h,m]),vn=i.useCallback(async K=>{const Se=[...q,K];le(Se);try{await Ds(e.id,{dependencies:Se},n)}catch(yt){le(q),m(Me(yt),"error")}},[e.id,q,m]),Kt=i.useCallback(async(K,Se)=>{K.stopPropagation();const yt=q.filter(Ht=>Ht!==Se);le(yt);try{await Ds(e.id,{dependencies:yt},n)}catch(Ht){le(q),m(Me(Ht),"error")}},[e.id,q,m]),Cn=i.useCallback(async K=>{try{const Se=await Ja(K,n);a(Se)}catch{m(`Failed to load dependency ${K}`,"error")}},[a,m]),Le=i.useCallback(async K=>{xe(!0);try{await Ds(k.id,{prompt:K},n),m("Spec updated","success"),N&&(N.prompt=K)}catch(Se){throw m(Me(Se),"error"),Se}finally{xe(!1)}},[k,N,m]),we=i.useCallback(async K=>{se(!0);try{await pS(e.id,K,n),m("AI revision requested. Task moved to planning.","success"),$n()}catch(Se){const yt=Me(Se);yt.includes("done")||yt.includes("archived")?m("Cannot request revision: Task must be in 'triage', 'todo', 'in-progress', or 'in-review' column.","error"):m(yt,"error")}finally{se(!1)}},[e.id,m,$n]),Be=i.useCallback(()=>{De(!0),Pe(k.prompt||""),Ee("")},[k.prompt]),$t=i.useCallback(()=>{De(!1),Pe(k.prompt||""),Ee("")},[k.prompt]),bn=i.useCallback(async()=>{if(dt===(k.prompt||"")){$t();return}De(!1);try{await Le(dt)}catch(K){throw De(!0),K}},[dt,k.prompt,Le,$t]),rs=i.useCallback(async()=>{ce.trim()&&await we(ce.trim())},[ce,we]),Qn=i.useCallback(K=>{K.key==="Escape"?(K.preventDefault(),$t()):K.key==="Enter"&&(K.ctrlKey||K.metaKey)&&(K.preventDefault(),bn())},[$t,bn]),Xn=s.filter(K=>K.id!==e.id&&!q.includes(K.id)).sort((K,Se)=>{const yt=Se.createdAt.localeCompare(K.createdAt);if(yt!==0)return yt;const Ht=parseInt(K.id.slice(K.id.lastIndexOf("-")+1),10)||0;return(parseInt(Se.id.slice(Se.id.lastIndexOf("-")+1),10)||0)-Ht}),os=i.useMemo(()=>pm(s),[s]).get(e.id),Bs=i.useMemo(()=>{if(!os)return[];const K=new Set(os.staleBlockedByDependentIds);return os.dependentIds.map(Se=>{const yt=s.find(Ht=>Ht.id===Se);return{id:Se,label:yt?.title||yt?.description||Se,stale:K.has(Se)}})},[os,s]),wi=os?`${e.id} is blocking ${os.overlapBlockedTodoCount} todo task(s) via blockedBy overlap`:null,Oa=k.overlapBlockedBy?s.find(K=>K.id===k.overlapBlockedBy):void 0,io=!!(Oa&&(Oa.column==="in-progress"||Oa.column==="in-review")),Um=Z?.name??e.assignedAgentId??null,Hm=i.useMemo(()=>{const K=[];return k.modelProvider&&K.push(k.modelProvider),k.validatorModelProvider&&!K.includes(k.validatorModelProvider)&&K.push(k.validatorModelProvider),k.planningModelProvider&&!K.includes(k.planningModelProvider)&&K.push(k.planningModelProvider),K},[k.modelProvider,k.validatorModelProvider,k.planningModelProvider]),Qy=ku[e.column]||[],Xy=["todo","in-progress"],qm=e.column==="in-review"?Xy:Qy,Us=qm[0],Uc=qm.slice(1),li=Uc.length>0,Vm=i.useCallback(()=>{Un(!1),qn.current?.focus()},[]),Wm=i.useCallback(K=>{if(!li){Us&&Yi(Us);return}const Se=K.currentTarget.querySelector(".detail-move-btn__arrow");if(!!(K.target instanceof Element&&K.target.closest(".detail-move-btn__arrow")||Se&&K.clientX>0&&K.clientX>=Se.getBoundingClientRect().left)){Un(Ht=>!Ht),st(!1);return}Us&&Yi(Us)},[li,Us,Yi]),Gm=i.useCallback(K=>{!li||!(K.key==="ArrowDown"||K.altKey&&K.key==="ArrowDown")||(K.preventDefault(),Un(!0),st(!1))},[li]),ul=i.useCallback(K=>{K.key==="Escape"&&(K.preventDefault(),K.stopPropagation(),Vm())},[Vm]);i.useEffect(()=>{if(!mn)return;Pt.current?.querySelector(".detail-move-menu-item")?.focus()},[mn]);const Zy={"creating-pr":"Creating PR…","awaiting-pr-checks":"Awaiting PR checks","merging-pr":"Merging PR…","merging-fix":"Merging fixes…"},Hc=e.status?Zy[e.status]:void 0,ew=On?.mergeStrategy??"direct",tw=On?.autoMerge??!1,Km=ew==="pull-request"&&!tw;let ml="Merge & Close";return Km&&!Hc&&(e.prInfo?e.prInfo.status==="open"?ml="Check PR Status":e.prInfo.status==="merged"&&(ml="Finish & Close"):ml="Start PR Review"),t.jsxs("div",{className:w?"task-detail-content task-detail-content--embedded":"task-detail-content",onDragOver:ur,onDrop:mr,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx("span",{className:"detail-id",children:e.id}),t.jsx("span",{className:`detail-column-badge badge-${e.column}`,children:gs[e.column]})]}),t.jsxs("div",{className:"modal-header-actions",children:[!mt&&Je&&t.jsx("button",{className:"modal-edit-btn",onClick:Ma,title:"Edit task","aria-label":"Edit task",children:t.jsx(Hs,{size:14})}),!w&&g==="back"&&t.jsxs("button",{className:"modal-close task-detail-mobile-back",onClick:$n,"aria-label":"Back to task list",type:"button",children:[t.jsx(tr,{"aria-hidden":"true"}),t.jsx("span",{children:"Back"})]}),!w&&g!=="back"&&t.jsx("button",{className:"modal-close",onClick:$n,"aria-label":"Close",type:"button",children:"×"})]})]}),t.jsxs("div",{className:`detail-body${b==="logs"&&M==="agent-log"&&!mt?" detail-body--agent-log":""}`,children:[mt?t.jsx("div",{className:"modal-edit-form",children:t.jsx(Xv,{mode:"edit",title:tt,onTitleChange:bt,description:Ie,onDescriptionChange:Xe,dependencies:rt,onDependenciesChange:It,branch:_t,onBranchChange:We,baseBranch:J,onBaseBranchChange:ke,executorModel:ot,onExecutorModelChange:ye,validatorModel:it,onValidatorModelChange:He,planningModel:he,onPlanningModelChange:et,thinkingLevel:vt,onThinkingLevelChange:Ct,presetMode:Et,onPresetModeChange:Tt,selectedPresetId:Nn,onSelectedPresetIdChange:zt,selectedWorkflowSteps:sn,onWorkflowStepsChange:xn,pendingImages:Dt,onImagesChange:Bt,tasks:s.filter(K=>K.id!==e.id),projectId:n,disabled:be,addToast:m,isActive:mt,onAutoSaveDescription:to,reviewLevel:Jt,onReviewLevelChange:cn,priority:Vt,onPriorityChange:hn,nodeId:dn,onNodeIdChange:An,nodeOptions:no,nodeOverrideDisabled:Ze,nodeOverrideDisabledReason:Ze?"Execution node override is locked while a task is active/in progress.":void 0,executionMode:nn,onExecutionModeChange:Dn,renderBelowModelConfiguration:t.jsxs("div",{className:"form-group detail-source-edit-group",children:[t.jsx("label",{children:"Source Issue"}),t.jsxs("div",{className:"detail-source-edit-grid",children:[t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Provider (e.g. github)",value:Xt,onChange:K=>Yt(K.target.value),disabled:be,"data-testid":"task-source-provider-input"}),t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Repository (e.g. owner/repo)",value:rn,onChange:K=>Zt(K.target.value),disabled:be,"data-testid":"task-source-repository-input"}),t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Issue identifier",value:en,onChange:K=>un(K.target.value),disabled:be,"data-testid":"task-source-external-id-input"}),t.jsx("input",{type:"url",className:"modal-edit-input",placeholder:"Issue URL",value:Qt,onChange:K=>pn(K.target.value),disabled:be,"data-testid":"task-source-url-input"})]}),t.jsx("small",{children:"Leave all fields empty to clear source issue metadata."})]})})}):t.jsxs(t.Fragment,{children:[(()=>{const K=e.title||e.description||e.id,Se=!oe&&K.length>qd;return t.jsxs(t.Fragment,{children:[t.jsx("h2",{className:"detail-title",children:Se?K.slice(0,qd)+"…":K}),K.length>qd&&t.jsx("button",{className:"detail-description-toggle",onClick:()=>D(!oe),children:oe?"Show less":"Show more"})]})})(),t.jsxs("div",{className:"detail-meta",children:[t.jsxs("div",{className:"detail-meta-inline-controls","data-testid":"detail-meta-inline-controls",children:[t.jsxs("label",{className:`card-priority-badge card-priority-badge--${nt} detail-priority-chip ${Ye?"detail-priority-chip--saving":""}`,children:[t.jsx("span",{children:"Priority:"}),t.jsx("select",{className:"detail-priority-select",value:nt,onChange:K=>{gi(K.target.value)},disabled:Ye,"aria-label":"Task priority",children:Ea.map(K=>t.jsx("option",{value:K,children:K},K))})]}),t.jsxs("button",{type:"button",className:`btn btn-sm detail-execution-mode-toggle ${wt==="fast"?"detail-execution-mode-toggle--fast":""} ${ae?"detail-execution-mode-toggle--saving":""}`,onClick:()=>{Ri()},disabled:ae,"aria-label":`Execution mode: ${wt}`,"aria-pressed":wt==="fast",children:[t.jsx(us,{"aria-hidden":"true"}),t.jsx("span",{children:wt==="fast"?"Fast":"Standard"})]})]}),H&&t.jsxs("div",{className:"detail-provenance",children:[t.jsx(Os,{"aria-hidden":"true"}),t.jsxs("span",{children:[k.sourceType==="agent_heartbeat"?t.jsxs(t.Fragment,{children:["Created by"," ",H.sourceAgentId?t.jsx("button",{type:"button",className:"detail-provenance-link",onClick:()=>X(H.sourceAgentId),children:H.label}):H.label]}):t.jsxs(t.Fragment,{children:["Created via ",H.label]}),H.parentTaskId&&t.jsxs(t.Fragment,{children:[" ","of"," ",t.jsx("button",{type:"button",className:"detail-provenance-link",onClick:()=>Cn(H.parentTaskId),children:H.parentTaskId})]}),H.contextInfo?t.jsxs(t.Fragment,{children:[" (",H.contextHref?t.jsx("a",{className:"detail-provenance-link detail-provenance-context",href:H.contextHref,target:"_blank",rel:"noopener noreferrer",title:H.contextInfoFull,children:H.contextInfo}):t.jsx("span",{className:"detail-provenance-context",title:H.contextInfoFull,children:H.contextInfo}),")"]}):""]})]}),(e.prInfo?.number||e.mergeDetails?.prNumber)&&t.jsxs("div",{className:"detail-provenance detail-pr-link-row",children:[t.jsx(Os,{"aria-hidden":"true"}),t.jsxs("span",{children:["PR"," ",e.prInfo?.url?t.jsxs("a",{className:"detail-provenance-link",href:e.prInfo.url,target:"_blank",rel:"noopener noreferrer",children:["#",e.prInfo.number]}):t.jsxs("span",{children:["#",e.prInfo?.number??e.mergeDetails?.prNumber]})]})]}),t.jsxs("div",{className:"detail-timestamps","aria-label":"Task timestamps",children:[t.jsxs("span",{className:"detail-timestamp-item",children:[t.jsx("span",{className:"detail-timestamp-label",children:"Created"})," ",t.jsx("time",{dateTime:e.createdAt,title:new Date(e.createdAt).toLocaleString(),children:yr(e.createdAt)})]}),t.jsx("span",{className:"detail-timestamp-separator","aria-hidden":"true",children:"·"}),t.jsxs("span",{className:"detail-timestamp-item",children:[t.jsx("span",{className:"detail-timestamp-label",children:"Updated"})," ",t.jsx("time",{dateTime:e.updatedAt,title:new Date(e.updatedAt).toLocaleString(),children:yr(e.updatedAt)})]})]})]})]}),e.status==="failed"&&e.error&&t.jsxs("div",{className:"detail-error-alert",children:[t.jsx("span",{className:"detail-error-icon",children:"⚠"}),t.jsxs("div",{className:"detail-error-content",children:[t.jsx("div",{className:"detail-error-title",children:"Task Failed"}),t.jsx("div",{className:"detail-error-message",children:e.error})]})]}),!mt&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"detail-tabs",children:[t.jsx("button",{className:`detail-tab${b==="definition"?" detail-tab-active":""}`,onClick:()=>y("definition"),children:"Definition"}),t.jsx("button",{className:`detail-tab${b==="logs"?" detail-tab-active":""}`,onClick:()=>y("logs"),children:"Logs"}),(e.column==="in-progress"||e.column==="in-review"||e.column==="done")&&t.jsx("button",{className:`detail-tab${b==="changes"?" detail-tab-active":""}`,onClick:()=>y("changes"),children:"Changes"}),t.jsx("button",{className:`detail-tab${b==="review"?" detail-tab-active":""}`,onClick:()=>y("review"),children:"Review"}),t.jsx("button",{className:`detail-tab${b==="comments"?" detail-tab-active":""}`,onClick:()=>y("comments"),children:"Comments"}),t.jsx("button",{className:`detail-tab${b==="documents"?" detail-tab-active":""}`,onClick:()=>y("documents"),children:"Documents"}),t.jsx("button",{className:`detail-tab${b==="model"?" detail-tab-active":""}`,onClick:()=>y("model"),children:"Model"}),t.jsx("button",{className:`detail-tab${b==="workflow"?" detail-tab-active":""}`,onClick:()=>y("workflow"),children:"Workflow"}),t.jsx("button",{className:`detail-tab${b==="stats"?" detail-tab-active":""}`,onClick:()=>y("stats"),children:"Stats"}),t.jsx("button",{className:`detail-tab${b==="routing"?" detail-tab-active":""}`,onClick:()=>y("routing"),children:"Routing"}),ys.map(({entry:K,tabId:Se})=>t.jsx("button",{className:`detail-tab${b===Se?" detail-tab-active":""}`,onClick:()=>y(Se),children:K.slot.label},`plugin-tab-${K.pluginId}-${Se}`))]}),b==="workflow"?t.jsx("div",{className:"detail-section",children:t.jsx(R$,{taskId:e.id,results:ee,loading:ft,enabledWorkflowSteps:O,canEdit:Je,projectId:n,isTaskInProgress:e.column==="in-progress"&&e.status!=="paused",onWorkflowStepsChange:U})}):b==="model"?t.jsx("div",{className:"detail-section",children:t.jsx(a$,{task:e,addToast:m,onTaskUpdated:h,settings:On})}):b==="logs"?t.jsxs("div",{className:`detail-section${M==="agent-log"?" detail-section--agent-log":""}`,children:[t.jsxs("div",{className:"log-subview-toggle",children:[t.jsx("button",{className:`log-subview-btn${M==="activity"?" log-subview-btn-active":""}`,onClick:()=>T("activity"),children:"Activity"}),t.jsx("button",{className:`log-subview-btn${M==="agent-log"?" log-subview-btn-active":""}`,onClick:()=>T("agent-log"),children:"Agent Log"})]}),M==="agent-log"?t.jsx(e$,{entries:Ti,loading:ir,executorModel:W$(e,Ti,Z,On),validatorModel:G$(e,Ti,Z,On),planningModel:J$(e,Ti,On),hasMore:ua,onLoadMore:Ki,loadingMore:bi,totalCount:ma}):t.jsxs("div",{className:"detail-activity",children:[t.jsx("h4",{children:"Activity"}),k.activityLogTruncatedCount?t.jsxs("div",{className:"detail-log-truncated",children:["Showing the most recent ",k.log.length," activity entries."]}):null,k.log&&k.log.length>0?t.jsx("div",{className:"detail-activity-list",ref:Hn,children:(()=>{let K=!1;return[...k.log].reverse().map((Se,yt)=>{const Ht=Se.action.match(Zv)??Se.action.match(Ef),Fn=!K&&F!=null&&Ht?.[1]===F;return Fn&&(K=!0),t.jsxs("div",{className:`detail-log-entry${Fn?" detail-log-entry--stall-highlight":""}`,"data-stall-highlight":Fn?"true":void 0,children:[t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-timestamp",children:yr(Se.timestamp)}),t.jsx("span",{className:"detail-log-action",children:Se.action})]}),Se.outcome&&t.jsx("div",{className:"detail-log-outcome",children:Se.outcome})]},yt)})})()}):t.jsx("div",{className:"detail-log-empty",children:"(no activity)"})]})]}):b==="changes"?t.jsx(k$,{taskId:e.id,worktree:e.worktree,projectId:n,column:e.column,mergeDetails:e.mergeDetails,modifiedFiles:e.modifiedFiles}):b==="review"?t.jsx(b$,{task:e,addToast:m,projectId:n,onTaskUpdated:h}):b==="comments"?t.jsx(d$,{task:e,addToast:m,projectId:n,onTaskUpdated:h}):b==="documents"?t.jsx(F$,{taskId:e.id,addToast:m,projectId:n,onTaskUpdated:h,canEdit:Je}):hs?t.jsx("div",{className:"detail-section",children:t.jsx(ya,{slotId:"task-detail-tab",projectId:n,pluginIds:[hs.entry.pluginId]})}):b==="stats"?t.jsx("div",{className:"detail-section",children:t.jsx(U$,{tokenUsage:k.tokenUsage,loading:C,task:k})}):b==="routing"?t.jsx("div",{className:"detail-section",children:t.jsx($$,{task:e,settings:On,addToast:m,onTaskUpdated:h})}):t.jsxs(t.Fragment,{children:[e.column==="done"&&e.summary&&t.jsxs("div",{className:"detail-section detail-summary",children:[t.jsx("h4",{children:"Summary"}),t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:_f,children:e.summary})})]}),t.jsx(v$,{task:e}),(Ge?.total??0)>0&&t.jsxs("div",{className:"detail-section detail-retries-section",children:[t.jsxs("div",{className:"detail-source-header",children:[t.jsxs("div",{className:"detail-source-summary",children:[t.jsx("span",{className:"detail-source-label",children:"Retries"}),t.jsx("span",{className:"detail-source-number",children:Ge?.total??0})]}),t.jsx("button",{type:"button",className:"detail-source-toggle","aria-expanded":G,"aria-label":G?"Collapse retries details":"Expand retries details",onClick:()=>ze(K=>!K),children:t.jsx(Wn,{size:16,className:G?"detail-source-chevron--expanded":void 0})})]}),G&&t.jsx("dl",{className:"detail-source-grid detail-retries-grid",children:Ft.map(K=>t.jsxs("div",{children:[t.jsx("dt",{title:K.title,children:K.label}),t.jsx("dd",{children:K.value})]},K.key))}),On?.maxTotalRetriesBeforeFail!=null&&(Ge?.total??0)>=On.maxTotalRetriesBeforeFail&&t.jsx("p",{className:"detail-retries-warning",children:"Retry cap reached for this task."})]}),e.sourceIssue&&t.jsxs("div",{className:"detail-section detail-source-section",children:[t.jsxs("div",{className:"detail-source-header",children:[t.jsxs("div",{className:"detail-source-summary",children:[t.jsx("span",{className:"detail-source-label",children:"Source issue"}),e.sourceIssue.provider.toLowerCase()==="github"&&t.jsxs("span",{className:"detail-source-provider-badge","aria-label":"GitHub source issue",children:[t.jsx(Os,{"aria-hidden":"true"}),t.jsx("span",{children:"GitHub"})]}),e.sourceIssue.url?t.jsx("a",{className:"detail-source-link detail-source-link--summary detail-source-number",href:e.sourceIssue.url,target:"_blank",rel:"noopener noreferrer",children:`(#${e.sourceIssue.issueNumber})`}):t.jsx("span",{className:"detail-source-number",children:`(#${e.sourceIssue.issueNumber})`})]}),t.jsx("button",{type:"button",className:"detail-source-toggle","aria-expanded":ct,"aria-label":ct?"Collapse source issue details":"Expand source issue details",onClick:()=>kt(K=>!K),children:t.jsx(Wn,{size:16,className:ct?"detail-source-chevron--expanded":void 0})})]}),ct&&t.jsxs("dl",{className:"detail-source-grid",children:[t.jsxs("div",{children:[t.jsx("dt",{children:"Provider"}),t.jsx("dd",{children:e.sourceIssue.provider})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"Repository"}),t.jsx("dd",{children:e.sourceIssue.repository})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"Issue Identifier"}),t.jsx("dd",{children:e.sourceIssue.externalIssueId})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"URL"}),t.jsx("dd",{children:e.sourceIssue.url?t.jsx("a",{className:"detail-source-link",href:e.sourceIssue.url,target:"_blank",rel:"noopener noreferrer",children:e.sourceIssue.url}):t.jsx("span",{className:"detail-source-empty",children:"(none)"})})]})]})]}),Fe&&t.jsxs("div",{className:"detail-section detail-github-tracking-section",children:[t.jsxs("div",{className:"detail-source-header",children:[t.jsxs("div",{className:"detail-source-summary",children:[t.jsx("span",{className:"detail-source-label",children:"GitHub tracking"}),t.jsxs("span",{className:"detail-source-provider-badge","aria-label":"GitHub tracking status",children:[t.jsx(Os,{"aria-hidden":"true"}),t.jsx("span",{children:tn})]}),!Lt&&t.jsx("span",{className:"detail-source-empty",children:ln?"Checking tracking status":At?"Issue not yet created":"Tracking is currently disabled"})]}),te&&t.jsx("button",{type:"button",className:"btn btn-sm btn-primary detail-github-tracking-enable","aria-label":"Enable GitHub tracking",disabled:on,onClick:()=>void as(),children:"Enable"}),Mn&&t.jsxs("span",{className:"detail-github-tracking-spinner",role:"status","aria-live":"polite","aria-label":on?"Enabling GitHub tracking":"Loading GitHub tracking status",children:[t.jsx(St,{size:16,className:"spin","aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:on?"Enabling GitHub tracking…":"Loading GitHub tracking status…"})]}),t.jsx("button",{type:"button",className:"detail-source-toggle","aria-expanded":Ut,"aria-label":Ut?"Collapse GitHub tracking details":"Expand GitHub tracking details",onClick:()=>gn(K=>!K),children:t.jsx(Wn,{size:16,className:Ut?"detail-source-chevron--expanded":void 0})})]}),Ut&&t.jsxs("div",{className:"detail-github-tracking-content",children:[Lt&&t.jsxs("dl",{className:"detail-source-grid detail-github-tracking-grid",children:[t.jsxs("div",{children:[t.jsx("dt",{children:"Issue"}),t.jsx("dd",{children:Lt.url?t.jsx("a",{className:"detail-source-link",href:Lt.url,target:"_blank",rel:"noopener noreferrer",children:`${Lt.owner}/${Lt.repo}#${Lt.number}`}):t.jsx("span",{children:`${Lt.owner}/${Lt.repo}#${Lt.number}`})})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"State"}),t.jsx("dd",{children:t.jsx("span",{className:`detail-github-issue-state ${e.issueInfo?.state==="closed"?"detail-github-issue-state--closed":"detail-github-issue-state--open"}`,children:e.issueInfo?.state??"open"})})]})]}),t.jsxs("div",{className:"detail-github-tracking-controls",children:[!Lt&&At&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm touch-target",onClick:()=>void Ss(),disabled:on||!kn,title:kn?void 0:"Add a title or description so a tracking issue can be created.",children:"Create tracking issue"}),!kn&&t.jsx("small",{className:"detail-github-tracking-helper",children:"Tracking issue will be created once this task has a title or description to summarize."})]}),pt&&t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"checkbox-label",htmlFor:"detail-github-tracking-toggle",children:[t.jsx("input",{id:"detail-github-tracking-toggle",type:"checkbox",checked:At,disabled:on,onChange:()=>void as()}),"Enable GitHub tracking"]}),t.jsxs("div",{className:"detail-github-tracking-repo-row",children:[t.jsx("input",{className:"input",value:In,onChange:K=>{Ne(K.target.value),Sn(null)},placeholder:is||"owner/repo"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void ps(),disabled:on,children:"Save"})]}),Gt&&t.jsx("small",{className:"detail-github-tracking-error",children:Gt}),Lt&&t.jsx("button",{className:"btn btn-sm touch-target",onClick:()=>void oi(),disabled:on,children:"Unlink GitHub issue"})]})]})]})]}),t.jsx("div",{className:"detail-section detail-agent-section",children:t.jsxs("div",{className:"detail-meta-row",children:[t.jsxs("div",{className:"detail-meta-left",children:[Hm.length>0&&t.jsx("span",{className:"detail-provider-icons","data-testid":"detail-provider-icons",children:Hm.map(K=>t.jsx(Kn,{provider:K,size:"sm"},K))}),t.jsxs("span",{className:"detail-meta-label",children:[t.jsx(es,{size:14,className:"detail-meta-label-icon"}),"Agent"]})]}),t.jsxs("div",{className:"detail-agent-actions",children:[Um?t.jsxs("span",{className:"detail-agent-chip",children:[t.jsx(es,{size:14}),Um,t.jsx("button",{className:"detail-agent-clear",onClick:()=>void Nt(),title:"Unassign agent",children:t.jsx(yn,{size:12})})]}):t.jsx("button",{className:"btn btn-sm",onClick:()=>{ne?L(!1):Te()},children:"Assign Agent"}),ne&&t.jsxs("div",{className:"agent-picker-dropdown",children:[Y&&t.jsx("div",{className:"agent-picker-loading",children:"Loading agents..."}),!Y&&ie.map(K=>t.jsxs("button",{className:`agent-picker-item${e.assignedAgentId===K.id?" selected":""}`,onClick:()=>void Qe(K.id),children:[t.jsx(es,{size:14}),t.jsx("span",{className:"agent-picker-name",children:K.name}),t.jsx("span",{className:"agent-picker-role",children:K.role})]},K.id)),!Y&&ie.length===0&&t.jsx("div",{className:"agent-picker-empty",children:"No agents available"})]})]})]})}),t.jsxs("div",{className:"detail-section detail-step-progress",children:[t.jsx("h4",{children:"Progress"}),k.steps&&k.steps.length>0?t.jsxs("div",{className:"step-progress-wrapper",children:[t.jsx("div",{className:"step-progress-bar",children:k.steps.map((K,Se)=>t.jsx("div",{className:`step-progress-segment step-progress-segment--${K.status}`,"data-tooltip":`${K.name} (${K.status})`,style:{backgroundColor:Y$(K.status)}},Se))}),t.jsxs("span",{className:"step-progress-label",children:[k.steps.filter(K=>K.status==="done").length,"/",k.steps.length," step",k.steps.length===1?"":"s"]})]}):t.jsx("div",{className:"step-progress-empty",children:"(no steps defined)"})]}),t.jsxs("div",{className:"detail-section",children:[!Ue&&t.jsx("div",{className:"detail-spec-edit-trigger",children:t.jsx("button",{className:"btn btn-sm",onClick:Be,children:"Edit"})}),Ue?t.jsxs("div",{className:"spec-editor-edit-mode",children:[t.jsx("textarea",{className:"spec-editor-textarea",value:dt,onChange:K=>Pe(K.target.value),onKeyDown:Qn,disabled:B,placeholder:"Enter task specification in Markdown...",rows:12}),t.jsxs("div",{className:"spec-editor-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:$t,disabled:B,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void bn(),disabled:dt===(k.prompt||"")||B,children:B?"Saving…":"Save"})]}),t.jsxs("div",{className:"spec-editor-hint",children:[t.jsx("kbd",{children:"Ctrl"}),"+",t.jsx("kbd",{children:"Enter"})," to save · ",t.jsx("kbd",{children:"Escape"})," to cancel"]}),t.jsxs("div",{className:"spec-editor-revision",children:[t.jsx("h4",{children:"Ask AI to Revise"}),t.jsx("p",{className:"spec-editor-revision-help",children:"Provide feedback for the AI to improve this specification. The task will move to planning for replanning."}),t.jsx("textarea",{className:"spec-editor-feedback",value:ce,onChange:K=>Ee(K.target.value),placeholder:"e.g., 'Add more details about error handling', 'Split this into smaller steps', 'Include tests for the API endpoints'...",disabled:je,rows:4,maxLength:2e3}),t.jsxs("div",{className:"spec-editor-revision-actions",children:[t.jsxs("span",{className:"spec-editor-char-count",children:[ce.length,"/2000"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void rs(),disabled:!ce.trim()||je,children:je?"Requesting…":"Request AI Revision"})]})]})]}):C?t.jsx("div",{className:"spec-loading",children:"Loading specification…"}):k.prompt?t.jsx("div",{className:"markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],components:_f,children:k.prompt.replace(/^#\s+[^\n]*\n+/,"")})}):t.jsx("div",{className:"detail-prompt",children:"(no prompt)"})]}),t.jsx("div",{className:"detail-section detail-no-commits-expected-section",children:t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{className:"checkbox-label",htmlFor:"detail-no-commits-expected-toggle",children:[t.jsx("input",{id:"detail-no-commits-expected-toggle",type:"checkbox",checked:gt,disabled:fn,onChange:()=>{da()}}),"No commits expected (decision-only task)"]}),t.jsx("small",{children:"Allows the task to complete without producing git commits. Use for evaluation, verification, or audit tasks where the deliverable is the recorded decision."})]})}),t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Attachments"}),E.length>0?t.jsx("div",{className:"detail-attachments-grid",children:E.map(K=>{const Se=Ci(`/api/tasks/${e.id}/attachments/${K.filename}`);return t.jsxs("div",{className:"detail-attachment-card",children:[t.jsx("a",{className:"detail-attachment-link",href:Se,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{src:Se,alt:K.originalName,className:"detail-attachment-image"})}),t.jsxs("div",{className:"detail-attachment-meta",children:[K.originalName," (",Q$(K.size),")"]}),t.jsx("button",{className:"detail-attachment-delete",onClick:()=>La(K.filename),title:"Delete attachment",children:"×"})]},K.filename)})}):t.jsx("div",{className:"detail-empty-inline",children:"(no attachments)"}),t.jsx("input",{className:"detail-hidden-file-input",ref:Gi,type:"file",accept:"image/*",onChange:dr}),t.jsx("button",{className:"btn btn-sm",onClick:()=>Gi.current?.click(),disabled:$,children:$?"Uploading…":"Attach Screenshot"})]}),t.jsxs("div",{className:"detail-deps",children:[t.jsx("h4",{children:"Dependencies"}),q.length>0?t.jsx("ul",{className:"detail-dep-list",children:q.map(K=>{const Se=s.find(Ht=>Ht.id===K),yt=Se?.title||Se?.description||K;return t.jsxs("li",{className:"detail-dep-item",children:[t.jsxs("span",{className:"detail-dep-link",onClick:()=>Cn(K),onKeyDown:Ht=>{(Ht.key==="Enter"||Ht.key===" ")&&(Ht.preventDefault(),Cn(K))},role:"link",tabIndex:0,title:`Click to view ${K}`,children:[t.jsx("span",{className:"detail-dep-id",children:K}),t.jsx("span",{className:"detail-dep-label",children:Bd(yt,40)})]}),t.jsx("button",{className:"dep-remove-btn",onClick:Ht=>Kt(Ht,K),title:`Remove dependency ${K}`,children:"×"})]},K)})}):t.jsx("div",{className:"detail-empty-inline",children:"(no dependencies)"}),k.overlapBlockedBy&&t.jsxs("div",{className:"detail-empty-inline",children:["File scope overlap blocker: ",k.overlapBlockedBy,!io&&" (stale)"]}),t.jsxs("div",{className:"dep-trigger-wrap",children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{fe&&re(""),Ce(K=>!K)},children:"Add Dependency"}),fe&&(()=>{const K=Ae.toLowerCase(),Se=K?Xn.filter(yt=>yt.id.toLowerCase().includes(K)||yt.title&&yt.title.toLowerCase().includes(K)||yt.description&&yt.description.toLowerCase().includes(K)):Xn;return t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:Ae,onChange:yt=>re(yt.target.value),onClick:yt=>yt.stopPropagation()}),Se.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):Se.map(yt=>t.jsxs("div",{className:"dep-dropdown-item",onClick:()=>{vn(yt.id),Ce(!1)},children:[t.jsx("span",{className:"dep-dropdown-id",children:yt.id}),t.jsx("span",{className:"dep-dropdown-title",children:Bd(yt.title||yt.description||yt.id,30)})]},yt.id))]})})()]})]}),t.jsxs("div",{className:"detail-deps detail-blocking",children:[t.jsx("h4",{children:"Blocking"}),os&&t.jsx("div",{className:"detail-empty-inline",children:wi}),Bs.length>0?t.jsx("ul",{className:"detail-dep-list",children:Bs.map(K=>t.jsxs("li",{className:"detail-dep-item",children:[t.jsxs("span",{className:"detail-dep-link",onClick:()=>Cn(K.id),onKeyDown:Se=>{(Se.key==="Enter"||Se.key===" ")&&(Se.preventDefault(),Cn(K.id))},role:"link",tabIndex:0,title:`Click to view ${K.id}`,children:[t.jsx("span",{className:"detail-dep-id",children:K.id}),t.jsx("span",{className:"detail-dep-label",children:Bd(K.label,40)})]}),K.stale&&t.jsx("span",{className:"detail-blocking-item--stale",title:"Stale blockedBy edge: self-healing clearStaleBlockedBy should clear this automatically",children:"(stale)"})]},K.id))}):t.jsx("div",{className:"detail-empty-inline",children:"(no downstream tasks blocked)"})]}),k.ageStaleness&&(()=>{const K=kx(k.ageStaleness);return K?t.jsxs("div",{className:"detail-section",children:[t.jsx("div",{className:"detail-sidebar-title",children:"Task age staleness"}),t.jsx("div",{children:K.headline}),t.jsx("div",{className:"detail-description",children:K.description}),t.jsxs("div",{className:"detail-in-review-stall-meta",children:[t.jsxs("span",{children:["Column ",k.ageStaleness.column]}),t.jsxs("span",{children:["Age ",bo(k.ageStaleness.ageMs)]}),t.jsxs("span",{children:["Warning ",bo(k.ageStaleness.warningThresholdMs)]}),t.jsxs("span",{children:["Critical ",bo(k.ageStaleness.criticalThresholdMs)]}),t.jsxs("span",{children:["Observed ",yr(k.ageStaleness.observedAt)]}),t.jsx("span",{children:k.ageStaleness.paused?"Paused":"Active"})]})]}):null})(),e.column==="in-review"&&t.jsxs(t.Fragment,{children:[vx(k)&&k.inReviewStall&&(()=>{const K=xx(k.inReviewStall,{mergeRetries:k.mergeRetries,maxAutoMergeRetries:Tc}),Se=H$(k,k.inReviewStall.code);return t.jsxs("div",{className:`detail-section detail-in-review-stall detail-in-review-stall--${K.code}`,"data-stall-code":K.code,children:[t.jsxs("div",{className:"detail-in-review-stall-header",children:[t.jsxs("span",{className:"card-status-badge card-status-badge--in-review in-review-stall",children:[K.badgeLabel,K.counter?` ${K.counter}`:""]}),t.jsx("span",{className:"detail-in-review-stall-headline",children:K.headline})]}),t.jsx("div",{className:"detail-in-review-stall-reason",children:k.inReviewStall.reason}),t.jsx("div",{className:"detail-in-review-stall-description",children:K.description}),t.jsx("div",{className:"detail-in-review-stall-action",children:K.suggestedAction}),t.jsxs("div",{className:"detail-in-review-stall-meta",children:[t.jsxs("span",{children:["Observed ",yr(k.inReviewStall.observedAt)]}),Se?t.jsx("button",{type:"button",className:"btn btn-sm detail-in-review-stall-jump",onClick:()=>{y("logs"),T("activity"),W(k.inReviewStall?.code??null)},children:"View activity log"}):t.jsx("span",{className:"detail-in-review-stall-no-log",title:"No 'In-review stall surfaced' entry on this task yet — self-healing may not have logged one within its rate-limit window.",children:"No log entry yet"})]})]})})(),wx(k)&&k.stalePausedReview&&(()=>{const K=yx(k.stalePausedReview),Se=[...k.log??[]].reverse().find(yt=>yt.action.match(Ef)?.[1]===k.stalePausedReview?.code);return t.jsxs("div",{className:`detail-section detail-in-review-stall detail-in-review-stall--${K.code}`,"data-stall-code":K.code,children:[t.jsxs("div",{className:"detail-in-review-stall-header",children:[t.jsx("span",{className:"card-status-badge card-status-badge--in-review stale-paused-review",children:K.badgeLabel}),t.jsx("span",{className:"detail-in-review-stall-headline",children:K.headline})]}),t.jsx("div",{className:"detail-in-review-stall-reason",children:k.stalePausedReview.reason}),t.jsx("div",{className:"detail-in-review-stall-description",children:K.description}),t.jsx("div",{className:"detail-in-review-stall-action",children:K.suggestedAction}),t.jsxs("div",{className:"detail-in-review-stall-meta",children:[t.jsxs("span",{children:["Age ",bo(k.stalePausedReview.ageMs)]}),t.jsxs("span",{children:["Threshold ",bo(k.stalePausedReview.thresholdMs)]}),t.jsxs("span",{children:["Observed ",yr(k.stalePausedReview.observedAt)]}),Se?t.jsx("button",{type:"button",className:"btn btn-sm detail-in-review-stall-jump",onClick:()=>{y("logs"),T("activity"),W(k.stalePausedReview?.code??null)},children:"View activity log"}):t.jsx("span",{className:"detail-in-review-stall-no-log",children:"No log entry yet"})]})]})})(),t.jsx("div",{className:"detail-section detail-pr-section",children:t.jsx(o$,{taskId:e.id,projectId:n,prInfo:e.prInfo,automationStatus:e.status??null,autoMerge:On?.autoMerge??!1,isManualPrFlow:Km,prAuthAvailable:f??!1,onPrCreated:K=>{e.prInfo=K},onPrUpdated:K=>{e.prInfo=K},addToast:m})})]})]})]})]}),t.jsx("div",{className:"modal-actions",children:mt?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"modal-edit-hint",children:ri==="saving"?"Autosaving…":ri==="saved"?"Saved":ri==="error"?"Save failed":"Changes autosave as you edit"}),t.jsx("div",{className:"modal-actions-spacer"}),t.jsx("button",{className:"btn btn-sm",onClick:Wi,disabled:be,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void Ra(),disabled:be,children:be?"Saving…":"Save"})]}):t.jsxs(t.Fragment,{children:[e.column==="triage"&&e.status==="awaiting-approval"&&k.prompt&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-primary btn-sm",onClick:Pa,children:"Approve Plan"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:$a,children:"Reject Plan"})]}),e.column==="triage"&&e.status!=="awaiting-approval"&&!R&&t.jsx("button",{className:"btn btn-sm btn-danger",onClick:ha,"aria-label":"Delete task",title:"Delete task",children:"Delete"}),(e.column!=="triage"||e.status==="awaiting-approval"||R||xi)&&t.jsxs("div",{className:"detail-actions-dropdown",ref:ns,children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>{st(K=>!K),Un(!1)},"aria-haspopup":"menu","aria-expanded":de,children:["Actions",t.jsx(jn,{size:12})]}),de&&t.jsxs("div",{className:"detail-actions-menu",role:"menu",children:[t.jsx("button",{className:"detail-actions-menu-item detail-actions-menu-item-danger",role:"menuitem",onClick:()=>vi(ha),children:"Delete"}),u&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(or),children:"Duplicate"}),(e.column==="done"||e.column==="in-review")&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(Da),children:"Refine"}),t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(lr),children:"Respecify"}),R&&c&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(ar),children:"Retry"}),d&&e.column!=="done"&&e.column!=="archived"&&t.jsx("button",{className:"detail-actions-menu-item detail-actions-menu-item-danger",role:"menuitem",onClick:()=>vi(rr),children:"Reset"}),e.column!=="done"&&!e.assignedAgentId&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(Ta),children:xi?"Unpause":"Pause"}),e.column!=="done"&&e.paused&&e.pausedByAgentId&&t.jsx("span",{className:"detail-actions-menu-item detail-actions-menu-note",role:"note",children:"Paused by agent"})]})]}),t.jsx("div",{className:"modal-actions-spacer"}),t.jsx("div",{className:"detail-move-dropdown",ref:Pt,children:e.column==="in-review"?t.jsxs("div",{className:"detail-move-actions-in-review",children:[t.jsxs("div",{children:[t.jsxs("button",{ref:qn,className:"btn btn-primary btn-sm detail-move-btn",onClick:Wm,onKeyDown:Gm,disabled:!Us,"aria-label":Us?`Move to ${gs[Us]}`:void 0,"aria-haspopup":li?"menu":void 0,"aria-expanded":li?mn:void 0,children:[t.jsxs("span",{className:"detail-move-btn__label",children:["Move to ",Us?gs[Us]:""]}),li&&t.jsx("span",{className:"detail-move-btn__arrow","aria-hidden":"true",children:t.jsx(jn,{size:12})})]}),mn&&li&&t.jsx("div",{className:"detail-move-menu",role:"menu",onKeyDown:ul,children:Uc.map(K=>t.jsx("button",{className:"detail-move-menu-item",role:"menuitem",onClick:()=>Yi(K),onKeyDown:ul,children:K==="in-progress"?"Back to In Progress":`Move to ${gs[K]}`},K))})]}),Hc?t.jsx("button",{className:"btn btn-primary btn-sm",disabled:!0,children:Hc}):t.jsx("button",{className:"btn btn-primary btn-sm",onClick:so,children:ml})]}):t.jsxs("div",{children:[t.jsxs("button",{ref:qn,className:"btn btn-primary btn-sm detail-move-btn",onClick:Wm,onKeyDown:Gm,disabled:!Us,"aria-label":Us?`Move to ${gs[Us]}`:void 0,"aria-haspopup":li?"menu":void 0,"aria-expanded":li?mn:void 0,children:[t.jsxs("span",{className:"detail-move-btn__label",children:["Move to ",Us?gs[Us]:""]}),li&&t.jsx("span",{className:"detail-move-btn__arrow","aria-hidden":"true",children:t.jsx(jn,{size:12})})]}),mn&&li&&t.jsx("div",{className:"detail-move-menu",role:"menu",onKeyDown:ul,children:Uc.map(K=>t.jsxs("button",{className:"detail-move-menu-item",role:"menuitem",onClick:()=>Yi(K),onKeyDown:ul,children:["Move to ",gs[K]]},K))})]})})]})}),Oe&&t.jsx("div",{className:"modal-overlay open detail-refine-overlay",onClick:Qi,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal detail-refine-modal",onClick:K=>K.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{className:"detail-refine-title",children:"Refine"}),t.jsx("button",{className:"modal-close",onClick:Qi,"aria-label":"Close",children:"×"})]}),t.jsxs("div",{className:"detail-body",children:[t.jsx("p",{className:"detail-refine-help",children:"Describe what needs to be refined or improved..."}),t.jsx("textarea",{className:"detail-refine-textarea",value:Ve,onChange:K=>ge(K.target.value),placeholder:"Enter your feedback here...",rows:6,maxLength:2e3,autoFocus:!0}),t.jsxs("div",{className:"detail-refine-input-group",children:[t.jsxs("div",{className:"detail-refine-char-count",children:[Ve.length,"/2000 characters"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:cr,disabled:!Ve.trim()||me,children:me?"Creating...":"Create Refinement Task"})]})]}),t.jsx("div",{className:"modal-actions",children:t.jsx("button",{className:"btn btn-sm",onClick:Qi,disabled:me,children:"Cancel"})})]})}),A&&t.jsx(i.Suspense,{fallback:null,children:t.jsx(n4,{agentId:A,projectId:n,onClose:()=>X(null),addToast:m})})]})}function r4({onClose:e,...n}){const s=i.useRef(null);qi(s,!0,"task-detail-modal-size"),_i(!0);const a=ra(e);return t.jsx("div",{className:"modal-overlay open",...a,role:"dialog","aria-modal":"true",children:t.jsx("div",{className:"modal modal-lg task-detail-modal",ref:s,children:t.jsx(ty,{...n,onRequestClose:e})})})}const Al={triage:"var(--triage)",todo:"var(--todo)","in-progress":"var(--in-progress)","in-review":"var(--in-review)",done:"var(--done)",archived:"var(--text-dim)"},Rf=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]);function If(e){return e==="merging-fix"?"Merging fixes…":e}const ny=["title","status","column","retries","dependencies","progress"],o4=["title","status","column","retries"];function l4(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}function c4(e){return e==="online"?"●":e==="connecting"?"◐":e==="error"?"✕":"○"}function Tf(e){try{const n=Gn("kb-dashboard-list-columns",e);if(n){const a=JSON.parse(n).filter(r=>ny.includes(r));if(a.length>0)return new Set(a)}}catch{}return new Set(o4)}function Pf(e){try{const n=Gn("kb-dashboard-hide-done",e);if(n!==null)return n==="true"}catch{}return!1}function $f(e){try{const n=Gn("kb-dashboard-stale-only-filter",e);if(n!==null)return n==="true"}catch{}return!1}function Df(e){try{const n=Gn("kb-dashboard-list-collapsed",e);if(n){const a=JSON.parse(n).filter(r=>va.includes(r));if(a.length>0)return new Set(a)}}catch{}return new Set}function Lf(e){try{const n=Gn("kb-dashboard-selected-tasks",e);if(n){const s=JSON.parse(n);return new Set(s)}}catch{}return new Set}function Of(e){try{const n=Gn("kb-dashboard-list-selected-task",e);if(typeof n=="string"&&n.trim().length>0)return n}catch{}return null}function Ff(e){try{const s=Gn("kb-dashboard-list-sidebar-width",e);if(!s)return 400;const a=Number(s);if(Number.isFinite(a)&&a>0)return a}catch{}return 400}const mc=280,Bu=.65,Rl=16;function Uu(e){return Math.max(mc,e*Bu)}function Il(e,n){const s=Uu(n);return Math.min(Math.max(e,mc),s)}function d4(e){return e.status==="executing"||e.column==="in-progress"}function zf(e){const n=jx(e);return n.total===0||!d4(e)?{label:"-",percent:0,hasProgress:!1}:{label:`${n.completed}/${n.total}`,percent:n.completed/n.total*100,hasProgress:!0}}function u4({tasks:e,onMoveTask:n,onRetryTask:s,onDeleteTask:a,onPauseTask:r,onUnpauseTask:o,onArchiveTask:l,onMergeTask:c,onResetTask:d,onDuplicateTask:u,onOpenDetail:h,addToast:m,globalPaused:f,onNewTask:p,onQuickCreate:g,availableModels:w,favoriteProviders:v=[],favoriteModels:b=[],onToggleFavorite:y,onToggleModelFavorite:N,onPlanningMode:S,onSubtaskBreakdown:C,onTasksUpdated:x,projectId:k,projectName:R,taskStuckTimeoutMs:z,searchQuery:_="",lastFetchTimeMs:A,prAuthAvailable:X}){const[H,M]=i.useState(null),[T,F]=i.useState("asc"),[W,oe]=i.useState(null),[D,E]=i.useState(null),[P,$]=i.useState(null),q=ii()==="mobile",{confirm:le}=ai(),[fe,Ce]=i.useState(()=>Tf(k)),[Ae,re]=i.useState(()=>Pf(k)),[Z,pe]=i.useState(()=>$f(k)),[ie,ve]=i.useState(!1),[ne,L]=i.useState(()=>Df(k));i.useEffect(()=>{typeof window<"u"&&cs("kb-dashboard-list-columns",JSON.stringify([...fe]),k)},[k,fe]),i.useEffect(()=>{typeof window<"u"&&cs("kb-dashboard-hide-done",Ae.toString(),k)},[Ae,k]),i.useEffect(()=>{typeof window<"u"&&cs("kb-dashboard-stale-only-filter",Z.toString(),k)},[k,Z]),i.useEffect(()=>{typeof window<"u"&&cs("kb-dashboard-list-collapsed",JSON.stringify([...ne]),k)},[ne,k]);const[Y,ue]=i.useState(!1),[B,xe]=i.useState(!1),[je,se]=i.useState(()=>Lf(k)),[Ue,De]=i.useState(()=>Of(k)),[dt,Pe]=i.useState(null),[ce,Ee]=i.useState(()=>Ff(k)),Oe=i.useRef(null),ht=i.useRef(null);i.useEffect(()=>{Ce(Tf(k)),re(Pf(k)),pe($f(k)),ve(!1),L(Df(k)),se(Lf(k));const be=Of(k);De(be),Pe(be?e.find(Re=>Re.id===be)??null:null),Ee(Ff(k))},[k,e]),i.useEffect(()=>{typeof window<"u"&&cs("kb-dashboard-selected-tasks",JSON.stringify([...je]),k)},[k,je]),i.useEffect(()=>{if(!(typeof window>"u")){if(Ue){cs("kb-dashboard-list-selected-task",Ue,k);return}Qa("kb-dashboard-list-selected-task",k)}},[k,Ue]),i.useEffect(()=>{if(!Ue){Pe(null);return}const be=e.find(Re=>Re.id===Ue);be&&Pe(Re=>!Re||Re.id!==Ue?be:{...Re,...be})},[Ue,e]),i.useEffect(()=>{if(q||typeof ResizeObserver>"u")return;const be=Oe.current;if(!be)return;const Re=()=>{const ut=Il(ce,be.clientWidth);ut!==ce&&Ee(ut)};Re();const nt=new ResizeObserver(Re);return nt.observe(be),()=>nt.disconnect()},[q,ce]),i.useEffect(()=>{if(q||typeof ResizeObserver>"u")return;const be=ht.current,Re=Oe.current;if(!be||!Re)return;let nt=null,ut=be.offsetWidth;const Ye=new ResizeObserver(()=>{const lt=Il(be.offsetWidth,Re.clientWidth);lt!==ut&&(ut=lt,nt&&clearTimeout(nt),nt=setTimeout(()=>{try{cs("kb-dashboard-list-sidebar-width",String(lt),k)}catch{}},200))});return Ye.observe(be),()=>{Ye.disconnect(),nt&&clearTimeout(nt)}},[q,k]);const Ve=i.useCallback(()=>{xe(be=>(be&&se(new Set),!be))},[]),ge=i.useCallback(be=>{se(Re=>{const nt=new Set(Re);return nt.has(be)?nt.delete(be):nt.add(be),nt})},[]),me=i.useCallback(()=>{se(new Set)},[]),$e=i.useCallback(be=>{Ce(Re=>{const nt=new Set(Re);return nt.has(be)?nt.size>1&&nt.delete(be):nt.add(be),nt})},[]),mt={title:"Title",status:"Status",column:"Column",dependencies:"Dependencies",progress:"Progress",retries:"Retries"},jt=i.useCallback(be=>{if(H===be){F(Re=>Re==="asc"?"desc":"asc");return}M(be),F("asc")},[H]),tt=i.useCallback(be=>{$(Re=>Re===be?null:be)},[]),bt=i.useCallback(be=>{L(Re=>{const nt=new Set(Re);return nt.has(be)?nt.delete(be):nt.add(be),nt})},[]),Ie=i.useCallback(()=>{$(null)},[]),Xe=i.useMemo(()=>{let be=_?e.filter(ut=>ut.id.toLowerCase().includes(_.toLowerCase())||ut.title&&ut.title.toLowerCase().includes(_.toLowerCase())||ut.description.toLowerCase().includes(_.toLowerCase())):[...e];Ae&&!P&&(be=be.filter(ut=>ut.column!=="done"&&ut.column!=="archived")),Z&&(be=be.filter(ut=>ut.ageStaleness!=null)),ie&&(be=be.filter(ut=>ut.stalePausedReview!=null));const Re=P?be.filter(ut=>ut.column===P):be,nt={triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]};Re.forEach(ut=>{const Ye=im(ut.column)?ut.column:tc;nt[Ye].push(ut)});for(const ut of va){if(!H){nt[ut]=fx(nt[ut],ut);continue}nt[ut]=[...nt[ut]].sort((Ye,lt)=>{let wt=0;switch(H){case"title":wt=(Ye.title||Ye.description).localeCompare(lt.title||lt.description);break;case"status":wt=(Ye.status||"").localeCompare(lt.status||"");break;case"column":wt=Ye.column.localeCompare(lt.column);break;case"retries":wt=(Ye.retrySummary?.total??0)-(lt.retrySummary?.total??0);break}return T==="asc"?wt:-wt})}return nt},[e,_,H,T,Ae,Z,ie,P]),rt=i.useMemo(()=>Object.values(Xe).reduce((be,Re)=>be+Re.length,0),[Xe]),It=i.useMemo(()=>e.filter(be=>be.column==="done"||be.column==="archived").length,[e]),_t=i.useMemo(()=>Ae?It:0,[Ae,It]),We=i.useCallback(()=>{const be=Object.values(Xe).flat().filter(Re=>Re.column!=="archived").map(Re=>Re.id);se(Re=>{if(be.every(ut=>Re.has(ut))){const ut=new Set(Re);return be.forEach(Ye=>ut.delete(Ye)),ut}else return new Set([...Re,...be])})},[Xe]),J=i.useMemo(()=>{const be=Object.values(Xe).flat().filter(Re=>Re.column!=="archived");return be.length===0?!1:be.every(Re=>je.has(Re.id))},[Xe,je]),ke=i.useMemo(()=>{const be=Object.values(Xe).flat().filter(nt=>nt.column!=="archived");if(be.length===0)return!1;const Re=be.filter(nt=>je.has(nt.id)).length;return Re>0&&Re<be.length},[Xe,je]),[ot,ye]=i.useState("__no_change__"),[it,He]=i.useState("__no_change__"),[he,et]=i.useState("__no_change__"),[vt,Ct]=i.useState([]),[Et,Tt]=i.useState(!1),Jt=i.useMemo(()=>he&&he!=="__no_change__"?vt.find(be=>be.id===he):void 0,[vt,he]),[cn,Vt]=i.useState(!1);i.useEffect(()=>{if(je.size===0)return;let be=!1;return(async()=>{Tt(!0);try{const nt=await ac();be||Ct(nt)}catch(nt){console.error("Failed to fetch nodes for bulk edit",nt),be||Ct([])}finally{be||Tt(!1)}})(),()=>{be=!0}},[je.size]);const hn=i.useCallback(async()=>{if(je.size===0)return;const be=Array.from(je).map(Q=>e.find(ae=>ae.id===Q)).filter(Q=>!!Q),Re=be.filter(Q=>Q.column==="archived"),nt=be.filter(Q=>Q.column!=="archived");if(nt.length===0){m("No selected tasks can be deleted (archived tasks are excluded)","error");return}if(!await le({title:"Delete Selected Tasks",message:`Delete ${nt.length} selected task${nt.length===1?"":"s"}?`,confirmLabel:"Delete",cancelLabel:"Cancel",danger:!0}))return;Vt(!0);const Ye=[],lt=[],wt=Re.map(Q=>Q.id);try{for(const Q of nt)try{await a(Q.id),Ye.push(Q.id)}catch(ae){const Ke=fm(ae);if(!Ke){lt.push(Q.id);continue}if(!await le({title:"Force Delete Task",message:`Task ${Q.id} has dependents: ${Ke.dependentIds.join(", ")}. Remove dependency references and force delete?`,confirmLabel:"Force Delete",cancelLabel:"Skip",danger:!0})){lt.push(Q.id);continue}try{await a(Q.id,{removeDependencyReferences:!0}),Ye.push(Q.id)}catch{lt.push(Q.id)}}}finally{Vt(!1)}Ye.length>0&&se(Q=>{const ae=new Set(Q);for(const Ke of Ye)ae.delete(Ke);return ae}),m(`Deleted ${Ye.length} task${Ye.length===1?"":"s"} · ${wt.length} archived skipped · ${lt.length} failed`,lt.length>0?"error":"success")},[m,le,a,je,e]),dn=i.useCallback(async()=>{if(je.size===0)return;if(!r){m("Pause action is unavailable","error");return}const be=Array.from(je).map(lt=>e.find(wt=>wt.id===lt)).filter(lt=>!!lt),Re=be.filter(lt=>lt.column!=="archived"&<.paused!==!0),nt=be.length-Re.length;if(Re.length===0){m("No selected tasks can be paused","error");return}Vt(!0);const ut=[],Ye=[];try{for(const lt of Re)try{await r(lt.id),ut.push(lt.id)}catch{Ye.push(lt.id)}}finally{Vt(!1)}ut.length>0&&se(lt=>{const wt=new Set(lt);for(const Q of ut)wt.delete(Q);return wt}),m(`Paused ${ut.length} · ${nt} skipped · ${Ye.length} failed`,Ye.length>0?"error":"success")},[m,r,je,e]),An=i.useCallback(async()=>{if(je.size===0)return;if(!o){m("Unpause action is unavailable","error");return}const be=Array.from(je).map(lt=>e.find(wt=>wt.id===lt)).filter(lt=>!!lt),Re=be.filter(lt=>lt.column!=="archived"&<.paused===!0),nt=be.length-Re.length;if(Re.length===0){m("No selected tasks can be unpaused","error");return}Vt(!0);const ut=[],Ye=[];try{for(const lt of Re)try{await o(lt.id),ut.push(lt.id)}catch{Ye.push(lt.id)}}finally{Vt(!1)}ut.length>0&&se(lt=>{const wt=new Set(lt);for(const Q of ut)wt.delete(Q);return wt}),m(`Unpaused ${ut.length} · ${nt} skipped · ${Ye.length} failed`,Ye.length>0?"error":"success")},[m,o,je,e]),nn=i.useCallback(async()=>{if(je.size===0)return;if(!l){m("Archive action is unavailable","error");return}const be=Array.from(je).map(wt=>e.find(Q=>Q.id===wt)).filter(wt=>!!wt),Re=be.filter(wt=>wt.column==="done"),nt=be.length-Re.length;if(Re.length===0){m("No selected tasks can be archived (only done tasks)","error");return}if(!await le({title:"Archive Selected Tasks",message:`Archive ${Re.length} selected task${Re.length===1?"":"s"}?`,confirmLabel:"Archive",cancelLabel:"Cancel",danger:!1}))return;Vt(!0);const Ye=[],lt=[];try{for(const wt of Re)try{await l(wt.id),Ye.push(wt.id)}catch{lt.push(wt.id)}}finally{Vt(!1)}Ye.length>0&&se(wt=>{const Q=new Set(wt);for(const ae of Ye)Q.delete(ae);return Q}),m(`Archived ${Ye.length} · ${nt} skipped · ${lt.length} failed`,lt.length>0?"error":"success")},[m,le,l,je,e]),Dn=i.useCallback(async()=>{if(je.size===0)return;const be=Array.from(je).filter(nt=>{const ut=e.find(Ye=>Ye.id===nt);return ut&&ut.column!=="archived"});if(be.length===0){m("No valid tasks to update (archived tasks cannot be modified)","error");return}const Re={taskIds:be};if(ot!=="__no_change__")if(ot==="")Re.modelProvider=null,Re.modelId=null;else{const nt=ot.indexOf("/");nt!==-1&&(Re.modelProvider=ot.slice(0,nt),Re.modelId=ot.slice(nt+1))}if(it!=="__no_change__")if(it==="")Re.validatorModelProvider=null,Re.validatorModelId=null;else{const nt=it.indexOf("/");nt!==-1&&(Re.validatorModelProvider=it.slice(0,nt),Re.validatorModelId=it.slice(nt+1))}if(he!=="__no_change__"&&(he===""?Re.nodeId=null:Re.nodeId=he),Object.keys(Re).length===1){m("No changes to apply","info");return}Vt(!0);try{const nt=await GN(Re.taskIds,Re.modelProvider,Re.modelId,Re.validatorModelProvider,Re.validatorModelId,void 0,void 0,Re.nodeId,k);x&&x(nt.updated),m(`Updated ${be.length} task${be.length===1?"":"s"}`,"success"),me(),ye("__no_change__"),He("__no_change__"),et("__no_change__")}catch(nt){m(Me(nt)||"Failed to update models","error")}finally{Vt(!1)}},[je,e,ot,it,he,k,m,me,x]),Nn=i.useCallback(be=>{if(q){h(be,{origin:"list-mobile"});return}De(be.id),Pe(be)},[q,h]),zt=i.useRef(null),sn=i.useRef(null);i.useEffect(()=>()=>{zt.current&&clearTimeout(zt.current)},[]);const xn=i.useCallback(be=>{if(De(be.id),Pe(be),"prompt"in be){sn.current=null,zt.current&&(clearTimeout(zt.current),zt.current=null);return}sn.current=be.id,zt.current&&clearTimeout(zt.current),zt.current=setTimeout(()=>{zt.current=null,sn.current===be.id&&Ja(be.id,k).then(nt=>{sn.current===nt.id&&Pe(ut=>!ut||ut.id!==nt.id?ut:{...ut,...nt})}).catch(()=>{})},200)},[k]),Xt=i.useCallback((be,Re)=>{if(Re.paused){be.preventDefault();return}be.dataTransfer.setData("text/plain",Re.id),be.dataTransfer.effectAllowed="move",oe(Re.id)},[]),Yt=i.useCallback(()=>{oe(null),E(null)},[]),rn=i.useCallback(be=>{if(q)return;be.preventDefault();const Re=Oe.current;if(!Re)return;const nt=Re.getBoundingClientRect(),ut=lt=>{const wt=lt.clientX-nt.left;Ee(Il(wt,nt.width))},Ye=()=>{window.removeEventListener("mousemove",ut),window.removeEventListener("mouseup",Ye)};window.addEventListener("mousemove",ut),window.addEventListener("mouseup",Ye)},[q]),Zt=i.useCallback(be=>{if(q)return;const Re=Oe.current?.clientWidth??0,nt=ce/Bu+Rl,ut=Math.max(Re,nt),Ye=Uu(ut);if(be.key==="ArrowLeft"||be.key==="ArrowRight"){be.preventDefault();const lt=be.key==="ArrowLeft"?-Rl:Rl;Ee(wt=>Il(wt+lt,ut));return}if(be.key==="Home"){be.preventDefault(),Ee(mc);return}be.key==="End"&&(be.preventDefault(),Ee(Ye))},[q,ce]),en=i.useCallback((be,Re)=>{be.preventDefault(),be.dataTransfer.dropEffect="move",E(Re)},[]),un=i.useCallback(()=>{E(null)},[]),Qt=i.useCallback(async(be,Re)=>{be.preventDefault(),E(null);const nt=be.dataTransfer.getData("text/plain");if(nt){if(Re==="archived"){m("Tasks can only be archived via the archive button","error");return}try{const Ye=e.find(Q=>Q.id===nt)?.steps.some(Q=>Q.status!=="pending")??!1,lt=(Re==="todo"||Re==="triage")&&Ye;let wt;if(lt){if(await le({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))wt={preserveProgress:!0};else if(!await le({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await n(nt,Re,wt)}catch(ut){m(Me(ut),"error")}}},[n,m,e,le]),pn=be=>!H||H!==be?t.jsx(Cb,{size:14,className:"sort-icon"}):T==="asc"?t.jsx(Va,{size:14,className:"sort-icon active"}):t.jsx(Yo,{size:14,className:"sort-icon active"}),Dt=be=>t.jsxs("div",{id:be,className:"list-view-options-panel",children:[t.jsx("div",{className:"list-view-options-columns",children:ny.map(Re=>{const nt=fe.has(Re),ut=nt&&fe.size===1;return t.jsxs("label",{className:`list-column-dropdown-item${ut?" disabled":""}`,title:ut?"At least one column must be visible":"",children:[t.jsx("input",{type:"checkbox",checked:nt,onChange:()=>$e(Re),disabled:ut}),t.jsx("span",{children:mt[Re]})]},Re)})}),t.jsxs("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>re(Re=>!Re),"aria-pressed":Ae,title:Ae?"Show done tasks":"Hide done tasks",children:[Ae?t.jsx(Gr,{size:14}):t.jsx(Zu,{size:14}),Ae?"Show Done":"Hide Done"]}),t.jsx("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>pe(Re=>!Re),"aria-pressed":Z,title:Z?"Show all tasks":"Show stale tasks only",children:Z?"Show all":"Stale only"}),t.jsx("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>ve(Re=>!Re),"aria-pressed":ie,title:ie?"Show all tasks":"Show stale paused review tasks only",children:ie?"Show all":"Stale paused review"}),t.jsx("div",{className:"list-drop-zones list-drop-zones--sidebar",children:va.map(Re=>{const nt=e.filter(wt=>wt.column===Re).length,ut=Re==="done"||Re==="archived",Ye=Ae&&ut?0:nt,lt=Ae&&ut&&nt>0;return t.jsxs("div",{className:`list-drop-zone${D===Re?" drag-over":""}${P===Re?" active":""}`,onClick:()=>tt(Re),onDragOver:wt=>en(wt,Re),onDragLeave:un,onDrop:wt=>Qt(wt,Re),"data-column":Re,children:[t.jsx("span",{className:`list-section-dot dot-${Re}`}),t.jsx("span",{className:"drop-zone-label",children:gs[Re]}),t.jsx("span",{className:"drop-zone-count",children:lt?`${Ye} of ${nt}`:nt})]},Re)})})]}),Bt=()=>t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"bulk-edit-toolbar",children:[t.jsxs("button",{className:"btn btn-sm",onClick:dn,disabled:cn,title:"Pause all selected tasks that are not already paused",children:[t.jsx(mi,{size:14}),"Pause selected"]}),t.jsxs("button",{className:"btn btn-sm",onClick:An,disabled:cn,title:"Unpause selected tasks that are currently paused",children:[t.jsx(ds,{size:14}),"Unpause selected"]}),t.jsxs("button",{className:"btn btn-sm",onClick:nn,disabled:cn,title:"Archive selected tasks that are in Done",children:[t.jsx(Wr,{size:14}),"Archive selected"]}),t.jsxs("button",{className:"btn btn-danger btn-sm",onClick:hn,disabled:cn,title:"Delete selected tasks",children:[t.jsx(zn,{size:14}),"Delete selected"]})]}),w&&w.length>0?t.jsxs("div",{className:"bulk-edit-toolbar",children:[t.jsx("span",{className:"bulk-edit-label",children:"Bulk Edit Models & Node:"}),t.jsx("div",{className:"bulk-edit-dropdown",children:t.jsx(Ms,{models:w,value:ot,onChange:ye,label:"Executor Model",noChangeValue:"__no_change__",noChangeLabel:"No change",favoriteProviders:v,onToggleFavorite:y,favoriteModels:b,onToggleModelFavorite:N})}),t.jsx("div",{className:"bulk-edit-dropdown",children:t.jsx(Ms,{models:w,value:it,onChange:He,label:"Reviewer Model",noChangeValue:"__no_change__",noChangeLabel:"No change",favoriteProviders:v,onToggleFavorite:y,favoriteModels:b,onToggleModelFavorite:N})}),t.jsxs("div",{className:"bulk-edit-dropdown bulk-edit-node-wrap",children:[t.jsxs("select",{className:"select bulk-node-select",value:he,onChange:be=>et(be.target.value),"aria-label":"Node Override",disabled:Et,children:[t.jsx("option",{value:"__no_change__",children:"No change"}),t.jsx("option",{value:"",children:"Use project default"}),vt.map(be=>t.jsx("option",{value:be.id,children:`${c4(be.status)} ${be.name||be.id} (${l4(be.status)})`},be.id))]}),Jt?t.jsx(Ya,{status:Jt.status,showLabel:!0}):null]}),t.jsx("button",{className:"btn btn-primary btn-sm bulk-edit-apply-btn",onClick:Dn,disabled:cn||ot==="__no_change__"&&it==="__no_change__"&&he==="__no_change__",children:cn?"Applying...":"Apply"})]}):null]});return t.jsxs("div",{className:"list-view",children:[q&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"list-toolbar",children:[t.jsx("button",{className:"btn btn-sm",onClick:Ve,"aria-pressed":B,children:B?"Done Editing":"Bulk Edit"}),t.jsxs("button",{className:"btn btn-sm list-view-options-toggle",onClick:()=>ue(be=>!be),"aria-expanded":Y,"aria-controls":"list-view-options-panel-mobile",children:[t.jsx(nh,{size:14}),"View options"]}),p?t.jsx("button",{className:"btn btn-task-create btn-sm list-new-task-action",onClick:p,children:"+ New Task"}):null,t.jsx("div",{className:"list-stats",children:P?`${rt} of ${e.length} tasks in ${gs[P]}`:`${rt} of ${e.length} tasks`})]}),Y?t.jsx("div",{className:"list-toolbar-mobile-options",children:Dt("list-view-options-panel-mobile")}):null,B?je.size>0?t.jsx("div",{className:"list-mobile-bulk-actions-wrapper",children:Bt()}):t.jsxs("div",{className:"list-mobile-bulk-actions",children:[t.jsx("span",{className:"list-mobile-bulk-actions__count",children:`${je.size} selected`}),t.jsx("button",{className:"btn btn-sm",onClick:me,children:"Clear"})]}):null]}),t.jsx("div",{className:"list-table-container",children:t.jsxs("div",{className:q?"":"list-split-layout","data-testid":q?void 0:"list-split-layout",ref:Oe,children:[t.jsxs("div",{className:q?"":"list-split-sidebar","data-testid":q?void 0:"list-split-sidebar",ref:ht,style:q?void 0:{width:`${ce}px`},children:[!q&&t.jsxs("aside",{className:"list-sidebar-controls","aria-label":"List controls",children:[t.jsxs("div",{className:"list-sidebar-controls__header",children:[t.jsxs("p",{className:"list-stats",children:[P?`${rt} of ${e.length} tasks in ${gs[P]}`:`${rt} of ${e.length} tasks`,_t>0&&!P&&t.jsxs("span",{className:"list-stats-hidden",children:[" (",_t," hidden)"]})]}),t.jsxs("div",{className:"list-sidebar-controls__actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:Ve,"aria-pressed":B,children:B?"Done Editing":"Bulk Edit"}),p?t.jsx("button",{className:"btn btn-task-create btn-sm list-new-task-action",onClick:p,children:"+ New Task"}):null]}),t.jsxs("div",{className:"list-sidebar-summary-chips",children:[P?t.jsx("button",{className:"btn btn-sm",onClick:Ie,"aria-label":"Clear column filter",children:`Filter: ${gs[P]}`}):null,Ae?t.jsx("span",{className:"list-sidebar-chip",children:"Done hidden"}):null,Z?t.jsx("span",{className:"list-sidebar-chip",children:"Stale only"}):null,ie?t.jsx("span",{className:"list-sidebar-chip",children:"Stale paused review"}):null,B?t.jsx("span",{className:"list-sidebar-chip",children:"Bulk edit"}):null,B&&je.size>0?t.jsx("button",{className:"btn btn-sm",onClick:me,children:`${je.size} selected`}):null]})]}),t.jsxs("button",{className:"btn btn-sm list-view-options-toggle",onClick:()=>ue(be=>!be),"aria-expanded":Y,"aria-controls":"list-view-options-panel",children:[t.jsx(nh,{size:14}),"View options"]}),Y&&Dt("list-view-options-panel"),B&&je.size>0?Bt():null]}),t.jsx("div",{className:"list-quick-entry-above-table",children:t.jsx(Tx,{onCreate:g??(async()=>m("Task creation not available","error")),addToast:m,tasks:e,availableModels:w,onPlanningMode:S,onSubtaskBreakdown:C,projectId:k,autoExpand:!1,favoriteProviders:v,favoriteModels:b,onToggleFavorite:y,onToggleModelFavorite:N})}),rt===0?t.jsx("div",{className:"list-empty",children:_?"No tasks match your filter":"No tasks yet"}):q?t.jsx("div",{className:"list-cards",children:va.map(be=>{if(P&&be!==P||Ae&&(be==="done"||be==="archived")&&!P)return null;const Re=Xe[be],nt=Re.length===0;if(_&&nt)return null;const ut=ne.has(be);return t.jsxs(i.Fragment,{children:[t.jsxs("div",{className:`list-card-section-header${ut?" list-section-header--collapsed":""}`,onClick:()=>bt(be),"aria-expanded":!ut,role:"button",tabIndex:0,onKeyDown:Ye=>{(Ye.key==="Enter"||Ye.key===" ")&&(Ye.preventDefault(),bt(be))},children:[t.jsx(Wn,{size:14,className:`list-section-chevron${ut?"":" list-section-chevron--expanded"}`}),t.jsx("span",{className:`list-section-dot dot-${be}`}),t.jsx("span",{className:"list-section-title",children:gs[be]}),t.jsx("span",{className:"list-section-count",children:Re.length})]}),!ut&&t.jsx(t.Fragment,{children:nt?t.jsx("div",{className:"list-empty-cell list-card-empty",children:"No tasks"}):Re.map(Ye=>{const lt=Ye.status==="failed",wt=Ye.paused===!0,Q=oc(Ye,z,A),ae=!f&&!lt&&!wt&&!Q&&(Ye.column==="in-progress"||Rf.has(Ye.status)),Ke=typeof Ye.status=="string"&&Ye.status.trim().length>0,gt=!!(Ye.dependencies&&Ye.dependencies.length>0),Wt=zf(Ye),fn=Wt.hasProgress,Rn=B;return t.jsxs("div",{className:`list-card${ae?" agent-active":""}${Rn?" list-card--selectable":""}`,onClick:()=>Nn(Ye),"data-id":Ye.id,children:[Rn&&t.jsx("label",{className:"list-card-checkbox",onClick:wn=>wn.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:je.has(Ye.id),onChange:wn=>{wn.stopPropagation(),ge(Ye.id)},onClick:wn=>wn.stopPropagation(),disabled:Ye.column==="archived","aria-label":`Select ${Ye.id}`})}),t.jsxs("div",{className:"list-card-row",children:[t.jsx("span",{className:"list-card-id",children:Ye.id}),Ye.executionMode==="fast"&&t.jsxs("span",{className:"list-execution-mode-badge list-execution-mode-badge--fast",title:"Fast mode","aria-label":"Fast mode",children:[t.jsx(us,{"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:"Fast mode"})]}),t.jsx("span",{className:"list-card-spacer"}),wt&&Ye.pausedByAgentId?t.jsx("span",{className:"list-status-badge paused",children:"paused by agent"}):Q?t.jsx("span",{className:"list-status-badge stuck",children:"Stuck"}):Ke?t.jsx("span",{className:`list-status-badge list-status-badge--${Ye.column}${lt?" failed":""}${ae?" pulsing":""}`,children:If(Ye.status??"")}):null]}),t.jsx("div",{className:"list-card-row",children:t.jsx("div",{className:"list-card-title",children:Ye.title||Ye.description})}),(gt||fn)&&t.jsxs("div",{className:"list-card-row list-card-meta",children:[gt&&t.jsxs("span",{className:"list-dep-badge",title:Ye.dependencies.join(", "),children:[t.jsx(Tr,{size:12})," ",Ye.dependencies.length]}),fn&&t.jsxs("div",{className:"list-progress",children:[t.jsx("div",{className:"list-progress-bar",children:t.jsx("div",{className:"list-progress-fill",style:{width:`${Wt.percent}%`,backgroundColor:Al[Ye.column]}})}),t.jsx("span",{className:"list-progress-label",children:Wt.label})]})]})]},Ye.id)})})]},be)})}):t.jsxs("table",{className:"list-table",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[B&&t.jsx("th",{className:"list-header-cell list-header-checkbox",children:t.jsx("input",{type:"checkbox",checked:J,ref:be=>{be&&(be.indeterminate=ke)},onChange:We,"aria-label":"Select all visible tasks"})}),fe.has("title")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("title"),children:["Title ",pn("title")]}),fe.has("status")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("status"),children:["Status ",pn("status")]}),fe.has("column")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("column"),children:["Column ",pn("column")]}),fe.has("retries")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("retries"),children:["Retries ",pn("retries")]}),fe.has("dependencies")&&t.jsx("th",{className:"list-header-cell",children:"Dependencies"}),fe.has("progress")&&t.jsx("th",{className:"list-header-cell",children:"Progress"})]})}),t.jsx("tbody",{children:va.map(be=>{if(P&&be!==P||Ae&&(be==="done"||be==="archived")&&!P)return null;const Re=Xe[be],nt=Re.length===0;if(_&&nt)return null;const ut=ne.has(be);return t.jsxs(i.Fragment,{children:[t.jsx("tr",{className:`list-section-header${ut?" list-section-header--collapsed":""}`,onClick:()=>bt(be),"aria-expanded":!ut,children:t.jsxs("th",{colSpan:fe.size+(B?1:0),className:"list-section-cell",children:[t.jsx(Wn,{size:14,className:`list-section-chevron${ut?"":" list-section-chevron--expanded"}`}),t.jsx("span",{className:`list-section-dot dot-${be}`}),t.jsx("span",{className:"list-section-title",children:gs[be]}),t.jsx("span",{className:"list-section-count",children:Re.length})]})}),!ut&&t.jsx(t.Fragment,{children:nt?t.jsx("tr",{className:"list-section-empty",children:t.jsx("td",{colSpan:fe.size+(B?1:0),className:"list-empty-cell",children:"No tasks"})}):Re.map(Ye=>{const lt=Ye.status==="failed",wt=Ye.paused===!0,Q=oc(Ye,z,A),ae=!f&&!lt&&!wt&&!Q&&(Ye.column==="in-progress"||Rf.has(Ye.status)),Ke=W===Ye.id;return t.jsxs("tr",{className:`list-row${lt?" failed":""}${wt?" paused":""}${Q?" stuck":""}${ae?" agent-active":""}${Ke?" dragging":""}${Ue===Ye.id?" list-row--selected":""}`,onClick:()=>Nn(Ye),draggable:!wt,onDragStart:gt=>Xt(gt,Ye),onDragEnd:Yt,"data-id":Ye.id,children:[B&&t.jsx("td",{className:"list-cell list-cell-checkbox",children:t.jsx("input",{type:"checkbox",checked:je.has(Ye.id),onChange:gt=>{gt.stopPropagation(),ge(Ye.id)},onClick:gt=>gt.stopPropagation(),disabled:Ye.column==="archived","aria-label":`Select ${Ye.id}`})}),fe.has("title")&&t.jsx("td",{className:"list-cell list-cell-title",children:t.jsxs("div",{className:"list-title-content",children:[t.jsx("span",{className:"list-title-id",children:Ye.id}),t.jsxs("div",{className:"list-title-row",children:[Ye.executionMode==="fast"&&t.jsxs("span",{className:"list-execution-mode-badge list-execution-mode-badge--fast",title:"Fast mode","aria-label":"Fast mode",children:[t.jsx(us,{"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:"Fast mode"})]}),t.jsx("span",{className:"list-title-text",children:Ye.title||Ye.description})]})]})}),fe.has("status")&&t.jsx("td",{className:"list-cell",children:wt&&Ye.pausedByAgentId?t.jsx("span",{className:"list-status-badge paused",children:"paused by agent"}):Q?t.jsx("span",{className:"list-status-badge stuck",children:"Stuck"}):Ye.status?t.jsx("span",{className:`list-status-badge list-status-badge--${Ye.column}${lt?" failed":""}${ae?" pulsing":""}`,children:If(Ye.status??"")}):t.jsx("span",{className:"list-status-badge",children:"-"})}),fe.has("column")&&t.jsx("td",{className:"list-cell",children:t.jsx("span",{className:"list-column-badge",style:{background:`color-mix(in srgb, ${Al[Ye.column]} 12%, transparent)`,color:Al[Ye.column]},children:gs[Ye.column]})}),fe.has("retries")&&t.jsx("td",{className:"list-cell",children:(Ye.retrySummary?.total??0)>0?Ye.retrySummary?.total??0:"—"}),fe.has("dependencies")&&t.jsx("td",{className:"list-cell list-cell-deps",children:Ye.dependencies&&Ye.dependencies.length>0?t.jsxs("span",{className:"list-dep-badge",title:Ye.dependencies.join(", "),children:[t.jsx(Tr,{size:12})," ",Ye.dependencies.length]}):"-"}),fe.has("progress")&&t.jsx("td",{className:"list-cell list-cell-progress",children:(()=>{const gt=zf(Ye);return gt.hasProgress?t.jsxs("div",{className:"list-progress",children:[t.jsx("div",{className:"list-progress-bar",children:t.jsx("div",{className:"list-progress-fill",style:{width:`${gt.percent}%`,backgroundColor:Al[Ye.column]}})}),t.jsx("span",{className:"list-progress-label",children:gt.label})]}):"-"})()})]},Ye.id)})})]},be)})})]})]}),!q&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"list-split-resize-handle","data-testid":"list-split-resize-handle",onMouseDown:rn,onKeyDown:Zt,role:"separator",tabIndex:0,"aria-orientation":"vertical","aria-label":"Resize task list sidebar","aria-valuemin":mc,"aria-valuemax":Math.round(Uu(Oe.current?.clientWidth??ce/Bu+Rl)),"aria-valuenow":Math.round(ce)}),t.jsx("div",{className:"list-split-detail","data-testid":"list-split-detail",children:dt?t.jsx("div",{className:"list-split-detail-content","data-testid":"list-split-detail-content",children:t.jsx(ty,{task:dt,projectId:k,tasks:e,embedded:!0,onOpenDetail:xn,onMoveTask:n,onDeleteTask:a,onMergeTask:c,onRetryTask:s,onResetTask:d,onDuplicateTask:u,onTaskUpdated:be=>{Pe(Re=>!Re||Re.id!==be.id?Re:{...Re,...be})},addToast:m,prAuthAvailable:X})}):t.jsx("div",{className:"list-split-detail-empty",children:t.jsx("p",{children:"Select a task to view details"})})})]})]})})]})}const m4={active:{label:"Active",color:"var(--color-success)",icon:ds},paused:{label:"Paused",color:"var(--color-warning)",icon:mi},errored:{label:"Error",color:"var(--color-error)",icon:Vs},initializing:{label:"Initializing",color:"var(--color-warning)",icon:St}};function h4(e){if(!e)return"Never";const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(a/36e5),l=Math.floor(a/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString()}function Bf(e,n=40){if(e.length<=n)return e;const s=e.slice(0,Math.floor(n/2)-2),a=e.slice(-Math.floor(n/2)+2);return`${s}...${a}`}function p4(e,n){if(e.project.id!==n.project.id||e.project.status!==n.project.status||e.project.name!==n.project.name||e.project.path!==n.project.path||e.project.lastActivityAt!==n.project.lastActivityAt||e.isLoading!==n.isLoading)return!1;const s=e.health,a=n.health;if(!s&&!a)return!0;if(!s||!a||s.activeTaskCount!==a.activeTaskCount||s.inFlightAgentCount!==a.inFlightAgentCount||s.totalTasksCompleted!==a.totalTasksCompleted||s.totalTasksFailed!==a.totalTasksFailed||s.status!==a.status)return!1;const r=e.availabilityMappings??[],o=n.availabilityMappings??[];return r.length!==o.length?!1:r.every((l,c)=>{const d=o[c];return!!d&&l.nodeId===d.nodeId&&l.path===d.path&&l.displayName===d.displayName&&l.available===d.available})}function f4({project:e,health:n,onSelect:s,onPause:a,onResume:r,onRemove:o,availabilityMappings:l=[],isLoading:c=!1}){const[d,u]=i.useState(!1),h=m4[e.status],m=h.icon,f=i.useCallback(()=>{s(e)},[s,e]),p=i.useCallback(N=>{N.stopPropagation(),a(e)},[a,e]),g=i.useCallback(N=>{N.stopPropagation(),r(e)},[r,e]),w=i.useCallback(N=>{if(N.stopPropagation(),!d){u(!0);return}o(e),u(!1)},[d,o,e]),v=e.status==="paused",b=e.status==="errored",y=e.status==="initializing";return t.jsxs("div",{className:`project-card ${c?"project-card-loading":""} ${b?"project-card-errored":""}`,onClick:f,"data-project-id":e.id,role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),f())},children:[t.jsxs("div",{className:"project-card-header",children:[t.jsx("div",{className:"project-card-icon",children:t.jsx(js,{size:20})}),t.jsxs("div",{className:"project-card-title-section",children:[t.jsx("h3",{className:"project-card-name",title:e.name,children:e.name}),l.length>0&&t.jsxs("div",{className:"project-card-availability","aria-label":"Project node availability",children:[l.slice(0,3).map(N=>t.jsxs("div",{className:"project-card-availability__row",title:`${N.displayName} → ${N.path}`,children:[t.jsx("span",{className:"project-card-availability__node",children:N.displayName}),t.jsx("span",{className:"project-card-availability__arrow",children:"→"}),t.jsx("code",{className:"project-card-availability__path",children:Bf(N.path,28)})]},`${N.nodeId}-${N.path}`)),l.length>3&&t.jsxs("span",{className:"project-card-availability__more",children:["+",l.length-3," more"]})]}),t.jsx("span",{className:"project-card-path",title:e.path,children:Bf(e.path)})]}),t.jsxs("div",{className:"project-card-status-badge",style:{color:h.color,borderColor:h.color},children:[t.jsx(m,{size:12,className:y?"animate-spin":""}),t.jsx("span",{children:h.label})]})]}),t.jsxs("div",{className:"project-card-health",children:[n&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"project-card-metric",children:[t.jsx("span",{className:"project-card-metric-value",children:n.activeTaskCount}),t.jsx("span",{className:"project-card-metric-label",children:"Active Tasks"})]}),t.jsxs("div",{className:"project-card-metric",children:[t.jsx("span",{className:"project-card-metric-value",children:n.inFlightAgentCount}),t.jsx("span",{className:"project-card-metric-label",children:"Agents"})]}),t.jsxs("div",{className:"project-card-metric",children:[t.jsx("span",{className:"project-card-metric-value",children:n.totalTasksCompleted}),t.jsx("span",{className:"project-card-metric-label",children:"Completed"})]})]}),!n&&t.jsx("div",{className:"project-card-metric project-card-metric-empty",children:t.jsx("span",{className:"project-card-metric-label",children:"No health data available"})})]}),t.jsxs("div",{className:"project-card-footer",children:[t.jsxs("div",{className:"project-card-activity",children:[t.jsx("span",{className:"project-card-activity-label",children:"Last activity:"}),t.jsx("span",{className:"project-card-activity-time",children:h4(e.lastActivityAt||n?.lastActivityAt)})]}),t.jsxs("div",{className:"project-card-actions",children:[v?t.jsxs("button",{className:"project-card-action project-card-action-resume",onClick:g,disabled:c,title:"Resume project","aria-label":"Resume project",children:[t.jsx(ds,{size:14}),t.jsx("span",{children:"Resume"})]}):t.jsxs("button",{className:"project-card-action project-card-action-pause",onClick:p,disabled:c||y,title:y?"Cannot pause while initializing":"Pause project","aria-label":"Pause project",children:[t.jsx(mi,{size:14}),t.jsx("span",{children:"Pause"})]}),t.jsxs("button",{className:"project-card-action project-card-action-open",onClick:f,disabled:c,title:"Open project","aria-label":"Open project",children:[t.jsx(Qo,{size:14}),t.jsx("span",{children:"Open"})]}),t.jsxs("button",{className:`project-card-action project-card-action-remove ${d?"is-armed":""}`,onClick:w,disabled:c,title:d?"Confirm remove":"Remove project","aria-label":d?"Confirm remove project":"Remove project",children:[t.jsx(zn,{size:14}),t.jsx("span",{children:d?"Confirm":""})]})]})]})]})}const g4=i.memo(f4,p4);function Uf(e){return typeof e=="string"&&e.trim().length>0}function Io(e){return(e.nodeMappings??[]).filter(s=>Uf(s.nodeId)&&Uf(s.path)).map(s=>({nodeId:s.nodeId,nodeName:s.nodeName,path:s.path,available:s.available!==!1}))}function b4(e,n){return Io(e).filter(s=>s.nodeId===n.id&&s.available)}function x4(e,n){return b4(e,n).length>0}function v4(e,n){return e.filter(s=>x4(s,n))}function QB(e,n){return v4(e,n).length}function Hf(e,n,s,a){const r=s.find(o=>o.id===e);return r?.name?r.name:n?.nodeName?n.nodeName:a._sourceNodeName?a._sourceNodeName:e}function y4(){return t.jsxs("div",{className:"project-overview project-overview--loading",children:[t.jsx("div",{className:"project-overview__header-skeleton",children:t.jsxs("div",{className:"project-overview__stats-row",children:[t.jsxs("div",{className:"project-overview__stat-skeleton",children:[t.jsx("div",{className:"project-skeleton project-skeleton--icon",children:t.jsx(js,{size:20,className:"project-skeleton-icon"})}),t.jsx("div",{className:"project-skeleton project-skeleton--value"}),t.jsx("div",{className:"project-skeleton project-skeleton--label"})]}),t.jsxs("div",{className:"project-overview__stat-skeleton",children:[t.jsx("div",{className:"project-skeleton project-skeleton--icon",children:t.jsx(Ls,{size:20,className:"project-skeleton-icon"})}),t.jsx("div",{className:"project-skeleton project-skeleton--value"}),t.jsx("div",{className:"project-skeleton project-skeleton--label"})]}),t.jsxs("div",{className:"project-overview__stat-skeleton",children:[t.jsx("div",{className:"project-skeleton project-skeleton--icon",children:t.jsx(ts,{size:20,className:"project-skeleton-icon"})}),t.jsx("div",{className:"project-skeleton project-skeleton--value"}),t.jsx("div",{className:"project-skeleton project-skeleton--label"})]}),t.jsxs("div",{className:"project-overview__stat-skeleton",children:[t.jsx("div",{className:"project-skeleton project-skeleton--icon",children:t.jsx(Vs,{size:20,className:"project-skeleton-icon"})}),t.jsx("div",{className:"project-skeleton project-skeleton--value"}),t.jsx("div",{className:"project-skeleton project-skeleton--label"})]})]})}),t.jsxs("div",{className:"project-overview__filters-skeleton",children:[t.jsx("div",{className:"project-skeleton project-skeleton--tab"}),t.jsx("div",{className:"project-skeleton project-skeleton--tab"}),t.jsx("div",{className:"project-skeleton project-skeleton--tab"}),t.jsx("div",{className:"project-skeleton project-skeleton--tab"})]}),t.jsx("div",{className:"project-grid project-grid--skeleton",children:Array.from({length:6}).map((e,n)=>t.jsxs("div",{className:"project-card project-card--skeleton",children:[t.jsxs("div",{className:"project-card-skeleton__header",children:[t.jsx("div",{className:"project-skeleton project-skeleton--icon-circle"}),t.jsxs("div",{className:"project-skeleton__text-group",children:[t.jsx("div",{className:"project-skeleton project-skeleton--title"}),t.jsx("div",{className:"project-skeleton project-skeleton--path"})]}),t.jsx("div",{className:"project-skeleton project-skeleton--badge"})]}),t.jsxs("div",{className:"project-card-skeleton__health",children:[t.jsx("div",{className:"project-skeleton project-skeleton--metric"}),t.jsx("div",{className:"project-skeleton project-skeleton--metric"}),t.jsx("div",{className:"project-skeleton project-skeleton--metric"})]}),t.jsxs("div",{className:"project-card-skeleton__footer",children:[t.jsx("div",{className:"project-skeleton project-skeleton--activity"}),t.jsx("div",{className:"project-skeleton project-skeleton--actions"})]})]},n))})]})}const w4=1e4,qf=5;function k4(e){const[n,s]=i.useState({}),[a,r]=i.useState(!0),[o,l]=i.useState(null),c=i.useRef(null),d=i.useRef(null),u=i.useRef(!1),h=i.useCallback(async()=>{if(e.length===0){s({}),u.current||(u.current=!0),r(!1);return}d.current&&d.current.abort(),d.current=new AbortController,!u.current&&r(!0),l(null);try{const p={};for(let g=0;g<e.length;g+=qf){const w=e.slice(g,g+qf),v=await Promise.allSettled(w.map(async b=>{try{return await Mh(b)}catch{return null}}));if(w.forEach((b,y)=>{const N=v[y];p[b]=N.status==="fulfilled"?N.value:null}),d.current?.signal.aborted)return}s(p),u.current=!0}catch(p){if(p instanceof Error&&p.name==="AbortError")return;l(p instanceof Error?p.message:"Failed to fetch health data"),u.current=!0}finally{r(!1)}},[e]),m=i.useCallback(async f=>{try{const p=await Mh(f);s(g=>({...g,[f]:p}))}catch(p){console.error(`Failed to fetch health for project ${f}:`,p)}},[]);return i.useEffect(()=>(u.current=!1,h(),()=>{d.current&&d.current.abort()}),[h]),i.useEffect(()=>{if(e.length!==0)return c.current&&clearInterval(c.current),c.current=setInterval(()=>{h()},w4),()=>{c.current&&(clearInterval(c.current),c.current=null)}},[h,e.length]),{healthMap:n,loading:a,error:o,refresh:h,refreshProject:m}}function j4({projects:e,loading:n=!1,onSelectProject:s,onAddProject:a,onPauseProject:r,onResumeProject:o,onRemoveProject:l,nodes:c=[]}){const[d,u]=i.useState("all"),[h,m]=i.useState(null),[f,p]=i.useState("activity"),[g,w]=i.useState("desc");i.useEffect(()=>{if(typeof window>"u")return;const H=localStorage.getItem("kb-dashboard-recent-projects");if(H)try{const M=JSON.parse(H);b(M)}catch{}},[]);const[v,b]=i.useState([]),y=i.useMemo(()=>e.map(H=>H.id),[e]),{healthMap:N,loading:S}=k4(y),C=i.useMemo(()=>e.map(H=>({project:H,health:N[H.id]||null})),[e,N]),x=i.useMemo(()=>{let H=[...C];return d!=="all"&&(H=H.filter(({project:M})=>M.status===d)),h!==null&&(H=H.filter(({project:M})=>Io(M).some(T=>T.available&&T.nodeId===h))),H},[C,d,h]),k=i.useMemo(()=>{const H=[...x];return H.sort((M,T)=>{let F=0;switch(f){case"name":F=M.project.name.localeCompare(T.project.name);break;case"activity":{const W=M.project.lastActivityAt||M.health?.lastActivityAt||M.project.updatedAt,oe=T.project.lastActivityAt||T.health?.lastActivityAt||T.project.updatedAt;F=new Date(oe).getTime()-new Date(W).getTime();break}case"status":{const W={errored:0,initializing:1,paused:2,active:3};F=W[M.project.status]-W[T.project.status];break}}return g==="asc"?F:-F}),H},[x,f,g]),R=i.useMemo(()=>{const H=e.length,M=e.filter(P=>P.status==="active").length,T=e.filter(P=>P.status==="errored").length,F=new Set;e.forEach(P=>{Io(P).forEach($=>{$.available&&F.add($.nodeId)})});const W=F.size;let oe=0,D=0,E=0;return Object.values(N).forEach(P=>{P&&(oe+=P.activeTaskCount,D+=P.totalTasksCompleted,E+=P.inFlightAgentCount)}),{totalProjects:H,activeProjects:M,erroredProjects:T,totalNodes:W,totalActiveTasks:oe,totalCompletedTasks:D,totalInFlightAgents:E}},[e,N]),z=i.useMemo(()=>({all:e.length,active:e.filter(H=>H.status==="active").length,paused:e.filter(H=>H.status==="paused").length,errored:e.filter(H=>H.status==="errored").length}),[e]),_=i.useMemo(()=>{const H=new Map;return e.forEach(M=>{Io(M).filter(T=>T.available).forEach(T=>{const F=T.nodeId,W=H.get(F),oe=Hf(F,T,c,M);W?W.count+=1:H.set(F,{name:oe,count:1})})}),Array.from(H.entries()).map(([M,{name:T,count:F}])=>({nodeId:M,name:T,count:F}))},[e,c]),A=i.useCallback(H=>{const M=[H.id,...v.filter(T=>T!==H.id)].slice(0,3);b(M),typeof window<"u"&&localStorage.setItem("kb-dashboard-recent-projects",JSON.stringify(M)),s(H)},[s,v]);return n||S&&e.length>0&&Object.keys(N).length===0?t.jsx(y4,{}):e.length===0?t.jsx("div",{className:"project-overview project-overview--empty",children:t.jsxs("div",{className:"project-empty-state",children:[t.jsx("div",{className:"project-empty-state__icon",children:t.jsx(xa,{size:48})}),t.jsx("h2",{className:"project-empty-state__title",children:"No Projects Found"}),t.jsx("p",{className:"project-empty-state__description",children:"Get started by adding your first project. Projects allow you to organize and track tasks across multiple repositories."}),t.jsxs("button",{className:"btn btn-primary project-empty-state__cta",onClick:a,children:[t.jsx(Bn,{size:16}),"Add Your First Project"]})]})}):t.jsxs("div",{className:"project-overview",children:[t.jsxs("div",{className:"project-overview__header",children:[t.jsxs("h2",{className:"project-overview__title",children:[t.jsx(Sa,{size:20}),"Projects"]}),t.jsxs("div",{className:"project-overview__stats",children:[t.jsxs("div",{className:"project-stat",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(js,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalProjects}),t.jsx("span",{className:"project-stat__label",children:"Total"})]})]}),t.jsxs("div",{className:"project-stat project-stat--active",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Ls,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalActiveTasks}),t.jsx("span",{className:"project-stat__label",children:"Active Tasks"})]})]}),t.jsxs("div",{className:"project-stat project-stat--completed",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(ts,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalCompletedTasks}),t.jsx("span",{className:"project-stat__label",children:"Completed"})]})]}),R.erroredProjects>0&&t.jsxs("div",{className:"project-stat project-stat--error",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Vs,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.erroredProjects}),t.jsx("span",{className:"project-stat__label",children:"Errored"})]})]}),R.totalNodes>1&&t.jsxs("div",{className:"project-stat project-stat--nodes",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Ho,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalNodes}),t.jsx("span",{className:"project-stat__label",children:"Nodes"})]})]})]}),t.jsxs("button",{className:"btn btn-primary project-overview__add-btn",onClick:a,children:[t.jsx(Bn,{size:16}),"Add Project"]})]}),t.jsxs("div",{className:"project-overview__filters",children:[t.jsxs("div",{className:"project-filter-tabs",children:[t.jsxs("button",{className:`project-filter-tab ${d==="all"?"active":""}`,onClick:()=>u("all"),children:["All",t.jsx("span",{className:"project-filter-count",children:z.all})]}),t.jsxs("button",{className:`project-filter-tab ${d==="active"?"active":""}`,onClick:()=>u("active"),children:["Active",t.jsx("span",{className:"project-filter-count",children:z.active})]}),t.jsxs("button",{className:`project-filter-tab ${d==="paused"?"active":""}`,onClick:()=>u("paused"),children:["Paused",t.jsx("span",{className:"project-filter-count",children:z.paused})]}),t.jsxs("button",{className:`project-filter-tab ${d==="errored"?"active":""} ${z.errored>0?"has-errors":""}`,onClick:()=>u("errored"),children:["Errored",t.jsx("span",{className:"project-filter-count",children:z.errored})]})]}),_.length>1&&t.jsxs("div",{className:"project-node-filter",children:[t.jsx(Ho,{size:14}),t.jsxs("select",{value:h??"",onChange:H=>{m(H.target.value||null)},className:"project-node-filter-select","aria-label":"Filter by node",children:[t.jsx("option",{value:"",children:"All Nodes"}),_.map(({nodeId:H,name:M,count:T})=>t.jsxs("option",{value:H??"",children:[M," (",T,")"]},H??"local"))]})]}),t.jsxs("div",{className:"project-sort",children:[t.jsx(Zl,{size:14}),t.jsxs("select",{value:`${f}-${g}`,onChange:H=>{const[M,T]=H.target.value.split("-");p(M),w(T)},className:"project-sort-select","aria-label":"Sort projects",children:[t.jsx("option",{value:"activity-desc",children:"Last Activity (Newest)"}),t.jsx("option",{value:"activity-asc",children:"Last Activity (Oldest)"}),t.jsx("option",{value:"name-asc",children:"Name (A-Z)"}),t.jsx("option",{value:"name-desc",children:"Name (Z-A)"}),t.jsx("option",{value:"status-asc",children:"Status (Error → Active)"}),t.jsx("option",{value:"status-desc",children:"Status (Active → Error)"})]}),t.jsx(Cb,{size:14})]})]}),t.jsx("div",{className:"project-grid",children:k.map(({project:H,health:M})=>{const T=Io(H).filter(F=>F.available).map(F=>({...F,displayName:Hf(F.nodeId,F,c,H)}));return t.jsx(g4,{project:H,health:M,availabilityMappings:T,onSelect:A,onPause:r,onResume:o,onRemove:l},H.id)})}),k.length===0&&t.jsxs("div",{className:"project-overview__no-results",children:[t.jsx(Zl,{size:32}),t.jsx("p",{children:"No projects match the current filter"}),t.jsx("button",{className:"btn btn-secondary",onClick:()=>u("all"),children:"Show All Projects"})]})]})}const sy=i.createContext(null);function N4({value:e,children:n}){return i.createElement(sy.Provider,{value:e},n)}function iy(){const e=i.useContext(sy);if(!e)throw new Error("useNavigationHistoryContext must be used within a NavigationHistoryProvider");return e}function S4(e){const{enabled:n}=e,s=i.useRef([]),a=i.useRef(!1),r=i.useRef(n);r.current=n;const o=i.useCallback(c=>{if(!r.current||a.current)return;const d=s.current[s.current.length-1];if(d){const m=d.type==="modal"?d.close:d.revert,f=c.type==="modal"?c.close:c.revert;if(m===f)return}s.current.push(c);const u=s.current.length,h=typeof window<"u"&&window.history.state?window.history.state:{};window.history.pushState({...h,navIndex:u},"")},[]),l=i.useCallback(c=>{if(!r.current||s.current.length===0)return;s.current[s.current.length-1]=c;const d=s.current.length,u=typeof window<"u"&&window.history.state?window.history.state:{};window.history.replaceState({...u,navIndex:d},"")},[]);return i.useEffect(()=>{if(typeof window>"u")return;const c=d=>{if(!r.current)return;const u=d.state?.navIndex??0,h=s.current.length;if(u>=h)return;const m=h-u;if(!(m<=0)){a.current=!0;try{for(let f=0;f<m;f++){const p=s.current.pop();p&&(p.type==="modal"?p.close():p.revert())}}finally{a.current=!1}}};return window.addEventListener("popstate",c),()=>{window.removeEventListener("popstate",c)}},[]),{pushNav:o,replaceCurrent:l}}const Om="kb-planning-last-description",Fm="kb-subtask-last-description",zm="kb-mission-last-goal";function C4(e,n){cs(Om,e,n)}function E4(e){return Gn(Om,e)||""}function wr(e){Qa(Om,e)}function _4(e,n){cs(Fm,e,n)}function M4(e){return Gn(Fm,e)||""}function Vd(e){Qa(Fm,e)}function A4(e,n){cs(zm,e,n)}function R4(e){return Gn(zm,e)||""}function ga(e){Qa(zm,e)}function I4(e){const{question:n,response:s}=e;if(!n)return s;if(s&&typeof s=="object"&&!Array.isArray(s)){const a=s;if(n.id in a)return a[n.id]}return s}function T4(e,n){switch(e.type){case"text":return typeof n=="string"?n:n==null?"":String(n);case"single_select":return typeof n=="string"?e.options?.find(a=>a.id===n)?.label??n:n==null?"":String(n);case"multi_select":return Array.isArray(n)?n.map(s=>typeof s!="string"?String(s):e.options?.find(r=>r.id===s)?.label??s).join(", "):n==null?"":String(n);case"confirm":return n===!0?"Yes":n===!1?"No":n==null?"":String(n);default:return n==null?"":JSON.stringify(n)}}function P4(e){let n=0;const s=[];for(const a of e){if(a.question){n+=1,s.push({...a,questionNumber:n});continue}a.thinkingOutput&&s.push({...a,questionNumber:null})}return s}function hi({entries:e,defaultShowThinking:n=!1}){const[s,a]=i.useState({}),r=P4(e);return r.length===0?null:t.jsx("div",{className:"conversation-history","data-testid":"conversation-history",children:r.map((o,l)=>{const c=!!o.question,d=!!o.thinkingOutput,u=s[l]??n,h=c?I4(o):void 0,m=o.question&&h!==void 0?T4(o.question,h):"",f=o.response&&typeof o.response=="object"&&!Array.isArray(o.response)?o.response:void 0,p=typeof f?._comment=="string"?f._comment.trim():"";return t.jsxs("div",{className:"conversation-entry",children:[c?t.jsxs("div",{className:"conversation-entry-question",children:[t.jsxs("span",{className:"conversation-entry-question-label",children:["Q",o.questionNumber]}),t.jsx("p",{children:o.question?.question})]}):t.jsx("div",{className:"conversation-entry-question",children:t.jsx("span",{className:"conversation-entry-question-label",children:"AI Reasoning"})}),c&&t.jsxs("div",{className:"conversation-entry-response",children:[t.jsx("strong",{children:"Your response"}),t.jsx("p",{children:m||"—"}),p&&t.jsxs("p",{className:"conversation-comment",children:["💬 ",p]})]}),d&&t.jsxs("div",{className:"conversation-entry-thinking",children:[t.jsxs("button",{type:"button",className:"conversation-thinking-toggle",onClick:()=>{a(g=>({...g,[l]:!u}))},"aria-expanded":u,children:[t.jsx("span",{"aria-hidden":"true",children:u?"▾":"▸"}),u?`Hide ${c?"AI thinking":"AI reasoning"}`:`Show ${c?"AI thinking":"AI reasoning"}`]}),u&&t.jsx("pre",{children:o.thinkingOutput})]})]},`${o.question?.id??"thinking"}-${l}`)})})}const Vf="fusion-tab-id";function $4(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`tab-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function sr(){if(typeof window>"u")return"server-tab";const e=window.sessionStorage.getItem(Vf);if(e)return e;const n=$4();return window.sessionStorage.setItem(Vf,n),n}function Bc(e){const n=i.useMemo(()=>sr(),[]),[s,a]=i.useState(!1),[r,o]=i.useState(null),[l,c]=i.useState(!1);i.useEffect(()=>{if(!e){a(!1),o(null),c(!1);return}let u=!0;return c(!0),Promise.resolve(IC(e,n)).then(h=>{if(u){if(h.acquired){a(!1),o(null);return}a(!0),o(h.currentHolder)}}).catch(()=>{u&&(a(!1),o(null))}).finally(()=>{u&&c(!1)}),()=>{u=!1;try{const h=TC(e,n);h&&typeof h.catch=="function"&&h.catch(()=>{})}catch{}}},[e,n]),i.useEffect(()=>{if(!e||typeof window>"u")return;const u=()=>{if(typeof navigator.sendBeacon!="function")return;const h=Ci(`/api/ai-sessions/${encodeURIComponent(e)}/lock/beacon?tabId=${encodeURIComponent(n)}`);navigator.sendBeacon(h)};return window.addEventListener("beforeunload",u),()=>{window.removeEventListener("beforeunload",u)}},[e,n]),i.useEffect(()=>!e||typeof EventSource>"u"?void 0:fi("/api/events",{events:{"ai_session:updated":h=>{try{const m=JSON.parse(h.data);if(m.id!==e)return;const f=m.lockedByTab??null;o(f),a(!!(f&&f!==n))}catch{}}}}),[e,n]);const d=i.useCallback(async()=>{if(e){c(!0);try{await Promise.resolve(PC(e,n)),a(!1),o(null)}finally{c(!1)}}},[e,n]);return{isLockedByOther:s,currentHolder:r,takeControl:d,isLoading:l}}const D4="fusion:ai-session-sync",Wf="fusion:ai-session-sync",L4=3e4,O4=6e4;function Di(){return Date.now()}function F4(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`tab-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Gf(e){if(!e||typeof e!="object")return null;const n=e;return typeof n.type!="string"||typeof n.timestamp!="number"||!Number.isFinite(n.timestamp)?null:e}class z4{tabId;listeners=new Set;sessionStates=new Map;ownershipBySession=new Map;heartbeatByTab=new Map;ownedSessions=new Map;snapshot;channel=null;usingStorageFallback=!1;cleanupStorageListener=null;cleanupBeforeUnload=null;heartbeatInterval=null;staleSweepInterval=null;constructor(){this.tabId=F4(),this.snapshot={tabId:this.tabId,sessions:new Map,activeTabMap:new Map},this.isBrowser()&&(this.initializeTransport(),this.startHeartbeat(),this.startStaleSweep(),this.setupBeforeUnloadCleanup())}subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}getSnapshot(){return this.snapshot}requestSync(){this.publish({type:"sync:request",tabId:this.tabId,timestamp:Di()})}broadcastUpdate(n){const s=n.timestamp??Di();this.applySessionUpdate({sessionId:n.sessionId,status:n.status,needsInput:n.needsInput??n.status==="awaiting_input",owningTabId:n.owningTabId,type:n.type,title:n.title,projectId:n.projectId,updatedAt:n.updatedAt},s),this.publish({type:"session:updated",sessionId:n.sessionId,status:n.status,needsInput:n.needsInput,owningTabId:n.owningTabId,sessionType:n.type,title:n.title,projectId:n.projectId,updatedAt:n.updatedAt,timestamp:s})}broadcastCompleted(n){const s=n.status??"complete",a=n.timestamp??Di();this.applySessionUpdate({sessionId:n.sessionId,status:s,needsInput:!1,owningTabId:null},a),this.ownershipBySession.delete(n.sessionId),this.ownedSessions.delete(n.sessionId),this.emit(),this.publish({type:"session:completed",sessionId:n.sessionId,status:s,timestamp:a})}broadcastLock(n,s){const a=Di();this.applyTabOwnership(n,s,a),this.ownedSessions.set(n,s),this.publish({type:"tab:active",tabId:s,sessionId:n,timestamp:a})}broadcastUnlock(n,s){const a=Di();this.releaseTabOwnership(n,s,a),this.ownedSessions.delete(n),this.publish({type:"tab:inactive",tabId:s,sessionId:n,timestamp:a})}broadcastHeartbeat(n){const s=Di();this.updateHeartbeat(n,s),this.publish({type:"tab:heartbeat",tabId:n,timestamp:s})}destroy(){this.cleanupStorageListener?.(),this.cleanupStorageListener=null,this.cleanupBeforeUnload?.(),this.cleanupBeforeUnload=null,this.channel&&(this.channel.close(),this.channel=null),this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null),this.staleSweepInterval&&(clearInterval(this.staleSweepInterval),this.staleSweepInterval=null)}reset(){this.sessionStates.clear(),this.ownershipBySession.clear(),this.heartbeatByTab.clear(),this.ownedSessions.clear(),this.snapshot={tabId:this.tabId,sessions:new Map,activeTabMap:new Map},this.emit()}isBrowser(){return typeof window<"u"}initializeTransport(){if(typeof BroadcastChannel<"u")try{this.channel=new BroadcastChannel(D4),this.channel.onmessage=s=>{const a=Gf(s.data);a&&this.handleIncomingMessage(a)},this.usingStorageFallback=!1;return}catch{}this.usingStorageFallback=!0;const n=s=>{if(!(s.key!==Wf||!s.newValue))try{const a=JSON.parse(s.newValue),r=Gf(a.message);r&&this.handleIncomingMessage(r)}catch{}};window.addEventListener("storage",n),this.cleanupStorageListener=()=>{window.removeEventListener("storage",n)}}startHeartbeat(){this.heartbeatInterval=setInterval(()=>{const n=Di();this.updateHeartbeat(this.tabId,n),this.publish({type:"tab:heartbeat",tabId:this.tabId,timestamp:n})},L4)}startStaleSweep(){this.staleSweepInterval=setInterval(()=>{this.emit()},1e4)}setupBeforeUnloadCleanup(){const n=()=>{for(const[s,a]of this.ownedSessions.entries()){const r=Di();this.publish({type:"tab:inactive",tabId:a,sessionId:s,timestamp:r})}};window.addEventListener("beforeunload",n),this.cleanupBeforeUnload=()=>{window.removeEventListener("beforeunload",n)}}publish(n){const s={...n,senderTabId:this.tabId};if(this.channel){this.channel.postMessage(s);return}if(this.usingStorageFallback)try{const a={id:`${s.type}-${s.timestamp}-${Math.random().toString(36).slice(2,8)}`,message:s};window.localStorage.setItem(Wf,JSON.stringify(a))}catch{}}handleIncomingMessage(n){switch(n.type){case"session:updated":{this.applySessionUpdate({sessionId:n.sessionId,status:n.status,needsInput:n.needsInput,owningTabId:n.owningTabId,type:n.sessionType,title:n.title,projectId:n.projectId,updatedAt:n.updatedAt},n.timestamp);return}case"session:completed":{this.applySessionUpdate({sessionId:n.sessionId,status:n.status??"complete",needsInput:!1,owningTabId:null},n.timestamp),this.ownershipBySession.delete(n.sessionId),this.emit();return}case"tab:active":{this.applyTabOwnership(n.sessionId,n.tabId,n.timestamp);return}case"tab:inactive":{this.releaseTabOwnership(n.sessionId,n.tabId,n.timestamp);return}case"tab:heartbeat":{this.updateHeartbeat(n.tabId,n.timestamp);return}case"sync:request":{if(n.tabId===this.tabId)return;const s=[...this.sessionStates.values()].map(o=>{const l=this.ownershipBySession.get(o.sessionId);return{...o,owningTabId:l?.tabId??o.owningTabId??null}}),a=[...this.ownershipBySession.entries()].map(([o,l])=>({sessionId:o,tabId:l.tabId,timestamp:l.timestamp})),r=[...this.heartbeatByTab.entries()].map(([o,l])=>({tabId:o,timestamp:l}));this.publish({type:"sync:response",tabId:n.tabId,sessions:s,locks:a,heartbeats:r,timestamp:Di()});return}case"sync:response":{if(n.tabId!==this.tabId)return;for(const s of n.sessions)this.applySessionUpdate({sessionId:s.sessionId,status:s.status,needsInput:s.needsInput,owningTabId:s.owningTabId,type:s.type,title:s.title,projectId:s.projectId,updatedAt:s.updatedAt},s.lastEventTimestamp,!1);for(const s of n.locks??[])this.applyTabOwnership(s.sessionId,s.tabId,s.timestamp,!1);for(const s of n.heartbeats??[])this.updateHeartbeat(s.tabId,s.timestamp,!1);this.emit();return}default:return}}applySessionUpdate(n,s,a=!0){const r=this.sessionStates.get(n.sessionId);if(r&&s<r.lastEventTimestamp)return;const o=this.ownershipBySession.get(n.sessionId),l={sessionId:n.sessionId,status:n.status,needsInput:n.needsInput??n.status==="awaiting_input",lastEventTimestamp:s,owningTabId:n.owningTabId??o?.tabId??r?.owningTabId??null,type:n.type??r?.type,title:n.title??r?.title,projectId:n.projectId??r?.projectId,updatedAt:n.updatedAt??new Date(s).toISOString()};this.sessionStates.set(n.sessionId,l),n.owningTabId!==void 0&&(n.owningTabId?this.applyTabOwnership(n.sessionId,n.owningTabId,s,!1):this.ownershipBySession.delete(n.sessionId)),a&&this.emit()}applyTabOwnership(n,s,a,r=!0){const o=this.ownershipBySession.get(n);if(o&&a<o.timestamp)return;this.ownershipBySession.set(n,{tabId:s,timestamp:a}),this.updateHeartbeat(s,a,!1);const l=this.sessionStates.get(n);l&&a>=l.lastEventTimestamp&&this.sessionStates.set(n,{...l,owningTabId:s,lastEventTimestamp:a}),r&&this.emit()}releaseTabOwnership(n,s,a,r=!0){const o=this.ownershipBySession.get(n);if(!o||o.tabId!==s||a<o.timestamp)return;this.ownershipBySession.delete(n);const l=this.sessionStates.get(n);l&&a>=l.lastEventTimestamp&&this.sessionStates.set(n,{...l,owningTabId:null,lastEventTimestamp:a}),r&&this.emit()}updateHeartbeat(n,s,a=!0){const r=this.heartbeatByTab.get(n);r!==void 0&&s<r||(this.heartbeatByTab.set(n,s),a&&this.emit())}emit(){const n=Di(),s=new Map;for(const[r,o]of this.sessionStates.entries()){const l=this.ownershipBySession.get(r);s.set(r,{...o,owningTabId:l?.tabId??o.owningTabId??null})}const a=new Map;for(const[r,o]of this.ownershipBySession.entries()){const l=this.heartbeatByTab.get(o.tabId)??o.timestamp,c=n-l>O4;a.set(r,{sessionId:r,tabId:o.tabId,lastHeartbeatTimestamp:l,lastLockTimestamp:o.timestamp,stale:c})}this.snapshot={tabId:this.tabId,sessions:s,activeTabMap:a};for(const r of this.listeners)r()}}const Li=new z4;function eo(){const e=i.useSyncExternalStore(c=>Li.subscribe(c),()=>Li.getSnapshot(),()=>Li.getSnapshot());i.useEffect(()=>{Li.requestSync()},[]);const n=i.useCallback(c=>{Li.broadcastUpdate(c)},[]),s=i.useCallback(c=>{Li.broadcastCompleted(c)},[]),a=i.useCallback((c,d)=>{Li.broadcastLock(c,d)},[]),r=i.useCallback((c,d)=>{Li.broadcastUnlock(c,d)},[]),o=i.useCallback(c=>{Li.broadcastHeartbeat(c)},[]),l=i.useCallback(()=>{Li.requestSync()},[]);return{tabId:e.tabId,sessions:e.sessions,activeTabMap:e.activeTabMap,broadcastUpdate:n,broadcastCompleted:s,broadcastLock:a,broadcastUnlock:r,broadcastHeartbeat:o,requestSync:l}}function B4(e,n){return e&&n?`${e}/${n}`:""}function U4(e){if(!e)return{provider:void 0,modelId:void 0};const n=e.indexOf("/");return n===-1?{provider:void 0,modelId:void 0}:{provider:e.slice(0,n),modelId:e.slice(n+1)}}const H4=["Build a real-time collaborative document editor","Create a customer onboarding flow with email verification","Add a reporting dashboard with charts and CSV export","Implement a plugin system with marketplace"];function q4({isOpen:e,onClose:n,onMissionCreated:s,projectId:a,initialGoal:r,resumeSessionId:o}){_i(e);const[l,c]=i.useState(""),[d,u]=i.useState({type:"initial"}),[h,m]=i.useState(null),[f,p]=i.useState([]),[g,w]=i.useState([]),[v,b]=i.useState(null),[y,N]=i.useState(!1),S=i.useRef(!1),[C,x]=i.useState(""),[k,R]=i.useState(!0),[z,_]=i.useState(!1),[A,X]=i.useState(!1),[H,M]=i.useState(!1),T=i.useRef(null),F=i.useRef(null),W=i.useRef(null),oe=i.useRef(null),[D,E]=i.useState(o??null),P=i.useMemo(()=>sr(),[]),{isLockedByOther:$,takeControl:j,isLoading:q}=Bc(e?D:null),{activeTabMap:le,broadcastUpdate:fe,broadcastCompleted:Ce,broadcastLock:Ae,broadcastUnlock:re,broadcastHeartbeat:Z}=eo(),{confirm:pe}=ai(),[ie,ve]=i.useState(void 0),[ne,L]=i.useState(void 0),[Y,ue]=i.useState([]),[B,xe]=i.useState(!0),[je,se]=i.useState(null),[Ue,De]=i.useState([]),[dt,Pe]=i.useState([]),ce=B4(ie,ne);i.useEffect(()=>{(async()=>{try{xe(!0);const J=await Ws();ue(J.models),De(J.favoriteProviders),Pe(J.favoriteModels)}catch(J){se(Me(J)||"Failed to load models")}finally{xe(!1)}})()},[]);const Ee=i.useCallback(We=>{De(J=>{const ke=J,ye=ke.includes(We)?ke.filter(it=>it!==We):[We,...ke];return Jn({favoriteProviders:ye,favoriteModels:dt}).catch(()=>{De(ke)}),ye})},[dt]),Oe=i.useCallback(We=>{Pe(J=>{const ke=J,ye=ke.includes(We)?ke.filter(it=>it!==We):[We,...ke];return Jn({favoriteProviders:Ue,favoriteModels:ye}).catch(()=>{Pe(ke)}),ye})},[Ue]),ht=i.useCallback((We,J)=>{if(!We||!J)return"Using default";const ke=Y.find(ot=>ot.provider===We&&ot.id===J);return ke?`${ke.provider}/${ke.id}`:`${We}/${J}`},[Y]),Ve=i.useCallback(We=>{F.current?.close();const J=xC(We,a,{onThinking:ke=>{x(ot=>ot+ke),fe({sessionId:We,status:"generating",needsInput:!1,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null})},onQuestion:ke=>{_(!1),X(!1),ga(a),u({type:"question",sessionId:We,question:ke}),x(""),N(!0),fe({sessionId:We,status:"awaiting_input",needsInput:!0,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null})},onSummary:ke=>{_(!1),X(!1),ga(a),u({type:"summary",sessionId:We,summary:ke}),b(ke),x(""),N(!0),fe({sessionId:We,status:"complete",needsInput:!1,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null})},onError:ke=>{const ot=ke||"Session failed while contacting the AI.";_(!1),X(!1),m(null),u({type:"error",sessionId:We,errorMessage:ot}),x(""),N(!0),W.current=We,fe({sessionId:We,status:"error",needsInput:!1,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null}),Ce({sessionId:We,status:"error"})},onComplete:()=>{_(!1),X(!1),W.current=null,Ce({sessionId:We,status:"complete"})},onConnectionStateChange:ke=>{_(ke==="reconnecting")}});F.current=J},[Ce,fe,l,a,P]),ge=i.useCallback(async We=>{const J=We??l;if(J.trim()){m(null),x(""),p([]),w([]),_(!1),u({type:"loading"});try{const{sessionId:ke}=await mC(J.trim(),a,ie&&ne?{modelProvider:ie,modelId:ne}:void 0);W.current=ke,E(ke),ga(a),Ve(ke),p([])}catch(ke){_(!1),m(Me(ke)||"Failed to start interview session"),u({type:"initial"}),W.current=null,E(null)}}},[Ve,l,ie,ne,a]);i.useEffect(()=>{e&&d.type==="initial"&&T.current?.focus()},[e,d.type]),i.useEffect(()=>{if(e&&!r&&!o&&!S.current&&d.type==="initial"){const We=R4(a);We&&c(We)}},[e]),i.useEffect(()=>{if(e&&r&&!S.current&&d.type==="initial"){c(r);const We=setTimeout(()=>{S.current=!0,ge(r)},0);return()=>clearTimeout(We)}},[e,r,d.type,ge]),i.useEffect(()=>{e||(S.current=!1,_(!1),X(!1),E(null))},[e]),i.useEffect(()=>{if(!e||!o||d.type!=="initial")return;let We=!1;return Bi(o).then(J=>{if(We||!J)return;const ke=Lr(J.conversationHistory);if(w(ke),E(J.id),p(ke.map(ot=>ot.response).filter(ot=>!!(ot&&typeof ot=="object"&&!Array.isArray(ot)))),J.status==="awaiting_input"&&J.currentQuestion)try{ga(a);const ot=JSON.parse(J.currentQuestion);W.current=J.id,N(!0),u({type:"question",sessionId:J.id,question:ot})}catch{m("Failed to restore session question.")}else if(J.status==="complete"&&J.result)try{ga(a);const ot=JSON.parse(J.result);W.current=J.id,N(!0),b(ot),u({type:"summary",sessionId:J.id,summary:ot})}catch{m("Failed to restore session result.")}else J.status==="generating"?(W.current=J.id,N(!0),J.thinkingOutput&&x(J.thinkingOutput),u({type:"loading"}),Ve(J.id)):J.status==="error"&&(W.current=J.id,N(!0),m(null),u({type:"error",sessionId:J.id,errorMessage:J.error??"The session encountered an error."}))}).catch(()=>{We||m("Failed to resume session.")}),()=>{We=!0}},[Ve,e,o,d.type,a]),i.useEffect(()=>{if(!e){oe.current&&(re(oe.current,P),oe.current=null);return}if(D&&oe.current!==D){oe.current&&re(oe.current,P),Ae(D,P),oe.current=D;return}!D&&oe.current&&(re(oe.current,P),oe.current=null)},[Ae,re,e,D,P]),i.useEffect(()=>{if(!e||!D||oe.current!==D)return;Z(P);const We=setInterval(()=>{Z(P)},3e4);return()=>{clearInterval(We)}},[Z,e,D,P]),i.useEffect(()=>()=>{F.current?.close(),F.current=null,oe.current&&(re(oe.current,P),oe.current=null)},[re,P]),i.useEffect(()=>{if(!e)return;const We=J=>{(d.type==="question"||d.type==="summary")&&(J.preventDefault(),J.returnValue=""),F.current?.close()};return window.addEventListener("beforeunload",We),()=>window.removeEventListener("beforeunload",We)},[e,d]);const me=i.useCallback(()=>{F.current?.close(),F.current=null,n()},[n]),$e=i.useCallback(async()=>{if(l&&A4(l,a),!(y&&!await pe({title:"Close Interview",message:"Are you sure you want to close? Your interview progress will be lost.",danger:!0}))){if(F.current?.close(),F.current=null,d.type==="question"||d.type==="summary"||d.type==="error")try{await ix(d.sessionId,a,P)}catch{}c(""),u({type:"initial"}),m(null),p([]),w([]),b(null),x(""),_(!1),X(!1),N(!1),M(!1),ve(void 0),L(void 0),W.current=null,E(null),n()}},[l,y,d,n,a,P,pe]);i.useEffect(()=>{if(!e)return;const We=J=>{J.key==="Escape"&&$e()};return document.addEventListener("keydown",We),()=>document.removeEventListener("keydown",We)},[e,$e]);const mt=i.useCallback(async We=>{if(d.type!=="question")return;const{sessionId:J}=d;m(null),p(ke=>[...ke,We]),w(ke=>[...ke,{question:d.question,response:We}]),u({type:"loading"}),x("");try{Ve(J),await hC(J,We,a,P),N(!0)}catch(ke){F.current?.close(),F.current=null,m(Me(ke)||"Failed to submit response"),u({type:"question",sessionId:J,question:d.question})}},[d,a,P,Ve]),jt=i.useCallback(async()=>{if(d.type!=="error")return;const We=d.sessionId;m(null),X(!0),x(""),u({type:"loading"}),Ve(We);try{W.current=We,E(We),await pC(We,a,P)}catch(J){let ke=J;if((Me(J)||"").includes("not in an error state"))try{const ye=await Bi(We);if(!ye)throw new Error("Failed to refresh interview session.");const it=Lr(ye.conversationHistory);if(w(it),p(it.map(He=>He.response).filter(He=>!!(He&&typeof He=="object"&&!Array.isArray(He)))),W.current=ye.id,E(ye.id),N(!0),ye.status==="generating")x(ye.thinkingOutput??""),u({type:"loading"}),F.current?.isConnected()||Ve(ye.id);else if(ye.status==="awaiting_input"){if(!ye.currentQuestion)throw new Error("Interview session is awaiting input but has no current question.");ga(a);const He=JSON.parse(ye.currentQuestion);u({type:"question",sessionId:ye.id,question:He}),F.current?.isConnected()||Ve(ye.id)}else if(ye.status==="complete"){if(!ye.result)throw new Error("Interview session is complete but has no result.");ga(a);const He=JSON.parse(ye.result);b(He),u({type:"summary",sessionId:ye.id,summary:He})}else ye.status==="error"&&u({type:"error",sessionId:ye.id,errorMessage:ye.error??"Retry failed. Please try again."});_(!1);return}catch(ye){ke=ye}F.current?.close(),F.current=null,u({type:"error",sessionId:We,errorMessage:Me(ke)||"Retry failed. Please try again."}),_(!1)}finally{X(!1)}},[Ve,a,P,d]),tt=i.useCallback(async()=>{if(d.type==="summary"){m(null),M(!0);try{const We=await bC(d.sessionId,v||void 0,a);s(We),ga(a),F.current?.close(),F.current=null,c(""),u({type:"initial"}),m(null),p([]),w([]),b(null),x(""),_(!1),X(!1),N(!1),M(!1),W.current=null,E(null),n()}catch(We){m(Me(We)||"Failed to create mission"),M(!1)}}},[d,v,s,n,a]),bt=()=>d.type==="question"?Math.min(f.length+1,6):6,Ie=d.type==="loading"||d.type==="question"||d.type==="summary"||d.type==="error",Xe=D?le.get(D):null,rt=Xe&&Xe.tabId!==P,It=!!(rt&&!Xe.stale),_t=$&&(!rt||Xe.stale);return e?t.jsx("div",{className:"modal-overlay open",onClick:We=>We.target===We.currentTarget&&$e(),role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg planning-modal",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(_s,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Plan Mission with AI"})]}),t.jsxs("div",{className:"modal-header-actions",children:[Ie&&t.jsx("button",{className:"modal-send-to-background",onClick:me,title:"Send to background","aria-label":"Send to background",children:t.jsx(Zo,{size:16})}),t.jsx("button",{className:"modal-close",onClick:$e,"aria-label":"Close",children:t.jsx(yn,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[h&&t.jsx("div",{className:"form-error planning-error",children:h}),z&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),It&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),d.type==="initial"&&t.jsxs("div",{className:"planning-initial",children:[t.jsxs("div",{className:"planning-view-scroll",children:[t.jsxs("div",{className:"planning-intro",children:[t.jsx(fs,{size:32,className:"icon-triage-lg"}),t.jsx("h4",{children:"Transform your vision into a structured mission"}),t.jsx("p",{className:"text-muted",children:"Describe what you want to build. The AI will interview you to understand scope, constraints, and requirements, then produce a structured plan with milestones, slices, and features."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"mission-goal",children:"What do you want to build?"}),t.jsx("textarea",{ref:T,id:"mission-goal",rows:4,className:"planning-textarea",placeholder:"e.g., Build a real-time collaborative document editor with presence, comments, and version history...",value:l,onChange:We=>c(We.target.value),onKeyDown:We=>{We.key==="Enter"&&!We.shiftKey&&l.trim()&&(We.preventDefault(),ge())}})]}),t.jsxs("div",{className:"planning-examples",children:[t.jsx("span",{className:"planning-examples-label",children:"Try an example:"}),t.jsx("div",{className:"planning-example-chips",children:H4.map((We,J)=>t.jsx("button",{className:"planning-example-chip",onClick:()=>c(We),children:We.length>45?We.slice(0,45)+"...":We},J))})]}),t.jsxs("div",{className:"planning-model-select-group",children:[t.jsxs("label",{htmlFor:"mission-interview-modal-model",className:"form-label",children:["Planning Model",B&&t.jsx("span",{className:"text-muted text-muted-sm",children:"Loading models…"})]}),t.jsx(Ms,{id:"mission-interview-modal-model",label:"Planning Model",value:ce,onChange:We=>{const{provider:J,modelId:ke}=U4(We);ve(J),L(ke)},models:Y,disabled:B,favoriteProviders:Ue,onToggleFavorite:Ee,favoriteModels:dt,onToggleModelFavorite:Oe}),je&&t.jsxs("div",{className:"form-hint form-hint-error",children:[je," ",t.jsx("button",{type:"button",className:"text-link-btn",onClick:()=>{(async()=>{try{xe(!0);const We=await Ws();ue(We.models),De(We.favoriteProviders),Pe(We.favoriteModels),se(null)}catch(We){se(Me(We)||"Failed to load models")}finally{xe(!1)}})()},children:"Retry"})]}),t.jsx("div",{className:"model-selector-current model-selector-current--spaced",children:t.jsx("span",{className:`model-badge ${ie&&ne?"model-badge-custom":"model-badge-default"}`,children:ht(ie,ne)})})]})]}),t.jsx("div",{className:"planning-view-footer",children:t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>ge(),disabled:!l.trim(),children:[t.jsx(_s,{size:16,className:"icon-mr-8"}),"Start Interview"]})})]}),d.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(St,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:C?"AI is thinking...":"Preparing next question..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>R(!k),type:"button",children:k?"Hide thinking":"Show thinking"}),k&&C&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:C})})]})]}),d.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[g.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:g}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:d.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void jt(),disabled:A,children:[A?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14}),t.jsx("span",{className:"icon-ml-6",children:A?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:$e,disabled:A,children:"Cancel"})]})]})]})}),d.type==="question"&&t.jsx(V4,{question:d.question,progress:bt(),historyEntries:g,onSubmit:mt}),d.type==="summary"&&v&&t.jsx(W4,{summary:v,historyEntries:g,onSummaryChange:b,onApprove:tt,onStartOver:()=>{u({type:"initial"}),N(!1),b(null),p([]),w([]),E(null),F.current?.close(),F.current=null},isCreating:H}),$&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(Ec,{size:16}),t.jsx("span",{children:_t?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),_t&&t.jsx("button",{type:"button",onClick:()=>{j()},disabled:q,className:"btn btn-primary session-lock-take-control",children:q?"Taking control...":"Take Control"})]})})]})]})}):null}function V4({question:e,progress:n,historyEntries:s,onSubmit:a}){const[r,o]=i.useState({}),[l,c]=i.useState(""),[d,u]=i.useState(""),h=i.useCallback(()=>{let f;e.type==="text"?f={[e.id]:l}:e.type==="confirm"?f={[e.id]:r[e.id]===!0}:f=r;const p=d.trim();p.length>0&&(f={...f,_comment:p}),a(f)},[d,e,r,l,a]);i.useEffect(()=>{o({}),c(""),u("")},[e.id]);const m=()=>{switch(e.type){case"text":return l.trim().length>0;case"single_select":return r[e.id]!==void 0;case"multi_select":return Array.isArray(r[e.id])&&r[e.id].length>0;case"confirm":return r[e.id]!==void 0;default:return!0}};return t.jsxs("div",{className:"planning-question-form",children:[t.jsxs("div",{className:"planning-view-scroll planning-question-scroll",children:[s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:s}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-question-panel",children:[t.jsxs("div",{className:"planning-progress",children:[t.jsx("div",{className:"planning-progress-bar",children:[1,2,3,4,5,6].map(f=>t.jsx("div",{className:`planning-progress-step ${f<=n?"active":""}`},f))}),t.jsxs("span",{className:"planning-progress-text",children:["Question ",n," of ~6"]})]}),t.jsxs("div",{className:"planning-question-content",children:[t.jsx("h4",{className:"planning-question-text",children:e.question}),e.description&&t.jsx("p",{className:"planning-question-desc",children:e.description}),t.jsxs("div",{className:"planning-options",children:[e.type==="text"&&t.jsx("textarea",{className:"planning-textarea",rows:4,placeholder:"Type your answer here...",value:l,onChange:f=>c(f.target.value),onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&l.trim()&&(f.preventDefault(),h())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(f=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:f.id,checked:r[e.id]===f.id,onChange:()=>o({[e.id]:f.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(f=>{const p=r[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:f.id,checked:p.includes(f.id),onChange:g=>{const w=g.target.checked?[...p,f.id]:p.filter(v=>v!==f.id);o({[e.id]:w})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id)})}),e.type==="confirm"&&t.jsxs("div",{className:"planning-confirm-group",children:[t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!0?"selected":""}`,onClick:()=>o({[e.id]:!0}),children:[t.jsx(ts,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!1?"selected":""}`,onClick:()=>o({[e.id]:!1}),children:[t.jsx(yn,{size:18}),"No"]})]})]}),e.type!=="text"&&t.jsxs("div",{className:"planning-comment-section",children:[t.jsx("label",{className:"planning-comment-label",htmlFor:`planning-comment-${e.id}`,children:"Additional comments (optional)"}),t.jsx("textarea",{id:`planning-comment-${e.id}`,className:"planning-textarea",rows:2,placeholder:"Add any extra context or direction...",value:d,onChange:f=>u(f.target.value)})]})]})]})]}),t.jsx("div",{className:"planning-actions",children:t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:h,disabled:!m(),children:["Continue",t.jsx(Qo,{size:16,className:"icon-ml-4"})]})})]})}function W4({summary:e,historyEntries:n,onSummaryChange:s,onApprove:a,onStartOver:r,isCreating:o}){const[l,c]=i.useState(()=>new Set(e.milestones.map((S,C)=>C))),[d,u]=i.useState(()=>{const S=new Set;return e.milestones.forEach((C,x)=>{C.slices.forEach((k,R)=>S.add(`${x}-${R}`))}),S}),h=S=>{c(C=>{const x=new Set(C);return x.has(S)?x.delete(S):x.add(S),x})},m=S=>{u(C=>{const x=new Set(C);return x.has(S)?x.delete(S):x.add(S),x})},f=(S,C)=>{const x=[...e.milestones];x[S]={...x[S],...C},s({...e,milestones:x})},p=(S,C,x)=>{const k=[...e.milestones],R=[...k[S].slices];R[C]={...R[C],...x},k[S]={...k[S],slices:R},s({...e,milestones:k})},g=(S,C,x,k)=>{const R=[...e.milestones],z=[...R[S].slices],_=[...z[C].features];_[x]={..._[x],...k},z[C]={...z[C],features:_},R[S]={...R[S],slices:z},s({...e,milestones:R})},w=S=>{const C=e.milestones.filter((x,k)=>k!==S);s({...e,milestones:C})},v=(S,C)=>{const x=[...e.milestones];x[S]={...x[S],slices:x[S].slices.filter((k,R)=>R!==C)},s({...e,milestones:x})},b=(S,C,x)=>{const k=[...e.milestones],R=[...k[S].slices];R[C]={...R[C],features:R[C].features.filter((z,_)=>_!==x)},k[S]={...k[S],slices:R},s({...e,milestones:k})},y=(S,C)=>{const x=[...e.milestones],k=[...x[S].slices];k[C]={...k[C],features:[...k[C].features,{title:"New feature",description:""}]},x[S]={...x[S],slices:k},s({...e,milestones:x})},N=e.milestones.reduce((S,C)=>S+C.slices.reduce((x,k)=>x+k.features.length,0),0);return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[n.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(ts,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Mission Plan Ready"}),t.jsxs("p",{className:"text-muted",children:[e.milestones.length," milestones, ",N," features. Review and edit before approving."]})]}),t.jsxs("div",{className:"planning-summary-form",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Mission Title"}),t.jsx("input",{type:"text",className:"form-input",value:e.missionTitle||"",onChange:S=>s({...e,missionTitle:S.target.value})})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Mission Description"}),t.jsx("textarea",{className:"planning-textarea",rows:3,value:e.missionDescription||"",onChange:S=>s({...e,missionDescription:S.target.value})})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Roadmap"}),t.jsx("div",{className:"roadmap-list",children:e.milestones.map((S,C)=>t.jsxs("div",{className:"roadmap-card",children:[t.jsxs("div",{className:"roadmap-card-header",onClick:()=>h(C),children:[l.has(C)?t.jsx(jn,{size:16,className:"icon-text-secondary"}):t.jsx(Wn,{size:16,className:"icon-text-secondary"}),t.jsx(Ga,{size:16,className:"icon-milestone"}),t.jsx("input",{type:"text",className:"form-input roadmap-input-title",value:S.title,onChange:x=>f(C,{title:x.target.value}),onClick:x=>x.stopPropagation()}),e.milestones.length>1&&t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:x=>{x.stopPropagation(),w(C)},title:"Remove milestone",children:t.jsx(zn,{size:14,className:"icon-text-secondary"})})]}),l.has(C)&&t.jsxs("div",{className:"roadmap-card-body",children:[t.jsx("textarea",{className:"planning-textarea roadmap-textarea-md",rows:2,placeholder:"Milestone description...",value:S.description||"",onChange:x=>f(C,{description:x.target.value})}),t.jsxs("div",{className:"roadmap-field-group",children:[t.jsx("label",{className:"roadmap-field-label",children:"Verification Criteria"}),t.jsx("textarea",{className:"planning-textarea roadmap-textarea-sm",rows:2,placeholder:"How to confirm this milestone is complete...",value:S.verification||"",onChange:x=>f(C,{verification:x.target.value})})]}),S.slices.map((x,k)=>{const R=`${C}-${k}`;return t.jsxs("div",{className:"roadmap-slice-card",children:[t.jsxs("div",{className:"roadmap-slice-header",onClick:()=>m(R),children:[d.has(R)?t.jsx(jn,{size:14,className:"icon-text-secondary"}):t.jsx(Wn,{size:14,className:"icon-text-secondary"}),t.jsx(vu,{size:14,className:"icon-slice"}),t.jsx("input",{type:"text",className:"form-input roadmap-input-subtitle",value:x.title,onChange:z=>p(C,k,{title:z.target.value}),onClick:z=>z.stopPropagation()}),S.slices.length>1&&t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:z=>{z.stopPropagation(),v(C,k)},title:"Remove slice",children:t.jsx(zn,{size:12,className:"icon-text-secondary"})})]}),d.has(R)&&t.jsxs("div",{className:"roadmap-slice-body",children:[t.jsxs("div",{className:"roadmap-slice-field-group",children:[t.jsx("label",{className:"roadmap-field-label",children:"Slice Verification"}),t.jsx("textarea",{className:"planning-textarea roadmap-textarea-xs",rows:1,placeholder:"How to confirm this slice is done...",value:x.verification||"",onChange:z=>p(C,k,{verification:z.target.value})})]}),x.features.map((z,_)=>t.jsxs("div",{className:"roadmap-feature-row",children:[t.jsx(hu,{size:12,className:"icon-feature"}),t.jsxs("div",{className:"roadmap-feature-content",children:[t.jsx("input",{type:"text",className:"form-input roadmap-input-feature",value:z.title,onChange:A=>g(C,k,_,{title:A.target.value})}),z.description&&t.jsx("p",{className:"roadmap-feature-text",children:z.description}),z.acceptanceCriteria&&t.jsxs("p",{className:"roadmap-feature-text--italic",children:["AC: ",z.acceptanceCriteria]})]}),t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:()=>b(C,k,_),title:"Remove feature",children:t.jsx(zn,{size:12,className:"icon-text-secondary"})})]},_)),t.jsxs("button",{className:"btn roadmap-add-feature-btn",onClick:()=>y(C,k),children:[t.jsx(Bn,{size:12}),"Add Feature"]})]})]},k)})]})]},C))})]})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:r,disabled:o,children:[t.jsx(tr,{size:16,className:"icon-mr-4"}),"Start Over"]}),t.jsx("button",{className:"btn btn-primary",onClick:a,disabled:o||e.milestones.length===0,children:o?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"spin icon-mr-8"}),"Creating Mission..."]}):t.jsxs(t.Fragment,{children:[t.jsx(ts,{size:16,className:"icon-mr-8"}),"Approve Plan"]})})]})]})}const G4=30,K4=16,J4=16;function Y4(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}let Ql=null;function ay(){return Ql===null&&(Ql=window.visualViewport?.height??window.innerHeight),Ql}function Q4(e){const n=ay();e>n&&(Ql=e)}function X4(e){return e?e instanceof HTMLTextAreaElement?!0:e instanceof HTMLInputElement?!new Set(["checkbox","radio","button","submit","reset","file","range","color","hidden"]).has(e.type):e instanceof HTMLElement&&e.isContentEditable:!1}function Kf(){if(typeof window>"u"||!window.visualViewport)return{overlap:0,open:!1,vvHeight:null,vvOffsetTop:0};const e=window.visualViewport,n=X4(document.activeElement),s=e.offsetTop;n||Q4(e.height);const a=Math.max(0,window.innerHeight-e.offsetTop-e.height);if(a>0&&n)return{overlap:a,open:!0,vvHeight:e.height,vvOffsetTop:s};const r=ay(),o=Math.max(0,r-e.offsetTop-e.height);if(o>=G4&&n)return{overlap:o,open:!0,vvHeight:e.height,vvOffsetTop:s};if(o>=K4&&n)return{overlap:o,open:!0,vvHeight:e.height,vvOffsetTop:s};const l=Math.max(0,r-e.height);return n&&l>=J4?{overlap:0,open:!0,vvHeight:e.height,vvOffsetTop:s}:{overlap:0,open:!1,vvHeight:null,vvOffsetTop:0}}function la({enabled:e=!0}={}){const[n,s]=i.useState(0),[a,r]=i.useState(null),[o,l]=i.useState(0),[c,d]=i.useState(!1);return i.useEffect(()=>{if(!e||!Y4()){s(0),r(null),l(0),d(!1);return}const u=window.visualViewport;if(!u){s(0),r(null),l(0),d(!1);return}const h=()=>{const x=Kf();s(x.overlap),r(x.vvHeight),l(x.vvOffsetTop),d(x.open)},m=()=>{const x=Kf();s(x.overlap),r(x.vvHeight),d(x.open)},f=[],p=x=>{if(typeof window>"u")return;const k=window.setTimeout(()=>{typeof window>"u"||h()},x);f.push(k)};let g=null,w=0,v=-1,b=0;const y=()=>{g!==null&&typeof window<"u"&&(window.cancelAnimationFrame(g),g=null)},N=()=>{if(typeof window>"u")return;h();const x=window.visualViewport?.offsetTop??0;if(x===v?b+=1:(b=0,v=x),b>=2||performance.now()>w){g=null;return}g=window.requestAnimationFrame(N)},S=()=>{typeof window>"u"||(y(),w=performance.now()+1500,v=-1,b=0,g=window.requestAnimationFrame(N))},C=()=>{h(),p(50),p(200),p(500),p(1e3),p(1500),S()};return C(),u.addEventListener("resize",h),u.addEventListener("scroll",m),document.addEventListener("focusin",C),document.addEventListener("focusout",h),document.addEventListener("visibilitychange",C),window.addEventListener("pageshow",C),()=>{u.removeEventListener("resize",h),u.removeEventListener("scroll",m),document.removeEventListener("focusin",C),document.removeEventListener("focusout",h),document.removeEventListener("visibilitychange",C),window.removeEventListener("pageshow",C);for(const x of f)clearTimeout(x);y(),s(0),r(null),l(0),d(!1)}},[e]),{keyboardOverlap:n,viewportHeight:a,viewportOffsetTop:o,keyboardOpen:c}}function Z4({isOpen:e,onClose:n,onApplied:s,targetType:a,targetId:r,targetTitle:o,missionContext:l,projectId:c,resumeSessionId:d}){const u=ii();_i(e);const{keyboardOverlap:h,viewportHeight:m,viewportOffsetTop:f,keyboardOpen:p}=la({enabled:u==="mobile"}),g=p?{"--keyboard-overlap":`${h}px`,"--vv-offset-top":`${f}px`,...m!==null?{"--vv-height":`${m}px`}:{}}:{},[w,v]=i.useState({type:"initial"}),[b,y]=i.useState(null),[N,S]=i.useState([]),[C,x]=i.useState([]),[k,R]=i.useState(null),[z,_]=i.useState(""),[A,X]=i.useState(!0),[H,M]=i.useState(!1),[T,F]=i.useState(!1),W=i.useRef(null),oe=i.useRef(null),D=i.useRef(null),E=i.useRef(null),[P,$]=i.useState(null),j=i.useMemo(()=>sr(),[]);Bc(e?P:null);const{activeTabMap:q,broadcastUpdate:le,broadcastCompleted:fe,broadcastLock:Ce,broadcastUnlock:Ae,broadcastHeartbeat:re}=eo(),Z=a==="milestone"?vC:NC,pe=a==="milestone"?yC:SC,ie=a==="milestone"?wC:CC,ve=a==="milestone"?kC:EC,ne=a==="milestone"?jC:_C,L=a==="milestone"?"Milestone":"Slice",Y=a==="milestone"?"milestone_interview":"slice_interview",ue=i.useCallback(Ve=>{oe.current?.close();const ge=ie(Ve,c,{onThinking:me=>{_($e=>$e+me),le({sessionId:Ve,status:"generating",needsInput:!1,owningTabId:j,type:Y,title:o,projectId:c??null})},onQuestion:me=>{M(!1),B(),v({type:"question",sessionId:Ve,question:me}),_(""),le({sessionId:Ve,status:"awaiting_input",needsInput:!0,owningTabId:j,type:Y,title:o,projectId:c??null})},onSummary:me=>{M(!1),B(),v({type:"summary",sessionId:Ve,summary:me}),R(me),_(""),le({sessionId:Ve,status:"complete",needsInput:!1,owningTabId:j,type:Y,title:o,projectId:c??null})},onError:me=>{const $e=me||"Session failed while contacting the AI.";M(!1),y(null),v({type:"error",sessionId:Ve,errorMessage:$e}),_(""),D.current=Ve,le({sessionId:Ve,status:"error",needsInput:!1,owningTabId:j,type:Y,title:o,projectId:c??null}),fe({sessionId:Ve,status:"error"})},onComplete:()=>{M(!1),D.current=null,fe({sessionId:Ve,status:"complete"})},onConnectionStateChange:me=>{M(me==="reconnecting")}});oe.current=ge},[fe,le,ie,Y,c,j,o]),B=()=>{R(null),S([]),x([]),_("")},xe=i.useCallback(async()=>{y(null),B(),M(!1),v({type:"loading"});try{const{sessionId:Ve}=await Z(r,c);D.current=Ve,$(Ve),ue(Ve)}catch(Ve){M(!1),y(Me(Ve)||`Failed to start ${L.toLowerCase()} interview`),v({type:"initial"}),D.current=null,$(null)}},[ue,c,Z,r,L]),je=i.useCallback(async()=>{y(null),F(!0);try{await ne(r,c),s(),v({type:"applied"})}catch(Ve){y(Me(Ve)||`Failed to skip ${L.toLowerCase()} interview`),F(!1)}},[s,c,ne,r,L]);i.useEffect(()=>{e&&w.type==="initial"&&W.current?.focus()},[e,w.type]),i.useEffect(()=>{if(!e||!d||w.type!=="initial")return;let Ve=!1;return Bi(d).then(ge=>{if(Ve||!ge)return;const me=Lr(ge.conversationHistory);if(x(me),$(ge.id),S(me.map($e=>$e.response).filter($e=>!!($e&&typeof $e=="object"&&!Array.isArray($e)))),ge.status==="awaiting_input"&&ge.currentQuestion)try{const $e=JSON.parse(ge.currentQuestion);D.current=ge.id,v({type:"question",sessionId:ge.id,question:$e})}catch{y("Failed to restore session question.")}else if(ge.status==="complete"&&ge.result)try{const $e=JSON.parse(ge.result);D.current=ge.id,R($e),v({type:"summary",sessionId:ge.id,summary:$e})}catch{y("Failed to restore session result.")}else ge.status==="generating"?(D.current=ge.id,ge.thinkingOutput&&_(ge.thinkingOutput),v({type:"loading"}),ue(ge.id)):ge.status==="error"&&(D.current=ge.id,y(null),v({type:"error",sessionId:ge.id,errorMessage:ge.error??"The session encountered an error."}))}).catch(()=>{Ve||y("Failed to resume session.")}),()=>{Ve=!0}},[ue,e,d,w.type]),i.useEffect(()=>{e||(M(!1),$(null))},[e]),i.useEffect(()=>{if(!(!e||!P)){if(E.current!==P){E.current&&Ae(E.current,j),Ce(P,j),E.current=P;return}!P&&E.current&&(Ae(E.current,j),E.current=null)}},[Ce,Ae,e,P,j]),i.useEffect(()=>{if(!e||!P||E.current!==P)return;re(j);const Ve=setInterval(()=>{re(j)},3e4);return()=>{clearInterval(Ve)}},[re,e,P,j]),i.useEffect(()=>()=>{oe.current?.close(),oe.current=null,E.current&&(Ae(E.current,j),E.current=null)},[Ae,j]);const se=i.useCallback(()=>{oe.current?.close(),oe.current=null,n()},[n]),Ue=i.useCallback(async()=>{oe.current?.close(),oe.current=null,B(),v({type:"initial"}),y(null),D.current=null,$(null),n()},[n]),De=i.useCallback(async Ve=>{if(w.type!=="question")return;const{sessionId:ge}=w;y(null),S(me=>[...me,Ve]),x(me=>[...me,{question:w.question,response:Ve}]),v({type:"loading"}),_("");try{ue(ge),await pe(ge,Ve,c,j)}catch(me){oe.current?.close(),oe.current=null,y(Me(me)||"Failed to submit response"),v({type:"question",sessionId:ge,question:w.question})}},[ue,c,pe,j,w]),dt=i.useCallback(async()=>{if(w.type==="summary"){y(null),F(!0);try{await ve(w.sessionId,k||void 0,c),s(),v({type:"applied"})}catch(Ve){y(Me(Ve)||"Failed to apply interview results"),F(!1)}}},[ve,k,s,c,w]),Pe=()=>w.type==="question"?Math.min(N.length+1,6):6,ce=w.type==="loading"||w.type==="question"||w.type==="summary"||w.type==="error",Ee=P?q.get(P):null,ht=!!(Ee&&Ee.tabId!==j&&!Ee.stale);return e?t.jsx("div",{className:"modal-overlay open",onClick:Ve=>Ve.target===Ve.currentTarget&&Ue(),role:"dialog","aria-modal":"true","data-testid":"milestone-slice-interview-modal",children:t.jsxs("div",{className:"modal modal-lg planning-modal",style:g,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(fs,{size:20,className:"icon-triage"}),t.jsxs("h3",{children:["Plan ",L,": ",o]})]}),t.jsxs("div",{className:"modal-header-actions",children:[ce&&t.jsx("button",{className:"modal-send-to-background",onClick:se,title:"Send to background","aria-label":"Send to background",children:t.jsx(Zo,{size:16})}),t.jsx("button",{className:"modal-close",onClick:Ue,"aria-label":"Close",children:t.jsx(yn,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[b&&t.jsx("div",{className:"form-error planning-error",children:b}),H&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),ht&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),w.type==="initial"&&t.jsxs("div",{className:"planning-initial",children:[t.jsx("div",{className:"planning-view-scroll",children:t.jsxs("div",{className:"planning-intro",children:[t.jsx(fs,{size:32,className:"icon-triage-lg"}),t.jsxs("h4",{children:["Refine ",L," scope with AI"]}),t.jsxs("p",{className:"text-muted",children:["The AI will interview you to refine the ",a,"'s scope, acceptance criteria, and verification methods. Each ",a," can have its own refined plan or inherit context from the mission level."]}),l&&t.jsxs("div",{className:"planning-context-info",children:[t.jsx("span",{className:"planning-context-label",children:"Mission context:"}),t.jsx("span",{className:"planning-context-text",children:l})]})]})}),t.jsxs("div",{className:"planning-view-footer",children:[t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>void xe(),children:[t.jsx(fs,{size:16,className:"icon-mr-8"}),"Start Interview"]}),t.jsxs("button",{className:"btn planning-use-context-btn",onClick:()=>void je(),disabled:T,children:[T?t.jsx(St,{size:16,className:"spin"}):null,"Use Mission Context"]}),t.jsx("button",{className:"btn",onClick:Ue,children:"Cancel"})]})]}),w.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(St,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:z?"AI is thinking...":"Preparing next question..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>X(!A),type:"button",children:A?"Hide thinking":"Show thinking"}),A&&z&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:z})})]})]}),w.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[C.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:C}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:w.errorMessage}),t.jsx("div",{className:"ai-error-actions",children:t.jsx("button",{className:"btn",onClick:Ue,children:"Cancel"})})]})]})}),w.type==="question"&&t.jsx(eD,{question:w.question,progress:Pe(),historyEntries:C,onSubmit:De}),w.type==="summary"&&k&&t.jsx(tD,{summary:k,historyEntries:C,onSummaryChange:R,onApply:dt,onCancel:Ue,isApplying:T}),w.type==="applied"&&t.jsxs("div",{className:"planning-summary planning-applied",children:[t.jsx("div",{className:"planning-view-scroll",children:t.jsxs("div",{className:"planning-applied-content",children:[t.jsx(ts,{size:48,className:"icon-success"}),t.jsxs("h4",{children:[L," Updated"]}),t.jsxs("p",{className:"text-muted",children:["The ",a,"'s scope and verification have been ",w.type==="applied"?"applied":"updated","."]})]})}),t.jsx("div",{className:"planning-view-footer",children:t.jsx("button",{className:"btn btn-primary",onClick:s,children:"Done"})})]})]})]})}):null}function eD({question:e,progress:n,historyEntries:s,onSubmit:a}){const[r,o]=i.useState({}),[l,c]=i.useState(""),[d,u]=i.useState(""),h=i.useCallback(()=>{let f;e.type==="text"?f={[e.id]:l}:e.type==="confirm"?f={[e.id]:r[e.id]===!0}:f=r;const p=d.trim();p.length>0&&(f={...f,_comment:p}),a(f)},[d,e,r,l,a]);i.useEffect(()=>{o({}),c(""),u("")},[e.id]);const m=()=>{switch(e.type){case"text":return l.trim().length>0;case"single_select":return r[e.id]!==void 0;case"multi_select":return Array.isArray(r[e.id])&&r[e.id].length>0;case"confirm":return r[e.id]!==void 0;default:return!0}};return t.jsxs("div",{className:"planning-question-form",children:[t.jsxs("div",{className:"planning-view-scroll planning-question-scroll",children:[s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:s}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-question-panel",children:[t.jsxs("div",{className:"planning-progress",children:[t.jsx("div",{className:"planning-progress-bar",children:[1,2,3,4,5,6].map(f=>t.jsx("div",{className:`planning-progress-step ${f<=n?"active":""}`},f))}),t.jsxs("span",{className:"planning-progress-text",children:["Question ",n," of ~6"]})]}),t.jsxs("div",{className:"planning-question-content",children:[t.jsx("h4",{className:"planning-question-text",children:e.question}),e.description&&t.jsx("p",{className:"planning-question-desc",children:e.description}),t.jsxs("div",{className:"planning-options",children:[e.type==="text"&&t.jsx("textarea",{className:"planning-textarea",rows:4,placeholder:"Type your answer here...",value:l,onChange:f=>c(f.target.value),onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&l.trim()&&(f.preventDefault(),h())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(f=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:f.id,checked:r[e.id]===f.id,onChange:()=>o({[e.id]:f.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(f=>{const p=r[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:f.id,checked:p.includes(f.id),onChange:g=>{const w=g.target.checked?[...p,f.id]:p.filter(v=>v!==f.id);o({[e.id]:w})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id)})}),e.type==="confirm"&&t.jsxs("div",{className:"planning-confirm-group",children:[t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!0?"selected":""}`,onClick:()=>o({[e.id]:!0}),children:[t.jsx(ts,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!1?"selected":""}`,onClick:()=>o({[e.id]:!1}),children:[t.jsx(yn,{size:18}),"No"]})]})]}),e.type!=="text"&&t.jsxs("div",{className:"planning-comment-section",children:[t.jsx("label",{className:"planning-comment-label",htmlFor:`planning-comment-${e.id}`,children:"Additional comments (optional)"}),t.jsx("textarea",{id:`planning-comment-${e.id}`,className:"planning-textarea",rows:2,placeholder:"Add any extra context or direction...",value:d,onChange:f=>u(f.target.value)})]})]})]})]}),t.jsx("div",{className:"planning-actions",children:t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:h,disabled:!m(),children:["Continue",t.jsx(Qo,{size:16,className:"icon-ml-4"})]})})]})}function tD({summary:e,historyEntries:n,onSummaryChange:s,onApply:a,onCancel:r,isApplying:o}){const[l,c]=i.useState(e),[d,u]=i.useState(!0),h=(m,f)=>{const p={...l,[m]:f};c(p),s(p)};return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[n.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-panel",children:[t.jsx("div",{className:"planning-summary-header",children:t.jsxs("button",{className:"planning-summary-toggle",onClick:()=>u(!d),"aria-expanded":d,children:[d?t.jsx(jn,{size:16}):t.jsx(Wn,{size:16}),t.jsx("span",{children:"Refined Scope"})]})}),d&&t.jsxs("div",{className:"planning-summary-content",children:[l.description&&t.jsxs("div",{className:"planning-summary-field",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:3,value:l.description,onChange:m=>h("description",m.target.value)})]}),l.planningNotes&&t.jsxs("div",{className:"planning-summary-field",children:[t.jsx("label",{children:"Planning Notes"}),t.jsx("textarea",{rows:3,value:l.planningNotes,onChange:m=>h("planningNotes",m.target.value)})]}),l.verification&&t.jsxs("div",{className:"planning-summary-field",children:[t.jsx("label",{children:"Verification Criteria"}),t.jsx("textarea",{rows:2,value:l.verification,onChange:m=>h("verification",m.target.value)})]}),!l.description&&!l.planningNotes&&!l.verification&&t.jsx("p",{className:"text-muted planning-summary-empty",children:"No additional details were generated for this item."})]})]})]}),t.jsxs("div",{className:"planning-view-footer",children:[t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:a,disabled:o,children:[o?t.jsx(St,{size:16,className:"spin"}):null,"Apply"]}),t.jsx("button",{className:"btn",onClick:r,disabled:o,children:"Cancel"})]})]})}const Jf=300,Tl=220,Pl=560,Yf="fusion:mission-sidebar-width",xo={planning:{bg:"var(--mission-planning-bg)",text:"var(--mission-planning-text)"},active:{bg:"var(--mission-active-bg)",text:"var(--mission-active-text)"},blocked:{bg:"var(--mission-blocked-bg)",text:"var(--mission-blocked-text)"},complete:{bg:"var(--mission-complete-bg)",text:"var(--mission-complete-text)"},archived:{bg:"var(--mission-archived-bg)",text:"var(--mission-archived-text)"}},Qf={planning:{bg:"var(--mission-planning-bg)",text:"var(--mission-planning-text)"},active:{bg:"var(--mission-active-bg)",text:"var(--mission-active-text)"},blocked:{bg:"var(--mission-blocked-bg)",text:"var(--mission-blocked-text)"},complete:{bg:"var(--mission-complete-bg)",text:"var(--mission-complete-text)"}},Xf={pending:{bg:"var(--slice-pending-bg)",text:"var(--slice-pending-text)"},active:{bg:"var(--slice-active-bg)",text:"var(--slice-active-text)"},complete:{bg:"var(--slice-complete-bg)",text:"var(--slice-complete-text)"}},$l={defined:{bg:"var(--feature-defined-bg)",text:"var(--feature-defined-text)"},triaged:{bg:"var(--feature-triaged-bg)",text:"var(--feature-triaged-text)"},"in-progress":{bg:"var(--feature-in-progress-bg)",text:"var(--feature-in-progress-text)"},done:{bg:"var(--feature-done-bg)",text:"var(--feature-done-text)"},blocked:{bg:"var(--mission-blocked-bg)",text:"var(--mission-blocked-text)"}},Dl={inactive:{bg:"var(--autopilot-inactive-bg)",text:"var(--autopilot-inactive-text)"},watching:{bg:"var(--autopilot-watching-bg)",text:"var(--autopilot-watching-text)"},activating:{bg:"var(--autopilot-activating-bg)",text:"var(--autopilot-activating-text)"},completing:{bg:"var(--autopilot-completing-bg)",text:"var(--autopilot-completing-text)"}},Ll={pending:{bg:"var(--assertion-pending-bg)",text:"var(--assertion-pending-text)"},passed:{bg:"var(--assertion-passed-bg)",text:"var(--assertion-passed-text)"},failed:{bg:"var(--assertion-failed-bg)",text:"var(--assertion-failed-text)"},blocked:{bg:"var(--assertion-blocked-bg)",text:"var(--assertion-blocked-text)"}},Zf={not_started:{bg:"var(--assertion-pending-bg)",text:"var(--assertion-pending-text)"},needs_coverage:{bg:"var(--loop-needs-fix-bg)",text:"var(--loop-needs-fix-text)"},ready:{bg:"var(--loop-validating-bg)",text:"var(--loop-validating-text)"},passed:{bg:"var(--loop-passed-bg)",text:"var(--loop-passed-text)"},failed:{bg:"var(--loop-blocked-bg)",text:"var(--loop-blocked-text)"},blocked:{bg:"var(--loop-blocked-bg)",text:"var(--loop-blocked-text)"}},nD=3,sD=new Set(["generating","awaiting_input","error"]);function iD(e){switch(e){case"generating":return"Generating plan";case"awaiting_input":return"Awaiting input";case"error":return"Needs retry";default:return e}}function aD(e){switch(e){case"error":return"Retry interview";case"generating":return"Generating plan";default:return"Resume interview"}}function rD(e){return e==="completed"?"planned":e==="needs_update"?"needs_update":"not_started"}function eg({state:e}){const n=e==="planned"?"mission-plan-state-indicator--planned":e==="needs_update"?"mission-plan-state-indicator--needs-update":"mission-plan-state-indicator--not-started",s=e==="planned"?"Planned":e==="needs_update"?"Needs update":"Not planned";return t.jsx("span",{className:`mission-plan-state-indicator ${n}`,title:s,"aria-label":s})}function tg(e){return e?e.replace(/_/g," ").replace(/^\w/,n=>n.toUpperCase()):"Not started"}const ng={title:"",description:"",status:"planning",autopilotEnabled:!1},Wd={title:"",description:"",acceptanceCriteria:"",status:"planning",dependencies:[]},Gd={title:"",description:"",status:"pending"},Kd={title:"",description:"",acceptanceCriteria:"",status:"defined"},oD=3600*1e3;function hc(e){if(!e)return"—";const n=new Date(e).getTime();if(Number.isNaN(n))return"—";const s=Date.now()-n;if(s<0)return"just now";const a=Math.floor(s/(60*1e3));if(a<1)return"just now";if(a<60)return`${a}m ago`;const r=Math.floor(a/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function lD(e){if(!e)return"healthy";const n=typeof e.lastErrorAt=="string"&&Date.now()-new Date(e.lastErrorAt).getTime()<=oD,s=e.totalTasks>0&&e.tasksFailed>e.totalTasks*.3;return n||s?"error":e.tasksFailed>0?"warning":e.tasksFailed===0&&e.tasksInFlight<=e.totalTasks?"healthy":"warning"}function cD(e){if(!e||typeof e!="object")return!1;const n=e;return typeof n.missionId=="string"&&typeof n.tasksCompleted=="number"&&typeof n.tasksFailed=="number"&&typeof n.tasksInFlight=="number"&&typeof n.totalTasks=="number"&&typeof n.estimatedCompletionPercent=="number"}function dD(e){if(!e||typeof e!="object")return!1;const n=e;return typeof n.id=="string"&&typeof n.missionId=="string"&&typeof n.eventType=="string"&&typeof n.description=="string"&&typeof n.timestamp=="string"}function Jd(e){if(!e||typeof e!="object")return!1;const n=e;return typeof n.rollup?.milestoneId=="string"&&typeof n.rollup?.state=="string"&&Array.isArray(n.validationTelemetry?.validationRounds)&&typeof n.validationTelemetry?.totalRuns=="number"&&n.validationContract!==void 0&&Array.isArray(n.fixFeatures)}const ry=["feature_triaged","feature_completed"],oy=["slice_activated","slice_completed","milestone_completed"],ly=["mission_started","mission_paused","mission_resumed","mission_completed"],cy=["autopilot_enabled","autopilot_disabled","autopilot_state_changed","autopilot_retry","autopilot_stale"];function sg(e,n){switch(n){case"errors":return e==="error"||e==="warning";case"state_changes":return ly.includes(e);case"tasks":return ry.includes(e);case"slices":return oy.includes(e);case"autopilot":return cy.includes(e);default:return!0}}function uD(e){return e==="error"||e==="warning"?"mission-event__type--error":ly.includes(e)?"mission-event__type--state":ry.includes(e)?"mission-event__type--task":oy.includes(e)?"mission-event__type--slice":cy.includes(e)?"mission-event__type--autopilot":"mission-event__type--default"}function mD(e){return e.replace(/_/g," ")}function hD(e,n){return n?e==="watching"?`Watching since ${hc(n)}`:`Last activation ${hc(n)}`:null}function pD({isOpen:e,isInline:n=!1,onClose:s,addToast:a,projectId:r,onSelectTask:o,availableTasks:l=[],resumeSessionId:c,targetMissionId:d,milestoneSliceResumeSessionId:u,onMilestoneSliceResumeFetchError:h}){const m=n||e,[f,p]=i.useState([]),[g,w]=i.useState(null),[v,b]=i.useState(!0),[y,N]=i.useState(!1),S=ii()==="mobile",{pushNav:C}=iy(),[x,k]=i.useState(()=>{if(typeof window>"u")return Jf;const U=window.localStorage.getItem(Yf),Te=U?Number(U):NaN;return Number.isFinite(Te)?Math.max(Tl,Math.min(Pl,Te)):Jf}),R=i.useCallback(U=>{try{window.localStorage.setItem(Yf,String(U))}catch{}},[]),z=i.useCallback(U=>{if(S)return;U.preventDefault(),U.stopPropagation();const Te=U.currentTarget;typeof Te.setPointerCapture=="function"&&Te.setPointerCapture(U.pointerId);const Qe=U.clientX,Nt=x;let vn=Nt;document.body.style.userSelect="none";const Kt=Le=>{const we=Le.clientX-Qe,Be=Math.max(Tl,Math.min(Pl,Nt+we));vn=Be,k(Be)},Cn=Le=>{typeof Te.releasePointerCapture=="function"&&Te.releasePointerCapture(Le.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",Kt),document.removeEventListener("pointerup",Cn),R(vn)};document.addEventListener("pointermove",Kt),document.addEventListener("pointerup",Cn)},[S,R,x]),_=i.useCallback(U=>{if(S||U.key!=="ArrowLeft"&&U.key!=="ArrowRight")return;U.preventDefault();const Te=U.shiftKey?50:10,Qe=U.key==="ArrowLeft"?-Te:Te,Nt=Math.max(Tl,Math.min(Pl,x+Qe));k(Nt),R(Nt)},[S,R,x]),[A,X]=i.useState(!1),[H,M]=i.useState(null),[T,F]=i.useState(ng),[W,oe]=i.useState(!1),[D,E]=i.useState(new Set),[P,$]=i.useState(new Set),[j,q]=i.useState(null),[le,fe]=i.useState(Wd),[Ce,Ae]=i.useState(!1),[re,Z]=i.useState(null),[pe,ie]=i.useState(Gd),[ve,ne]=i.useState(!1),[L,Y]=i.useState(null),[ue,B]=i.useState(null),[xe,je]=i.useState(Kd),[se,Ue]=i.useState(!1),[De,dt]=i.useState(null),[Pe,ce]=i.useState(null),[Ee,Oe]=i.useState(""),[ht,Ve]=i.useState(!1),[ge,me]=i.useState([]),[$e,mt]=i.useState([]),[jt,tt]=i.useState(void 0),bt=i.useRef(null),Ie=jt??(c&&bt.current===c?void 0:c),[Xe,rt]=i.useState(null),[It,_t]=i.useState(null),[We,J]=i.useState(null);i.useEffect(()=>{m&&Ie&&Ve(!0)},[m,Ie]),i.useEffect(()=>{c&&bt.current!==c&&(bt.current=null)},[c]),i.useEffect(()=>{if(!m)return;let U=!1;return lm(r).then(Te=>{if(U)return;const Qe=Te.filter(Nt=>Nt.type!=="mission_interview"||!sD.has(Nt.status)?!1:r?Nt.projectId===r:Nt.projectId==null);me(Qe)}).catch(Te=>{console.warn("[MissionManager] Failed to fetch pending interview sessions:",Te)}),()=>{U=!0}},[m,r,Ie]),i.useEffect(()=>{if(!m)return;let U=!1;return fC(r).then(Te=>{U||mt(Te)}).catch(Te=>{console.warn("[MissionManager] Failed to fetch mission interview drafts:",Te)}),()=>{U=!0}},[m,r,Ie]),i.useEffect(()=>{if(!m||!u)return;let U=!1;return Bi(u).then(Te=>{if(!(U||!Te))try{const Qe=JSON.parse(Te.inputPayload||"{}");Qe.targetId&&Qe.targetType&&rt({type:Qe.targetType,id:Qe.targetId,title:Qe.targetTitle||Te.title,resumeSessionId:u})}catch{rt({type:"milestone",id:"",title:Te.title,resumeSessionId:u})}}).catch(Te=>{U||(console.warn("[MissionManager] Failed to fetch session for milestone/slice resume:",Te),h?.())}),()=>{U=!0}},[m,u,h]);const[ke,ot]=i.useState(null),[ye,it]=i.useState(new Map),[He,he]=i.useState(null),[et,vt]=i.useState({title:"",assertion:"",status:"pending"}),[Ct,Et]=i.useState(!1),[Tt,Jt]=i.useState(null),[cn,Vt]=i.useState(new Map),[hn,dn]=i.useState(new Set),[An,nn]=i.useState(new Set),[Dn,Nn]=i.useState(null),[zt,sn]=i.useState(new Map),[xn,Xt]=i.useState(null),[Yt,rn]=i.useState(null),[Zt,en]=i.useState(!0),[un,Qt]=i.useState(new Set),[pn,Dt]=i.useState(new Map),[Bt,be]=i.useState(null),[Re,nt]=i.useState(new Map),[ut,Ye]=i.useState(null),[lt,wt]=i.useState(new Map),[Q,ae]=i.useState(new Map),[Ke,gt]=i.useState("structure"),[Wt,fn]=i.useState([]),Rn=i.useRef([]),wn=i.useRef([]),mn=i.useRef(null),Un=i.useRef(null),de=i.useRef("structure"),st=i.useRef("all"),[ct,kt]=i.useState(!1),[G,ze]=i.useState(0),[Ut,gn]=i.useState("all"),[In,Ne]=i.useState(new Set),xt=i.useRef(null),Mt=i.useRef(null);wn.current=f,mn.current=g,Un.current=xn,de.current=Ke,st.current=Ut;const Gt=i.useCallback((U="auto")=>{const Te=Mt.current;if(Te&&typeof Te.scrollIntoView=="function"){Te.scrollIntoView({block:"end",behavior:U});return}const Qe=xt.current;Qe&&(Qe.scrollTop=Qe.scrollHeight)},[]),Sn=i.useCallback(()=>{const U=xt.current;return U?U.scrollHeight-U.scrollTop-U.clientHeight<=100:!0},[]),on=i.useCallback(async U=>{if(U.length===0){ae(new Map);return}const Te=await F1(r);ae(Qe=>{const Nt=new Map(Qe);for(const[vn,Kt]of Object.entries(Te))cD(Kt)&&Nt.set(vn,Kt);return Nt})},[r]),qt=i.useCallback(async()=>{try{b(!0);const U=await P1(r);p(U),on(U)}catch(U){a(Me(U)||"Failed to load missions","error")}finally{b(!1)}},[a,r,on]),Pt=i.useCallback(async U=>{try{N(!0);const Te=await sx(U,r);if(!Te||!Array.isArray(Te.milestones)){N(!1);return}if(w(Te),Te.milestones.length>0){const Qe=Te.milestones[0].id;Xt(Qe),en(!0),E(new Set([Qe])),ed(Qe,r).then(Nt=>{it(vn=>{const Kt=new Map(vn);return Kt.set(Qe,Nt),Kt})}).catch(()=>{}),td(Qe,r).then(Nt=>{sn(vn=>{const Kt=new Map(vn);return Kt.set(Qe,Nt),Kt})}).catch(()=>{}),Te.milestones[0].slices.length>0&&$(new Set([Te.milestones[0].slices[0].id]))}else Xt(null),rn(null)}catch(Te){a(Me(Te)||"Failed to load mission details","error")}finally{N(!1)}},[a,r]);i.useEffect(()=>{if(!m||!xn){rn(null);return}let U=!1;return rn(null),Rh(xn,r).then(Te=>{if(!U){if(!Jd(Te)){rn(null);return}rn(Te),sn(Qe=>{const Nt=new Map(Qe);return Nt.set(xn,Te.rollup),Nt})}}).catch(()=>{U||rn(null)}),()=>{U=!0}},[m,xn,r]),i.useEffect(()=>{en(!0)},[xn]);const Hn=i.useCallback(U=>{!U||U!==Un.current||Rh(U,r).then(Te=>{Un.current!==U||!Jd(Te)||(rn(Te),sn(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te.rollup),Nt}))}).catch(()=>{})},[r]),qn=i.useCallback(async(U,Te)=>{const Qe=Te?.append??!1,Nt=Qe?Rn.current.length:0;Qe||(kt(!0),Ne(new Set));try{const vn=await O1(U,{limit:50,offset:Nt,eventType:void 0},r),Kt=vn.events.filter(Cn=>sg(Cn.eventType,Ut));fn(Cn=>{if(!Qe)return Rn.current=Kt,Kt;const Le=new Set(Cn.map(Be=>Be.id)),we=[...Cn];for(const Be of Kt)Le.has(Be.id)||we.push(Be);return Rn.current=we,we}),ze(vn.total),Qe||requestAnimationFrame(()=>{Gt("auto")})}catch(vn){a(Me(vn)||"Failed to load mission activity","error")}finally{Qe||kt(!1)}},[a,Ut,r,Gt]);i.useEffect(()=>{Rn.current=Wt},[Wt]),i.useEffect(()=>{m&&(qt(),w(null),Xt(null),rn(null),fn([]),ze(0),gt("structure"),gn("all"),Ne(new Set))},[m,qt]);const ns=i.useRef(null);i.useEffect(()=>{m&&d&&ns.current!==d&&f.length>0&&(ns.current=d,Pt(d))},[m,d,f,Pt]),i.useEffect(()=>{m||(ns.current=null)},[m]);const ss=i.useRef(!1);i.useEffect(()=>{!m||!n||S||v||ss.current||g||d||f.length!==0&&(ss.current=!0,Pt(f[0].id))},[m,n,S,v,f,g,d,Pt]),i.useEffect(()=>{m||(ss.current=!1)},[m]),i.useEffect(()=>{!m||!g||Ke!=="activity"||qn(g.id)},[Ke,m,qn,g,Ut]),i.useEffect(()=>{if(!m||typeof EventSource>"u")return;const U=new URLSearchParams;r&&U.set("projectId",r);const Te=`/api/events${U.size>0?`?${U.toString()}`:""}`,Qe=()=>{on(wn.current)},Nt=Qn=>{Qe();const Xn=Qn;if(Xn.data)try{const _n=JSON.parse(Xn.data);_n?.id&&p(os=>os.map(Bs=>Bs.id===_n.id?{...Bs,..._n}:Bs))}catch{}mn.current&&Pt(mn.current.id)},vn=Qn=>{Qe(),mn.current&&Pt(mn.current.id)},Kt=()=>{Qe(),mn.current&&Pt(mn.current.id)},Cn=Qn=>{Qe(),mn.current&&Pt(mn.current.id)},Le=Qn=>{const Xn=Qn;if(Xn.data)try{const _n=JSON.parse(Xn.data);_n&&_n.featureId&&(gi(_n.featureId),Ri(_n.featureId),_n.milestoneId&&Hn(_n.milestoneId))}catch{}},we=Qn=>{const Xn=Qn;if(Xn.data)try{const _n=JSON.parse(Xn.data);_n&&_n.featureId&&(gi(_n.featureId),Ri(_n.featureId),_n.milestoneId&&Hn(_n.milestoneId),mn.current&&Pt(mn.current.id))}catch{}},Be=Qn=>{const Xn=Qn;if(Xn.data)try{const _n=JSON.parse(Xn.data);_n&&_n.milestoneId&&(Ss(_n.milestoneId),Hn(_n.milestoneId))}catch{}},$t=Qn=>{const Xn=Qn;if(Xn.data)try{const _n=JSON.parse(Xn.data);_n&&_n.milestoneId&&(ps(_n.milestoneId),Ss(_n.milestoneId),Hn(_n.milestoneId))}catch{}};return fi(Te,{events:{"mission:updated":Nt,"slice:updated":vn,"feature:updated":Kt,"milestone:updated":Cn,"mission:event":Qn=>{Qe();const Xn=mn.current;if(!Xn||de.current!=="activity")return;const _n=Sn(),os=Qn;if(os.data)try{const Bs=JSON.parse(os.data);if(!dD(Bs)||Bs.missionId!==Xn.id||!sg(Bs.eventType,st.current))return;fn(wi=>{const Oa=wi.filter(io=>io.id!==Bs.id);return[Bs,...Oa].slice(0,100)}),ze(wi=>wi+1),_n&&requestAnimationFrame(()=>{const wi=xt.current;wi&&(wi.scrollTop=0)})}catch{}},"validator-run:started":Le,"validator-run:completed":we,"milestone:validation:updated":Be,"assertion:created":$t,"assertion:updated":$t,"assertion:deleted":$t,"assertion:linked":$t,"assertion:unlinked":$t,"fix-feature:created":Qn=>{const Xn=Qn;if(Xn.data)try{const _n=JSON.parse(Xn.data);if(_n&&_n.sourceFeatureId){gi(_n.sourceFeatureId);const os=_n?.feature?.sliceId,Bs=mn.current;if(os&&Bs){const wi=Bs.milestones.find(Oa=>Oa.slices.some(io=>io.id===os));wi&&Hn(wi.id)}mn.current&&Pt(mn.current.id)}}catch{}}}})},[m,Sn,Pt,on,r,Hn]);const ms=i.useCallback(U=>{M(U.id),X(!1),F({title:U.title,description:U.description||"",status:U.status,autopilotEnabled:U.autopilotEnabled??!1})},[]),ys=i.useCallback(()=>{M(null),X(!1),F(ng)},[]),hs=i.useCallback(async()=>{if(!T.title.trim()){a("Mission title is required","error");return}try{if(oe(!0),A)await $1({title:T.title.trim(),description:T.description.trim()||void 0,autopilotEnabled:T.autopilotEnabled},r),a("Mission created","success");else if(H){const U={title:T.title.trim(),description:T.description.trim()||void 0,status:T.status,autopilotEnabled:T.autopilotEnabled};T.autopilotEnabled&&(U.autoAdvance=!0),await D1(H,U,r),a("Mission updated","success"),g?.id===H&&await Pt(H)}await qt(),ys()}catch(U){a(Me(U)||"Failed to save mission","error")}finally{oe(!1)}},[T,A,H,a,qt,Pt,g,ys,r]),On=i.useCallback(async U=>{try{await L1(U,r),a("Mission deleted","success"),g?.id===U&&w(null),await qt(),ot(null)}catch(Te){a(Me(Te)||"Failed to delete mission","error")}},[a,qt,g,r]),ws=i.useCallback(()=>{Ae(!0),q(null),fe(Wd)},[]),Rs=i.useCallback(U=>{q(U.id),Ae(!1),fe({title:U.title,description:U.description||"",acceptanceCriteria:U.acceptanceCriteria||"",status:U.status,dependencies:U.dependencies})},[]),Ns=i.useCallback(()=>{q(null),Ae(!1),fe(Wd)},[]),ee=i.useCallback(async()=>{if(!le.title.trim()){a("Milestone title is required","error");return}try{oe(!0),Ce&&g?(await z1(g.id,{title:le.title.trim(),description:le.description.trim()||void 0,acceptanceCriteria:le.acceptanceCriteria.trim()||void 0,dependencies:le.dependencies},r),a("Milestone created","success")):j&&(await B1(j,{title:le.title.trim(),description:le.description.trim()||void 0,acceptanceCriteria:le.acceptanceCriteria.trim()||void 0,status:le.status,dependencies:le.dependencies},r),a("Milestone updated","success")),await Pt(g.id),Ns()}catch(U){a(Me(U)||"Failed to save milestone","error")}finally{oe(!1)}},[le,Ce,j,g,a,Pt,Ns,T.title,r]),_e=i.useCallback(async U=>{try{await U1(U,r),a("Milestone deleted","success"),await Pt(g.id),ot(null)}catch(Te){a(Me(Te)||"Failed to delete milestone","error")}},[a,Pt,g,r]),ft=i.useCallback(U=>{Xt(U),en(!0),E(Te=>{const Qe=new Set(Te);return!Qe.has(U)?(Qe.add(U),ed(U,r).then(vn=>{it(Kt=>{const Cn=new Map(Kt);return Cn.set(U,vn),Cn})}).catch(()=>{}),td(U,r).then(vn=>{sn(Kt=>{const Cn=new Map(Kt);return Cn.set(U,vn),Cn})}).catch(()=>{})):Qe.delete(U),Qe})},[r]),Ot=i.useCallback(U=>{Y(U),ne(!0),Z(null),ie(Gd)},[]),O=i.useCallback(U=>{Z(U.id),ne(!1),ie({title:U.title,description:U.description||"",status:U.status})},[]),qe=i.useCallback(()=>{Z(null),ne(!1),Y(null),ie(Gd)},[]),Ze=i.useCallback(async()=>{if(!pe.title.trim()){a("Slice title is required","error");return}try{oe(!0),ve&&L?(await H1(L,{title:pe.title.trim(),description:pe.description.trim()||void 0},r),a("Slice created","success")):re&&(await q1(re,{title:pe.title.trim(),description:pe.description.trim()||void 0,status:pe.status},r),a("Slice updated","success")),await Pt(g.id),qe()}catch(U){a(Me(U)||"Failed to save slice","error")}finally{oe(!1)}},[pe,ve,re,L,g,a,Pt,qe,r]),Je=i.useCallback(async U=>{try{await V1(U,r),a("Slice deleted","success"),await Pt(g.id),ot(null)}catch(Te){a(Me(Te)||"Failed to delete slice","error")}},[a,Pt,g,r]),pt=i.useCallback(async U=>{try{await W1(U,r),a("Slice activated","success"),await Pt(g.id)}catch(Te){a(Me(Te)||"Failed to activate slice","error")}},[a,Pt,g,r]),At=i.useCallback(U=>{$(Te=>{const Qe=new Set(Te);return Qe.has(U)?Qe.delete(U):Qe.add(U),Qe})},[]),Lt=i.useCallback(U=>{dt(U),Ue(!0),B(null),je(Kd)},[]),ln=i.useCallback(U=>{B(U.id),Ue(!1),je({title:U.title,description:U.description||"",acceptanceCriteria:U.acceptanceCriteria||"",status:U.status})},[]),kn=i.useCallback(()=>{B(null),Ue(!1),dt(null),je(Kd)},[]),te=i.useCallback(async()=>{if(!xe.title.trim()){a("Feature title is required","error");return}try{oe(!0),se&&De?(await G1(De,{title:xe.title.trim(),description:xe.description.trim()||void 0,acceptanceCriteria:xe.acceptanceCriteria.trim()||void 0},r),a("Feature created","success")):ue&&(await K1(ue,{title:xe.title.trim(),description:xe.description.trim()||void 0,acceptanceCriteria:xe.acceptanceCriteria.trim()||void 0,status:xe.status},r),a("Feature updated","success")),await Pt(g.id),kn()}catch(U){a(Me(U)||"Failed to save feature","error")}finally{oe(!1)}},[xe,se,ue,De,g,a,Pt,kn,r]),Fe=i.useCallback(async U=>{try{await J1(U,r),a("Feature deleted","success"),await Pt(g.id),ot(null)}catch(Te){a(Me(Te)||"Failed to delete feature","error")}},[a,Pt,g,r]),Ge=i.useCallback(async()=>{if(!Pe||!Ee.trim()){a("Task ID is required","error");return}try{await Y1(Pe,Ee.trim(),r),a("Feature linked to task","success"),await Pt(g.id),ce(null),Oe("")}catch(U){a(Me(U)||"Failed to link feature to task","error")}},[Pe,Ee,a,Pt,g,r]),Ft=i.useCallback(async U=>{try{await Q1(U,r),a("Feature unlinked from task","success"),await Pt(g.id)}catch(Te){a(Me(Te)||"Failed to unlink feature","error")}},[a,Pt,g,r]),tn=i.useCallback(async U=>{try{oe(!0),await X1(U,void 0,void 0,r),a("Feature triaged — task created","success"),await Pt(g.id)}catch(Te){a(Me(Te)||"Failed to triage feature","error")}finally{oe(!1)}},[a,Pt,g,r]),Mn=i.useCallback(async U=>{J(U);try{const Te=await MC(U,r);_t({featureId:U,enrichedDescription:Te.description})}catch{await tn(U)}finally{J(null)}},[tn,r]),is=i.useCallback(async()=>{It&&(_t(null),await tn(It.featureId))},[tn,It]),Vn=i.useCallback(()=>{_t(null)},[]),as=i.useCallback(async U=>{try{oe(!0);const Te=await Z1(U,r);a(`Triaged ${Te.count} feature${Te.count!==1?"s":""}`,"success"),await Pt(g.id)}catch(Te){a(Me(Te)||"Failed to triage slice features","error")}finally{oe(!1)}},[a,Pt,g,r]),ps=i.useCallback(async U=>{try{const Te=await ed(U,r);it(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch{}},[r]),Ss=i.useCallback(async U=>{try{const Te=await td(U,r);sn(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch{}},[r]),Ma=i.useCallback(async U=>{if(!et.title.trim()||!et.assertion.trim()){a("Title and assertion text are required","error");return}try{oe(!0),await eC(U,{title:et.title.trim(),assertion:et.assertion.trim(),status:et.status},r),a("Assertion created","success"),await ps(U),await Ss(U),Et(!1),vt({title:"",assertion:"",status:"pending"})}catch(Te){a(Me(Te)||"Failed to create assertion","error")}finally{oe(!1)}},[et,a,ps,Ss,r]),Wi=i.useCallback(U=>{he(U.id),vt({title:U.title,assertion:U.assertion,status:U.status})},[]),ri=i.useCallback(()=>{he(null),Et(!1),vt({title:"",assertion:"",status:"pending"})},[]),ca=i.useCallback(async(U,Te)=>{if(!et.title.trim()||!et.assertion.trim()){a("Title and assertion text are required","error");return}try{oe(!0),await tC(U,{title:et.title.trim(),assertion:et.assertion.trim(),status:et.status},r),a("Assertion updated","success"),await ps(Te),await Ss(Te),ri()}catch(Qe){a(Me(Qe)||"Failed to update assertion","error")}finally{oe(!1)}},[et,a,ps,Ss,ri,r]),Is=i.useCallback(async U=>{try{const Te=await iC(U,r);Vt(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch{}},[r]),Mi=i.useCallback(async U=>{const Te=Tt!==U;Jt(Qe=>Qe===U?null:U),Te&&await Is(U)},[Tt,Is]),Aa=i.useCallback(U=>{Jt(U),Is(U),requestAnimationFrame(()=>{const Te=document.querySelector(`[data-mission-assertion-id="${U}"]`);Te instanceof HTMLElement&&typeof Te.scrollIntoView=="function"&&Te.scrollIntoView({behavior:"smooth",block:"center"})})},[Is]),Ai=i.useCallback(async(U,Te)=>{try{dn(Qe=>new Set(Qe).add(Te)),await nC(U,Te,r),a("Feature linked to assertion","success"),await Is(Te),Nn(null)}catch(Qe){a(Me(Qe)||"Failed to link feature","error")}finally{dn(Qe=>{const Nt=new Set(Qe);return Nt.delete(Te),Nt})}},[a,Is,r]),to=i.useCallback(async(U,Te)=>{const Qe=`${U}-${Te}`;try{nn(Nt=>new Set(Nt).add(Qe)),await sC(U,Te,r),a("Feature unlinked from assertion","success"),await Is(Te)}catch(Nt){a(Me(Nt)||"Failed to unlink feature","error")}finally{nn(Nt=>{const vn=new Set(Nt);return vn.delete(Qe),vn})}},[a,Is,r]),Ra=i.useCallback(async U=>{try{Qt(Qe=>new Set(Qe).add(U)),await aC(U,r),a("Validation triggered","success");const Te=await Ih(U,r);Dt(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch(Te){a(Me(Te)||"Failed to trigger validation","error")}finally{Qt(Te=>{const Qe=new Set(Te);return Qe.delete(U),Qe})}},[a,r]),gi=i.useCallback(async U=>{try{const Te=await Ih(U,r);Dt(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch{}},[r]),Ri=i.useCallback(async U=>{try{const Te=await rC(U,{limit:10},r);nt(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch{}},[r]),da=i.useCallback(U=>{const Te=mn.current;if(Te){for(const Qe of Te.milestones)for(const Nt of Qe.slices)if(Nt.features.find(Kt=>Kt.id===U)){E(Kt=>{const Cn=new Set(Kt);return Cn.add(Qe.id),Cn}),$(Kt=>{const Cn=new Set(Kt);return Cn.add(Nt.id),Cn}),be(U),Xt(Qe.id),gi(U),Ri(U),requestAnimationFrame(()=>{const Kt=document.querySelector(`[data-mission-feature-id="${U}"]`);Kt instanceof HTMLElement&&typeof Kt.scrollIntoView=="function"&&Kt.scrollIntoView({behavior:"smooth",block:"center"})});return}}},[gi,Ri]),Ii=i.useCallback(async U=>{try{const Te=await oC(U,r);wt(Qe=>{const Nt=new Map(Qe);return Nt.set(U,Te),Nt})}catch{}},[r]),Gi=i.useCallback(async U=>{Bt===U?be(null):(be(U),await gi(U),await Ri(U))},[Bt,gi,Ri]),no=i.useCallback(async U=>{ut===U?Ye(null):(Ye(U),await Ii(U))},[ut,Ii]),ls=i.useCallback(async U=>{try{await lC(U,r),a("Mission resumed","success"),await Pt(U),qt()}catch(Te){a(Me(Te)||"Failed to resume mission","error")}},[a,Pt,qt,r]),oi=i.useCallback(async U=>{try{const Qe=(await cC(U,r)).pausedTaskIds?.length??0;a(`Mission stopped (${Qe} task${Qe!==1?"s":""} paused)`,"success"),await Pt(U),qt()}catch(Te){a(Me(Te)||"Failed to stop mission","error")}},[a,Pt,qt,r]),Ti=i.useCallback(async U=>{try{await dC(U,r),a("Mission started — first slice activated","success"),await Pt(U),qt()}catch(Te){a(Me(Te)||"Failed to start mission","error")}},[a,Pt,qt,r]),ir=i.useCallback(async(U,Te)=>{try{await uC(U,{enabled:Te},r),a(Te?"Autopilot enabled":"Autopilot disabled","success"),await Pt(U),qt()}catch(Qe){a(Me(Qe)||"Failed to update autopilot","error")}},[a,Pt,qt,r]),Ki=i.useCallback(U=>{gt("structure"),Xt(null),rn(null),fn([]),ze(0),gn("all"),Ne(new Set),Pt(U.id)},[Pt]),ua=i.useCallback(()=>{w(null),Xt(null),rn(null),gt("structure"),fn([]),ze(0),gn("all"),Ne(new Set),qt()},[qt]),ma=Wt.length<G,bi=g?.autopilotState??"inactive",$n=bi==="watching"||bi==="activating",Ia=hD(bi,g?.lastAutopilotActivityAt),ha=i.useRef(g?.id??null);i.useEffect(()=>{const U=ha.current,Te=g?.id??null;ha.current=Te,!(!m||!S||!Te||U===Te)&&C({type:"view",revert:ua})},[ua,m,S,C,g?.id]);const Ji=i.useMemo(()=>!Yt||!xn||!Jd(Yt)?null:Yt.rollup.milestoneId===xn?Yt:null,[xn,Yt]),ar=i.useMemo(()=>{const U=new Map;for(const Te of Ji?.validationTelemetry.validationRounds??[]){const Qe=U.get(Te.featureId);(!Qe||Te.startedAt>Qe.startedAt)&&U.set(Te.featureId,Te)}return U},[Ji]),rr=i.useCallback(()=>{!g||ct||!ma||qn(g.id,{append:!0})},[ct,ma,qn,g]),or=i.useCallback(U=>{Ne(Te=>{const Qe=new Set(Te);return Qe.has(U)?Qe.delete(U):Qe.add(U),Qe})},[]),xi=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),hs())},[hs]),Ta=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),ee())},[ee]),Pa=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),Ze())},[Ze]),$a=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),te())},[te]),lr=i.useRef(null);if(i.useEffect(()=>{if(!m)return;const U=Te=>{Te.key==="Escape"&&s()};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[m,s]),!m)return null;const Da=()=>g?t.jsxs("div",{className:"mission-detail",children:[t.jsxs("div",{className:"mission-detail__header",children:[t.jsxs("div",{className:"mission-detail__title-row",children:[t.jsxs("div",{className:"mission-detail__title-text",children:[$n&&t.jsx("span",{className:"mission-detail__autopilot-dot",title:"Autopilot watching"}),t.jsx("h3",{className:"mission-detail__title",children:g.title})]}),t.jsx("span",{className:"mission-status-badge",style:{backgroundColor:(xo[g.status]||xo.planning).bg,color:(xo[g.status]||xo.planning).text},children:g.status})]}),g.description&&t.jsx("p",{className:"mission-detail__description",children:g.description}),t.jsx("div",{className:"mission-detail__meta",children:t.jsxs("span",{className:"mission-detail__meta-info",children:[g.milestones.length," milestones"]})}),t.jsxs("div",{className:"mission-detail__autopilot",children:[t.jsxs("div",{className:"mission-detail__autopilot-toggle",children:[t.jsxs("label",{className:"mission-toggle","data-testid":"mission-autopilot-toggle",children:[t.jsx("input",{type:"checkbox",checked:g.autopilotEnabled??!1,onChange:U=>ir(g.id,U.target.checked),"aria-label":"Autopilot"}),t.jsx("span",{className:"mission-toggle__track","aria-hidden":"true",children:t.jsx("span",{className:"mission-toggle__thumb"})}),t.jsxs("span",{className:"mission-toggle__label",children:[t.jsx(us,{size:14,className:"mission-detail__autopilot-icon"}),"Autopilot"]})]}),t.jsxs("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:(Dl[bi]||Dl.inactive).bg,color:(Dl[bi]||Dl.inactive).text},"data-testid":"autopilot-state-badge",children:[$n&&t.jsx("span",{className:"mission-detail__autopilot-pulse"}),bi]})]}),Ia&&t.jsx("span",{className:"mission-detail__autopilot-activity mission-relative-time",children:Ia})]}),t.jsxs("div",{className:"mission-detail__actions",children:[g.status==="active"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>oi(g.id),title:"Stop mission","aria-label":"Stop mission",children:t.jsx(Fi,{size:14})}),g.status==="blocked"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>ls(g.id),title:"Resume mission","aria-label":"Resume mission",children:t.jsx(ds,{size:14})}),g.status==="planning"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Ti(g.id),title:"Start mission","aria-label":"Start mission",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>ms(g),title:"Edit mission","aria-label":"Edit mission",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ot({type:"mission",id:g.id}),title:"Delete mission","aria-label":"Delete mission",children:t.jsx(zn,{size:14})})]})]}),H===g.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:T.title,onChange:U=>F({...T,title:U.target.value}),onKeyDown:xi,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:T.description,onChange:U=>F({...T,description:U.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__row",children:[t.jsxs("select",{value:T.status,onChange:U=>F({...T,status:U.target.value}),children:[t.jsx("option",{value:"planning",children:"Planning"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"blocked",children:"Blocked"}),t.jsx("option",{value:"complete",children:"Complete"}),t.jsx("option",{value:"archived",children:"Archived"})]}),t.jsxs("label",{className:"mission-checkbox",children:[t.jsx("input",{type:"checkbox",checked:T.autopilotEnabled,onChange:U=>F({...T,autopilotEnabled:U.target.checked})}),t.jsx(us,{size:12})," Autopilot"]})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:hs,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:ys,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-detail__tabs",role:"tablist","aria-label":"Mission detail tabs",children:[t.jsx("button",{className:`mission-btn ${Ke==="structure"?"mission-btn--primary":"mission-btn--ghost"} mission-btn--sm mission-detail__tab`,onClick:()=>gt("structure"),role:"tab","aria-selected":Ke==="structure","data-testid":"mission-tab-structure",children:"Structure"}),t.jsxs("button",{className:`mission-btn ${Ke==="activity"?"mission-btn--primary":"mission-btn--ghost"} mission-btn--sm mission-detail__tab`,onClick:()=>gt("activity"),role:"tab","aria-selected":Ke==="activity","data-testid":"mission-tab-activity",children:["Activity (",G,")"]})]}),Ke==="structure"?t.jsxs("div",{className:"mission-detail__milestones",children:[g.milestones.map(U=>{const Te=Ji?.rollup.milestoneId===U.id?Ji:null,Qe=Te?.rollup??zt.get(U.id),Nt=Te?.validationTelemetry.validationRounds??[],vn=Te?.fixFeatures??[],Kt=Zf[Qe?.state??"not_started"]??Zf.not_started,Cn=Qe&&(Qe.state==="blocked"||Qe.state==="failed")?Te?.validationTelemetry.validationRounds.find(we=>we.blockedReason)?.blockedReason:void 0,Le=U.slices.flatMap(we=>we.features).filter(we=>(we.acceptanceCriteria??"").trim().length>0);return t.jsxs("div",{className:"mission-milestone",children:[t.jsxs("div",{className:"mission-milestone__header",onClick:()=>ft(U.id),children:[t.jsx("button",{className:"mission-milestone__expand",children:D.has(U.id)?t.jsx(jn,{size:16}):t.jsx(Wn,{size:16})}),t.jsx(Ga,{size:16,className:"mission-milestone__icon"}),t.jsx("span",{className:"mission-milestone__title",children:U.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Qf[U.status].bg,color:Qf[U.status].text},children:U.status}),t.jsxs("span",{className:"mission-milestone__count",children:[U.slices.length," slices"]}),t.jsx(eg,{state:rD(U.interviewState)}),Qe&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Kt.bg,color:Kt.text},title:"Validation state",children:tg(Qe.state)}),Qe.totalAssertions>0&&t.jsx("div",{className:"mission-milestone__coverage-bar",title:`${Qe.passedAssertions??0} of ${Qe.totalAssertions} assertions passing`,children:t.jsx("div",{className:"mission-milestone__coverage-bar-fill",style:{width:`${(Qe.passedAssertions??0)/Qe.totalAssertions*100}%`,backgroundColor:(Qe.passedAssertions??0)===Qe.totalAssertions?"var(--color-success)":"var(--color-warning)"}})})]}),U.status!=="complete"&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>rt({type:"milestone",id:U.id,title:U.title}),title:"Plan milestone","aria-label":"Plan milestone",children:t.jsx(Na,{size:14})}),t.jsxs("div",{className:"mission-milestone__actions",onClick:we=>we.stopPropagation(),children:[t.jsx("button",{className:"mission-icon-btn",onClick:()=>Ot(U.id),title:"Add slice",children:t.jsx(Bn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Rs(U),title:"Edit milestone",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ot({type:"milestone",id:U.id}),title:"Delete milestone",children:t.jsx(zn,{size:14})})]})]}),D.has(U.id)&&t.jsxs("div",{className:"mission-milestone__body",children:[U.acceptanceCriteria&&t.jsxs("p",{className:"mission-feature__criteria",children:[t.jsx("strong",{children:"Acceptance:"})," ",U.acceptanceCriteria]}),(Ce||j===U.id)&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Milestone title",value:le.title,onChange:we=>fe({...le,title:we.target.value}),onKeyDown:Ta,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:le.description,onChange:we=>fe({...le,description:we.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:le.acceptanceCriteria,onChange:we=>fe({...le,acceptanceCriteria:we.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:ee,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),j?"Update":"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Ns,children:"Cancel"})]})]}),Te&&t.jsxs("div",{className:"mission-validation-telemetry",children:[t.jsxs("div",{className:"mission-validation-telemetry__header",children:[t.jsx("span",{className:"mission-validation-telemetry__title",children:"Validation Telemetry"}),t.jsxs("span",{className:"mission-validation-telemetry__meta",children:[Te.validationTelemetry.totalRuns," rounds",Te.validationTelemetry.lastValidatorStatus?` · Last ${Te.validationTelemetry.lastValidatorStatus}`:""]})]}),Cn&&t.jsxs("div",{className:"mission-blocked-reason",children:[t.jsx("strong",{children:"Blocked reason:"})," ",Cn]}),Nt.length>0&&t.jsxs("div",{className:"mission-validation-rounds",children:[t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm mission-validation-rounds__toggle",onClick:()=>en(we=>!we),title:Zt?"Hide validation rounds":"Show validation rounds",children:[Zt?t.jsx(jn,{size:12}):t.jsx(Wn,{size:12}),"Validation rounds (",Nt.length,")"]}),Zt&&t.jsx("div",{className:"mission-validation-rounds__list",children:Nt.map(we=>t.jsxs("div",{className:"mission-validation-round",children:[t.jsxs("div",{className:"mission-validation-round__header",children:[t.jsx("span",{className:`mission-status-badge mission-status-badge--sm mission-validation-round__status mission-validation-round__status--${we.validatorStatus}`,children:we.validatorStatus}),t.jsx("span",{className:"mission-validation-round__feature",children:we.featureTitle}),t.jsxs("span",{className:"mission-validation-round__attempts",children:["impl #",we.implementationAttempt," · reviewer #",we.validatorAttempt]})]}),t.jsxs("div",{className:"mission-validation-round__links",children:[t.jsx("span",{className:"mission-validation-round__label",children:"Failed assertions:"}),we.failedAssertionIds.length>0?t.jsx("div",{className:"mission-validation-round__chip-list",children:we.failedAssertionIds.map(Be=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Aa(Be),title:`Jump to assertion ${Be}`,children:Be},`${we.roundId}-${Be}`))}):t.jsx("span",{className:"mission-validation-round__empty",children:"None"})]}),t.jsxs("div",{className:"mission-validation-round__links",children:[t.jsx("span",{className:"mission-validation-round__label",children:"Generated fix features:"}),we.generatedFixFeatureIds.length>0?t.jsx("div",{className:"mission-validation-round__chip-list",children:we.generatedFixFeatureIds.map(Be=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>da(Be),title:`Jump to fix feature ${Be}`,children:Be},`${we.roundId}-${Be}`))}):t.jsx("span",{className:"mission-validation-round__empty",children:"None"})]}),we.blockedReason&&t.jsx("div",{className:"mission-validation-round__blocked-reason",children:we.blockedReason})]},we.roundId))})]}),vn.length>0&&t.jsxs("div",{className:"mission-fix-features",children:[t.jsx("div",{className:"mission-fix-features__title",children:"Generated Fix Features"}),t.jsx("div",{className:"mission-fix-features__list",children:vn.map(we=>t.jsxs("div",{className:"mission-fix-feature",children:[t.jsxs("div",{className:"mission-fix-feature__header",children:[t.jsx("button",{className:"mission-fix-feature__title",onClick:()=>da(we.id),title:`Jump to feature ${we.id}`,children:we.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:$l[we.status].bg,color:$l[we.status].text},children:we.status}),we.loopState&&t.jsx("span",{className:`mission-loop-state mission-loop-state--${we.loopState}`,children:we.loopState})]}),t.jsxs("div",{className:"mission-fix-feature__meta",children:[t.jsx("span",{children:"Source:"}),t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>da(we.sourceFeatureId),title:`Jump to source feature ${we.sourceFeatureId}`,children:we.sourceFeatureId}),t.jsx("span",{children:"Run:"}),t.jsx("span",{className:"mission-fix-feature__run",children:we.runId})]}),we.failedAssertionIds.length>0&&t.jsxs("div",{className:"mission-fix-feature__assertions",children:[t.jsx("span",{className:"mission-validation-round__label",children:"Failed assertions:"}),t.jsx("div",{className:"mission-validation-round__chip-list",children:we.failedAssertionIds.map(Be=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Aa(Be),title:`Jump to assertion ${Be}`,children:Be},`${we.id}-${Be}`))})]})]},we.id))})]})]}),t.jsxs("div",{className:"mission-slices",children:[U.slices.map(we=>t.jsxs("div",{className:"mission-slice",children:[t.jsxs("div",{className:"mission-slice__header",onClick:()=>At(we.id),children:[t.jsx("button",{className:"mission-slice__expand",children:P.has(we.id)?t.jsx(jn,{size:16}):t.jsx(Wn,{size:16})}),t.jsx(vu,{size:16,className:"mission-slice__icon"}),t.jsx("span",{className:"mission-slice__title",children:we.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Xf[we.status].bg,color:Xf[we.status].text},children:we.status}),t.jsxs("span",{className:"mission-slice__count",children:[we.features?.length||0," features"]}),t.jsx(eg,{state:we.planState??"not_started"}),we.status!=="complete"&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>rt({type:"slice",id:we.id,title:we.title}),title:"Plan slice","aria-label":"Plan slice",children:t.jsx(Na,{size:14})}),t.jsxs("div",{className:"mission-slice__actions",onClick:Be=>Be.stopPropagation(),children:[we.status==="pending"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>pt(we.id),title:"Activate slice",children:t.jsx(ds,{size:14})}),we.status==="active"&&we.features?.some(Be=>Be.status==="defined")&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>as(we.id),title:"Triage all features",disabled:W,children:W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(us,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Lt(we.id),title:"Add feature",children:t.jsx(Bn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>O(we),title:"Edit slice",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ot({type:"slice",id:we.id}),title:"Delete slice",children:t.jsx(zn,{size:14})})]})]}),P.has(we.id)&&t.jsxs("div",{className:"mission-slice__body",children:[ve&&L===U.id&&!re&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Slice title",value:pe.title,onChange:Be=>ie({...pe,title:Be.target.value}),onKeyDown:Pa,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:pe.description,onChange:Be=>ie({...pe,description:Be.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ze,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:qe,children:"Cancel"})]})]}),re===we.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Slice title",value:pe.title,onChange:Be=>ie({...pe,title:Be.target.value}),onKeyDown:Pa,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:pe.description,onChange:Be=>ie({...pe,description:Be.target.value}),rows:2}),t.jsxs("select",{value:pe.status,onChange:Be=>ie({...pe,status:Be.target.value}),children:[t.jsx("option",{value:"pending",children:"Pending"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"complete",children:"Complete"})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ze,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:qe,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-features",children:[we.features?.map(Be=>t.jsxs("div",{className:"mission-feature","data-mission-feature-id":Be.id,children:[t.jsxs("div",{className:"mission-feature__header",children:[t.jsx("button",{className:"mission-feature__expand",onClick:()=>Gi(Be.id),title:Bt===Be.id?"Collapse details":"Expand to show run history",children:Bt===Be.id?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14})}),t.jsx(hu,{size:14,className:"mission-feature__icon"}),t.jsx("span",{className:"mission-feature__title",children:Be.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:$l[Be.status].bg,color:$l[Be.status].text},children:Be.status}),Be.loopState&&Be.loopState!=="idle"&&t.jsxs("span",{className:`mission-loop-state mission-loop-state--${Be.loopState}`,title:`Loop state: ${Be.loopState}`,children:[Be.loopState==="implementing"&&"⏳",Be.loopState==="validating"&&"🔄",Be.loopState==="needs_fix"&&"🔧",Be.loopState==="passed"&&"✅",Be.loopState==="blocked"&&"🚫"]}),Be.generatedFromFeatureId&&t.jsx("button",{className:"mission-feature__lineage",onClick:()=>da(Be.generatedFromFeatureId),title:`Generated from feature: ${Be.generatedFromFeatureId}`,children:"🔗 Fix"}),(Be.loopState==="validating"||Be.loopState==="needs_fix")&&(()=>{const $t=pn.get(Be.id),bn=ar.get(Be.id),rs=$t?.implementationAttemptCount??bn?.implementationAttempt??Be.implementationAttemptCount??0,Qn=$t?.retryBudgetRemaining??Math.max(0,nD-rs);return t.jsxs("span",{className:"mission-feature__retry-budget",title:"Implementation attempts and remaining retry budget",children:["Attempt ",rs," · ",Qn," ",Qn===1?"retry":"retries"," left"]})})(),Be.loopState==="implementing"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--validate",onClick:()=>Ra(Be.id),title:"Validate feature",disabled:un.has(Be.id),children:un.has(Be.id)?t.jsx(St,{size:14,className:"spinner"}):t.jsx(fs,{size:14})}),Be.taskId&&t.jsx("span",{className:"mission-feature__task-link",onClick:()=>o?.(Be.taskId),title:"Click to view task",children:Be.taskId}),t.jsxs("div",{className:"mission-feature__actions",children:[Be.status==="defined"&&!Be.taskId&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>Mn(Be.id),title:"Triage — create task",disabled:W||We===Be.id,children:We===Be.id?t.jsx(St,{size:14,className:"spinner"}):t.jsx(us,{size:14})}),Be.taskId?t.jsx("button",{className:"mission-icon-btn",onClick:()=>Ft(Be.id),title:"Unlink task",children:t.jsx(rh,{size:14})}):Be.status!=="defined"?t.jsx("button",{className:"mission-icon-btn",onClick:()=>ce(Be.id),title:"Link to task",children:t.jsx(Tr,{size:14})}):null,t.jsx("button",{className:"mission-icon-btn",onClick:()=>ln(Be),title:"Edit feature",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ot({type:"feature",id:Be.id}),title:"Delete feature",children:t.jsx(zn,{size:14})})]})]}),Be.description&&t.jsx("p",{className:"mission-feature__description",children:Be.description}),Be.acceptanceCriteria&&t.jsxs("p",{className:"mission-feature__criteria",children:[t.jsx("strong",{children:"Acceptance:"})," ",Be.acceptanceCriteria]}),It?.featureId===Be.id&&t.jsxs("div",{className:"mission-triage-preview",children:[t.jsx("div",{className:"mission-triage-preview__header",children:"Enriched Description Preview"}),t.jsx("div",{className:"mission-triage-preview__content",children:It.enrichedDescription}),t.jsxs("div",{className:"mission-triage-preview__actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:is,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):null,"Create Task"]}),t.jsx("button",{className:"btn",onClick:Vn,disabled:W,children:"Cancel"})]})]}),ue===Be.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Feature title",value:xe.title,onChange:$t=>je({...xe,title:$t.target.value}),onKeyDown:$a,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:xe.description,onChange:$t=>je({...xe,description:$t.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:xe.acceptanceCriteria,onChange:$t=>je({...xe,acceptanceCriteria:$t.target.value}),rows:2}),t.jsxs("select",{value:xe.status,onChange:$t=>je({...xe,status:$t.target.value}),children:[t.jsx("option",{value:"defined",children:"Defined"}),t.jsx("option",{value:"triaged",children:"Triaged"}),t.jsx("option",{value:"in-progress",children:"In Progress"}),t.jsx("option",{value:"done",children:"Done"})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:te,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:kn,children:"Cancel"})]})]}),Bt===Be.id&&t.jsxs("div",{className:"mission-feature__run-history",children:[t.jsx("div",{className:"mission-feature__run-history-header",children:t.jsx("span",{className:"mission-feature__run-history-title",children:"Validation Runs"})}),(Re.get(Be.id)??[]).map($t=>t.jsxs("div",{className:"mission-run",children:[t.jsxs("div",{className:"mission-run__header",onClick:()=>no($t.id),children:[t.jsx("span",{className:`mission-status-badge mission-status-badge--sm mission-run__status mission-run__status--${$t.status}`,title:$t.status,children:$t.status}),t.jsx("span",{className:"mission-run__time",children:new Date($t.startedAt).toLocaleString()}),$t.completedAt&&t.jsxs("span",{className:"mission-run__duration",children:[Math.round((new Date($t.completedAt).getTime()-new Date($t.startedAt).getTime())/1e3),"s"]}),$t.triggerType&&t.jsx("span",{className:"mission-run__trigger",children:$t.triggerType}),t.jsx("button",{className:"mission-icon-btn",title:ut===$t.id?"Hide details":"Show details",children:ut===$t.id?t.jsx(jn,{size:12}):t.jsx(Wn,{size:12})})]}),ut===$t.id&<.get($t.id)&&t.jsxs("div",{className:"mission-run__details",children:[$t.summary&&t.jsx("p",{className:"mission-run__summary",children:$t.summary}),$t.blockedReason&&t.jsxs("p",{className:"mission-run__blocked-reason",children:[t.jsx("strong",{children:"Blocked:"})," ",$t.blockedReason]}),lt.get($t.id)?.failures&<.get($t.id).failures.length>0&&t.jsxs("div",{className:"mission-run__failures",children:[t.jsx("span",{className:"mission-run__failures-title",children:"Failed Assertions:"}),lt.get($t.id).failures.map(bn=>t.jsxs("div",{className:"mission-run__failure",children:[t.jsx("span",{className:"mission-run__failure-message",children:bn.message}),bn.expected&&t.jsxs("span",{className:"mission-run__failure-expected",children:["Expected: ",bn.expected]}),bn.actual&&t.jsxs("span",{className:"mission-run__failure-actual",children:["Actual: ",bn.actual]})]},bn.id))]}),(!lt.get($t.id)?.failures||lt.get($t.id).failures.length===0)&&t.jsx("p",{className:"mission-run__no-failures",children:"No assertion failures"})]})]},$t.id)),(!Re.get(Be.id)||Re.get(Be.id).length===0)&&t.jsx("div",{className:"mission-run-history__empty",children:"No validation runs yet."})]})]},Be.id)),se&&De===we.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Feature title",value:xe.title,onChange:Be=>je({...xe,title:Be.target.value}),onKeyDown:$a,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:xe.description,onChange:Be=>je({...xe,description:Be.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:xe.acceptanceCriteria,onChange:Be=>je({...xe,acceptanceCriteria:Be.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:te,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:kn,children:"Cancel"})]})]}),!se&&(!we.features||we.features.length===0)&&t.jsxs("div",{className:"mission-manager__empty mission-features__empty",children:[t.jsx(hu,{size:16}),t.jsx("span",{children:"No fix features generated."})]})]})]})]},we.id)),U.slices.length===0&&!ve&&t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(vu,{size:16}),t.jsx("span",{children:"No slices yet"})]}),t.jsxs("div",{className:"mission-assertions",children:[t.jsxs("div",{className:"mission-assertions__header",children:[t.jsx("span",{className:"mission-assertions__title",children:"Assertions"}),Qe&&t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Kt.bg,color:Kt.text},children:tg(Qe.state)}),Qe&&Qe.totalAssertions>0&&t.jsx("div",{className:"mission-assertions__coverage-bar",title:`${Qe.passedAssertions??0} of ${Qe.totalAssertions} assertions passing`,children:t.jsx("div",{className:"mission-assertions__coverage-bar-fill",style:{width:`${(Qe.passedAssertions??0)/Qe.totalAssertions*100}%`,backgroundColor:(Qe.passedAssertions??0)===Qe.totalAssertions?"var(--color-success)":"var(--color-warning)"}})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>{Et(!0),he(null),vt({title:"",assertion:"",status:"pending"})},title:"Add assertion",children:t.jsx(Bn,{size:14})})]}),Ct&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Assertion title",value:et.title,onChange:we=>vt({...et,title:we.target.value}),autoFocus:!0}),t.jsx("textarea",{placeholder:"Assertion text (what should be true when complete)",value:et.assertion,onChange:we=>vt({...et,assertion:we.target.value}),rows:2}),t.jsxs("select",{value:et.status,onChange:we=>vt({...et,status:we.target.value}),children:[t.jsx("option",{value:"pending",children:"Pending"}),t.jsx("option",{value:"passed",children:"Passed"}),t.jsx("option",{value:"failed",children:"Failed"}),t.jsx("option",{value:"blocked",children:"Blocked"})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:()=>Ma(U.id),disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:ri,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-assertions__list",children:[(Array.isArray(ye.get(U.id))?ye.get(U.id):[]).map(we=>t.jsxs("div",{className:"mission-assertion","data-mission-assertion-id":we.id,children:[t.jsx("div",{className:"mission-assertion__header",children:He===we.id?t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Assertion title",value:et.title,onChange:Be=>vt({...et,title:Be.target.value}),autoFocus:!0}),t.jsx("textarea",{placeholder:"Assertion text",value:et.assertion,onChange:Be=>vt({...et,assertion:Be.target.value}),rows:2}),t.jsxs("select",{value:et.status,onChange:Be=>vt({...et,status:Be.target.value}),children:[t.jsx("option",{value:"pending",children:"Pending"}),t.jsx("option",{value:"passed",children:"Passed"}),t.jsx("option",{value:"failed",children:"Failed"}),t.jsx("option",{value:"blocked",children:"Blocked"})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:()=>ca(we.id,U.id),disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Save"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:ri,children:"Cancel"})]})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:(Ll[we.status]??Ll.pending).bg,color:(Ll[we.status]??Ll.pending).text},children:we.status}),t.jsx("span",{className:"mission-assertion__title",children:we.title}),(()=>{const $t=cn.get(we.id)?.length??0;return $t>0?t.jsxs("span",{className:"mission-assertion__linked-count",title:`${$t} linked feature${$t!==1?"s":""}`,children:["(",$t," linked)"]}):null})(),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Mi(we.id),title:"Toggle details",children:Tt===we.id?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Wi(we),title:"Edit assertion",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ot({type:"assertion",id:we.id}),title:"Delete assertion",children:t.jsx(zn,{size:14})})]})}),Tt===we.id&&t.jsxs("div",{className:"mission-assertion__body",children:[t.jsx("p",{className:"mission-assertion__text",children:we.assertion}),t.jsxs("div",{className:"mission-assertion__linked-features",children:[t.jsxs("div",{className:"mission-assertion__linked-features-header",children:[t.jsx("span",{className:"mission-assertion__linked-features-label",children:"Linked Features"}),t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm",onClick:async()=>{Tt!==we.id&&await Mi(we.id),Nn(Dn===we.id?null:we.id)},title:"Link a feature",children:[t.jsx(Tr,{size:12}),"Link Feature"]})]}),Dn===we.id&&t.jsx("div",{className:"mission-assertion__feature-picker",children:t.jsx("div",{className:"mission-assertion__feature-picker-dropdown",children:(()=>{const Be=new Set((cn.get(we.id)??[]).map(bn=>bn.id)),$t=[];return g?.milestones.forEach(bn=>bn.slices.forEach(rs=>$t.push(...rs.features.filter(Qn=>!Be.has(Qn.id))))),$t.length===0?t.jsx("span",{className:"mission-assertion__feature-picker-empty",children:"All features already linked"}):$t.map(bn=>t.jsxs("button",{className:"mission-assertion__feature-picker-item",onClick:()=>Ai(bn.id,we.id),disabled:hn.has(we.id),children:[t.jsx("span",{className:"mission-assertion__feature-picker-title",children:bn.title}),hn.has(we.id)&&t.jsx(St,{size:12,className:"spinner"})]},bn.id))})()})}),(()=>{const Be=cn.get(we.id)??[];return Be.length===0?t.jsx("span",{className:"mission-assertion__linked-empty",children:"No features linked yet"}):Be.map($t=>{const bn=`${$t.id}-${we.id}`,rs=An.has(bn);return t.jsxs("div",{className:"mission-assertion__linked-feature",children:[t.jsx("span",{className:"mission-assertion__linked-feature-title",children:$t.title}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>to($t.id,we.id),disabled:rs,title:"Unlink feature",children:rs?t.jsx(St,{size:12,className:"spinner"}):t.jsx(rh,{size:12})})]},$t.id)})})()]})]})]},we.id)),(!ye.get(U.id)||ye.get(U.id)?.length===0)&&!Ct&&!U.acceptanceCriteria?.trim()&&(Le.length>0?t.jsxs("div",{className:"mission-assertions__list","data-testid":"milestone-feature-acceptance-rollup",children:[t.jsx("span",{className:"mission-assertions__title",children:"Completion criteria (from features)"}),Le.map(we=>t.jsxs("div",{className:"mission-assertion",children:[t.jsx("span",{className:"mission-assertion__title",children:we.title}),t.jsxs("p",{className:"mission-assertion__text",children:[t.jsx("strong",{children:"Acceptance:"})," ",we.acceptanceCriteria]})]},we.id))]}):t.jsx("div",{className:"mission-manager__empty mission-assertions__empty",children:t.jsx("span",{children:"No assertions defined. Add one to define completion criteria."})}))]})]})]})]})]},U.id)}),g&&!Ce&&j===null&&t.jsxs("button",{className:"mission-add-btn",onClick:ws,children:[t.jsx(Bn,{size:16}),"Add Milestone"]}),Ce&&j===null&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Milestone title",value:le.title,onChange:U=>fe({...le,title:U.target.value}),onKeyDown:Ta,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:le.description,onChange:U=>fe({...le,description:U.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:le.acceptanceCriteria,onChange:U=>fe({...le,acceptanceCriteria:U.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:ee,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Ns,children:"Cancel"})]})]}),g.milestones.length===0&&!Ce&&t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(Ga,{size:24}),t.jsx("span",{children:"No milestones yet. Add one to get started."})]})]}):t.jsxs("div",{className:"mission-detail__activity","data-testid":"mission-activity-tab",children:[t.jsxs("div",{className:"mission-detail__activity-controls",children:[t.jsxs("label",{className:"mission-detail__activity-filter",children:[t.jsx("span",{children:"Filter"}),t.jsxs("select",{value:Ut,onChange:U=>gn(U.target.value),"data-testid":"mission-activity-filter",children:[t.jsx("option",{value:"all",children:"All events"}),t.jsx("option",{value:"errors",children:"Errors & warnings"}),t.jsx("option",{value:"state_changes",children:"State changes"}),t.jsx("option",{value:"tasks",children:"Task events"}),t.jsx("option",{value:"slices",children:"Slice & milestone events"}),t.jsx("option",{value:"autopilot",children:"Autopilot events"})]})]}),t.jsxs("span",{className:"mission-detail__activity-count",children:[Wt.length," of ",G]})]}),!ct&&ma&&t.jsx("div",{className:"mission-detail__activity-load-more mission-detail__activity-load-more--top",children:t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:rr,"data-testid":"mission-activity-load-more",children:"Load more"})}),ct?t.jsxs("div",{className:"mission-manager__loading mission-detail__activity-loading",children:[t.jsx(St,{size:18,className:"spinner"}),t.jsx("span",{children:"Loading mission activity..."})]}):Wt.length===0?t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(Ls,{size:18}),t.jsx("span",{children:"No events yet."})]}):t.jsxs("div",{ref:xt,className:"mission-events","data-testid":"mission-activity-events",children:[Wt.map(U=>{const Te=!!(U.metadata&&Object.keys(U.metadata).length>0),Qe=In.has(U.id);return t.jsxs("div",{className:"mission-event",children:[t.jsxs("div",{className:"mission-event__header",children:[t.jsx("span",{className:`mission-event__type ${uD(U.eventType)}`,children:mD(U.eventType)}),t.jsx("span",{className:"mission-event__time",children:hc(U.timestamp)})]}),t.jsx("p",{className:"mission-event__description",children:U.description}),t.jsx("span",{className:"mission-event__timestamp",children:new Date(U.timestamp).toLocaleString()}),Te&&t.jsxs("div",{className:"mission-event__metadata",children:[t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm",onClick:()=>or(U.id),"data-testid":`mission-event-metadata-${U.id}`,children:[Qe?"Hide":"Show"," metadata"]}),Qe&&t.jsx("pre",{className:"mission-event__metadata-content",children:JSON.stringify(U.metadata,null,2)})]})]},U.id)}),t.jsx("div",{ref:Mt})]})]})]}):null,Qs=U=>{tt(U),Ve(!0)},Yi=()=>{bt.current=Ie??null,tt(void 0),Ve(!1)},vi=async U=>{try{await gC(U,r),mt(Te=>Te.filter(Qe=>Qe.id!==U))}catch(Te){if(Te instanceof sc&&Te.status===409){a("Draft is open in another tab","error");return}if(Te instanceof sc&&Te.status===404){mt(Qe=>Qe.filter(Nt=>Nt.id!==U));return}a(Me(Te)||"Failed to discard draft","error");return}finally{ot(null)}},so=()=>$e.map(U=>{const Te=U.status==="error",Qe=U.status==="generating",Nt=aD(U.status);return t.jsxs("div",{className:"mission-list__item mission-list__item--interview",role:"button",tabIndex:0,"aria-label":`Resume interview ${U.title||"Mission interview"}`,onClick:()=>Qs(U.id),onKeyDown:vn=>{if(vn.currentTarget===vn.target){if(vn.key==="Enter"){Qs(U.id);return}vn.key===" "&&(vn.preventDefault(),Qs(U.id))}},children:[t.jsxs("div",{className:"mission-list__item-content",children:[t.jsxs("div",{className:"mission-list__item-header",children:[t.jsx(fs,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{className:"mission-list__item-title",children:U.title||"Mission interview"})]}),t.jsx("div",{className:"mission-list__item-tags",children:t.jsx("span",{className:`mission-status-badge mission-status-badge--sm mission-interview-status mission-interview-status--${U.status}`,children:iD(U.status)})}),t.jsx("p",{className:"mission-list__item-description",children:Qe?"Generating mission hierarchy from interview context.":Te?"Interview hit an error. Retry from this list item.":"Interview is waiting for your next response."})]}),t.jsxs("div",{className:"mission-list__item-actions mission-list__resume-actions",onClick:vn=>vn.stopPropagation(),children:[t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm",onClick:()=>Qs(U.id),title:Nt,"aria-label":Nt,disabled:Qe,children:[Qe?t.jsx(St,{size:14,className:"spinner"}):Te?t.jsx(bs,{size:14}):t.jsx(fs,{size:14}),t.jsx("span",{children:Qe?"Generating…":Te?"Retry":"Resume"})]}),t.jsxs("button",{className:"mission-btn mission-btn--danger mission-btn--sm",onClick:()=>ot({type:"interview_draft",id:U.id}),title:"Discard draft","aria-label":"Discard draft",children:[t.jsx(zn,{size:14}),t.jsx("span",{children:"Discard"})]})]})]},U.id)}),Qi=(U,Te)=>U.map(Qe=>{const Nt=Qe,vn=g?.id===Nt.id,Kt=xo[Nt.status]||{bg:"",text:""},Cn=Nt.summary,Le=Q.get(Nt.id),we=lD(Le),Be=!!(Cn&&(Cn.totalMilestones>0||Cn.totalFeatures>0)),$t=Le?.totalTasks??0,bn=Le?.tasksCompleted??0,rs=Le?.tasksFailed??0,Qn=Le?.estimatedCompletionPercent??Cn?.progressPercent??0,Xn=Be||$t>0||rs>0||!!Le?.lastActivityAt,_n=Te?.interviewStyle===!0;return t.jsxs("div",{className:`mission-list__item ${vn?"mission-list__item--selected":""} ${_n?"mission-list__item--interview":""}`,role:"button",tabIndex:0,"aria-label":`Open mission ${Nt.title}`,"aria-pressed":vn,onClick:()=>Ki(Qe),onKeyDown:os=>{if(os.currentTarget===os.target){if(os.key==="Enter"){Ki(Qe);return}os.key===" "&&(os.preventDefault(),Ki(Qe))}},children:[t.jsxs("div",{className:"mission-list__item-content",children:[t.jsxs("div",{className:"mission-list__item-header",children:[t.jsx(_s,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{className:"mission-list__item-title",children:Nt.title})]}),t.jsxs("div",{className:"mission-list__item-tags",children:[Qe.autopilotEnabled&&t.jsx("span",{title:"Autopilot enabled",children:t.jsx(us,{size:12,className:"mission-list__item-autopilot-icon"})}),t.jsx("span",{className:`mission-health-badge mission-health-badge--${we}`,"data-testid":`mission-health-badge-${Nt.id}`,"aria-label":`Mission health: ${we}`}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Kt.bg,color:Kt.text},children:Nt.status}),_n&&t.jsx("span",{className:"mission-status-badge mission-status-badge--sm mission-interview-status mission-interview-status--awaiting_input",children:"Interview in progress"})]}),_n?t.jsx("p",{className:"mission-list__item-description",children:"Mission interview is still in progress. Open this mission to continue planning."}):Nt.description?t.jsx("p",{className:"mission-list__item-description",children:Nt.description}):null,Xn&&t.jsxs("div",{className:"mission-list__item-summary",children:[Be&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"mission-list__item-stat",children:[Cn.completedMilestones,"/",Cn.totalMilestones," milestones"]}),t.jsxs("span",{className:"mission-list__item-stat",children:[Cn.completedFeatures,"/",Cn.totalFeatures," features"]})]}),t.jsxs("span",{className:"mission-list__item-stat","data-testid":`mission-task-stats-${Nt.id}`,children:[bn,"/",$t," tasks"]}),rs>0&&t.jsxs("button",{className:"mission-list__item-failed",onClick:os=>{os.stopPropagation(),Ki(Qe)},"data-testid":`mission-failed-${Nt.id}`,title:"View mission failures",children:[rs," failed"]}),t.jsx("div",{className:`mission-list__item-progress mission-list__item-progress--${we}`,children:t.jsx("div",{className:"mission-list__item-progress-bar",style:{width:`${Qn}%`}})})]}),Xn&&t.jsx("div",{className:"mission-list__item-activity",children:t.jsxs("span",{className:"mission-relative-time","data-testid":`mission-last-activity-${Nt.id}`,children:["Activity ",hc(Le?.lastActivityAt)]})})]}),t.jsxs("div",{className:"mission-list__item-actions",onClick:os=>os.stopPropagation(),children:[Nt.status==="active"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>oi(Nt.id),title:"Stop mission",children:t.jsx(Fi,{size:14})}),Nt.status==="blocked"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>ls(Nt.id),title:"Resume mission",children:t.jsx(ds,{size:14})}),Nt.status==="planning"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Ti(Nt.id),title:"Start mission",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>ms(Qe),title:"Edit mission",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ot({type:"mission",id:Nt.id}),title:"Delete mission",children:t.jsx(zn,{size:14})})]})]},Nt.id)}),cr=({hideBottomButtons:U=!1}={})=>{const Te=f.filter(Kt=>Kt.interviewState==="in_progress"),Qe=f.filter(Kt=>Kt.interviewState!=="in_progress"),Nt=S&&f.length>0&&!A,vn=!U&&!Nt;return t.jsxs("div",{className:"mission-list",children:[A&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:T.title,onChange:Kt=>F({...T,title:Kt.target.value}),onKeyDown:xi,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:T.description,onChange:Kt=>F({...T,description:Kt.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:hs,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:ys,children:"Cancel"})]})]}),Nt&&t.jsx("div",{className:"mission-list__top-action",children:t.jsxs("button",{className:"btn btn-sm btn-task-create mission-list__primary-cta",onClick:()=>Ve(!0),children:[t.jsx(fs,{size:14}),"Plan New Mission"]})}),$e.length>0&&t.jsxs("div",{className:"mission-list__drafts-group",children:[t.jsxs("div",{className:"mission-list__drafts-header",children:[t.jsx(fs,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{children:"Drafts"}),t.jsxs("span",{children:["(",$e.length,")"]})]}),so()]}),Qi(Te,{interviewStyle:!0}),Qi(Qe),H&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:T.title,onChange:Kt=>F({...T,title:Kt.target.value}),onKeyDown:xi,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:T.description,onChange:Kt=>F({...T,description:Kt.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__row",children:[t.jsxs("select",{value:T.status,onChange:Kt=>F({...T,status:Kt.target.value}),children:[t.jsx("option",{value:"planning",children:"Planning"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"blocked",children:"Blocked"}),t.jsx("option",{value:"complete",children:"Complete"}),t.jsx("option",{value:"archived",children:"Archived"})]}),t.jsxs("label",{className:"mission-checkbox",children:[t.jsx("input",{type:"checkbox",checked:T.autopilotEnabled,onChange:Kt=>F({...T,autopilotEnabled:Kt.target.checked})}),t.jsx(us,{size:12})," Autopilot"]})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:hs,disabled:W,children:[W?t.jsx(St,{size:14,className:"spinner"}):t.jsx(vs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:ys,children:"Cancel"})]})]}),f.length===0&&$e.length===0&&Te.length===0&&!A&&t.jsxs("div",{className:"mission-manager__empty mission-manager__empty--large mission-manager__empty--mission",children:[t.jsx(_s,{size:32}),t.jsx("h3",{className:"mission-manager__empty-title",children:"No missions yet"}),t.jsx("p",{className:"mission-manager__empty-body",children:"Missions are large initiatives that bundle milestones, slices, and features into a single plan. Plan a mission to break down a goal end-to-end and let agents work through it autopilot-style."}),t.jsxs("button",{className:"btn btn-sm btn-primary mission-manager__empty-cta",onClick:()=>Ve(!0),children:[t.jsx(fs,{size:14}),"Plan New Mission"]})]}),!A&&t.jsx("div",{className:"mission-list__footer",children:vn&&t.jsx("div",{className:"mission-list__footer-actions",children:t.jsxs("button",{className:"mission-add-btn",onClick:()=>Ve(!0),children:[t.jsx(fs,{size:16}),"Plan New Mission"]})})})]})},yi=()=>{const U=ke?.type==="interview_draft";return t.jsx("div",{className:"mission-confirm-panel mission-confirm-panel--danger",children:t.jsxs("div",{className:"mission-confirm-panel__content",children:[t.jsx("p",{children:U?"Discard this interview draft? This removes the saved draft and cannot be undone.":`Delete this ${ke?.type}? This cannot be undone.`}),t.jsxs("div",{className:"mission-confirm-panel__actions",children:[t.jsx("button",{className:"mission-btn mission-btn--danger",onClick:async()=>{ke&&(ke.type==="mission"?await On(ke.id):ke.type==="milestone"?await _e(ke.id):ke.type==="slice"?await Je(ke.id):ke.type==="feature"?await Fe(ke.id):ke.type==="interview_draft"&&await vi(ke.id))},children:U?"Discard":"Delete"}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:()=>ot(null),children:"Cancel"})]})]})})},dr=()=>t.jsx("div",{className:"mission-confirm-panel mission-confirm-panel--link",children:t.jsxs("div",{className:"mission-confirm-panel__content",children:[t.jsx("p",{children:"Link feature to task:"}),t.jsx("input",{type:"text",placeholder:"Task ID (e.g., FN-001)",value:Ee,onChange:U=>Oe(U.target.value),autoFocus:!0}),l.length>0&&t.jsxs("div",{className:"mission-task-suggestions",children:[t.jsx("small",{children:"Or select:"}),t.jsx("div",{className:"mission-task-suggestions__list",children:l.slice(0,5).map(U=>t.jsxs("button",{className:"mission-task-suggestions__item",onClick:()=>Oe(U.id),children:[U.id,": ",U.title||"Untitled"]},U.id))})]}),t.jsxs("div",{className:"mission-confirm-panel__actions",children:[t.jsx("button",{className:"mission-btn mission-btn--primary",onClick:Ge,children:"Link"}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:()=>{ce(null),Oe("")},children:"Cancel"})]})]})}),ur=t.jsxs("div",{ref:lr,className:`mission-manager mission-manager--desktop${n?" mission-manager--inline":""}`,role:n?void 0:"dialog","aria-modal":n?void 0:!0,"aria-label":n?void 0:"Mission Manager","data-testid":"mission-manager-dialog",children:[t.jsxs("div",{className:`mission-manager__header${n?" mission-manager__header--inline":""}`,children:[t.jsxs("div",{className:"mission-manager__header-title",children:[g&&t.jsx("button",{className:"mission-manager__back-btn",onClick:ua,title:"Back to missions","aria-label":"Back to missions list","data-testid":"mission-back-btn",children:t.jsx(wc,{size:18})}),t.jsx(_s,{size:18,className:"mission-manager__header-icon"}),t.jsxs("h2",{className:"mission-manager__title","data-testid":"mission-header-title",children:[t.jsx("span",{className:"mission-manager__title-text mission-manager__title-text--desktop",children:"Missions"}),t.jsx("span",{className:"mission-manager__title-text mission-manager__title-text--mobile",children:g?g.title:"Missions"})]})]}),!n&&t.jsx("button",{className:"modal-close",onClick:s,title:"Close","aria-label":"Close Mission Manager","data-testid":"mission-close-btn",children:t.jsx(yn,{size:18})})]}),S?t.jsxs("div",{className:"mission-manager__body mission-manager__body--stacked",children:[v?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(St,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading missions..."})]}):y?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(St,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading mission details..."})]}):g?Da():cr(),ke&&yi(),Pe&&dr()]}):t.jsxs("div",{className:"mission-manager__split",children:[t.jsxs("aside",{className:"mission-manager__sidebar","data-testid":"mission-sidebar","aria-label":"Mission list",style:S?void 0:{width:`${x}px`},children:[t.jsx("div",{className:"mission-manager__sidebar-list",children:v?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(St,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading missions..."})]}):cr({hideBottomButtons:!0})}),t.jsx("div",{className:"mission-manager__sidebar-footer","data-testid":"mission-sidebar-footer",children:t.jsxs("button",{className:"btn btn-primary mission-manager__sidebar-cta",onClick:()=>Ve(!0),title:"Plan New Mission","aria-label":"Plan New Mission",children:[t.jsx(fs,{size:14}),"Plan New Mission"]})})]}),!S&&t.jsx("div",{className:"mission-manager__sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Tl,"aria-valuemax":Pl,"aria-valuenow":x,"aria-label":"Resize mission sidebar",tabIndex:0,onPointerDown:z,onKeyDown:_}),t.jsxs("div",{className:"mission-manager__detail-pane",children:[y?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(St,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading mission details..."})]}):g?Da():t.jsxs("div",{className:"mission-manager__detail-pane-empty","data-testid":"mission-empty-detail",children:[t.jsx(_s,{size:32}),t.jsx("span",{children:"Select a mission to view details"})]}),ke&&yi(),Pe&&dr()]})]})]}),mr=t.jsx(q4,{isOpen:ht,onClose:Yi,onMissionCreated:()=>{qt(),a("Mission created from AI interview","success")},projectId:r,resumeSessionId:Ie}),La=Xe?t.jsx(Z4,{isOpen:!0,onClose:()=>rt(null),onApplied:()=>{rt(null),g&&Pt(g.id)},targetType:Xe.type,targetId:Xe.id,targetTitle:Xe.title,missionContext:g?.title,projectId:r,resumeSessionId:Xe.resumeSessionId}):null;return n?t.jsxs(t.Fragment,{children:[ur,mr,La]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"mission-manager-overlay open",onClick:U=>U.target===U.currentTarget&&s(),"data-testid":"mission-manager-overlay",role:"dialog","aria-modal":"true",children:ur}),mr,La]})}const fD={pre:({children:e,...n})=>t.jsx("pre",{...n,className:"mailbox-markdown-pre",children:e}),table:({children:e,...n})=>t.jsx("table",{...n,className:"mailbox-markdown-table",children:e}),a:({children:e,...n})=>t.jsx("a",{...n,target:"_blank",rel:"noopener noreferrer",children:e})},ig=i.memo(function({content:n,className:s,testId:a}){const r=s?`mailbox-markdown ${s}`:"mailbox-markdown";return t.jsx("div",{className:r,"data-testid":a,children:t.jsx(ti,{remarkPlugins:[ni],components:fD,children:n})})}),Ol=2e3;function ag({recipient:e,replyContext:n,agents:s=[],projectId:a,onSend:r,onCancel:o,addToast:l,isLoadingAgents:c=!1}){const[d,u]=i.useState(e?.id??""),[h,m]=i.useState(e?.type??"agent"),[f,p]=i.useState(""),[g,w]=i.useState(!1),[v,b]=i.useState(!1),[y,N]=i.useState(null),S=i.useRef(null),C=i.useMemo(()=>s.find(H=>H.id===d),[s,d]),x=i.useMemo(()=>e?s.find(H=>H.id===e.id):void 0,[s,e]),k=h==="agent",R=k&&C?.runtimeConfig?.messageResponseMode==="immediate",z=k&&(g||R),_=d.trim()!==""&&f.trim().length>0&&f.length<=Ol,A=i.useCallback(async()=>{if(!(!_||v)){b(!0),N(null);try{const H=h==="agent"?"user-to-agent":"system",M=n?{replyTo:{messageId:n.messageId}}:void 0,T=z;await zC({toId:d.trim(),toType:h,content:f.trim(),type:H,...M?{metadata:M}:{},...T?{wakeImmediately:!0}:{}},a),r()}catch(H){const M=Me(H)||"Failed to send message";N(M),l?.(M,"error")}finally{b(!1)}}},[_,v,d,h,f,z,n,a,r,l]),X=i.useCallback(H=>{u(H),m("agent")},[]);return i.useEffect(()=>{n&&S.current?.focus()},[n]),i.useEffect(()=>{if(!n||typeof window>"u"||window.visualViewport==null)return;const H=()=>{S.current?.scrollIntoView({block:"center",behavior:"auto"})};return window.visualViewport.addEventListener("resize",H),()=>{window.visualViewport?.removeEventListener("resize",H)}},[n]),t.jsxs("div",{className:"message-composer","data-testid":"message-composer",children:[t.jsxs("div",{className:"message-composer-header",children:[t.jsx("span",{children:n?"Reply":"New Message"}),t.jsx("button",{className:"btn-icon",onClick:o,"aria-label":"Cancel","data-testid":"message-composer-cancel",children:t.jsx(yn,{size:16})})]}),t.jsxs("div",{className:"message-composer-body",children:[!e&&t.jsxs("div",{className:"message-composer-field",children:[t.jsx("label",{className:"message-composer-label",htmlFor:"message-recipient",children:"To:"}),t.jsxs("select",{id:"message-recipient",className:"message-composer-select",value:d,onChange:H=>X(H.target.value),disabled:c||s.length===0,"data-testid":"message-composer-recipient",children:[t.jsx("option",{value:"",children:c?"Loading agents…":s.length===0?"No agents available":"Select agent…"}),s.map(H=>t.jsx("option",{value:H.id,children:H.name||H.id},H.id))]})]}),e&&t.jsxs("div",{className:"message-composer-field",children:[t.jsx("span",{className:"message-composer-label",children:"To:"}),t.jsxs("span",{className:"message-composer-recipient-fixed",children:[t.jsx(es,{size:14}),x?.name||e.id]})]}),n&&t.jsxs("div",{className:"message-composer-field","data-testid":"message-composer-reply-context",children:[t.jsx("span",{className:"message-composer-label",children:"Replying to:"}),t.jsx("span",{className:"message-composer-recipient-fixed",children:n.preview?.trim()?n.preview:`Message ${n.messageId}`})]}),t.jsxs("div",{className:"message-composer-field message-composer-field--content",children:[t.jsx("label",{className:"message-composer-label",htmlFor:"message-content",children:"Message:"}),t.jsx("textarea",{id:"message-content",ref:S,className:"message-composer-textarea",placeholder:"Type your message…",value:f,onChange:H=>p(H.target.value),maxLength:Ol,rows:4,"data-testid":"message-composer-content"}),t.jsx("div",{className:"message-composer-charcount","data-testid":"message-composer-charcount",children:t.jsxs("span",{className:f.length>Ol?"over-limit":"",children:[f.length,"/",Ol]})})]}),k&&t.jsx("div",{className:"message-composer-field message-composer-field--wake",children:t.jsxs("label",{className:"message-composer-wake-label",children:[t.jsx("input",{type:"checkbox",checked:z,disabled:R,onChange:H=>w(H.target.checked),"data-testid":"message-composer-wake"}),t.jsxs("span",{children:["Wake agent immediately",t.jsx("span",{className:"message-composer-wake-hint","data-testid":"message-composer-wake-hint",children:R?"(agent is already set to immediate response mode)":"(one-off override for this message only)"})]})]})}),y&&t.jsxs("div",{className:"message-composer-error","data-testid":"message-composer-error",children:[t.jsx(Vs,{size:14}),t.jsx("span",{children:y})]})]}),t.jsxs("div",{className:"message-composer-footer",children:[t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:o,"data-testid":"message-composer-cancel-btn",children:"Cancel"}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:A,disabled:!_||v,"data-testid":"message-composer-send",children:v?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:14,className:"spin"}),t.jsx("span",{children:"Sending…"})]}):t.jsxs(t.Fragment,{children:[t.jsx(qa,{size:14}),t.jsx("span",{children:"Send"})]})})]})]})}const Ts="__all_agents__",pc=280,Hu=.65,Yd=16,rg=320;function qu(e){return Math.max(pc,e*Hu)}function Qd(e,n){const s=qu(n);return Math.min(Math.max(e,pc),s)}function og(e){try{const n=Gn("kb-dashboard-mailbox-sidebar-width",e);if(!n)return rg;const s=Number(n);if(Number.isFinite(s)&&s>0)return s}catch{}return rg}function ea(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(a/36e5),l=Math.floor(a/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function gD(e,n,s){if(n==="user")return e==="dashboard"?"You":`User: ${e}`;if(n==="agent"){const a=s?.get(e)?.trim();return a?a===e?`Agent: ${e}`:`Agent: ${a} (${e})`:`Agent: ${e}`}return"System"}function bD(e){switch(e){case"agent-to-agent":return"Agent ↔ Agent";case"agent-to-user":return"Agent → You";case"user-to-agent":return"You → Agent";case"system":return"System"}}function lg(e,n=80){return e.length<=n?e:`${e.slice(0,n)}…`}function cg(){if(typeof window>"u")return null;const n=new URLSearchParams(window.location.search).get("mailbox-message");return n||(/^#message-(.+)$/.exec(window.location.hash)?.[1]??null)}function vo(e){return`mailbox-list-message-${e}`}function Xd(e){return`mailbox-detail-message-${e}`}function xD(e,n){const s=[...e];s.some(o=>o.id===n.id)||s.push(n);const a=new Set([n.id]);let r=!0;for(;r;){r=!1;for(const o of s){const l=o.metadata?.replyTo?.messageId;a.has(o.id)&&l&&!a.has(l)&&(a.add(l),r=!0),l&&a.has(l)&&!a.has(o.id)&&(a.add(o.id),r=!0)}}return s.filter(o=>a.has(o.id)).sort((o,l)=>new Date(o.createdAt).getTime()-new Date(l.createdAt).getTime())}function vD({projectId:e,addToast:n,onUnreadCountChange:s}){const[a,r]=i.useState("inbox"),[o,l]=i.useState(null),[c,d]=i.useState(null),[u,h]=i.useState(0),[m,f]=i.useState(!1),[p,g]=i.useState(null),[w,v]=i.useState([]),[b,y]=i.useState(!1),[N,S]=i.useState(null),[C,x]=i.useState(null),[k,R]=i.useState(Ts),[z,_]=i.useState("inbox"),[A,X]=i.useState(null),[H,M]=i.useState(null),[T,F]=i.useState([]),[W,oe]=i.useState("pending"),[D,E]=i.useState([]),[P,$]=i.useState(0),[j,q]=i.useState(null),[le,fe]=i.useState(""),[Ce,Ae]=i.useState(!1),re=i.useMemo(()=>new Map(T.map(J=>[J.id,J.name??""])),[T]),Z=i.useCallback((J,ke)=>gD(J,ke,re),[re]),ie=ii()==="mobile",ve=!ie,[ne,L]=i.useState(()=>og(e)),Y=i.useRef(null),{keyboardOverlap:ue,viewportHeight:B,viewportOffsetTop:xe,keyboardOpen:je}=la({enabled:ie}),se=i.useMemo(()=>{if(je)return{"--keyboard-overlap":`${ue}px`,"--vv-offset-top":`${xe}px`,...B!=null?{"--vv-height":`${B}px`}:{}}},[je,ue,B,xe]);i.useEffect(()=>{L(og(e))},[e]),i.useEffect(()=>{if(!ve)return;const J=Y.current?.clientWidth;J&&L(ke=>Qd(ke,J))},[ve]),i.useEffect(()=>{if(ve)try{cs("kb-dashboard-mailbox-sidebar-width",String(ne),e)}catch{}},[ve,e,ne]);const Ue=i.useCallback(J=>{if(!ve)return;J.preventDefault();const ke=Y.current;if(!ke)return;const ot=ke.getBoundingClientRect(),ye=He=>{const he=He.clientX-ot.left;L(Qd(he,ot.width))},it=()=>{window.removeEventListener("mousemove",ye),window.removeEventListener("mouseup",it)};window.addEventListener("mousemove",ye),window.addEventListener("mouseup",it)},[ve]),De=i.useCallback(J=>{if(!ve)return;const ke=Y.current?.clientWidth??0,ot=ne/Hu+Yd,ye=Math.max(ke,ot),it=qu(ye);if(J.key==="ArrowLeft"||J.key==="ArrowRight"){J.preventDefault();const He=J.key==="ArrowLeft"?-Yd:Yd;L(he=>Qd(he+He,ye));return}if(J.key==="Home"){J.preventDefault(),L(pc);return}J.key==="End"&&(J.preventDefault(),L(it))},[ve,ne]),dt=i.useCallback(async()=>{f(!0);try{const J=await OC({limit:50},e);l(J),h(J.unreadCount),s?.(J.unreadCount)}catch{}finally{f(!1)}},[e,s]),Pe=i.useCallback(async()=>{f(!0);try{const J=await FC({limit:50},e);d(J)}catch{}finally{f(!1)}},[e]),ce=i.useCallback(async J=>{f(!0);try{const ke=await VC(J,e);X(ke)}catch{}finally{f(!1)}},[e]),Ee=i.useCallback(async()=>{f(!0);try{const J=await WC(e);M(J)}catch{}finally{f(!1)}},[e]),Oe=i.useCallback(async()=>{try{const J=await Yr(void 0,e);F(J)}catch{}},[e]),ht=i.useCallback(async()=>{try{const J=await rx(e);h(J.unreadCount),$(J.pendingApprovalCount??0),s?.(J.unreadCount)}catch{}},[e,s]),Ve=i.useCallback(async J=>{f(!0);try{const ke=await xl({status:J==="pending"?"pending":void 0,limit:100},e);if(J==="pending")E(ke.requests);else{const[ot,ye,it]=await Promise.all([xl({status:"approved",limit:100},e),xl({status:"denied",limit:100},e),xl({status:"completed",limit:100},e)]);E([...ot.requests,...ye.requests,...it.requests].sort((He,he)=>he.updatedAt.localeCompare(He.updatedAt)))}$(ke.pendingCount)}catch{}finally{f(!1)}},[e]);i.useEffect(()=>{a==="inbox"?dt():a==="outbox"?Pe():a==="agents"?Oe():a==="approvals"&&Ve(W)},[a,dt,Pe,Oe,Ve,W]),i.useEffect(()=>{if(k===Ts){Ee();return}ce(k)},[k,ce,Ee]),i.useEffect(()=>{ht()},[ht]),i.useEffect(()=>{Oe()},[Oe]),i.useEffect(()=>{if(typeof EventSource>"u")return;const J=e?`?projectId=${encodeURIComponent(e)}`:"",ke=()=>{ht(),a==="inbox"?dt():a==="outbox"?Pe():a==="approvals"&&Ve(W),k===Ts?Ee():k&&ce(k)};return fi(`/api/events${J}`,{events:{"message:sent":ke,"message:received":ke,"message:read":ke,"message:deleted":ke,"approval:requested":ke,"approval:updated":ke,"approval:decided":ke}})},[e,a,k,ht,dt,Pe,ce,Ee,Ve,W]);const ge=i.useCallback(async J=>{if(g(J),!J.read&&a==="inbox")try{const ke=await BC(J.id,e);ke&&l(ye=>ye&&{...ye,messages:ye.messages.map(it=>it.id===ke.id?ke:it),unreadCount:Math.max(0,ye.unreadCount-1)});const ot=Math.max(0,u-1);h(ot),s?.(ot)}catch{}try{const ke=await qC(J.fromId,J.fromType,e);v(ke)}catch{v([J])}},[e,u,s,a]);i.useEffect(()=>{const J=cg();if(!J)return;const ke=[...o?.messages??[],...c?.messages??[],...A?.inbox??[],...A?.outbox??[],...H?.messages??[],...w].find(ot=>ot.id===J);ke&&ge(ke)},[o,c,A,H,w,ge]),i.useEffect(()=>{const J=cg();if(!J)return;const ke=document.getElementById(Xd(J));if(!ke)return;ke.scrollIntoView({behavior:"smooth",block:"center"}),ke.classList.add("mailbox-message-highlight");const ot=window.setTimeout(()=>{ke.classList.remove("mailbox-message-highlight")},2e3);return()=>{window.clearTimeout(ot)}},[p,w]);const me=i.useCallback(()=>{g(null),v([])},[]),$e=i.useCallback(async()=>{try{const J=await UC(e);h(0),s?.(0),l(ke=>ke&&{...ke,messages:ke.messages.map(ot=>({...ot,read:!0})),unreadCount:0}),n?.(`Marked ${J.markedAsRead} messages as read`,"success")}catch{n?.("Failed to mark messages as read","error")}},[e,n,s]),mt=i.useCallback(async J=>{try{await HC(J,e),g(null),v([]),a==="inbox"?dt():a==="outbox"?Pe():k===Ts?Ee():k&&ce(k),n?.("Message deleted","success")}catch{n?.("Failed to delete message","error")}},[e,a,k,dt,Pe,ce,Ee,n]),jt=i.useCallback(J=>{S({id:J.fromId,type:J.fromType}),x({messageId:J.id,preview:lg(J.content,120)}),y(!0)},[]),tt=i.useCallback(()=>{y(!1),S(null),x(null),n?.("Message sent","success"),a==="outbox"?Pe():a==="agents"&&k===Ts?Ee():a==="agents"&&k&&ce(k),ht()},[a,Pe,k,ce,Ee,n,ht]),bt=i.useCallback(()=>{S(a==="agents"&&k&&k!==Ts?{id:k,type:"agent"}:null),x(null),y(!0)},[a,k]),Ie=i.useCallback(()=>{y(!1),S(null),x(null)},[]),Xe=i.useCallback(async J=>{try{const ke=await Th(J.id,e);q(ke),fe("")}catch{n?.("Failed to load approval request","error")}},[e,n]),rt=i.useCallback(async J=>{if(!(!j||Ce)){Ae(J);try{await GC(j.id,{decision:J,comment:le||void 0},e),await Ve(W);const ke=await Th(j.id,e);q(ke),fe(""),n?.(`Request ${J==="approve"?"approved":"denied"}`,"success")}catch{n?.("Failed to submit decision","error")}finally{Ae(!1)}}},[j,Ce,le,e,Ve,W,n]),It=()=>{if(!p||b)return null;const J=xD(w,p);return t.jsxs("div",{className:"mailbox-message-detail","data-testid":"mailbox-message-detail",id:Xd(p.id),children:[t.jsxs("div",{className:"mailbox-message-detail-header",children:[ie&&t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:me,"data-testid":"mailbox-back-to-list",children:"← Back"}),t.jsxs("div",{className:"mailbox-message-detail-meta",children:[t.jsx("span",{className:"mailbox-message-type",children:bD(p.type)}),t.jsx("span",{className:"mailbox-message-time",children:ea(p.createdAt)})]}),t.jsxs("div",{className:"mailbox-message-detail-actions",children:[p.fromType==="agent"&&t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:()=>jt(p),"data-testid":"mailbox-reply",children:[t.jsx(na,{size:14}),t.jsx("span",{children:"Reply"})]}),t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:()=>mt(p.id),"data-testid":"mailbox-delete",children:[t.jsx(zn,{size:14}),t.jsx("span",{children:"Delete"})]})]})]}),t.jsxs("div",{className:"mailbox-message-participants",children:[t.jsxs("div",{className:"mailbox-participant",children:[t.jsx("span",{className:"mailbox-participant-label",children:"From:"}),t.jsxs("span",{className:"mailbox-participant-value",children:[p.fromType==="agent"?t.jsx(es,{size:14}):t.jsx(Fa,{size:14}),Z(p.fromId,p.fromType)]})]}),t.jsxs("div",{className:"mailbox-participant",children:[t.jsx("span",{className:"mailbox-participant-label",children:"To:"}),t.jsxs("span",{className:"mailbox-participant-value",children:[p.toType==="agent"?t.jsx(es,{size:14}):t.jsx(Fa,{size:14}),Z(p.toId,p.toType)]})]})]}),J.length>1&&t.jsxs("div",{className:"mailbox-conversation","data-testid":"mailbox-conversation",children:[t.jsx("div",{className:"mailbox-conversation-label",children:"Conversation"}),J.map(ke=>{const ot=ke.metadata?.replyTo?.messageId,ye=ot?J.find(it=>it.id===ot):void 0;return t.jsxs("div",{id:Xd(ke.id),className:`mailbox-conversation-msg ${ke.id===p.id?"current":""}`,children:[t.jsxs("div",{className:"mailbox-conversation-msg-header",children:[t.jsx("span",{children:Z(ke.fromId,ke.fromType)}),t.jsx("span",{className:"mailbox-message-time",children:ea(ke.createdAt)})]}),ot&&t.jsxs("div",{className:"mailbox-reply-context-static","data-testid":`mailbox-reply-context-${ke.id}`,children:["↪ Replying to ",ye?lg(ye.content,60):`message ${ot}`]}),t.jsx(ig,{content:ke.content,className:"mailbox-conversation-msg-body"})]},ke.id)})]}),J.length<=1&&t.jsxs(t.Fragment,{children:[p.metadata?.replyTo?.messageId&&t.jsxs("div",{className:"mailbox-reply-context-static","data-testid":"mailbox-selected-reply-context",children:["↪ Replying to message ",p.metadata.replyTo.messageId]}),t.jsx(ig,{content:p.content,className:"mailbox-message-body",testId:"mailbox-message-body"})]})]})},_t=()=>t.jsxs(t.Fragment,{children:[a==="inbox"&&t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-inbox-list",children:[m&&!o&&t.jsx(Fl,{}),o&&o.messages.length===0&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-inbox-empty",children:[t.jsx(xa,{size:32}),t.jsx("p",{children:"No messages in your inbox"})]}),o?.messages.map(J=>t.jsxs("div",{id:vo(J.id),className:`mailbox-item ${J.read?"":"unread"}`,onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.fromType==="agent"?t.jsx(es,{size:16}):t.jsx(Fa,{size:16})}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsx("span",{className:"mailbox-item-from",children:Z(J.fromId,J.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:ea(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]}),!J.read&&t.jsx("div",{className:"mailbox-item-unread-dot","data-testid":`mailbox-unread-dot-${J.id}`})]},J.id))]}),a==="outbox"&&t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-outbox-list",children:[m&&!c&&t.jsx(Fl,{}),c&&c.messages.length===0&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-outbox-empty",children:[t.jsx(qa,{size:32}),t.jsx("p",{children:"No sent messages"})]}),c?.messages.map(J=>t.jsxs("div",{id:vo(J.id),className:"mailbox-item",onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.toType==="agent"?t.jsx(es,{size:16}):t.jsx(Fa,{size:16})}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsxs("span",{className:"mailbox-item-to",children:["To: ",Z(J.toId,J.toType)]}),t.jsx("span",{className:"mailbox-item-time",children:ea(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id))]}),a==="approvals"&&t.jsxs("div",{className:"mailbox-approvals","data-testid":"mailbox-approvals",children:[t.jsxs("div",{className:"mailbox-approval-filters","data-testid":"mailbox-approval-filters",children:[t.jsx("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${W==="pending"?"active":""}`,onClick:()=>{oe("pending"),q(null)},"data-testid":"mailbox-approval-filter-pending",children:"Pending"}),t.jsx("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${W==="history"?"active":""}`,onClick:()=>{oe("history"),q(null)},"data-testid":"mailbox-approval-filter-history",children:"History"})]}),t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-approval-list",children:[D.length===0&&!m&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-approval-empty",children:[t.jsx(xa,{size:32}),t.jsx("p",{children:W==="pending"?"No pending approvals":"No historical approvals"})]}),D.map(J=>t.jsxs("div",{className:"mailbox-item mailbox-approval-item",onClick:()=>void Xe(J),"data-testid":`mailbox-approval-item-${J.id}`,children:[t.jsx("div",{className:`status-dot mailbox-approval-status-dot mailbox-approval-status-dot--${J.status}`}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsxs("span",{className:"mailbox-item-from",children:[J.agentId," · ",J.actionCategory]}),t.jsx("span",{className:"mailbox-item-time",children:ea(J.createdAt)})]}),t.jsx("div",{className:"mailbox-item-preview",children:J.actionSummary})]}),t.jsx("span",{className:`mailbox-approval-status mailbox-approval-status--${J.status}`,children:J.status})]},J.id))]})]}),a==="agents"&&t.jsx("div",{className:"mailbox-agents","data-testid":"mailbox-agents",children:T.length===0?t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(es,{size:32}),t.jsx("p",{children:"No agents found"})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"mailbox-agents-header",children:[t.jsx("div",{className:"mailbox-agents-dropdown",children:t.jsxs("select",{className:"message-composer-select mailbox-agent-select",value:k,onChange:J=>{R(J.target.value),_("inbox")},"data-testid":"mailbox-agent-select",children:[t.jsx("option",{value:Ts,children:"All agents"}),T.map(J=>t.jsx("option",{value:J.id,children:J.name||J.id},J.id))]})}),t.jsxs("button",{className:"btn btn-sm btn-secondary mailbox-compose-btn",onClick:bt,"data-testid":"mailbox-compose-btn",children:[t.jsx(na,{size:14}),t.jsx("span",{children:"Compose"})]})]}),k&&k!==Ts&&t.jsxs("div",{className:"mailbox-agent-subtabs","data-testid":"mailbox-agent-subtabs",children:[t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${z==="inbox"?"active":""}`,onClick:()=>_("inbox"),"data-testid":"mailbox-agent-subtab-inbox",children:[t.jsx(xa,{size:12}),t.jsx("span",{children:"Inbox"}),A&&A.unreadCount>0&&t.jsx("span",{className:"mailbox-tab-badge",children:A.unreadCount})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${z==="outbox"?"active":""}`,onClick:()=>_("outbox"),"data-testid":"mailbox-agent-subtab-outbox",children:[t.jsx(qa,{size:12}),t.jsx("span",{children:"Outbox"})]})]}),t.jsxs("div",{className:"mailbox-agents-content",children:[k===Ts&&m&&!H&&t.jsx(Fl,{}),k===Ts&&H&&H.messages.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(xa,{size:32}),t.jsx("p",{children:"No agent-to-agent messages"})]}),k===Ts&&H&&H.messages.map(J=>t.jsxs("div",{id:vo(J.id),className:`mailbox-item ${J.read?"":"unread"}`,onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.fromType==="agent"?t.jsx(es,{size:16}):t.jsx(Fa,{size:16})}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsx("span",{className:"mailbox-item-from",children:Z(J.fromId,J.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:ea(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-participants","data-testid":`mailbox-item-participants-${J.id}`,children:[t.jsxs("span",{children:["From: ",Z(J.fromId,J.fromType)]}),t.jsxs("span",{children:["To: ",Z(J.toId,J.toType)]})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id)),k&&k!==Ts&&m&&!A&&t.jsx(Fl,{}),k&&k!==Ts&&A&&z==="inbox"&&A.inbox.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(xa,{size:32}),t.jsx("p",{children:"No received messages for this agent"})]}),k&&k!==Ts&&A&&z==="outbox"&&A.outbox.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(qa,{size:32}),t.jsx("p",{children:"No sent messages for this agent"})]}),k&&k!==Ts&&A&&z==="inbox"&&A.inbox.map(J=>t.jsxs("div",{id:vo(J.id),className:`mailbox-item ${J.read?"":"unread"}`,onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.fromType==="agent"?t.jsx(es,{size:16}):t.jsx(Fa,{size:16})}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsx("span",{className:"mailbox-item-from",children:Z(J.fromId,J.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:ea(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id)),k&&k!==Ts&&A&&z==="outbox"&&A.outbox.map(J=>t.jsxs("div",{id:vo(J.id),className:"mailbox-item",onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.toType==="agent"?t.jsx(es,{size:16}):t.jsx(Fa,{size:16})}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsxs("span",{className:"mailbox-item-to",children:["To: ",Z(J.toId,J.toType)]}),t.jsx("span",{className:"mailbox-item-time",children:ea(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id))]})]})})]}),We=()=>b?t.jsx(ag,{recipient:N,replyContext:C,agents:T,projectId:e,onSend:tt,onCancel:Ie,addToast:n}):p?It():a==="approvals"&&j?t.jsxs("div",{className:"mailbox-message-detail mailbox-approval-detail","data-testid":"mailbox-approval-detail",children:[ie&&t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:()=>q(null),"data-testid":"mailbox-approval-back-to-list",children:"← Back"}),t.jsx("div",{className:"mailbox-message-detail-header",children:t.jsxs("div",{className:"mailbox-message-detail-meta",children:[t.jsx("span",{className:"mailbox-message-type",children:j.actionCategory}),t.jsx("span",{className:"mailbox-message-time",children:j.status})]})}),t.jsxs("div",{className:"mailbox-message-body",children:[t.jsx("strong",{children:j.actionSummary}),t.jsxs("p",{children:["Requester: ",j.requester.actorName," (",j.agentId,")"]}),j.taskId&&t.jsxs("p",{children:["Task: ",j.taskId]}),t.jsxs("p",{children:["Requested: ",ea(j.createdAt)]})]}),t.jsx("div",{className:"mailbox-conversation","data-testid":"mailbox-approval-history",children:j.history.map(J=>t.jsxs("div",{className:"mailbox-conversation-msg",children:[t.jsxs("div",{className:"mailbox-conversation-msg-header",children:[t.jsx("span",{children:J.eventType}),t.jsx("span",{children:J.actor.actorName})]}),J.note&&t.jsx("div",{className:"mailbox-item-preview",children:J.note})]},J.id))}),j.status==="pending"&&t.jsxs("div",{className:"mailbox-approval-decision","data-testid":"mailbox-approval-decision",children:[t.jsx("textarea",{className:"message-composer-textarea mailbox-approval-comment",value:le,onChange:J=>fe(J.target.value),placeholder:"Optional comment","data-testid":"mailbox-approval-comment"}),t.jsxs("div",{className:"mailbox-header-actions",children:[t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:()=>void rt("deny"),disabled:Ce!==!1,"data-testid":"mailbox-approval-deny",children:"Deny"}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void rt("approve"),disabled:Ce!==!1,"data-testid":"mailbox-approval-approve",children:"Approve"})]})]})]}):t.jsxs("div",{className:"mailbox-split-empty","data-testid":"mailbox-split-empty",children:[t.jsx(Ka,{size:24}),t.jsx("p",{children:"Select a message to read"})]});return t.jsxs("div",{className:"mailbox-view",style:se,"data-testid":"mailbox-view",children:[t.jsxs("div",{className:"mailbox-header",children:[t.jsxs("div",{className:"mailbox-title",children:[t.jsx(Ka,{size:18}),t.jsx("span",{children:"Mailbox"}),u>0&&t.jsx("span",{className:"mailbox-unread-badge","data-testid":"mailbox-unread-badge",children:u})]}),t.jsxs("div",{className:"mailbox-header-actions",children:[t.jsxs("button",{className:"btn btn-sm btn-primary",onClick:bt,title:"Compose message","data-testid":"mailbox-header-compose",children:[t.jsx(na,{size:14}),t.jsx("span",{children:"Compose"})]}),a==="inbox"&&u>0&&t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:$e,title:"Mark all as read","data-testid":"mailbox-mark-all-read",children:[t.jsx(th,{size:14}),t.jsx("span",{children:"Mark all read"})]}),t.jsx("button",{className:"btn-icon",onClick:()=>{a==="inbox"?dt():a==="outbox"?Pe():a==="approvals"?Ve(W):k===Ts?Ee():k&&ce(k)},disabled:m,title:"Refresh","data-testid":"mailbox-refresh",children:m?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14})})]})]}),t.jsxs("div",{className:"mailbox-tabs","data-testid":"mailbox-tabs",children:[t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="inbox"?"active":""}`,onClick:()=>{r("inbox"),g(null)},"data-testid":"mailbox-tab-inbox",children:[t.jsx(xa,{size:14}),t.jsx("span",{children:"Inbox"}),u>0&&t.jsx("span",{className:"mailbox-tab-badge",children:u})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="outbox"?"active":""}`,onClick:()=>{r("outbox"),g(null)},"data-testid":"mailbox-tab-outbox",children:[t.jsx(qa,{size:14}),t.jsx("span",{children:"Outbox"})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="agents"?"active":""}`,onClick:()=>{r("agents"),g(null),q(null)},"data-testid":"mailbox-tab-agents",children:[t.jsx(es,{size:14}),t.jsx("span",{children:"Agents"})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="approvals"?"active":""}`,onClick:()=>{r("approvals"),g(null),q(null)},"data-testid":"mailbox-tab-approvals",children:[t.jsx(th,{size:14}),t.jsx("span",{children:"Approvals"}),P>0&&t.jsx("span",{className:"mailbox-tab-badge","data-testid":"mailbox-approvals-pending-badge",children:P})]})]}),t.jsx("div",{className:"mailbox-content","data-testid":"mailbox-content",children:ve?t.jsxs("div",{className:"mailbox-split-layout","data-testid":"mailbox-split-layout",ref:Y,children:[t.jsx("div",{className:"mailbox-split-list-pane","data-testid":"mailbox-split-list-pane",style:{width:`${ne}px`},children:_t()}),t.jsx("div",{className:"mailbox-split-resize-handle","data-testid":"mailbox-split-resize-handle",role:"separator","aria-orientation":"vertical","aria-label":"Resize message list pane",tabIndex:0,"aria-valuemin":pc,"aria-valuemax":Math.round(qu(Y.current?.clientWidth??ne/Hu)),"aria-valuenow":Math.round(ne),onMouseDown:Ue,onKeyDown:De}),t.jsx("div",{className:"mailbox-split-detail-pane","data-testid":"mailbox-split-detail-pane",children:We()})]}):t.jsxs(t.Fragment,{children:[It(),a==="approvals"&&j&&We(),b&&t.jsx(ag,{recipient:N,replyContext:C,agents:T,projectId:e,onSend:tt,onCancel:Ie,addToast:n}),!p&&!j&&!b&&_t()]})})]})}function Fl(){return t.jsx("div",{className:"mailbox-skeleton","data-testid":"mailbox-skeleton",children:Array.from({length:5}).map((e,n)=>t.jsxs("div",{className:"mailbox-skeleton-item",children:[t.jsx("div",{className:"mailbox-skeleton-avatar"}),t.jsxs("div",{className:"mailbox-skeleton-content",children:[t.jsx("div",{className:"mailbox-skeleton-line mailbox-skeleton-line--short"}),t.jsx("div",{className:"mailbox-skeleton-line mailbox-skeleton-line--long"})]})]},n))})}const yD=640;function wD({isOpen:e,onClose:n,onImport:s,tasks:a,projectId:r}){_i(e);const[o,l]=i.useState(""),[c,d]=i.useState(""),[u,h]=i.useState(""),[m,f]=i.useState(!1),[p,g]=i.useState("issues"),[w,v]=i.useState([]),[b,y]=i.useState(null),[N,S]=i.useState([]),[C,x]=i.useState(null),[k,R]=i.useState(null),[z,_]=i.useState(!1),[A,X]=i.useState([]),[H,M]=i.useState(!1),[T,F]=i.useState(""),W=i.useRef(!1),oe=i.useRef(null);qi(oe,e,"fusion:github-modal-size");const D=ra(n),[E,P]=i.useState(!1),[$,j]=i.useState("list"),q=i.useRef(null),le=new Set;for(const ge of a){const me=ge.description.match(/Source: (https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+)/);me&&le.add(me[1]);const $e=ge.description.match(/PR: (https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+)/);$e&&le.add($e[1])}i.useEffect(()=>{if(e)return l(""),d(""),h(""),v([]),y(null),S([]),x(null),g("issues"),R(null),_(!1),X([]),M(!0),F(""),q.current=null,W.current=!0,US().then(ge=>{if(W.current)if(X(ge),M(!1),ge.length===1){const me=ge[0];l(me.owner),d(me.repo),F(me.name)}else ge.length>1&&(l(""),d(""),F(""))}).catch(()=>{W.current&&M(!1)}),()=>{W.current=!1}},[e]);const fe=i.useCallback(ge=>{if(F(ge),ge==="")l(""),d("");else{const me=A.find($e=>$e.name===ge);me&&(l(me.owner),d(me.repo))}},[A]),Ce=i.useCallback(async()=>{if(!o.trim()||!c.trim()){R("Repository must be selected");return}f(!0),R(null),v([]),y(null);try{const ge=u.split(",").map($e=>$e.trim()).filter(Boolean),me=await OS(o.trim(),c.trim(),30,ge.length>0?ge:void 0);v(me),me.length===0&&R("No open issues found")}catch(ge){R(Me(ge)||"Failed to fetch issues")}finally{f(!1)}},[o,c,u]),Ae=i.useCallback(async()=>{if(!o.trim()||!c.trim()){R("Repository must be selected");return}f(!0),R(null),S([]),x(null);try{const ge=await zS(o.trim(),c.trim(),30);S(ge),ge.length===0&&R("No open pull requests found")}catch(ge){R(Me(ge)||"Failed to fetch pull requests")}finally{f(!1)}},[o,c]);i.useEffect(()=>{if(!e||!o.trim()||!c.trim()||m||z)return;const ge={owner:o.trim(),repo:c.trim(),labels:u.trim(),tab:p};q.current?.owner===ge.owner&&q.current?.repo===ge.repo&&q.current?.labels===ge.labels&&q.current?.tab===ge.tab||(q.current=ge,p==="issues"?Ce():Ae())},[o,c,u,p,e,m,z,Ce,Ae]),i.useEffect(()=>{if(!e)return;const ge=me=>{me.key==="Escape"&&n()};return document.addEventListener("keydown",ge),()=>document.removeEventListener("keydown",ge)},[e,n]),i.useEffect(()=>{if(!e)return;const ge=()=>{P(window.innerWidth<=yD)};return ge(),window.addEventListener("resize",ge),()=>window.removeEventListener("resize",ge)},[e]);const re=i.useCallback(ge=>{y(ge),E&&j("preview")},[E]),Z=i.useCallback(ge=>{x(ge),E&&j("preview")},[E]),pe=i.useCallback(()=>{j("list")},[]),ie=i.useCallback(async()=>{if(p==="issues"){if(b===null)return;_(!0),R(null);try{const ge=await FS(o.trim(),c.trim(),b,r);s(ge),y(null),E&&$==="preview"&&j("list")}catch(ge){const me=Me(ge);me?.includes("already imported")?R(me):R(me||"Failed to import issue")}finally{_(!1)}}else{if(C===null)return;_(!0),R(null);try{const ge=await BS(o.trim(),c.trim(),C,r);s(ge),x(null),E&&$==="preview"&&j("list")}catch(ge){const me=Me(ge);me?.includes("already imported")?R(me):R(me||"Failed to import pull request")}finally{_(!1)}}},[p,b,C,o,c,s,E,$]),ve=w.find(ge=>ge.number===b),ne=N.find(ge=>ge.number===C);if(!e)return null;const L=A.length>0,Y=A.length===1,ue=w.filter(ge=>le.has(ge.html_url)).length,B=N.filter(ge=>le.has(ge.html_url)).length,xe=k==="No open issues found",je=k==="No open pull requests found",se=p==="issues"?xe:je,Ue=!!k&&!xe&&w.length===0&&!m,De=!!k&&!je&&N.length===0&&!m,dt=p==="issues"?Ue:De,Pe=m||w.length>0||xe||Ue,ce=m||N.length>0||je||De,Ee=p==="issues"?Pe:ce,Oe=!!k&&w.length>0&&!xe,ht=!!k&&N.length>0&&!je,Ve=p==="issues"?Oe:ht;return t.jsx("div",{className:"modal-overlay open",...D,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg github-import-modal",ref:oe,children:[t.jsxs("div",{className:"modal-header github-import-modal__header",children:[t.jsxs("div",{children:[t.jsx("h3",{children:"Import from GitHub"}),t.jsx("p",{className:"github-import-modal__subtitle",children:"Choose a detected remote, load open issues or pull requests, and import one into the board."})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close import modal",children:"×"})]}),t.jsxs("div",{className:"modal-body github-import-modal__body",children:[t.jsxs("div",{className:"github-import-tabs",role:"tablist","aria-label":"Import type",children:[t.jsxs("button",{role:"tab","aria-selected":p==="issues","aria-controls":"github-import-list-pane",className:`github-import-tab ${p==="issues"?"active":""}`,onClick:()=>{g("issues"),x(null)},disabled:m||z,children:[t.jsx(kc,{size:16}),t.jsx("span",{children:"Issues"})]}),t.jsxs("button",{role:"tab","aria-selected":p==="pulls","aria-controls":"github-import-list-pane",className:`github-import-tab ${p==="pulls"?"active":""}`,onClick:()=>{g("pulls"),y(null)},disabled:m||z,children:[t.jsx(Zs,{size:16}),t.jsx("span",{children:"Pull Requests"})]})]}),t.jsxs("div",{className:"github-import-toolbar","data-testid":"github-import-toolbar",role:"toolbar","aria-label":"GitHub import controls",children:[t.jsx("div",{className:"github-import-toolbar__zone github-import-toolbar__zone--remote",children:H?t.jsxs("div",{className:"github-import-toolbar__loading",role:"status","aria-live":"polite",children:[t.jsx(St,{size:16,className:"spin"}),t.jsx("span",{children:"Detecting…"})]}):L?Y?t.jsxs("div",{className:"github-import-remote-pill","data-testid":"github-import-single-remote",children:[t.jsx("span",{className:"github-import-remote-pill__name",children:A[0].name}),t.jsxs("span",{className:"github-import-remote-pill__repo",children:[A[0].owner,"/",A[0].repo]})]}):t.jsxs("div",{className:"github-import-remote-select",children:[t.jsx("label",{htmlFor:"gh-remote",className:"visually-hidden",children:"Repository"}),t.jsxs("select",{id:"gh-remote",value:T,onChange:ge=>fe(ge.target.value),disabled:m||z,"aria-label":"Select Git remote",children:[t.jsx("option",{value:"",children:"Select remote…"}),A.map(ge=>t.jsxs("option",{value:ge.name,children:[ge.name," (",ge.owner,"/",ge.repo,")"]},ge.name))]})]}):t.jsx("span",{className:"github-import-toolbar__no-remote",children:"No remotes"})}),t.jsx("div",{className:"github-import-toolbar__zone github-import-toolbar__zone--filter",children:p==="issues"?t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"gh-labels",className:"visually-hidden",children:"Filter by labels"}),t.jsx("input",{id:"gh-labels",type:"text",placeholder:"Filter: bug,enhancement…",value:u,onChange:ge=>h(ge.target.value),onKeyDown:ge=>ge.key==="Enter"&&Ce(),disabled:m||z||!L,"aria-label":"Filter issues by labels"})]}):t.jsxs("span",{className:"github-import-filter-hint",children:["Open pull requests from ",o||"selected remote"]})}),t.jsx("div",{className:"github-import-toolbar__zone github-import-toolbar__zone--action",children:t.jsxs("button",{id:"gh-load",className:"btn btn-primary github-import-load-button",onClick:p==="issues"?Ce:Ae,disabled:m||z||!o.trim()||!c.trim(),"aria-label":m?`Loading ${p}`:`Load ${p} from repository`,title:m?"Loading…":`Load ${p}`,children:[m?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14}),t.jsx("span",{children:m?"Loading…":"Load"})]})})]}),!H&&!L&&t.jsxs("div",{className:"github-import-state github-import-state--warning",role:"alert",children:[t.jsxs("div",{children:[t.jsx("strong",{children:"No GitHub remotes detected"}),t.jsx("span",{children:"Add a GitHub remote to this repository, then reopen the modal."})]}),t.jsx("code",{className:"github-import-command",children:"git remote add origin https://github.com/owner/repo.git"})]}),Ve&&t.jsx("div",{className:"form-error github-import-banner",role:"alert",children:k}),t.jsxs("div",{className:"github-import-workspace",children:[t.jsxs("section",{className:`github-import-list-pane ${E?"mobile":""} ${$==="list"?"active":""}`,"data-testid":"github-import-list-pane","aria-labelledby":"github-import-results-heading",children:[t.jsxs("div",{className:"github-import-pane-header",children:[t.jsx("h4",{id:"github-import-results-heading",children:p==="issues"?"Issues":"Pull Requests"}),p==="issues"&&w.length>0&&t.jsxs("div",{className:"github-import-results-meta","aria-live":"polite",children:[t.jsxs("span",{children:[w.length," issue",w.length===1?"":"s"]}),t.jsxs("span",{children:[ue," imported"]})]}),p==="pulls"&&N.length>0&&t.jsxs("div",{className:"github-import-results-meta","aria-live":"polite",children:[t.jsxs("span",{children:[N.length," pull request",N.length===1?"":"s"]}),t.jsxs("span",{children:[B," imported"]})]})]}),t.jsxs("div",{className:"github-import-pane-content",children:[!Ee&&t.jsx("div",{className:"github-import-state github-import-state--idle","data-testid":"github-import-results-idle",children:t.jsxs("div",{children:[t.jsx("strong",{children:"Nothing loaded yet"}),t.jsx("span",{children:"Select a repository and click Load to start reviewing import candidates."})]})}),m&&t.jsxs("div",{className:"github-import-state github-import-state--loading",role:"status","aria-live":"polite",children:[t.jsx(St,{size:16,className:"spin"}),t.jsxs("div",{children:[t.jsxs("strong",{children:["Loading open ",p==="issues"?"issues":"pull requests","…"]}),t.jsx("span",{children:"Fetching the latest list from GitHub."})]})]}),dt&&t.jsx("div",{className:"github-import-state github-import-state--error",role:"alert",children:t.jsxs("div",{children:[t.jsxs("strong",{children:["Could not load ",p==="issues"?"issues":"pull requests"]}),t.jsx("span",{children:k})]})}),se&&t.jsx("div",{className:"github-import-state github-import-state--empty",role:"status",children:t.jsxs("div",{children:[t.jsxs("strong",{children:["No open ",p==="issues"?"issues":"pull requests"," found"]}),t.jsx("span",{children:p==="issues"?"Try a different label filter or choose another repository.":"Choose another repository."})]})}),p==="issues"&&w.length>0&&t.jsx("div",{className:"issues-list","aria-live":"polite",children:w.map(ge=>{const me=le.has(ge.html_url);return t.jsxs("div",{className:`issue-item ${b===ge.number?"selected":""} ${me?"imported":""}`,onClick:()=>!me&&re(ge.number),children:[t.jsx("input",{type:"radio",name:"issue",checked:b===ge.number,onChange:()=>re(ge.number),disabled:me,"aria-label":`Select issue #${ge.number}`}),t.jsxs("div",{className:"issue-main",children:[t.jsxs("div",{className:"issue-heading-row",children:[t.jsxs("span",{className:"issue-number",children:["#",ge.number]}),t.jsx("span",{className:"issue-title",children:ge.title})]}),ge.labels.length>0&&t.jsx("span",{className:"issue-labels",children:ge.labels.map($e=>t.jsx("span",{className:"label-chip",children:$e.name},$e.name))})]}),me&&t.jsx("span",{className:"imported-badge",children:"Imported"})]},ge.number)})}),p==="pulls"&&N.length>0&&t.jsx("div",{className:"issues-list","aria-live":"polite",children:N.map(ge=>{const me=le.has(ge.html_url);return t.jsxs("div",{className:`issue-item ${C===ge.number?"selected":""} ${me?"imported":""}`,onClick:()=>!me&&Z(ge.number),children:[t.jsx("input",{type:"radio",name:"pull",checked:C===ge.number,onChange:()=>Z(ge.number),disabled:me,"aria-label":`Select pull request #${ge.number}`}),t.jsxs("div",{className:"issue-main",children:[t.jsxs("div",{className:"issue-heading-row",children:[t.jsxs("span",{className:"issue-number",children:["#",ge.number]}),t.jsx("span",{className:"issue-title",children:ge.title})]}),t.jsxs("span",{className:"pull-branch-info",children:[ge.headBranch," → ",ge.baseBranch]})]}),me&&t.jsx("span",{className:"imported-badge",children:"Imported"})]},ge.number)})})]})]}),t.jsxs("section",{className:`github-import-preview-pane ${E?"mobile":""} ${$==="preview"?"active":""}`,"data-testid":"github-import-preview-pane","aria-labelledby":"github-import-preview-heading",children:[t.jsxs("div",{className:"github-import-pane-header",children:[E&&t.jsxs("button",{className:"github-import-back-button",onClick:pe,"data-testid":"github-import-back-button","aria-label":`Back to ${p==="issues"?"issues":"pull requests"} list`,children:[t.jsx(tr,{size:16}),t.jsx("span",{children:"Back"})]}),t.jsx("h4",{id:"github-import-preview-heading",children:"Preview"})]}),t.jsxs("div",{className:"github-import-pane-content",children:[p==="issues"&&ve?t.jsxs("div",{className:"issue-preview","data-testid":"github-import-preview-card",children:[t.jsxs("div",{className:"preview-meta",children:["Issue #",ve.number]}),t.jsx("div",{className:"preview-title",children:ve.title}),t.jsx("div",{className:"preview-body",children:ve.body?ve.body.slice(0,200)+(ve.body.length>200?"…":""):"(no description)"})]}):p==="issues"?t.jsx("div",{className:"github-import-state github-import-state--idle","data-testid":"github-import-preview-empty",children:t.jsxs("div",{children:[t.jsx("strong",{children:"No issue selected"}),t.jsx("span",{children:"Choose an issue from the list to inspect its title and description."})]})}):null,p==="pulls"&&ne?t.jsxs("div",{className:"issue-preview","data-testid":"github-import-preview-card",children:[t.jsxs("div",{className:"preview-meta",children:["Pull Request #",ne.number]}),t.jsx("div",{className:"preview-title",children:ne.title}),t.jsxs("div",{className:"preview-branch",children:[t.jsx("strong",{children:"Branch:"})," ",ne.headBranch," → ",ne.baseBranch]}),t.jsx("div",{className:"preview-body",children:ne.body?ne.body.slice(0,200)+(ne.body.length>200?"…":""):"(no description)"})]}):p==="pulls"?t.jsx("div",{className:"github-import-state github-import-state--idle","data-testid":"github-import-preview-empty",children:t.jsxs("div",{children:[t.jsx("strong",{children:"No pull request selected"}),t.jsx("span",{children:"Choose a pull request from the list to inspect its details."})]})}):null]})]})]})]}),t.jsxs("div",{className:"modal-actions github-import-modal__actions",children:[t.jsx("button",{className:"btn",onClick:n,disabled:z,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:ie,disabled:(p==="issues"?b===null:C===null)||z,children:z?t.jsx(St,{size:14,className:"spin"}):"Import"})]})]})})}function di({summary:e,children:n,className:s="",onToggle:a,defaultOpen:r=!1}){const[o,l]=i.useState(r);return t.jsxs("div",{className:`onboarding-disclosure ${s}`.trim(),children:[t.jsxs("button",{className:"onboarding-disclosure-trigger",onClick:()=>{const c=!o;l(c),a?.(c)},"aria-expanded":o,type:"button",children:[t.jsx(Wn,{size:14,className:"onboarding-disclosure-chevron","aria-hidden":"true"}),t.jsx("span",{children:e})]}),o?t.jsx("div",{className:"onboarding-disclosure-content",children:n}):null]})}const kD=["Build a user authentication system with login and signup","Add dark mode support to the dashboard","Create an API endpoint for exporting tasks as CSV","Refactor the task card component for better performance"];function Za(e){return e&&Ea.includes(e)?e:Ps}function Zd(e){return{...e,priority:Za(e.priority)}}function jD(e,n){return e.length===n.length&&e.every((s,a)=>s===n[a])}function ND(e,n){const s=new Map(e.map(a=>[a.id,a]));return n.map(a=>{const r=s.get(a.id),o=Za(a.priority),l={id:a.id};return(!r||a.title!==r.title)&&(l.title=a.title),(!r||a.description!==r.description)&&(l.description=a.description),(!r||a.suggestedSize!==r.suggestedSize)&&(l.suggestedSize=a.suggestedSize),(!r||o!==Za(r.priority))&&(l.priority=o),(!r||!jD(a.dependsOn,r.dependsOn))&&(l.dependsOn=a.dependsOn),l})}function SD(e,n){return e&&n?`${e}/${n}`:""}function CD(e){if(!e)return{provider:void 0,modelId:void 0};const n=e.indexOf("/");return n===-1?{provider:void 0,modelId:void 0}:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function ED({isOpen:e,onClose:n,onTaskCreated:s,onTasksCreated:a,tasks:r,initialPlan:o,projectId:l,resumeSessionId:c}){const[d,u]=i.useState(""),[h,m]=i.useState({type:"initial"}),[f,p]=i.useState(null),[g,w]=i.useState([]),[v,b]=i.useState([]),[y,N]=i.useState(null),S=i.useRef(!1),C=i.useRef(!1),[x,k]=i.useState(""),[R,z]=i.useState(!0),[_,A]=i.useState(!1),[X,H]=i.useState(!1),[M,T]=i.useState(null),[F,W]=i.useState(0),oe=i.useRef(null),D=i.useRef(null),E=i.useRef(null),P=i.useRef(null),$=i.useRef(null),j=i.useRef(null),q=i.useRef(null),[le,fe]=i.useState(c??null),Ce=i.useMemo(()=>sr(),[]),{isLockedByOther:Ae,takeControl:re,isLoading:Z}=Bc(e?le:null),{activeTabMap:pe,broadcastUpdate:ie,broadcastCompleted:ve,broadcastLock:ne,broadcastUnlock:L,broadcastHeartbeat:Y}=eo(),[ue,B]=i.useState(void 0),[xe,je]=i.useState(void 0),[se,Ue]=i.useState("medium"),[De,dt]=i.useState(""),[Pe,ce]=i.useState([]),[Ee,Oe]=i.useState(!1),[ht,Ve]=i.useState(null),[ge,me]=i.useState([]),[$e,mt]=i.useState([]),[jt,tt]=i.useState({}),bt=i.useRef(null),[Ie,Xe]=i.useState([]),[rt,It]=i.useState(!1),[_t,We]=i.useState(c??null),[J,ke]=i.useState(!!c),[ot,ye]=i.useState(null),[it,He]=i.useState(!1),he=i.useRef(!1),et=i.useRef(null),vt=i.useRef(""),Ct=i.useRef(null),Et=i.useRef(null);qi(D,e,"fusion:planning-modal-size");const Tt=ii(),Jt=Tt==="mobile",{pushNav:cn}=iy(),{keyboardOverlap:Vt,viewportHeight:hn,viewportOffsetTop:dn,keyboardOpen:An}=la({enabled:Tt==="mobile"});_i(Tt==="mobile"&&e),i.useEffect(()=>{const de=D.current;de&&(An?(de.style.setProperty("--keyboard-overlap",`${Vt}px`),de.style.setProperty("--vv-offset-top",`${dn}px`),hn!==null?de.style.setProperty("--vv-height",`${hn}px`):de.style.removeProperty("--vv-height")):(de.style.removeProperty("--keyboard-overlap"),de.style.removeProperty("--vv-offset-top"),de.style.removeProperty("--vv-height")))},[An,Vt,dn,hn]),i.useEffect(()=>{vt.current=x},[x]),i.useEffect(()=>{const de=et.current;if(!de)return;de.scrollHeight-de.scrollTop-de.clientHeight<32&&(de.scrollTop=de.scrollHeight)},[x]),i.useEffect(()=>{if(h.type!=="loading"){T(null),W(0);return}const de=Date.now();T(de),W(0);const st=setInterval(()=>{W(Math.max(0,Math.floor((Date.now()-de)/1e3)))},1e3);return()=>clearInterval(st)},[h.type]),i.useEffect(()=>{if(h.type!=="loading")return;const de=P.current;if(!de)return;let st=!1;const kt=setInterval(async()=>{try{const G=await Bi(de);if(st||!G||P.current!==de)return;if(G.status==="awaiting_input"&&G.currentQuestion){const ze=JSON.parse(G.currentQuestion);m({type:"question",session:{sessionId:de,currentQuestion:ze,summary:null}}),k("")}else if(G.status==="complete"&&G.result){const ze=Zd(JSON.parse(G.result));m({type:"summary",session:{sessionId:de,currentQuestion:null,summary:ze},summary:ze}),N(ze),k("")}}catch{}},8e3);return()=>{st=!0,clearInterval(kt)}},[h.type]);const nn=i.useCallback(()=>{u(""),m({type:"initial"}),p(null),w([]),b([]),N(null),k(""),A(!1),H(!1),B(void 0),je(void 0),Ue("medium"),dt(""),P.current=null,fe(null)},[]),Dn=SD(ue,xe),Nn=i.useCallback((de,st)=>{if(!de||!st)return jt.provider&&jt.modelId?`${jt.provider}/${jt.modelId}`:"Using default";const ct=Pe.find(kt=>kt.provider===de&&kt.id===st);return ct?`${ct.provider}/${ct.id}`:`${de}/${st}`},[Pe,jt.modelId,jt.provider]),zt=i.useCallback(async()=>{Oe(!0),Ve(null);try{const de=await Ws();ce(de.models),me(de.favoriteProviders),mt(de.favoriteModels),tt({provider:de.resolvedPlanningProvider,modelId:de.resolvedPlanningModelId})}catch(de){Ve(Me(de)||"Failed to load models")}finally{Oe(!1)}},[]),sn=i.useCallback(de=>{me(st=>{const ct=st,G=ct.includes(de)?ct.filter(ze=>ze!==de):[de,...ct];return Jn({favoriteProviders:G,favoriteModels:$e}).catch(()=>{me(ct)}),G})},[$e]),xn=i.useCallback(de=>{mt(st=>{const ct=st,G=ct.includes(de)?ct.filter(ze=>ze!==de):[de,...ct];return Jn({favoriteProviders:ge,favoriteModels:G}).catch(()=>{mt(ct)}),G})},[ge]),Xt=i.useCallback(de=>{E.current?.close();const st=()=>P.current!==de,ct=H0(de,l,{onThinking:kt=>{st()||(k(G=>G+kt),ie({sessionId:de,status:"generating",needsInput:!1,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null}))},onQuestion:kt=>{if(st())return;A(!1),H(!1),wr(l);const G=vt.current.trim();G&&b(ze=>ze[ze.length-1]?.thinkingOutput===G?ze:[...ze,{thinkingOutput:G}]),m({type:"question",session:{sessionId:de,currentQuestion:kt,summary:null}}),k(""),ie({sessionId:de,status:"awaiting_input",needsInput:!0,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null})},onSummary:kt=>{if(st())return;A(!1),H(!1),wr(l);const G=vt.current.trim();G&&b(ze=>ze[ze.length-1]?.thinkingOutput===G?ze:[...ze,{thinkingOutput:G}]),m({type:"summary",session:{sessionId:de,currentQuestion:null,summary:kt},summary:kt}),N(kt),k(""),ie({sessionId:de,status:"complete",needsInput:!1,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null})},onError:kt=>{const G=kt||"Session failed while contacting the AI.";A(!0),(async()=>{try{const ze=await Bi(de);if(ze&&(ze.status==="generating"||ze.status==="awaiting_input")){Xt(de);return}}catch{}A(!1),H(!1),p(null),m(ze=>ze.type==="question"||ze.type==="summary"||ze.type==="error"?{type:"error",session:ze.session,errorMessage:G}:{type:"error",session:{sessionId:de,currentQuestion:null,summary:null},errorMessage:G}),k(""),P.current=de,ie({sessionId:de,status:"error",needsInput:!1,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null}),ve({sessionId:de,status:"error"})})()},onComplete:()=>{A(!1),H(!1),P.current=null,ve({sessionId:de,status:"complete"})},onConnectionStateChange:kt=>{A(kt==="reconnecting")}});E.current=ct},[ve,ie,d,l,Ce]),Yt=i.useCallback(async de=>{const st=de??d;if(st.trim()){p(null),k(""),b([]),w([]),A(!1),m({type:"loading"});try{const ct=ue&&xe?{planningModelProvider:ue,planningModelId:xe}:void 0,kt=De.trim()?Number.parseInt(De,10):void 0,G=$.current,{sessionId:ze}=await S0(st.trim(),l,ct,{planningDepth:se,customQuestionCount:Number.isInteger(kt)?kt:void 0},G??void 0);$.current=null,P.current=ze,fe(ze),We(ze),Xt(ze),w([])}catch(ct){A(!1),p(Me(ct)||"Failed to start planning session"),m({type:"initial"}),P.current=null,fe(null)}}},[Xt,De,d,se,xe,ue,l]);i.useEffect(()=>{e&&h.type==="initial"&&oe.current?.focus()},[e,h.type]),i.useEffect(()=>{e&&zt()},[e,zt]),i.useEffect(()=>{if(e&&o&&!S.current&&h.type==="initial"){u(o);const de=setTimeout(()=>{S.current=!0,Yt(o)},0);return()=>clearTimeout(de)}else if(e&&!o&&!S.current&&!C.current&&h.type==="initial"){C.current=!0;const de=E4(l);de&&u(de)}},[e,o,h.type,Yt,l]);const rn=i.useCallback(async de=>{E.current?.close(),E.current=null,p(null),k(""),w([]),b([]),N(null),H(!1),m({type:"loading"});try{const st=await Bi(de);if(!st){We(null),ke(!1),m({type:"initial"});return}P.current=de,fe(de);const ct=Lr(st.conversationHistory);if(b(ct),w(ct.map(kt=>kt.response).filter(kt=>!!(kt&&typeof kt=="object"&&!Array.isArray(kt)))),st.status==="draft"){let kt="",G,ze;try{const Ut=st.inputPayload?JSON.parse(st.inputPayload):null;Ut&&typeof Ut.initialPlan=="string"&&(kt=Ut.initialPlan),Ut&&typeof Ut.modelProvider=="string"&&typeof Ut.modelId=="string"&&(G=Ut.modelProvider,ze=Ut.modelId)}catch{}u(kt),B(G),je(ze),$.current=de,Et.current=kt?{sessionId:de,initialPlan:kt.trim(),modelProvider:G,modelId:ze}:null,m({type:"initial"})}else if(st.status==="awaiting_input"&&st.currentQuestion){wr(l);const kt=JSON.parse(st.currentQuestion);if(m({type:"question",session:{sessionId:de,currentQuestion:kt,summary:null}}),st.thinkingOutput){const G=st.thinkingOutput.trim();G&&b(ze=>ze[ze.length-1]?.thinkingOutput===G?ze:[...ze,{thinkingOutput:G}])}Xt(de)}else if(st.status==="complete"&&st.result){wr(l);const kt=Zd(JSON.parse(st.result));m({type:"summary",session:{sessionId:de,currentQuestion:null,summary:kt},summary:kt}),N(kt)}else st.status==="generating"?(m({type:"loading"}),st.thinkingOutput&&k(st.thinkingOutput),Xt(de)):st.status==="error"&&m({type:"error",session:{sessionId:de,currentQuestion:null,summary:null},errorMessage:st.error||"Session failed"})}catch{p("Failed to load session"),m({type:"initial"})}},[Xt,l]);i.useEffect(()=>{!e||!c||P.current!==c&&q.current!==c&&(We(c),ke(!0),rn(c))},[e,c]),i.useEffect(()=>{e&&_t&&(c&&c===_t||rn(_t))},[e]);const Zt=i.useCallback(async()=>{It(!0);try{const st=(await lm(l,{includeCompleted:!0,includeArchived:it})).filter(ct=>ct.type==="planning").sort((ct,kt)=>Date.parse(kt.updatedAt)-Date.parse(ct.updatedAt));Xe(st)}catch{}finally{It(!1)}},[l,it]);i.useEffect(()=>{e&&Zt()},[e,Zt]);const en=i.useRef(!1);i.useEffect(()=>{const de=en.current&&!rt;en.current=rt,de&&Tt==="mobile"&&(J||c||_t||Ie.length>0||ke(!0))},[Tt,J,c,_t,rt,Ie.length]),i.useEffect(()=>{if(!e)return;const de=l?`?projectId=${encodeURIComponent(l)}`:"",st=kt=>{try{const G=JSON.parse(kt.data);if(G.type!=="planning")return;Xe(ze=>{const Ut=ze.findIndex(In=>In.id===G.id);return(Ut>=0?[...ze.slice(0,Ut),G,...ze.slice(Ut+1)]:[G,...ze]).sort((In,Ne)=>Date.parse(Ne.updatedAt)-Date.parse(In.updatedAt))})}catch{}},ct=kt=>{try{const G=JSON.parse(kt.data);Xe(ze=>ze.filter(Ut=>Ut.id!==G))}catch{}};return fi(`/api/events${de}`,{events:{"ai_session:updated":st,"ai_session:deleted":ct},onReconnect:()=>{Zt()}})},[e,l,Zt]);const un=i.useCallback(de=>{if(_t===de){ke(!0);return}We(de),ke(!0),rn(de)},[rn,_t]),Qt=i.useCallback(()=>{E.current?.close(),E.current=null,$.current=null,j.current&&(clearTimeout(j.current),j.current=null),c&&(q.current=c),nn(),We(null),ke(!0)},[nn,c]),pn=i.useCallback(()=>{ke(!1)},[]),Dt=i.useRef(!1);i.useEffect(()=>{e||(Dt.current=!1)},[e]),i.useEffect(()=>{const de=Dt.current;if(Jt){if(!J){Dt.current=!1;return}de||cn({type:"view",revert:pn}),Dt.current=!0}},[pn,Jt,J,cn]);const Bt=i.useCallback(async(de,st)=>{const ct=st.trim();if(!(!ct||Et.current?.sessionId===de&&Et.current.initialPlan===ct&&Et.current.modelProvider===ue&&Et.current.modelId===xe))try{await DC(de,{initialPlan:ct,modelProvider:ue&&xe?ue:void 0,modelId:ue&&xe?xe:void 0},l),Et.current={sessionId:de,initialPlan:ct,modelProvider:ue,modelId:xe}}catch{}},[xe,ue,l]);i.useEffect(()=>{if(Ct.current&&(clearTimeout(Ct.current),Ct.current=null),!(!e||h.type!=="initial"||!_t))return Ct.current=setTimeout(()=>{Bt(_t,d)},500),()=>{Ct.current&&(clearTimeout(Ct.current),Ct.current=null)}},[d,e,_t,Bt,h.type]),i.useEffect(()=>{Et.current=null},[_t]),i.useEffect(()=>()=>{Ct.current&&(clearTimeout(Ct.current),Ct.current=null)},[]);const be=i.useCallback(async de=>{const st=kt=>kt==="generating"||kt==="awaiting_input",ct=Ie.find(kt=>kt.id===de);if(ct&&st(ct.status))try{await Yb(de,l,Ce)}catch{}try{await ax(de)}catch{}ve({sessionId:de,status:"complete",timestamp:Date.now()}),Xe(kt=>kt.filter(G=>G.id!==de)),_t===de&&(E.current?.close(),E.current=null,nn(),We(null),ke(!1)),ye(null)},[ve,Ie,l,nn,_t,Ce]),Re=i.useCallback(async de=>{const ct=Ie.find(kt=>kt.id===de)?.archived===!0;try{ct?await RC(de):await AC(de)}catch{return}Xe(kt=>!ct&&!it?kt.filter(G=>G.id!==de):kt.map(G=>G.id===de?{...G,archived:!ct}:G)),!ct&&_t===de&&!it&&(E.current?.close(),E.current=null,nn(),We(null),ke(!1))},[Ie,nn,_t,ke,it]);i.useEffect(()=>{e||(S.current=!1,C.current=!1,A(!1),H(!1),fe(null))},[e]),i.useEffect(()=>{if(!e){bt.current&&(L(bt.current,Ce),bt.current=null);return}if(le&&bt.current!==le){bt.current&&L(bt.current,Ce),ne(le,Ce),bt.current=le;return}!le&&bt.current&&(L(bt.current,Ce),bt.current=null)},[ne,L,e,le,Ce]),i.useEffect(()=>{if(!e||!le||bt.current!==le)return;Y(Ce);const de=setInterval(()=>{Y(Ce)},3e4);return()=>{clearInterval(de)}},[Y,e,le,Ce]),i.useEffect(()=>()=>{j.current&&(clearTimeout(j.current),j.current=null),E.current?.close(),E.current=null,bt.current&&(L(bt.current,Ce),bt.current=null)},[L,Ce]),i.useEffect(()=>{if(!e)return;const de=()=>{E.current?.close(),E.current=null};return window.addEventListener("beforeunload",de),()=>window.removeEventListener("beforeunload",de)},[e]);const nt=i.useCallback((de,st)=>{Ct.current&&(clearTimeout(Ct.current),Ct.current=null),(async()=>{try{await Bt(de,st),await LC(de,l)}catch{}})()},[l,Bt]),ut=i.useCallback(()=>{if(Tt!=="mobile")return;const de=document.activeElement;de instanceof HTMLElement&&de.blur(),window.scrollTo(0,0),requestAnimationFrame(()=>{window.scrollTo(0,0)})},[Tt]),Ye=i.useCallback(()=>{d&&h.type==="initial"&&C4(d,l);const de=$.current;de&&d.trim()&&nt(de,d),$.current=null,j.current&&(clearTimeout(j.current),j.current=null),E.current?.close(),E.current=null,A(!1),H(!1),ut(),n()},[nt,d,n,l,ut,h.type]);i.useEffect(()=>{if(!e)return;const de=st=>{st.key==="Escape"&&Ye()};return document.addEventListener("keydown",de),()=>document.removeEventListener("keydown",de)},[e,Ye]);const lt=i.useCallback(async de=>{if(h.type!=="question")return;const{session:st}=h,ct=st.sessionId,kt=st.currentQuestion;if(!kt){p("No active question in session");return}p(null),w(G=>[...G,de]),b(G=>{const ze=vt.current.trim();let Ut=G;return ze&&Ut[Ut.length-1]?.thinkingOutput!==ze&&(Ut=[...Ut,{thinkingOutput:ze}]),[...Ut,{question:kt,response:de}]}),m({type:"loading"}),k("");try{await vh(ct,de,l,Ce)}catch(G){p(Me(G)||"Failed to submit response"),m({type:"question",session:st})}},[l,Ce,h]),wt=i.useCallback(async()=>{if(h.type!=="summary")return;const{session:de,summary:st}=h,ct=de.sessionId;P.current=ct,fe(ct),p(null),H(!1),k(""),m({type:"loading"}),Xt(ct);try{await vh(ct,{refine:!0},l,Ce)}catch(kt){E.current?.close(),E.current=null,p(Me(kt)||"Failed to refine plan"),m({type:"summary",session:de,summary:y??st})}},[Xt,y,l,Ce,h]),Q=i.useCallback(async()=>{const de=P.current;if(de){try{await _0(de,l,Ce)}catch{}E.current?.close(),E.current=null,A(!1),H(!1),m({type:"error",session:{sessionId:de,currentQuestion:null,summary:null},errorMessage:"Generation stopped by user. You can retry or start a new session."}),k("")}},[l,Ce]),ae=i.useCallback(async()=>{if(h.type!=="error")return;const de=h.session;p(null),H(!0),k(""),m({type:"loading"}),Xt(de.sessionId);try{P.current=de.sessionId,fe(de.sessionId),await E0(de.sessionId,l,Ce)}catch(st){let ct=st;if((Me(st)||"").includes("not in an error state"))try{const G=await Bi(de.sessionId);if(!G)throw new Error("Failed to refresh planning session.");if(P.current=G.id,fe(G.id),G.status==="generating")k(G.thinkingOutput??""),m({type:"loading"});else if(G.status==="awaiting_input"){if(!G.currentQuestion)throw new Error("Planning session is awaiting input but has no current question.");const ze=JSON.parse(G.currentQuestion);if(wr(l),m({type:"question",session:{sessionId:G.id,currentQuestion:ze,summary:null}}),G.thinkingOutput){const Ut=G.thinkingOutput.trim();Ut&&b(gn=>gn[gn.length-1]?.thinkingOutput===Ut?gn:[...gn,{thinkingOutput:Ut}])}E.current?.isConnected()||Xt(G.id)}else if(G.status==="complete"){if(!G.result)throw new Error("Planning session is complete but has no result.");const ze=Zd(JSON.parse(G.result));wr(l),m({type:"summary",session:{sessionId:G.id,currentQuestion:null,summary:ze},summary:ze}),N(ze)}else G.status==="error"&&m({type:"error",session:{sessionId:G.id,currentQuestion:null,summary:null},errorMessage:G.error||"Retry failed. Please try again."});A(!1);return}catch(G){ct=G}E.current?.close(),E.current=null,m({type:"error",session:de,errorMessage:Me(ct)||"Retry failed. Please try again."}),A(!1)}finally{H(!1)}},[Xt,l,Ce,h]),Ke=i.useCallback(async()=>{if(h.type==="summary"){p(null),m({type:"loading"});try{const de=h.session.sessionId,st=await M0(de,y??void 0,l);s(st),We(null),Xe(ct=>ct.filter(kt=>kt.id!==de)),ve({sessionId:de,status:"complete",timestamp:Date.now()}),Ye()}catch(de){p(Me(de)||"Failed to create task"),m({type:"summary",session:h.session,summary:h.summary})}}},[ve,y,h,l,s,Ye]),gt=i.useCallback(async()=>{if(h.type==="summary"){p(null),m({type:"loading"});try{const de=await A0(h.session.sessionId,y??void 0,l),st=de.subtasks.map(ct=>({...ct,priority:Za(ct.priority),dependsOn:[...ct.dependsOn]}));fe(de.sessionId),m({type:"breakdown",sessionId:de.sessionId,originalSubtasks:st.map(ct=>({...ct,dependsOn:[...ct.dependsOn]})),subtasks:st.map(ct=>({...ct,dependsOn:[...ct.dependsOn]})),dirty:!1})}catch(de){p(Me(de)||"Failed to start breakdown"),m({type:"summary",session:h.session,summary:h.summary})}}},[y,h,l]),Wt=i.useCallback(async()=>{if(h.type==="breakdown"){p(null),m({type:"creating"});try{const de=h.sessionId,st=await R0(de,ND(h.originalSubtasks,h.subtasks.map(ct=>({...ct,priority:Za(ct.priority)}))),l);a(st.tasks),Xe(ct=>ct.filter(kt=>kt.id!==de)),ve({sessionId:de,status:"complete",timestamp:Date.now()}),u(""),m({type:"initial"}),p(null),w([]),b([]),N(null),k(""),B(void 0),je(void 0),Ue("medium"),dt(""),P.current=null,fe(null),We(null),Ye()}catch(de){p(Me(de)||"Failed to create tasks"),m({type:"breakdown",sessionId:h.sessionId,originalSubtasks:h.originalSubtasks,subtasks:h.subtasks,dirty:h.dirty})}}},[ve,Ye,h,a,l]),fn=i.useCallback(async()=>{if(h.type!=="question"||g.length===0)return;const de=h.session.sessionId;p(null),m({type:"loading"});try{const st=await C0(de,l,Ce);w(st.history.map(ct=>ct.response&&typeof ct.response=="object"&&!Array.isArray(ct.response)?ct.response:{[ct.question.id]:ct.response})),b(st.history.map(ct=>({question:ct.question,response:ct.response&&typeof ct.response=="object"&&!Array.isArray(ct.response)?ct.response:{[ct.question.id]:ct.response},thinkingOutput:ct.thinkingOutput}))),k(""),m({type:"question",session:{...h.session,currentQuestion:st.currentQuestion,summary:null}})}catch(st){p(Me(st)||"Failed to go back to the previous question"),m({type:"question",session:h.session})}},[l,g.length,Ce,h]),Rn=()=>h.type==="question"?Math.min(g.length+1,3):3,wn=le?pe.get(le):null,mn=wn&&wn.tabId!==Ce,Un=Ae&&(!mn||wn.stale);return e?t.jsx("div",{className:"modal-overlay open",onMouseDown:de=>{he.current=de.target===de.currentTarget},onClick:de=>{de.target===de.currentTarget&&he.current&&Ye(),he.current=!1},role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg planning-modal",ref:D,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[J&&t.jsx("button",{className:"modal-back planning-mobile-back",onClick:pn,"aria-label":"Back to sessions",title:"Back to sessions",children:t.jsx(wc,{size:18})}),t.jsx(Ui,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Planning Mode"})]}),t.jsx("div",{className:"modal-header-actions",children:t.jsx("button",{className:"modal-close",onClick:Ye,"aria-label":"Close",children:t.jsx(yn,{size:20})})})]}),t.jsxs("div",{className:`planning-modal-body planning-modal-body--split ${J?"planning-modal-body--show-detail":"planning-modal-body--show-list"}`,children:[t.jsx(ID,{sessions:Ie,loading:rt,selectedSessionId:_t,pendingDeleteId:ot,showArchived:it,onToggleShowArchived:()=>He(de=>!de),onArchive:de=>void Re(de),onSelectSession:un,onNewSession:Qt,onRequestDelete:ye,onConfirmDelete:de=>void be(de),onCancelDelete:()=>ye(null)}),t.jsxs("div",{className:"planning-detail",children:[f&&t.jsx("div",{className:"form-error planning-error",children:f}),_&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),h.type==="initial"&&t.jsxs("div",{className:"planning-initial",children:[t.jsxs("div",{className:"planning-view-scroll",children:[t.jsxs("div",{className:"planning-intro",children:[t.jsx(fs,{size:32,className:"icon-triage-lg"}),t.jsx("h4",{children:"Transform your idea into a detailed task"}),t.jsx("p",{className:"text-muted",children:"Describe what you want to build in plain language. The AI will ask clarifying questions and help you structure a well-defined task."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"initial-plan",children:"What do you want to build?"}),t.jsx("textarea",{ref:oe,id:"initial-plan",rows:4,className:"planning-textarea",placeholder:"e.g., Build a user authentication system with login, signup, and password reset...",value:d,onChange:de=>{const st=de.target.value;u(st),!($.current||st.trim().length===0)&&(j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{if($.current)return;const ct=st.trim();if(!ct)return;N0(ct,l,ue&&xe?{planningModelProvider:ue,planningModelId:xe}:void 0).then(G=>{$.current=G.sessionId,Xe(ze=>ze.some(gn=>gn.id===G.sessionId)?ze:[{id:G.sessionId,type:"planning",status:"draft",title:G.title,preview:ct.length>80?`${ct.slice(0,79).trimEnd()}…`:ct,projectId:l??null,lockedByTab:null,updatedAt:new Date().toISOString(),archived:!1},...ze].sort((gn,In)=>Date.parse(In.updatedAt)-Date.parse(gn.updatedAt))),We(G.sessionId)}).catch(()=>{})},300))},onKeyDown:de=>{de.key==="Enter"&&!de.shiftKey&&d.trim()&&(de.preventDefault(),Yt())},onBlur:()=>{const de=$.current;de&&d.trim()&&nt(de,d)}})]}),t.jsxs("div",{className:"planning-examples",children:[t.jsx("span",{className:"planning-examples-label",children:"Try an example:"}),t.jsx("div",{className:"planning-example-chips",children:kD.map((de,st)=>t.jsx("button",{className:"planning-example-chip",onClick:()=>u(de),children:de.length>40?de.slice(0,40)+"...":de},st))})]}),t.jsx(di,{summary:"Advanced planning settings",className:"planning-advanced-disclosure",children:t.jsxs("div",{className:"planning-advanced-content",children:[t.jsxs("div",{className:"planning-advanced-section planning-model-select-group",children:[t.jsxs("label",{htmlFor:"planning-modal-model",className:"form-label",children:["Planning Model",Ee&&t.jsx("span",{className:"text-muted text-muted-sm",children:"Loading models…"})]}),t.jsx("p",{className:"planning-advanced-blurb",children:"Selects which model runs the planning interview and writes the final draft."}),t.jsx(Ms,{id:"planning-modal-model",label:"Planning Model",value:Dn,onChange:de=>{const{provider:st,modelId:ct}=CD(de);B(st),je(ct)},models:Pe,disabled:Ee,favoriteProviders:ge,onToggleFavorite:sn,favoriteModels:$e,onToggleModelFavorite:xn}),ht&&t.jsxs("div",{className:"form-hint form-hint-error",children:[ht," ",t.jsx("button",{type:"button",className:"text-link-btn",onClick:()=>{zt()},children:"Retry"})]}),t.jsx("div",{className:"model-selector-current model-selector-current--spaced",children:t.jsx("span",{className:`model-badge ${ue&&xe?"model-badge-custom":"model-badge-default"}`,children:Nn(ue,xe)})})]}),t.jsxs("div",{className:"planning-advanced-section planning-depth-selector",children:[t.jsx("p",{className:"planning-advanced-blurb",children:"Plan size sets default interview depth. Questions lets you override with an exact count."}),t.jsxs("div",{className:"planning-depth-controls-row",children:[t.jsx("div",{className:"planning-depth-chip-group",role:"group","aria-label":"Planning depth",children:[{value:"small",label:"Small"},{value:"medium",label:"Medium"},{value:"large",label:"Large"}].map(de=>t.jsx("button",{type:"button",className:`planning-depth-chip btn ${se===de.value?"btn-primary planning-depth-chip-active":""}`,onClick:()=>Ue(de.value),"aria-pressed":se===de.value,children:de.label},de.value))}),t.jsxs("label",{className:"planning-depth-question-count",htmlFor:"planning-depth-questions",children:[t.jsx("span",{children:"Questions"}),t.jsx("input",{id:"planning-depth-questions",className:"input planning-depth-question-input",type:"number",min:1,max:20,value:De,onChange:de=>dt(de.target.value),placeholder:"Auto"})]})]})]})]})})]}),t.jsx("div",{className:"planning-view-footer",children:t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>Yt(),disabled:!d.trim(),children:[t.jsx(Ui,{size:16,className:"icon-mr-8"}),"Start Planning"]})})]}),h.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(St,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:x?"AI is thinking...":"Generating next question..."}),M&&t.jsxs("div",{className:"planning-elapsed",children:["Thinking… (",F,"s)"]}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>z(!R),type:"button",children:R?"Hide thinking":"Show thinking"}),t.jsx("div",{className:"planning-loading-actions",children:t.jsxs("button",{className:"btn planning-stop-btn",type:"button",onClick:()=>void Q(),children:[t.jsx(Gw,{size:14}),t.jsx("span",{className:"icon-ml-6",children:"Stop"})]})}),R&&x&&t.jsx("div",{className:"planning-thinking-output",ref:et,children:t.jsx("pre",{children:x})})]})]}),h.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[v.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:v}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:h.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void ae(),disabled:X,children:[X?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14}),t.jsx("span",{className:"icon-ml-6",children:X?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:Ye,disabled:X,children:"Dismiss"})]})]})]})}),h.type==="creating"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(St,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:"Creating tasks..."})]}),h.type==="question"&&h.session.currentQuestion&&t.jsx("div",{className:"planning-question",children:t.jsx(_D,{question:h.session.currentQuestion,progress:Rn(),historyEntries:v,onSubmit:lt,onBack:g.length>0?fn:void 0})}),h.type==="summary"&&y&&t.jsx(MD,{summary:y,historyEntries:v,onSummaryChange:N,tasks:r,onCreateTask:Ke,onBreakIntoTasks:gt,onRefine:()=>{wt()},isLoading:!1}),h.type==="breakdown"&&t.jsx(RD,{subtasks:h.subtasks,isLoading:!1,onUpdateSubtasks:de=>m({...h,subtasks:de,dirty:!0}),onCreateTasks:Wt,onBack:()=>{const st={sessionId:h.sessionId,currentQuestion:null,summary:y??null};y&&m({type:"summary",session:st,summary:y})}})]}),Ae&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(Ec,{size:16}),t.jsx("span",{children:Un?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),Un&&t.jsx("button",{type:"button",onClick:()=>{re()},disabled:Z,className:"btn btn-primary session-lock-take-control",children:Z?"Taking control...":"Take Control"})]})})]})]})}):null}function _D({question:e,progress:n,historyEntries:s,onSubmit:a,onBack:r}){const[o,l]=i.useState({}),[c,d]=i.useState(""),[u,h]=i.useState(""),m=i.useCallback(()=>{let p;e.type==="text"?p={[e.id]:c}:e.type==="confirm"?p={[e.id]:o[e.id]===!0}:p=o;const g=u.trim();g.length>0&&(p={...p,_comment:g}),a(p)},[u,e,o,c,a]);i.useEffect(()=>{l({}),d(""),h("")},[e.id]);const f=()=>{switch(e.type){case"text":return c.trim().length>0;case"single_select":return o[e.id]!==void 0;case"multi_select":return Array.isArray(o[e.id])&&o[e.id].length>0;case"confirm":return o[e.id]!==void 0;default:return!0}};return t.jsxs("div",{className:"planning-question-form",children:[t.jsxs("div",{className:"planning-view-scroll planning-question-scroll",children:[s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:s}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-question-panel",children:[t.jsxs("div",{className:"planning-progress",children:[t.jsx("div",{className:"planning-progress-bar",children:[1,2,3].map(p=>t.jsx("div",{className:`planning-progress-step ${p<=n?"active":""}`},p))}),t.jsxs("span",{className:"planning-progress-text",children:["Question ",n," of ~3"]})]}),t.jsxs("div",{className:"planning-question-content",children:[t.jsx("h4",{className:"planning-question-text",children:e.question}),e.description&&t.jsx("p",{className:"planning-question-desc",children:e.description}),t.jsxs("div",{className:"planning-options",children:[e.type==="text"&&t.jsx("textarea",{className:"planning-textarea",rows:4,placeholder:"Type your answer here...",value:c,onChange:p=>d(p.target.value),onKeyDown:p=>{p.key==="Enter"&&!p.shiftKey&&c.trim()&&(p.preventDefault(),m())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(p=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:p.id,checked:o[e.id]===p.id,onChange:()=>l({[e.id]:p.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:p.label}),p.description&&t.jsx("span",{className:"planning-option-desc",children:p.description})]})]},p.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(p=>{const g=o[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:p.id,checked:g.includes(p.id),onChange:w=>{const v=w.target.checked?[...g,p.id]:g.filter(b=>b!==p.id);l({[e.id]:v})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:p.label}),p.description&&t.jsx("span",{className:"planning-option-desc",children:p.description})]})]},p.id)})}),e.type==="confirm"&&t.jsxs("div",{className:"planning-confirm-group",children:[t.jsxs("button",{className:`planning-confirm-btn ${o[e.id]===!0?"selected":""}`,onClick:()=>l({[e.id]:!0}),children:[t.jsx(ts,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${o[e.id]===!1?"selected":""}`,onClick:()=>l({[e.id]:!1}),children:[t.jsx(yn,{size:18}),"No"]})]})]}),e.type!=="text"&&t.jsxs("div",{className:"planning-comment-section",children:[t.jsx("label",{className:"planning-comment-label",htmlFor:`planning-comment-${e.id}`,children:"Additional comments (optional)"}),t.jsx("textarea",{id:`planning-comment-${e.id}`,className:"planning-textarea",rows:2,placeholder:"Add any extra context or direction...",value:u,onChange:p=>h(p.target.value)})]})]})]})]}),t.jsxs("div",{className:"planning-actions",children:[r&&t.jsxs("button",{className:"btn",onClick:r,children:[t.jsx(tr,{size:16,className:"icon-mr-4"}),"Back"]}),t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:m,disabled:!f(),children:["Continue",t.jsx(Qo,{size:16,className:"icon-ml-4"})]})]})]})}function MD({summary:e,historyEntries:n,onSummaryChange:s,tasks:a,onCreateTask:r,onBreakIntoTasks:o,onRefine:l,isLoading:c}){const[d,u]=i.useState(!1),[h,m]=i.useState(e.suggestedDependencies),f=Za(e.priority),p=g=>{const w=h.includes(g)?h.filter(v=>v!==g):[...h,g];m(w),s({...e,suggestedDependencies:w})};return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[n.length>0&&t.jsxs(di,{summary:"Show user Q&A",className:"planning-summary-qa-disclosure",children:[t.jsx(hi,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(ts,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Planning Complete!"}),t.jsx("p",{className:"text-muted",children:"Review and refine your task before creating it."})]}),t.jsxs("div",{className:"planning-summary-form",children:[t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{children:["Description",t.jsx("button",{type:"button",className:"planning-expand-btn",onClick:()=>u(!d),children:d?"Collapse":"Expand"})]}),t.jsx("textarea",{className:`planning-textarea ${d?"expanded":""}`,rows:d?10:4,value:e.description,onChange:g=>s({...e,description:g.target.value})})]}),t.jsxs("div",{className:"planning-summary-meta-row",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"planning-summary-size",children:"Suggested Size"}),t.jsxs("select",{id:"planning-summary-size",className:"planning-size-select",value:e.suggestedSize,onChange:g=>s({...e,suggestedSize:g.target.value}),disabled:c,children:[t.jsx("option",{value:"S",children:"S (Small)"}),t.jsx("option",{value:"M",children:"M (Medium)"}),t.jsx("option",{value:"L",children:"L (Large)"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"planning-summary-priority",children:"Priority"}),t.jsx("select",{id:"planning-summary-priority",className:"planning-size-select",value:f,onChange:g=>s({...e,priority:g.target.value}),disabled:c,children:Ea.map(g=>t.jsx("option",{value:g,children:g[0].toUpperCase()+g.slice(1)},g))})]})]}),a.length>0&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Suggested Dependencies"}),t.jsx("div",{className:"planning-deps-list",children:a.map(g=>t.jsxs("label",{className:`planning-dep-chip ${h.includes(g.id)?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:h.includes(g.id),onChange:()=>p(g.id)}),t.jsx("span",{className:"planning-dep-id",children:g.id}),t.jsx("span",{className:"planning-dep-title",children:g.title||g.description.slice(0,30)})]},g.id))})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Key Deliverables"}),t.jsx("ul",{className:"planning-deliverables",children:e.keyDeliverables.map((g,w)=>t.jsx("li",{children:g},w))})]})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:l,disabled:c,children:[t.jsx(tr,{size:16,className:"icon-mr-4"}),"Refine Further"]}),t.jsxs("div",{className:"planning-summary-actions-right",children:[t.jsx("button",{className:"btn",onClick:r,disabled:c,children:c?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"spin icon-mr-8"}),"Creating..."]}):t.jsxs(t.Fragment,{children:[t.jsx(ts,{size:16,className:"icon-mr-8"}),"Create Single Task"]})}),t.jsx("button",{className:"btn btn-primary",onClick:o,disabled:c,title:"Break the plan into multiple tasks with dependencies",children:c?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"spin icon-mr-8"}),"Breaking down..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Cc,{size:16,className:"icon-mr-8"}),"Break into Tasks"]})})]})]})]})}function dg(e){const n=new Map(e.map(o=>[o.id,o.dependsOn])),s=new Set,a=new Set,r=o=>{if(s.has(o))return!0;if(a.has(o))return!1;s.add(o);for(const l of n.get(o)??[])if(n.has(l)&&r(l))return!0;return s.delete(o),a.add(o),!1};return e.some(o=>r(o.id))}function AD(e){return{id:`subtask-${e}`,title:"",description:"",suggestedSize:"M",priority:Ps,dependsOn:[]}}function RD({subtasks:e,isLoading:n,onUpdateSubtasks:s,onCreateTasks:a,onBack:r}){const[o,l]=i.useState(null),[c,d]=i.useState(null),[u,h]=i.useState(null),m=i.useRef([]),f=i.useMemo(()=>e.length===0||e.some(x=>!x.title.trim())?!0:dg(e),[e]),p=i.useCallback((x,k)=>{s(e.map(R=>R.id===x?{...R,...k}:R))},[e,s]),g=i.useCallback(()=>{s([...e,AD(e.length+1)])},[e,s]),w=i.useCallback(x=>{s(e.filter(k=>k.id!==x).map(k=>({...k,dependsOn:k.dependsOn.filter(R=>R!==x)})))},[e,s]),v=i.useCallback((x,k)=>{if(k<0||k>=e.length)return;const R=[...e],[z]=R.splice(x,1);R.splice(k,0,z),s(R)},[e,s]),b=i.useCallback(x=>k=>{l(x),k.dataTransfer.setData("text/plain",x),k.dataTransfer.effectAllowed="move"},[]),y=i.useCallback(()=>{l(null),d(null),h(null)},[]),N=i.useCallback(x=>k=>{if(k.preventDefault(),x===o)return;const R=k.currentTarget.getBoundingClientRect(),z=R.top+R.height/2,_=k.clientY<z?"before":"after";d(x),h(_)},[o]),S=i.useCallback(x=>k=>{k.preventDefault();const R=k.dataTransfer.getData("text/plain");if(!R||R===x){y();return}const z=e.findIndex(M=>M.id===R),_=e.findIndex(M=>M.id===x);if(z===-1||_===-1){y();return}const A=[...e],[X]=A.splice(z,1);let H=_;u==="after"&&z<_&&H--,u==="after"&&H++,A.splice(H,0,X),s(A),y()},[e,u,s,y]),C=i.useCallback(x=>{const k=x.currentTarget.getBoundingClientRect(),R=x.clientX,z=x.clientY;(R<k.left||R>k.right||z<k.top||z>k.bottom)&&(d(null),h(null))},[]);return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(Cc,{size:24,className:"icon-triage"}),t.jsx("h4",{children:"Break into Tasks"}),t.jsx("p",{className:"text-muted",children:"Review and edit the subtasks generated from your plan. Adjust titles, descriptions, sizes, priorities, and dependencies before creating."})]}),t.jsxs("div",{className:"planning-summary-form",children:[e.map((x,k)=>{const R=o===x.id,z=c===x.id,_=["task-detail-section","subtask-item",R?"subtask-item-dragging":"",z?"subtask-item-drop-target":"",z&&u==="before"?"subtask-item-drop-before":"",z&&u==="after"?"subtask-item-drop-after":""].filter(Boolean).join(" ");return t.jsxs("div",{className:_,"data-testid":`subtask-item-${k}`,draggable:!n,onDragStart:b(x.id),onDragEnd:y,onDragOver:N(x.id),onDrop:S(x.id),onDragLeave:C,children:[t.jsxs("div",{className:"detail-title-row subtask-item-header subtask-item-header--between",children:[t.jsxs("div",{className:"subtask-drag-handle",title:"Drag to reorder",children:[t.jsx(Sc,{size:16}),t.jsx("strong",{children:x.id})]}),t.jsxs("div",{className:"subtask-item-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>v(k,k-1),disabled:n||k===0,title:"Move up","aria-label":"Move subtask up",children:t.jsx(Va,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>v(k,k+1),disabled:n||k===e.length-1,title:"Move down","aria-label":"Move subtask down",children:t.jsx(Yo,{size:14})}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>w(x.id),disabled:n,children:[t.jsx(zn,{size:14})," Remove"]})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Title"}),t.jsx("input",{ref:A=>{m.current[k]=A},value:x.title,onChange:A=>p(x.id,{title:A.target.value}),onKeyDown:A=>{A.key==="Enter"&&(A.preventDefault(),k<e.length-1&&m.current[k+1]?.focus())},disabled:n})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:3,value:x.description,onChange:A=>p(x.id,{description:A.target.value}),disabled:n})]}),t.jsxs("div",{className:"planning-summary-meta-row",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`${x.id}-size`,children:"Size"}),t.jsxs("select",{id:`${x.id}-size`,className:"planning-size-select",value:x.suggestedSize,onChange:A=>p(x.id,{suggestedSize:A.target.value}),disabled:n,children:[t.jsx("option",{value:"S",children:"S"}),t.jsx("option",{value:"M",children:"M"}),t.jsx("option",{value:"L",children:"L"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`${x.id}-priority`,children:"Priority"}),t.jsx("select",{id:`${x.id}-priority`,className:"planning-size-select",value:Za(x.priority),onChange:A=>p(x.id,{priority:A.target.value}),disabled:n,children:Ea.map(A=>t.jsx("option",{value:A,children:A[0].toUpperCase()+A.slice(1)},A))})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"planning-deps-list",children:[e.slice(0,k).filter(A=>A.id!==x.id).map(A=>{const X=x.dependsOn.includes(A.id);return t.jsxs("label",{className:`planning-dep-chip ${X?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:X,onChange:()=>{const H=X?x.dependsOn.filter(M=>M!==A.id):[...x.dependsOn,A.id];p(x.id,{dependsOn:H})},disabled:n}),t.jsx("span",{className:"planning-dep-id",children:A.id}),t.jsx("span",{className:"planning-dep-title",children:A.title||"Untitled"})]},A.id)}),k===0&&t.jsx("div",{className:"text-muted",children:"First subtask cannot have dependencies."}),k>0&&e.slice(0,k).filter(A=>A.id!==x.id).length===0&&t.jsx("div",{className:"text-muted",children:"No previous subtasks available."})]})]})]},x.id)}),t.jsxs("button",{type:"button",className:"btn",onClick:g,disabled:n,children:[t.jsx(Bn,{size:16,className:"icon-mr-6"})," Add subtask"]}),dg(e)&&t.jsx("div",{className:"form-error planning-error",children:"Dependencies contain a cycle. Remove circular references before creating tasks."})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:r,disabled:n,children:[t.jsx(tr,{size:16,className:"icon-mr-4"}),"Back to Summary"]}),t.jsx("button",{className:"btn btn-primary",onClick:a,disabled:n||f,children:n?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"spin icon-mr-6"}),"Creating..."]}):t.jsx(t.Fragment,{children:"Create Tasks"})})]})]})}function ID({sessions:e,loading:n,selectedSessionId:s,pendingDeleteId:a,showArchived:r,onToggleShowArchived:o,onArchive:l,onSelectSession:c,onNewSession:d,onRequestDelete:u,onConfirmDelete:h,onCancelDelete:m}){return t.jsxs("aside",{className:"planning-sidebar","aria-label":"Planning sessions",children:[t.jsx("div",{className:"planning-sidebar-header",children:t.jsxs("button",{className:`planning-sidebar-new ${s===null?"active":""}`,onClick:d,type:"button",children:[t.jsx(dj,{size:16}),t.jsx("span",{children:"New session"})]})}),t.jsxs("div",{className:"planning-sidebar-list",children:[e.length===0&&!n&&t.jsx("div",{className:"planning-sidebar-empty text-muted",children:"No saved sessions yet. Start one on the right to see it here."}),e.map(f=>{const p=f.id===s,g=a===f.id,w=f.archived===!0,v=f.status==="complete"||f.status==="error";return t.jsxs("div",{className:`planning-sidebar-item ${p?"selected":""} ${g?"pending-delete":""} ${w?"archived":""}`,children:[t.jsxs("button",{type:"button",className:"planning-sidebar-item-button",onClick:()=>c(f.id),children:[t.jsx(TD,{status:f.status}),t.jsxs("span",{className:"planning-sidebar-item-body",children:[t.jsx("span",{className:"planning-sidebar-item-title",children:f.status==="draft"&&(!f.title||f.title==="New planning session")?f.preview??"New planning session":f.title||"Untitled session"}),t.jsxs("span",{className:"planning-sidebar-item-meta",children:[t.jsx(PD,{status:f.status}),t.jsx("span",{"aria-hidden":!0,children:" · "}),t.jsx("span",{children:$D(f.updatedAt)})]})]})]}),g?t.jsxs("div",{className:"planning-sidebar-confirm",children:[t.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>h(f.id),children:"Delete"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,children:"Cancel"})]}):t.jsxs("div",{className:"planning-sidebar-item-actions",children:[v&&t.jsx("button",{type:"button",className:"planning-sidebar-item-archive",onClick:b=>{b.stopPropagation(),l(f.id)},"aria-label":w?"Unarchive session":"Archive session",title:w?"Unarchive session":"Archive session",children:w?t.jsx(jw,{size:14}):t.jsx(Wr,{size:14})}),t.jsx("button",{type:"button",className:"planning-sidebar-item-delete",onClick:b=>{b.stopPropagation(),u(f.id)},"aria-label":"Delete session",title:"Delete session",children:t.jsx(zn,{size:14})})]})]},f.id)})]}),t.jsx("div",{className:"planning-sidebar-footer",children:t.jsx("a",{href:"#",className:"planning-sidebar-toggle-archived-link",onClick:f=>{f.preventDefault(),o()},"aria-pressed":r,children:r?"Hide archived":"Show archived"})})]})}function TD({status:e}){switch(e){case"generating":return t.jsx(St,{size:14,className:"spin planning-sidebar-status-icon planning-sidebar-status-generating"});case"awaiting_input":return t.jsx(pu,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-awaiting"});case"complete":return t.jsx(ts,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-complete"});case"error":return t.jsx(Vs,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-error"});default:return t.jsx(ia,{size:14,className:"planning-sidebar-status-icon"})}}function PD({status:e}){switch(e){case"generating":return t.jsx("span",{children:"Generating"});case"awaiting_input":return t.jsx("span",{children:"Needs input"});case"complete":return t.jsx("span",{children:"Complete"});case"error":return t.jsx("span",{children:"Error"});default:return t.jsx("span",{children:e})}}function $D(e){const n=Date.now()-Date.parse(e);if(!Number.isFinite(n)||n<0)return"";const s=Math.floor(n/1e3);if(s<60)return"just now";const a=Math.floor(s/60);if(a<60)return`${a}m ago`;const r=Math.floor(a/60);if(r<24)return`${r}h ago`;const o=Math.floor(r/24);if(o<7)return`${o}d ago`;const l=Math.floor(o/7);return l<4?`${l}w ago`:new Date(e).toLocaleDateString()}function DD(e){return{id:`subtask-${e}`,title:"",description:"",suggestedSize:"M",dependsOn:[]}}function ug(e){const n=new Map(e.map(o=>[o.id,o.dependsOn])),s=new Set,a=new Set,r=o=>{if(s.has(o))return!0;if(a.has(o))return!1;s.add(o);for(const l of n.get(o)??[])if(n.has(l)&&r(l))return!0;return s.delete(o),a.add(o),!1};return e.some(o=>r(o.id))}function LD({isOpen:e,onClose:n,initialDescription:s,onTasksCreated:a,parentTaskId:r,projectId:o,resumeSessionId:l}){const c=ii();_i(e);const{keyboardOverlap:d,viewportHeight:u,viewportOffsetTop:h,keyboardOpen:m}=la({enabled:c==="mobile"}),f=m?{"--keyboard-overlap":`${d}px`,"--vv-offset-top":`${h}px`,...u!==null?{"--vv-height":`${u}px`}:{}}:{},[p,g]=i.useState({type:"initial"}),[w,v]=i.useState([]),[b,y]=i.useState([]),[N,S]=i.useState(""),[C,x]=i.useState(!0),[k,R]=i.useState(!1),[z,_]=i.useState(!1),[A,X]=i.useState(s),[H,M]=i.useState(null),[T,F]=i.useState(!1),[W,oe]=i.useState("project-default"),[D,E]=i.useState(""),[P,$]=i.useState(""),[j,q]=i.useState("shared"),[le,fe]=i.useState(null),[Ce,Ae]=i.useState(null),[re,Z]=i.useState(null),pe=i.useRef(null),ie=i.useRef([]),ve=i.useRef(!1),ne=i.useRef(null),L=p.type==="generating"||p.type==="editing"||p.type==="creating"||p.type==="error"?p.sessionId:null,Y=i.useMemo(()=>sr(),[]),{isLockedByOther:ue,takeControl:B,isLoading:xe}=Bc(e?L:null),{activeTabMap:je,broadcastUpdate:se,broadcastCompleted:Ue,broadcastLock:De,broadcastUnlock:dt,broadcastHeartbeat:Pe}=eo(),ce=i.useMemo(()=>w.length===0||w.some(he=>!he.title.trim())||(W==="existing"||W==="custom-new")&&!D.trim()?!0:ug(w),[W,D,w]),Ee=p.type==="generating"||p.type==="editing"||p.type==="error",Oe=L?je.get(L):null,{confirm:ht}=ai(),Ve=Oe&&Oe.tabId!==Y,ge=!!(Ve&&!Oe.stale),me=ue&&(!Ve||Oe.stale),$e=i.useCallback(()=>{A&&_4(A,o),pe.current?.close(),pe.current=null,g({type:"initial"}),v([]),y([]),S(""),x(!0),R(!1),_(!1),M(null),F(!1),oe("project-default"),E(""),$(""),q("shared"),ve.current=!1},[A,o]),mt=i.useCallback(()=>{pe.current?.close(),pe.current=null,n()},[n]),jt=i.useCallback(async()=>{if(!((T||p.type==="editing"||p.type==="creating")&&!await ht({title:"Discard Changes",message:"Close subtask breakdown? Unsaved changes will be lost.",danger:!0}))){if(L)try{await Zb(L,o,Y)}catch{}$e(),n()}},[T,n,$e,L,Y,p.type,o,ht]),tt=i.useCallback(he=>{pe.current?.close(),pe.current=r1(he,o,{onThinking:et=>{S(vt=>vt+et),se({sessionId:he,status:"generating",needsInput:!1,owningTabId:Y,type:"subtask",title:A.trim()||void 0,projectId:o??null})},onSubtasks:et=>{R(!1),_(!1),Vd(o),v(et),g({type:"editing",sessionId:he}),F(!1),se({sessionId:he,status:"awaiting_input",needsInput:!0,owningTabId:Y,type:"subtask",title:A.trim()||void 0,projectId:o??null})},onError:et=>{const vt=et||"Session failed while contacting the AI.";R(!1),_(!1),M(null),g({type:"error",sessionId:he,errorMessage:vt}),se({sessionId:he,status:"error",needsInput:!1,owningTabId:Y,type:"subtask",title:A.trim()||void 0,projectId:o??null}),Ue({sessionId:he,status:"error"})},onComplete:()=>{Ue({sessionId:he,status:"complete"})},onConnectionStateChange:et=>{R(et==="reconnecting")}})},[Ue,se,A,o,Y]),bt=i.useCallback(async()=>{if(A.trim()){M(null),y([]),S(""),R(!1);try{const{sessionId:he}=await s1(A.trim(),o);g({type:"generating",sessionId:he}),tt(he)}catch(he){M(Me(he)||"Failed to start subtask breakdown"),g({type:"initial"})}}},[tt,A,o]);i.useEffect(()=>{if(!e){$e();return}if(e&&s&&!ve.current)X(s),ve.current=!0,bt();else if(e&&!s&&!ve.current){const he=M4(o);he&&X(he)}},[e,s,bt,$e]),i.useEffect(()=>{!e||!l||p.type!=="initial"||(async()=>{try{const he=await Bi(l);if(!he)return;const et=Lr(he.conversationHistory);if(y(et),he.status==="generating"||he.status==="awaiting_input")S(he.thinkingOutput??""),g({type:"generating",sessionId:l}),tt(l);else if(he.status==="complete"&&he.result){Vd(o);const vt=JSON.parse(he.result);v(vt),g({type:"editing",sessionId:l})}else he.status==="error"&&(M(null),g({type:"error",sessionId:l,errorMessage:he.error??"Session encountered an error"}))}catch(he){M(Me(he)||"Failed to resume session")}})()},[tt,e,l,p.type,o]),i.useEffect(()=>{if(!e){ne.current&&(dt(ne.current,Y),ne.current=null);return}if(L&&ne.current!==L){ne.current&&dt(ne.current,Y),De(L,Y),ne.current=L;return}!L&&ne.current&&(dt(ne.current,Y),ne.current=null)},[De,dt,e,L,Y]),i.useEffect(()=>{if(!e||!L||ne.current!==L)return;Pe(Y);const he=setInterval(()=>{Pe(Y)},3e4);return()=>{clearInterval(he)}},[Pe,e,L,Y]),i.useEffect(()=>()=>{pe.current?.close(),ne.current&&(dt(ne.current,Y),ne.current=null)},[dt,Y]),i.useEffect(()=>{if(!e)return;const he=et=>{et.key==="Escape"&&(et.preventDefault(),jt())};return document.addEventListener("keydown",he),()=>document.removeEventListener("keydown",he)},[e,jt]);const Ie=i.useCallback((he,et)=>{v(vt=>vt.map(Ct=>Ct.id===he?{...Ct,...et}:Ct)),F(!0)},[]),Xe=i.useCallback(()=>{v(he=>[...he,DD(he.length+1)]),F(!0)},[]),rt=i.useCallback(he=>{v(et=>et.filter(vt=>vt.id!==he).map(vt=>({...vt,dependsOn:vt.dependsOn.filter(Ct=>Ct!==he)}))),F(!0)},[]),It=i.useCallback(he=>et=>{fe(he),et.dataTransfer.setData("text/plain",he),et.dataTransfer.effectAllowed="move"},[]),_t=i.useCallback(()=>{fe(null),Ae(null),Z(null)},[]),We=i.useCallback(he=>et=>{if(et.preventDefault(),he===le)return;const vt=et.currentTarget.getBoundingClientRect(),Ct=vt.top+vt.height/2,Et=et.clientY<Ct?"before":"after";Ae(he),Z(Et)},[le]),J=i.useCallback(he=>et=>{et.preventDefault();const vt=et.dataTransfer.getData("text/plain");if(!vt||vt===he){fe(null),Ae(null),Z(null);return}v(Ct=>{const Et=Ct.findIndex(hn=>hn.id===vt),Tt=Ct.findIndex(hn=>hn.id===he);if(Et===-1||Tt===-1)return Ct;const Jt=[...Ct],[cn]=Jt.splice(Et,1);let Vt=Tt;return re==="after"&&Et<Tt&&Vt--,re==="after"&&Vt++,Jt.splice(Vt,0,cn),Jt}),F(!0),fe(null),Ae(null),Z(null)},[re]),ke=i.useCallback(he=>{const et=he.currentTarget.getBoundingClientRect(),vt=he.clientX,Ct=he.clientY;(vt<et.left||vt>et.right||Ct<et.top||Ct>et.bottom)&&(Ae(null),Z(null))},[]),ot=i.useCallback((he,et)=>{et<0||et>=w.length||(v(vt=>{const Ct=[...vt],[Et]=Ct.splice(he,1);return Ct.splice(et,0,Et),Ct}),F(!0))},[w.length]),ye=i.useCallback(he=>{ie.current[he+1]?.focus()},[]),it=i.useCallback(async()=>{if(!(!L||ce)){M(null),g({type:"creating",sessionId:L});try{const he=await o1(L,w,r,o,{branchSelection:{mode:W,...W==="existing"||W==="custom-new"?{branchName:D}:{},...P.trim()?{baseBranch:P.trim()}:{}},branchAssignment:{mode:j}});a(he.tasks),$e(),n()}catch(he){M(Me(he)||"Failed to create tasks"),g({type:"editing",sessionId:L})}}},[P,j,W,D,ce,n,a,r,o,$e,L,w]),He=i.useCallback(async()=>{if(p.type!=="error")return;const he=p.sessionId;M(null),_(!0),S(""),g({type:"generating",sessionId:he}),tt(he);try{await i1(he,o,Y)}catch(et){let vt=et;if((Me(et)||"").includes("not in an error state"))try{const Et=await Bi(he);if(!Et)throw new Error("Failed to refresh subtask session.");if(y(Lr(Et.conversationHistory)),Et.status==="generating"||Et.status==="awaiting_input")S(Et.thinkingOutput??""),g({type:"generating",sessionId:Et.id}),pe.current?.isConnected()||tt(Et.id);else if(Et.status==="complete"){if(!Et.result)throw new Error("Subtask session is complete but has no result.");Vd(o);const Tt=JSON.parse(Et.result);v(Tt),g({type:"editing",sessionId:Et.id}),F(!1)}else Et.status==="error"&&g({type:"error",sessionId:Et.id,errorMessage:Et.error??"Retry failed. Please try again."});R(!1);return}catch(Et){vt=Et}pe.current?.close(),pe.current=null,g({type:"error",sessionId:he,errorMessage:Me(vt)||"Retry failed. Please try again."}),R(!1)}finally{_(!1)}},[tt,o,Y,p]);return e?t.jsx("div",{className:"modal-overlay open",onClick:he=>he.target===he.currentTarget&&void jt(),role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg planning-modal",style:f,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(Cc,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Subtask Breakdown"})]}),t.jsxs("div",{className:"modal-header-actions",children:[Ee&&t.jsx("button",{className:"modal-send-to-background",onClick:mt,title:"Send to background","aria-label":"Send to background",children:t.jsx(Zo,{size:16})}),t.jsx("button",{className:"modal-close",onClick:()=>void jt(),"aria-label":"Close",children:t.jsx(yn,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[H&&t.jsx("div",{className:"form-error planning-error",children:H}),k&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),ge&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),p.type==="initial"&&t.jsx("div",{className:"planning-initial",children:t.jsxs("div",{className:"planning-view-scroll",children:[t.jsx("p",{className:"text-muted",children:"Preparing to break this task into subtasks."}),t.jsx("pre",{className:"planning-thinking-output",children:A})]})}),p.type==="generating"&&t.jsxs("div",{className:"planning-loading",children:[b.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:b,defaultShowThinking:!0}),t.jsx("div",{className:"conversation-separator"})]}),t.jsx(St,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:"AI is generating subtasks..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>x(!C),type:"button",children:C?"Hide thinking":"Show thinking"}),C&&N&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:N})})]})]}),p.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[b.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:b,defaultShowThinking:!0}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:p.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void He(),disabled:z,children:[z?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14}),t.jsx("span",{className:"icon-ml-6",children:z?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:()=>void jt(),disabled:z,children:"Cancel"})]})]})]})}),(p.type==="editing"||p.type==="creating")&&t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[b.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(hi,{entries:b}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(ts,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Review your subtasks"}),t.jsx("p",{className:"text-muted",children:"Edit titles, descriptions, sizes, and dependencies before creating all tasks at once."})]}),t.jsxs("div",{className:"planning-summary-form",children:[t.jsxs("div",{className:"task-detail-section",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Branch strategy"}),t.jsxs("select",{value:W,onChange:he=>oe(he.target.value),disabled:p.type==="creating",children:[t.jsx("option",{value:"project-default",children:"Use project/default branch"}),t.jsx("option",{value:"auto-new",children:"Create auto-named branch per task"}),t.jsx("option",{value:"existing",children:"Use existing branch"}),t.jsx("option",{value:"custom-new",children:"Create custom new branch"})]})]}),(W==="existing"||W==="custom-new")&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Branch name"}),t.jsx("input",{value:D,onChange:he=>E(he.target.value),disabled:p.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Merge target / base branch (optional)"}),t.jsx("input",{value:P,onChange:he=>$(he.target.value),disabled:p.type==="creating",placeholder:"main"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Planning branch mode"}),t.jsxs("select",{value:j,onChange:he=>q(he.target.value),disabled:p.type==="creating",children:[t.jsx("option",{value:"shared",children:"Shared branch for all subtasks"}),t.jsx("option",{value:"per-task-derived",children:"Per-task branch derived from planning branch"})]})]})]}),w.map((he,et)=>{const vt=le===he.id,Ct=Ce===he.id,Et=["task-detail-section","subtask-item",vt?"subtask-item-dragging":"",Ct?"subtask-item-drop-target":"",Ct&&re==="before"?"subtask-item-drop-before":"",Ct&&re==="after"?"subtask-item-drop-after":""].filter(Boolean).join(" ");return t.jsxs("div",{className:Et,"data-testid":`subtask-item-${et}`,draggable:p.type!=="creating",onDragStart:It(he.id),onDragEnd:_t,onDragOver:We(he.id),onDrop:J(he.id),onDragLeave:ke,children:[t.jsxs("div",{className:"detail-title-row subtask-item-header subtask-item-header--between",children:[t.jsxs("div",{className:"subtask-drag-handle",title:"Drag to reorder",children:[t.jsx(Sc,{size:16}),t.jsx("strong",{children:he.id})]}),t.jsxs("div",{className:"subtask-item-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>ot(et,et-1),disabled:p.type==="creating"||et===0,title:"Move up","aria-label":"Move subtask up",children:t.jsx(Va,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>ot(et,et+1),disabled:p.type==="creating"||et===w.length-1,title:"Move down","aria-label":"Move subtask down",children:t.jsx(Yo,{})}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>rt(he.id),disabled:p.type==="creating",children:[t.jsx(zn,{size:14})," Remove"]})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Title"}),t.jsx("input",{ref:Tt=>{ie.current[et]=Tt},value:he.title,onChange:Tt=>Ie(he.id,{title:Tt.target.value}),onKeyDown:Tt=>{Tt.key==="Enter"&&(Tt.preventDefault(),ye(et))},disabled:p.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:8,value:he.description,onChange:Tt=>Ie(he.id,{description:Tt.target.value}),disabled:p.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Size"}),t.jsxs("select",{className:"planning-size-select",value:he.suggestedSize,onChange:Tt=>Ie(he.id,{suggestedSize:Tt.target.value}),disabled:p.type==="creating",children:[t.jsx("option",{value:"S",children:"S"}),t.jsx("option",{value:"M",children:"M"}),t.jsx("option",{value:"L",children:"L"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"planning-deps-list",children:[w.slice(0,et).filter(Tt=>Tt.id!==he.id).map(Tt=>{const Jt=he.dependsOn.includes(Tt.id);return t.jsxs("label",{className:`planning-dep-chip ${Jt?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:Jt,onChange:()=>{const cn=Jt?he.dependsOn.filter(Vt=>Vt!==Tt.id):[...he.dependsOn,Tt.id];Ie(he.id,{dependsOn:cn})},disabled:p.type==="creating"}),t.jsx("span",{className:"planning-dep-id",children:Tt.id}),t.jsx("span",{className:"planning-dep-title",children:Tt.title||"Untitled"})]},Tt.id)}),et===0&&t.jsx("div",{className:"text-muted",children:"First subtask cannot have dependencies."}),et>0&&w.slice(0,et).filter(Tt=>Tt.id!==he.id).length===0&&t.jsx("div",{className:"text-muted",children:"No previous subtasks available."})]})]})]},he.id)}),t.jsxs("button",{type:"button",className:"btn",onClick:Xe,disabled:p.type==="creating",children:[t.jsx(Bn,{size:16,className:"icon-mr-6"})," Add subtask"]}),ug(w)&&t.jsx("div",{className:"form-error planning-error",children:"Dependencies contain a cycle. Remove circular references before creating tasks."})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsx("button",{className:"btn",onClick:()=>void jt(),disabled:p.type==="creating",children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:()=>void it(),disabled:p.type==="creating"||ce,children:p.type==="creating"?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"spin icon-mr-6"}),"Creating..."]}):t.jsx(t.Fragment,{children:"Create Tasks"})})]})]}),ue&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(Ec,{size:16}),t.jsx("span",{children:me?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),me&&t.jsx("button",{type:"button",onClick:()=>{B()},disabled:xe,className:"btn btn-primary session-lock-take-control",children:xe?"Taking control...":"Take Control"})]})})]})]})}):null}const OD=5,FD=1e3,zD=45e3;function zl(){return{scrollback:null,connected:null,data:[]}}function BD(e,n){const[s,a]=i.useState("disconnected"),r=i.useRef(0),o=i.useRef(e),l=i.useRef(n),c=o.current!==e||l.current!==n;c&&(o.current=e,l.current=n,r.current++);const d=i.useRef(null),u=i.useRef(0),h=i.useRef(null),m=i.useRef(null),f=i.useRef(!1),p=i.useRef(new Set),g=i.useRef(new Set),w=i.useRef(new Set),v=i.useRef(new Set),b=i.useRef(new Set),y=i.useRef(zl()),N=i.useCallback(M=>{p.current.add(M);const T=y.current;return T.data.length>0&&(T.data.forEach(F=>M(F)),T.data=[]),()=>p.current.delete(M)},[]),S=i.useCallback(M=>(g.current.add(M),()=>g.current.delete(M)),[]),C=i.useCallback(M=>{w.current.add(M);const T=y.current;return T.connected&&(M(T.connected),T.connected=null),()=>w.current.delete(M)},[]),x=i.useCallback(M=>{v.current.add(M);const T=y.current;return T.scrollback&&(M(T.scrollback),T.scrollback=null),()=>v.current.delete(M)},[]),k=i.useCallback(M=>(b.current.add(M),()=>b.current.delete(M)),[]),R=i.useCallback(M=>{const T=d.current;T?.readyState===WebSocket.OPEN&&T.send(JSON.stringify({type:"input",data:M}))},[]),z=i.useCallback((M,T)=>{const F=d.current;F?.readyState===WebSocket.OPEN&&F.send(JSON.stringify({type:"resize",cols:M,rows:T}))},[]),_=i.useCallback(()=>{h.current&&(clearTimeout(h.current),h.current=null),m.current&&(clearInterval(m.current),m.current=null),d.current&&(d.current.onopen=null,d.current.onmessage=null,d.current.onclose=null,d.current.onerror=null,d.current.close(),d.current=null),y.current=zl()},[]),A=i.useCallback(()=>{h.current&&(clearTimeout(h.current),h.current=null),m.current&&(clearInterval(m.current),m.current=null),d.current&&(f.current=!0,d.current.onopen=null,d.current.onmessage=null,d.current.onclose=null,d.current.onerror=null,d.current.close(),d.current=null),y.current=zl()},[]),X=i.useCallback(()=>{if(!e){a("disconnected");return}if(d.current?.readyState===WebSocket.OPEN)return;d.current&&(f.current=!0,d.current.onopen=null,d.current.onmessage=null,d.current.onclose=null,d.current.onerror=null,d.current.close(),d.current=null),f.current=!1,a("connecting");const M=r.current;let F=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/terminal/ws?sessionId=${encodeURIComponent(e)}`;n&&(F+=`&projectId=${encodeURIComponent(n)}`);const W=new WebSocket(Ci(F));d.current=W,W.onopen=()=>{if(r.current!==M){W.close();return}y.current=zl(),a("connected"),u.current=0,m.current&&clearInterval(m.current),m.current=setInterval(()=>{r.current===M&&W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"ping"}))},zD)},W.onmessage=oe=>{if(r.current===M)try{const D=JSON.parse(oe.data),E=y.current;switch(D.type){case"data":D.data&&(p.current.size===0&&E.data.push(D.data),p.current.forEach(P=>P(D.data)));break;case"scrollback":D.data&&(E.scrollback=D.data,v.current.forEach(P=>P(D.data)));break;case"connected":D.shell&&D.cwd&&(E.connected={shell:D.shell,cwd:D.cwd},w.current.forEach(P=>P({shell:D.shell,cwd:D.cwd})));break;case"exit":D.exitCode!==void 0&&g.current.forEach(P=>P(D.exitCode));break;case"ping":W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"pong"}));break;case"pong":break}}catch{}},W.onclose=oe=>{if(r.current!==M)return;if(d.current=null,m.current&&(clearInterval(m.current),m.current=null),f.current){a("disconnected");return}if(oe.code===4e3||oe.code===4004){a("disconnected"),oe.code===4004&&b.current.forEach(P=>P());return}if(u.current++,u.current>OD){a("disconnected");return}const D=FD*Math.pow(2,u.current-1);a("reconnecting");const E=r.current;h.current=setTimeout(()=>{r.current===E&&(f.current||X())},Math.min(D,16e3))},W.onerror=()=>{}},[e,n]),H=i.useCallback(()=>{u.current=0,A(),X()},[A,X]);return i.useEffect(()=>(c&&(_(),u.current=0,a("disconnected")),e?X():a("disconnected"),A),[e,n,c,X,A,_]),{connectionStatus:s,sendInput:R,resize:z,onData:N,onExit:S,onConnect:C,onScrollback:x,reconnect:H,onSessionInvalid:k}}const dy="kb-terminal-tabs",UD=15e3,HD=15e3;function mg(){return`tab-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function hg(e){if(typeof window>"u")return[];try{const n=Gn(dy,e);if(n)return JSON.parse(n)}catch{}return[]}function eu(e){const n=e instanceof Error?e.message:typeof e=="string"?e:"";return n.includes("Failed to parse URL")||n.includes("Invalid URL")}function pg(e,n,s){let a;const r=new Promise((o,l)=>{a=setTimeout(()=>l(new Error(`${s} timed out after ${n}ms`)),n)});return Promise.race([e,r]).finally(()=>clearTimeout(a))}function qD(e){const[n,s]=i.useState(()=>hg(e)),[a,r]=i.useState(!1),[o,l]=i.useState(!0),[c,d]=i.useState(null),[u,h]=i.useState(0),m=i.useRef(0);i.useEffect(()=>{m.current+=1,s(hg(e)),r(!1),l(!0),d(null)},[e]),i.useEffect(()=>{try{cs(dy,JSON.stringify(n),e)}catch{}},[e,n]),i.useEffect(()=>{let C=!1;const x=m.current;return(async()=>{if(!C)try{const R=await pg(YS(e),UD,"listTerminalSessions");if(C||x!==m.current)return;const z=new Set(R.map(_=>_.id));l(!0),s(_=>{if(C||x!==m.current)return _;const X=_.map(T=>({...T,_verified:z.has(T.sessionId)})).filter(T=>T._verified);if(X.length===0)return[];const H=X.map(({_verified:T,...F})=>F);return H.find(T=>T.isActive)?H:H.map((T,F)=>({...T,isActive:F===0}))}),r(!0)}catch(R){if(C||x!==m.current)return;const z=eu(R);z||console.warn("Failed to validate terminal sessions with server:",R),l(!z),r(!0)}})(),()=>{C=!0}},[e]),i.useEffect(()=>{if(n.length===0&&a&&o){const C=m.current,x=setTimeout(()=>{pg(fl(void 0,void 0,void 0,e),HD,"createTerminalSession").then(k=>{if(C!==m.current)return;const R={id:mg(),sessionId:k.sessionId,title:`Terminal ${n.length+1}`,isActive:!0,createdAt:Date.now()};s(z=>z.length>0?z:[...z.map(A=>({...A,isActive:!1})),R]),d(null)}).catch(k=>{if(C!==m.current)return;eu(k)||console.error(k);const R=k instanceof Error?k.message:typeof k=="string"?k:"Failed to create terminal session";d(R)})},0);return()=>clearTimeout(x)}},[a,o,n.length,u]);const f=i.useCallback(async()=>{const C=await fl(void 0,void 0,void 0,e),x={id:mg(),sessionId:C.sessionId,title:`Terminal ${n.length+1}`,isActive:!0,createdAt:Date.now()};return s(k=>[...k.map(z=>({...z,isActive:!1})),x]),x},[n.length]),p=i.useCallback(async()=>f(),[f]),g=i.useCallback(C=>{s(x=>{const k=x.find(A=>A.id===C);if(!k)return x;fh(k.sessionId,e).catch(A=>{console.warn(`Failed to kill terminal session ${k.sessionId}:`,A)});const R=x.findIndex(A=>A.id===C),z=k.isActive,_=x.filter(A=>A.id!==C);if(_.length===0)return[];if(z){const A=Math.min(R,_.length-1);return _.map((X,H)=>({...X,isActive:H===A}))}return _})},[]),w=i.useCallback(C=>{s(x=>{let k=!1;const R=x.map(z=>z.id===C?(k=!0,{...z,isActive:!0}):{...z,isActive:!1});return k?R:x})},[]),v=i.useCallback((C,x)=>{s(k=>k.map(R=>R.id===C?{...R,title:x}:R))},[]),b=i.useCallback(async()=>{s(k=>{const R=k.find(z=>z.isActive);return R&&fh(R.sessionId,e).catch(z=>{console.warn(`Failed to kill old session ${R.sessionId}:`,z)}),k});const C=n.find(k=>k.isActive);if(!C)return;const x=await fl(void 0,void 0,void 0,e);s(k=>k.map(R=>R.id===C.id?{...R,sessionId:x.sessionId}:R))},[n]),y=i.useCallback(async()=>{const C=n.find(x=>x.isActive);if(C)try{const x=await fl(void 0,void 0,void 0,e);s(k=>k.map(R=>R.id===C.id?{...R,sessionId:x.sessionId}:R)),d(null)}catch(x){eu(x)||console.error(x);const k=x instanceof Error?x.message:typeof x=="string"?x:"Failed to create terminal session";d(k)}},[n]),N=n.find(C=>C.isActive)??null,S=i.useCallback(()=>{d(null),m.current+=1,h(C=>C+1)},[]);return{tabs:n,activeTab:N,isReady:a,bootstrapError:c,createTab:p,closeTab:g,setActiveTab:w,updateTabTitle:v,restartActiveTab:b,retryBootstrap:S,replaceActiveTabSession:y}}const VD=1e4,WD=[500,1500,3e3],uy="kb-terminal-font-size",To=14,GD=8,KD=32,JD='"Fusion Terminal Nerd Font Symbols", "MesloLGS NF", "MesloLGM Nerd Font", "JetBrainsMono Nerd Font", "FiraCode Nerd Font", "Hack Nerd Font", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace';function YD(e){if(!e)return"";const n=e.slice(0,1).toUpperCase();return n==="["?"\x1B":n>="A"&&n<="Z"?String.fromCharCode(n.charCodeAt(0)-64):e}function QD(e){return`\x1B${e}`}const XD=[{label:"C",key:"c",description:"SigInt"},{label:"D",key:"d",description:"EOF"},{label:"Z",key:"z",description:"Suspend"},{label:"L",key:"l",description:"Clear"},{label:"R",key:"r",description:"Reverse search"},{label:"A",key:"a",description:"Home"},{label:"E",key:"e",description:"End"},{label:"U",key:"u",description:"Kill line"},{label:"K",key:"k",description:"Kill to EOL"},{label:"W",key:"w",description:"Del word"},{label:".",key:".",description:"Last argument"}];function Po(e){return Math.min(KD,Math.max(GD,e))}function ZD(){if(typeof window>"u")return To;try{const e=window.localStorage.getItem(uy);if(!e)return To;const n=Number.parseInt(e,10);return Number.isFinite(n)?Po(n):To}catch{return To}}function eL(e){const n=typeof e=="string"?e:e instanceof Error?e.message:String(e);return n.includes("MIME type")||n.includes("Failed to fetch dynamically imported module")}function tL(e){return new Promise(n=>setTimeout(n,e))}async function nL(e,n=WD){let s;for(let a=0;a<=n.length;a+=1)try{return await e()}catch(r){if(!eL(r))throw r;s===void 0&&(s=r);const o=n[a];if(o===void 0)throw s??r;const l=r instanceof Error?r.message:String(r);console.warn(`[TerminalModal] Dynamic xterm import failed (attempt ${a+1}/${n.length+1}). Retrying in ${o}ms...`,l),await tL(o)}throw s??new Error("Dynamic import failed")}function fg(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}function sL(){if(typeof window>"u"||!window.visualViewport)return 0;const e=window.visualViewport,n=Math.max(0,window.innerHeight-e.offsetTop-e.height);if(n>0)return n;const a=iL()-e.offsetTop-e.height;return a>=30&&a>80?a:0}let tu=null;function iL(){return tu===null&&(tu=window.innerHeight),tu}function aL({isOpen:e,onClose:n,initialCommand:s,projectId:a}){const[r,o]=i.useState(null),[l,c]=i.useState(null),[d,u]=i.useState(!1),[h,m]=i.useState(null),[f,p]=i.useState(0),[g,w]=i.useState(0),[v,b]=i.useState(null),[y,N]=i.useState(()=>ZD()),[S,C]=i.useState(!1),[x,k]=i.useState(null),R=i.useRef(null),z=i.useRef(null),_=i.useRef(!1);qi(z,e,"fusion:terminal-modal-size");const A=i.useRef(null),X=i.useRef(null),H=i.useRef(!1),M=i.useRef(!1),T=i.useRef(null),F=i.useRef(()=>{}),W=i.useRef(null),oe=i.useRef(0),D=i.useRef(y),E=i.useRef(null),P=i.useRef(a);oe.current=g,D.current=y;const $=i.useCallback(Ie=>{if(Ie&&M.current!==Ie)return;const Xe=X.current,rt=A.current,It=T.current;if(!(!Xe||!rt)&&!(Ie&&M.current!==Ie))try{Xe.fit(),It&&It(rt.cols,rt.rows)}catch{}},[]);i.useEffect(()=>{e&&p(Ie=>Ie+1)},[e]),i.useEffect(()=>{if(!e||!fg())return;const Ie=window.visualViewport;if(!Ie)return;const Xe=()=>{const rt=sL();w(rt),b(Ie.height),rt>0&&z.current?.scrollIntoView&&z.current.scrollIntoView({block:"end",behavior:"smooth"}),E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const It=typeof M.current=="string"?M.current:void 0;E.current=requestAnimationFrame(()=>{E.current=null,$(It)})};return Xe(),Ie.addEventListener("resize",Xe),Ie.addEventListener("scroll",Xe),()=>{Ie.removeEventListener("resize",Xe),Ie.removeEventListener("scroll",Xe),E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),w(0),b(null)}},[$,e]),i.useEffect(()=>{if(!e)return;const Ie=z.current;if(!Ie||typeof ResizeObserver>"u")return;let Xe=null;const rt=new ResizeObserver(()=>{Xe!==null&&cancelAnimationFrame(Xe),Xe=requestAnimationFrame(()=>{Xe=null;const It=typeof M.current=="string"?M.current:void 0;$(It)})});return rt.observe(Ie),()=>{rt.disconnect(),Xe!==null&&cancelAnimationFrame(Xe)}},[$,e]);const{tabs:j,activeTab:q,isReady:le,bootstrapError:fe,createTab:Ce,closeTab:Ae,setActiveTab:re,updateTabTitle:Z,restartActiveTab:pe,retryBootstrap:ie,replaceActiveTabSession:ve}=qD(a),{connectionStatus:ne,sendInput:L,resize:Y,onData:ue,onConnect:B,onExit:xe,onScrollback:je,reconnect:se,onSessionInvalid:Ue}=BD(q?.sessionId??null,a);T.current=Y,F.current=L,i.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(uy,String(y))}catch{}},[y]);const De=i.useCallback(()=>{const Ie=A.current;if(Ie)try{X.current?.fit(),Y(Ie.cols,Ie.rows)}catch{}},[Y]);i.useEffect(()=>{if(!e||!le)return;const Ie=q?.sessionId;if(!Ie)return;const Xe=P.current!==a;if(Xe&&(P.current=a),M.current===Ie&&A.current&&!Xe)return;A.current&&(M.current!==Ie||Xe)&&(A.current.dispose(),A.current=null,X.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),u(!1),m(null));let rt=!0,It;return(async()=>{const We=nL(()=>Promise.all([Tn(()=>import("./vendor-xterm-DzcZoU0P.js").then(ye=>ye.x),__vite__mapDeps([6,1,7])),Tn(()=>import("./addon-fit-C7jRorKK.js").then(ye=>ye.a),__vite__mapDeps([10,1])),Tn(()=>import("./addon-web-links-CkJwd4cQ.js").then(ye=>ye.a),__vite__mapDeps([11,1]))])),J=new Promise((ye,it)=>{It=setTimeout(()=>{it(new Error("xterm initialization timed out"))},VD)});let ke,ot;try{const[{Terminal:ye},{FitAddon:it},{WebLinksAddon:He}]=await Promise.race([We,J]);if(!rt||!R.current||A.current)return;ke=new ye({cursorBlink:!0,cursorStyle:"block",fontSize:D.current,fontFamily:JD,theme:{background:"#1e1e1e",foreground:"#d4d4d4",cursor:"#d4d4d4",selectionBackground:"#264f78",black:"#1e1e1e",red:"#f48771",green:"#4ec9b0",yellow:"#dcdcaa",blue:"#569cd6",magenta:"#c586c0",cyan:"#9cdcfe",white:"#d4d4d4"},allowProposedApi:!0,scrollback:5e3}),ot=new it,ke.loadAddon(ot);const he=new He;if(ke.loadAddon(he),!fg())try{const{WebglAddon:Ct}=await Tn(async()=>{const{WebglAddon:Tt}=await import("./addon-webgl-BjvOw43o.js").then(Jt=>Jt.a);return{WebglAddon:Tt}},__vite__mapDeps([12,1])),Et=new Ct;Et.onContextLoss(()=>{Et.dispose()}),ke.loadAddon(Et)}catch{}ke.open(R.current),It&&clearTimeout(It);const et=R.current?.querySelector(".xterm-helper-textarea");if(et&&et.focus(),R.current)try{R.current.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))}catch{}setTimeout(()=>{ot.fit();const Ct=R.current?.querySelector(".xterm-helper-textarea");Ct&&Ct.focus()},50),A.current=ke,X.current=ot,M.current=Ie,oe.current>0&&(E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),E.current=requestAnimationFrame(()=>{E.current=null,$(Ie)})),ke.onData(Ct=>{M.current===Ie&&F.current(Ct)});const vt=()=>{if(M.current===Ie&&X.current&&A.current)try{X.current.fit();const{cols:Ct,rows:Et}=A.current;T.current?.(Ct,Et)}catch{}};window.addEventListener("resize",vt),W.current&&window.removeEventListener("resize",W.current),W.current=vt,u(!0),m(null)}catch(ye){if(It&&clearTimeout(It),!rt)return;const it=ye instanceof Error?ye.message:"xterm initialization failed";m(it)}})(),()=>{rt=!1,It&&clearTimeout(It)}},[$,e,le,q?.sessionId,a]),i.useEffect(()=>{e||(A.current&&(A.current.dispose(),A.current=null),X.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),u(!1),m(null),H.current=!1,o(null),c(null),C(!1),k(null))},[e]),i.useEffect(()=>{if(!d||!A.current||!q)return;const Ie=q.sessionId,Xe=J=>{M.current===Ie&&A.current?.write(J)},rt=ue(J=>{Xe(J)}),It=je(J=>{Xe(J)}),_t=B(J=>{Z(q.id,um(J.shell)||J.shell)}),We=xe(J=>{M.current===Ie&&(c(J),A.current?.write(`\r
|
|
691
|
+
\x1B[33m[Process exited with code ${J}]\x1B[0m\r
|
|
692
|
+
`))});return()=>{rt(),It(),_t(),We()}},[d,q?.sessionId,q?.id,q,ne,ue,je,B,xe,Z]),i.useEffect(()=>{ne==="connected"&&s&&H.current!==s&&q&&(H.current=s,setTimeout(()=>{L(s+`
|
|
693
|
+
`)},500))},[ne,s,L,q,f]),i.useEffect(()=>{if(!d||!A.current)return;A.current.options.fontSize=y,E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const Ie=requestAnimationFrame(()=>{E.current=null,De()});return E.current=Ie,()=>{E.current===Ie&&(cancelAnimationFrame(Ie),E.current=null)}},[y,d,De]),i.useEffect(()=>{if(!e)return;const Ie=Xe=>{if(!(!Xe.ctrlKey&&!Xe.metaKey)){if(Xe.code==="Equal"||Xe.code==="NumpadAdd"){Xe.preventDefault(),N(rt=>Po(rt+1));return}if(Xe.code==="Minus"||Xe.code==="NumpadSubtract"){Xe.preventDefault(),N(rt=>Po(rt-1));return}if(Xe.code==="Digit0"||Xe.code==="Numpad0"){Xe.preventDefault(),N(To);return}}};return window.addEventListener("keydown",Ie),()=>window.removeEventListener("keydown",Ie)},[e,De]),i.useEffect(()=>{if(!e)return;const Ie=Xe=>{Xe.key==="Escape"&&n()};return document.addEventListener("keydown",Ie),()=>document.removeEventListener("keydown",Ie)},[e,n]),i.useEffect(()=>{ne==="connected"&&A.current&&setTimeout(()=>{if(!A.current||!R.current)return;const Ie=R.current.querySelector(".xterm-helper-textarea");Ie&&Ie.focus();try{R.current.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))}catch{}},100)},[ne]);const dt=i.useCallback(()=>{if(!R.current||typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(hover: none) and (pointer: coarse)")?.matches===!0)return;A.current?.focus();const Xe=R.current.querySelector(".xterm-helper-textarea");if(!Xe)return;Xe.autocapitalize="off",Xe.autocomplete="off",Xe.autocorrect="off",Xe.spellcheck=!1,Xe.setAttribute("inputmode","text");try{Xe.focus({preventScroll:!0})}catch{Xe.focus()}const rt=Xe.value.length;Xe.setSelectionRange(rt,rt)},[]);i.useEffect(()=>Ue(()=>{A.current?.clear(),c(null),H.current=!1,A.current&&(A.current.dispose(),A.current=null),X.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),u(!1),m(null),ve().catch(Xe=>{console.error("Failed to replace invalid terminal session:",Xe)})}),[Ue,ve]);const Pe=i.useCallback(Ie=>{Ie.target===Ie.currentTarget&&(_.current=!0)},[]),ce=i.useCallback(Ie=>{_.current&&Ie.target===Ie.currentTarget&&n(),_.current=!1},[n]),Ee=i.useCallback(()=>{A.current?.clear()},[]),Oe=i.useCallback(async()=>{A.current?.clear(),c(null),H.current=!1;try{await pe()}catch(Ie){o(Me(Ie)||"Failed to restart terminal session")}},[pe]),ht=i.useCallback(()=>{A.current&&(A.current.dispose(),A.current=null),X.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),m(null),u(!1)},[]),Ve=i.useCallback(()=>{window.location.reload()},[]),ge=i.useCallback(()=>{N(Ie=>Po(Ie+1))},[]),me=i.useCallback(()=>{N(Ie=>Po(Ie-1))},[]),$e=i.useCallback(Ie=>{k(Xe=>Xe===Ie?null:Ie)},[]),mt=i.useCallback(Ie=>{if(x==="ctrl"){L(YD(Ie)),k(null);return}if(x==="alt"){L(QD(Ie)),k(null);return}L(Ie)},[L,x]),jt=i.useCallback(Ie=>{L(Ie),k(null)},[L]);if(!e)return null;const tt=()=>{switch(ne){case"connected":return t.jsx("span",{className:"terminal-status connected",title:"Connected"});case"connecting":case"reconnecting":return t.jsx("span",{className:"terminal-status connecting",title:"Connecting..."});case"disconnected":return t.jsx("span",{className:"terminal-status disconnected",title:"Disconnected"});default:return null}},bt=!le||!q&&!fe;return t.jsx("div",{className:"modal-overlay open",onMouseDown:Pe,onMouseUp:ce,role:"dialog","aria-modal":"true","data-testid":"terminal-modal-overlay",style:g>0?{"--overlay-padding-top":"0px"}:void 0,children:t.jsxs("div",{ref:z,className:"modal terminal-modal","data-testid":"terminal-modal",style:g>0?{"--keyboard-overlap":`${g}px`,"--vv-height":v?`${v}px`:void 0}:void 0,children:[t.jsxs("div",{className:"terminal-header",children:[t.jsxs("div",{className:"terminal-tabs","data-testid":"terminal-tabs",children:[j.map(Ie=>t.jsxs("div",{className:`terminal-tab ${Ie.isActive?"terminal-tab--active":""}`,onClick:()=>re(Ie.id),title:Ie.title,role:"tab","aria-selected":Ie.isActive,children:[t.jsx("span",{className:"terminal-tab-label",children:Ie.title}),j.length>1&&t.jsx("button",{className:"terminal-tab-close",onClick:Xe=>{Xe.stopPropagation(),Ae(Ie.id)},title:"Close tab",children:"×"})]},Ie.id)),t.jsx("button",{className:"terminal-tab terminal-tab--new",onClick:Ce,title:"New terminal",children:"+"})]}),t.jsxs("div",{className:"terminal-title","data-testid":"terminal-title",children:[t.jsx(sa,{size:16}),tt()]}),t.jsxs("div",{className:"terminal-actions","data-testid":"terminal-actions",children:[ne==="disconnected"&&q&&t.jsxs("button",{className:"terminal-reconnect-btn",onClick:se,title:"Reconnect","data-testid":"terminal-reconnect-btn",children:[t.jsx(bs,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Reconnect"})]}),l!==null&&t.jsxs("button",{className:"terminal-restart-btn",onClick:Oe,title:"New Session","data-testid":"terminal-restart-btn",children:[t.jsx(bs,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"New Session"})]}),t.jsxs("button",{className:"terminal-clear-btn",onClick:Ee,"data-testid":"terminal-clear-btn",title:"Clear terminal",children:[t.jsx(zn,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Clear"})]}),t.jsxs("button",{className:"terminal-clear-btn terminal-clear-btn--shortcut",onClick:()=>C(Ie=>!Ie),"data-testid":"terminal-shortcut-toggle",title:"Shortcuts","aria-pressed":S,children:[t.jsx(qk,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Shortcuts"})]}),t.jsx("button",{className:"terminal-close",onClick:n,"data-testid":"terminal-close-btn",title:"Close terminal",children:t.jsx(yn,{size:20})})]})]}),r&&t.jsx("div",{className:"terminal-error","data-testid":"terminal-error",children:r}),t.jsxs("div",{className:"terminal-container","data-testid":"terminal-container",children:[bt&&!fe&&t.jsxs("div",{className:"terminal-loading","data-testid":"terminal-loading",children:[t.jsx("div",{className:"terminal-spinner"}),t.jsx("span",{children:"Starting terminal..."})]}),fe&&!q&&t.jsx("div",{className:"terminal-loading","data-testid":"terminal-bootstrap-error",children:t.jsxs("div",{className:"terminal-error-content",children:[t.jsxs("span",{children:["Failed to start terminal: ",fe]}),t.jsxs("div",{className:"terminal-error-actions",children:[t.jsxs("button",{className:"terminal-retry-btn",onClick:ie,"data-testid":"terminal-retry-btn",children:[t.jsx(bs,{size:14}),"Retry"]}),t.jsxs("button",{className:"terminal-retry-btn",onClick:Ve,"data-testid":"terminal-bootstrap-refresh-btn",children:[t.jsx(bs,{size:14}),"Refresh page"]})]})]})}),h&&q&&t.jsx("div",{className:"terminal-loading","data-testid":"terminal-xterm-init-error",children:t.jsxs("div",{className:"terminal-error-content",children:[t.jsxs("span",{children:["Terminal UI failed to initialize: ",h]}),t.jsxs("div",{className:"terminal-error-actions",children:[t.jsxs("button",{className:"terminal-retry-btn",onClick:ht,"data-testid":"terminal-reinit-btn",children:[t.jsx(bs,{size:14}),"Reinitialize"]}),t.jsxs("button",{className:"terminal-retry-btn",onClick:Ve,"data-testid":"terminal-xterm-refresh-btn",children:[t.jsx(bs,{size:14}),"Refresh page"]})]})]})}),t.jsx("div",{ref:R,className:"terminal-xterm","data-testid":"terminal-xterm",onPointerDown:dt,onTouchStart:dt},q?.sessionId)]}),S&&t.jsxs("div",{className:"terminal-shortcut-panel","data-testid":"terminal-shortcut-panel",children:[t.jsxs("div",{className:"terminal-shortcut-modifier-row",children:[t.jsx("button",{type:"button",className:`terminal-shortcut-btn terminal-shortcut-btn--modifier ${x==="ctrl"?"is-active":""}`,"data-testid":"terminal-modifier-ctrl",onClick:()=>$e("ctrl"),"aria-pressed":x==="ctrl",children:"Ctrl"}),t.jsx("button",{type:"button",className:`terminal-shortcut-btn terminal-shortcut-btn--modifier ${x==="alt"?"is-active":""}`,"data-testid":"terminal-modifier-alt",onClick:()=>$e("alt"),"aria-pressed":x==="alt",children:"Alt"}),t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>jt("\x1B"),children:"ESC"}),t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>jt(" "),children:"Tab"})]}),XD.map(Ie=>t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>mt(Ie.key),title:Ie.description,children:Ie.label},Ie.label))]}),t.jsxs("div",{className:"terminal-status-bar","data-testid":"terminal-status-bar",children:[t.jsxs("span",{className:`terminal-connection-status ${ne}`,children:[ne==="connected"&&"Connected",ne==="connecting"&&"Connecting...",ne==="reconnecting"&&"Reconnecting...",ne==="disconnected"&&"Disconnected"]}),l!==null&&t.jsxs("span",{className:"terminal-exit-code","data-testid":"terminal-exit-code",children:["Exit: ",l]}),t.jsxs("span",{className:"terminal-font-size-controls",children:[t.jsx("button",{type:"button",className:"terminal-font-size-btn",onClick:me,"data-testid":"terminal-font-size-decrease","aria-label":"Decrease terminal font size",children:t.jsx(pj,{size:14})}),t.jsxs("span",{className:"terminal-font-size-value","data-testid":"terminal-font-size-value",children:[y,"px"]}),t.jsx("button",{type:"button",className:"terminal-font-size-btn",onClick:ge,"data-testid":"terminal-font-size-increase","aria-label":"Increase terminal font size",children:t.jsx(Bn,{size:14})})]}),t.jsx("span",{className:"terminal-shortcuts",children:"Ctrl++/- zoom • ⌨ Shortcuts panel • Esc close"})]})]})})}const yo={name:"",command:""};function gg(e){return/^[a-zA-Z0-9_-]+$/.test(e)}function rL(e,n=60){return e.length<=n?e:e.slice(0,n-3)+"..."}function oL({isOpen:e,onClose:n,addToast:s,projectId:a,onRunScript:r}){_i(e);const[o,l]=i.useState({}),[c,d]=i.useState(!0),[u,h]=i.useState(!1),[m,f]=i.useState(null),[p,g]=i.useState(yo),[w,v]=i.useState(!1),[b,y]=i.useState(null),[N,S]=i.useState(null),C=ra(n),x=i.useCallback(async()=>{try{d(!0);const F=await Vo(a);l(F)}catch(F){s(Me(F)||"Failed to load scripts","error")}finally{d(!1)}},[s,a]);i.useEffect(()=>{e&&x()},[e,x]);const k=i.useCallback(()=>{h(!0),f(null),g(yo),S(null)},[]),R=i.useCallback((F,W)=>{f(F),h(!1),g({name:F,command:W}),S(null)},[]),z=i.useCallback(()=>{f(null),h(!1),g(yo),S(null)},[]),_=i.useCallback(F=>{g(W=>({...W,name:F})),F&&!gg(F)?S("Name must contain only letters, numbers, hyphens, and underscores (no spaces)"):S(null)},[]),A=i.useCallback(async()=>{const F=p.name.trim(),W=p.command.trim();if(!F){s("Script name is required","error");return}if(!gg(F)){s("Script name must contain only letters, numbers, hyphens, and underscores (no spaces)","error");return}if(!W){s("Script command is required","error");return}v(!0);try{await t1(F,W,a),s(m?"Script updated":"Script created","success"),f(null),h(!1),g(yo),S(null),await x()}catch(oe){const D=Me(oe);D?.includes("already exists")?s("A script with this name already exists","error"):s(D||"Failed to save script","error")}finally{v(!1)}},[p,m,s,x,a]),X=i.useCallback(async F=>{try{await n1(F,a),s("Script deleted","success"),y(null),m===F&&(f(null),g(yo)),await x()}catch(W){s(Me(W)||"Failed to delete script","error")}},[m,s,x,a]),H=i.useCallback((F,W)=>{r&&r(F,W)},[r]);if(!e)return null;const M=u||m!==null,T=Object.entries(o).map(([F,W])=>({name:F,command:W}));return t.jsx("div",{className:"modal-overlay open",...C,"data-testid":"scripts-modal",children:t.jsxs("div",{className:"modal scripts-modal",role:"dialog","aria-modal":"true","aria-label":"Scripts",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h2",{children:[t.jsx(sa,{size:18,style:{marginRight:"8px",verticalAlign:"middle"}}),"Scripts"]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]}),t.jsx("div",{className:"modal-body scripts-modal-body",children:c?t.jsxs("div",{style:{textAlign:"center",padding:"32px",color:"var(--text-muted)"},children:[t.jsx(St,{size:24,className:"spin",style:{margin:"0 auto 8px",display:"block"}}),"Loading scripts..."]}):M?t.jsxs("div",{className:"scripts-modal-form",style:{display:"flex",flexDirection:"column",gap:"16px"},children:[t.jsxs("div",{children:[t.jsx("label",{htmlFor:"script-name",style:{display:"block",marginBottom:"4px",fontSize:"13px",fontWeight:500,color:"var(--text)"},children:"Script Name"}),t.jsx("input",{id:"script-name",type:"text",className:"input",value:p.name,onChange:F=>_(F.target.value),placeholder:"e.g., build, test, lint",disabled:w||m!==null,"data-testid":"script-name-input",style:{width:"100%",borderColor:N?"var(--color-error)":void 0}}),N&&t.jsx("div",{style:{fontSize:"12px",color:"var(--color-error)",marginTop:"4px"},"data-testid":"script-name-error",children:N}),t.jsx("div",{style:{fontSize:"11px",color:"var(--text-muted)",marginTop:"4px"},children:"Letters, numbers, hyphens, and underscores only"})]}),t.jsxs("div",{children:[t.jsx("label",{htmlFor:"script-command",style:{display:"block",marginBottom:"4px",fontSize:"13px",fontWeight:500,color:"var(--text)"},children:"Command"}),t.jsx("textarea",{id:"script-command",className:"input",value:p.command,onChange:F=>g(W=>({...W,command:F.target.value})),placeholder:"e.g., npm run build",rows:3,disabled:w,"data-testid":"script-command-input",style:{width:"100%",resize:"vertical",fontFamily:"monospace"}})]}),t.jsxs("div",{className:"scripts-modal-form-actions",style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[t.jsx("button",{className:"btn btn-secondary",onClick:z,disabled:w,"data-testid":"script-cancel-btn",children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:A,disabled:w||!!N,"data-testid":"script-save-btn",children:w?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:14,className:"spin",style:{marginRight:"6px"}}),"Saving..."]}):m?"Update":"Create"})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"scripts-modal-list-header",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"16px"},children:[t.jsx("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:T.length===0?"No scripts defined":`${T.length} script${T.length===1?"":"s"}`}),t.jsxs("button",{className:"btn btn-primary",onClick:k,"data-testid":"add-script-btn",style:{display:"flex",alignItems:"center",gap:"6px"},children:[t.jsx(Bn,{size:14}),"Add Script"]})]}),T.length===0?t.jsxs("div",{style:{textAlign:"center",padding:"32px",color:"var(--text-muted)",fontSize:"14px",border:"1px dashed var(--border)",borderRadius:"8px"},"data-testid":"empty-state",children:[t.jsx(sa,{size:32,style:{margin:"0 auto 12px",opacity:.5}}),t.jsx("div",{children:"No scripts defined yet."}),t.jsx("div",{style:{marginTop:"4px",fontSize:"12px"},children:"Add scripts to quickly run common commands from the dashboard."})]}):t.jsx("div",{className:"scripts-modal-list",style:{display:"flex",flexDirection:"column",gap:"8px"},children:T.map(F=>t.jsx("div",{className:"script-card","data-testid":`script-${F.name}`,style:{padding:"12px 16px",border:"1px solid var(--border)",borderRadius:"8px",background:"var(--card)"},children:t.jsxs("div",{className:"script-card-header",style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginBottom:"4px"},children:t.jsx("span",{style:{fontWeight:600,fontSize:"14px",fontFamily:"monospace"},children:F.name})}),t.jsx("div",{style:{fontSize:"12px",color:"var(--text-muted)",fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:F.command,children:rL(F.command)})]}),t.jsxs("div",{className:"script-card-actions",style:{display:"flex",gap:"4px",marginLeft:"8px",flexShrink:0},children:[t.jsxs("button",{className:"btn btn-secondary",onClick:()=>H(F.name,F.command),title:"Run script","aria-label":`Run ${F.name}`,"data-testid":`run-script-${F.name}`,style:{display:"flex",alignItems:"center",gap:"4px",padding:"4px 10px",fontSize:"12px"},children:[t.jsx(ds,{size:12}),"Run"]}),t.jsx("button",{className:"btn-icon",onClick:()=>R(F.name,F.command),title:"Edit","aria-label":`Edit ${F.name}`,"data-testid":`edit-script-${F.name}`,children:t.jsx(Bn,{size:14,style:{transform:"rotate(45deg)"}})}),b===F.name?t.jsxs("div",{className:"script-delete-confirm",style:{display:"flex",gap:"4px",alignItems:"center"},children:[t.jsx("button",{className:"btn-icon",onClick:()=>X(F.name),title:"Confirm delete","aria-label":`Confirm delete ${F.name}`,"data-testid":`confirm-delete-script-${F.name}`,style:{color:"var(--color-error)"},children:t.jsx(zn,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:()=>y(null),title:"Cancel delete","aria-label":"Cancel delete","data-testid":`cancel-delete-script-${F.name}`,children:t.jsx(yn,{size:14})})]}):t.jsx("button",{className:"btn-icon",onClick:()=>y(F.name),title:"Delete","aria-label":`Delete ${F.name}`,"data-testid":`delete-script-${F.name}`,children:t.jsx(zn,{size:14})})]})]})},F.name))})]})})]})})}function lL(e,n,s){const[a,r]=i.useState([]),[o,l]=i.useState("."),[c,d]=i.useState(!1),[u,h]=i.useState(null),[m,f]=i.useState(0),p=i.useCallback(()=>{f(w=>w+1)},[]),g=i.useCallback(w=>{l(w),h(null)},[]);return i.useEffect(()=>{l("."),h(null),r([])},[e]),i.useEffect(()=>{if(!n||!e)return;let w=!1;async function v(){d(!0),h(null);try{const b=await f0(e,o==="."?void 0:o,s);w||r(b.entries)}catch(b){w||(h(Me(b)||"Failed to load files"),r([]))}finally{w||d(!1)}}return v(),()=>{w=!0}},[e,o,n,m,s]),{entries:a,currentPath:o,setPath:g,loading:c,error:u,refresh:p}}function cL(e,n,s,a){const[r,o]=i.useState(""),[l,c]=i.useState(""),[d,u]=i.useState(null),[h,m]=i.useState(!1),[f,p]=i.useState(!1),[g,w]=i.useState(null),v=i.useCallback(N=>{o(N),w(null)},[]);i.useEffect(()=>{if(!e||!n){o(""),c(""),u(null),w(null);return}let N=!1;async function S(){m(!0),w(null);try{const C=await g0(e,n,a);N||(o(C.content),c(C.content),u(C.mtime))}catch(C){N||(w(Me(C)||"Failed to load file"),o(""),c(""),u(null))}finally{N||m(!1)}}return S(),()=>{N=!0}},[e,n,s,a]);const b=r!==l,y=i.useCallback(async()=>{if(!(!e||!n||!b)){p(!0),w(null);try{const N=await b0(e,n,r,a);c(r),u(N.mtime)}catch(N){throw w(Me(N)||"Failed to save file"),N}finally{p(!1)}}},[e,n,r,b,a]);return{content:r,setContent:v,originalContent:l,loading:h,saving:f,error:g,save:y,hasChanges:b,mtime:d}}const dL=1e4;function uL(e){const s=e.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean);return s[s.length-1]||e||"Project Root"}function mL(e){return{id:e.id,label:e.id,title:e.title,worktree:e.worktree,kind:"task"}}function hL(e){const[n,s]=i.useState("Project Root"),[a,r]=i.useState([]),[o,l]=i.useState(!0),[c,d]=i.useState(null);return i.useEffect(()=>{let u=!1;async function h(){try{const f=await p0(e);if(u)return;s(uL(f.project)),r(f.tasks.map(mL)),d(null)}catch(f){u||d(Me(f)||"Failed to load workspaces")}finally{u||l(!1)}}h();const m=window.setInterval(()=>{h()},dL);return()=>{u=!0,window.clearInterval(m)}},[e]),{projectName:n,workspaces:a,loading:o,error:c}}function pL(e){return e===void 0?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function fL(e){return e?new Date(e).toLocaleDateString():""}function bg(e,n){return RE(e,n)}const wo={visible:!1,x:0,y:0,entry:null,entryFullPath:""},nu={type:null,entry:null,entryFullPath:""},gL=200,bL=500,xg=10;function xL({x:e,y:n,entry:s,onAction:a,onClose:r}){const o=i.useRef(null),[l,c]=i.useState({x:e,y:n});i.useEffect(()=>{const h=o.current;if(!h)return;const m=h.getBoundingClientRect(),f=window.visualViewport,p=f?.width&&f.width>0?f.width:window.innerWidth,g=f?.height&&f.height>0?f.height:window.innerHeight,w=f?.offsetLeft??0,v=f?.offsetTop??0,b=8;let y=e-w,N=n-v;y+m.width>p-b&&(y=p-b-m.width),N+m.height>g-b&&(N=g-b-m.height),y<b&&(y=b),N<b&&(N=b),c({x:y+w,y:N+v})},[e,n]),i.useEffect(()=>{const h=m=>{m.key==="Escape"&&r()};return document.addEventListener("keydown",h),()=>document.removeEventListener("keydown",h)},[r]);const d=s.type==="directory",u=[{id:"copy",label:"Copy",icon:ja,disabled:!1},{id:"move",label:"Move",icon:bj,disabled:!1},{id:"rename",label:"Rename",icon:Hs,disabled:!1},...d?[{id:"download-zip",label:"Download as ZIP",icon:Wr,disabled:!1}]:[{id:"download",label:"Download",icon:sk,disabled:!1}],{id:"divider",label:"",icon:ja,disabled:!0},{id:"delete",label:"Delete",icon:zn,disabled:!1}];return t.jsx("div",{className:"context-menu-overlay",onClick:r,children:t.jsx("div",{ref:o,className:"file-browser-context-menu",role:"menu","aria-label":"File operations",style:{left:l.x,top:l.y},onClick:h=>h.stopPropagation(),children:u.map(h=>h.id==="divider"?t.jsx("div",{className:"file-browser-context-menu__divider",role:"separator"},"divider"):t.jsxs("button",{role:"menuitem",className:`file-browser-context-menu__item ${h.disabled?"file-browser-context-menu__disabled":""} ${h.id==="delete"?"file-browser-context-menu__item--danger":""}`,disabled:h.disabled,onClick:()=>a(h.id),children:[t.jsx(h.icon,{size:14,className:"file-browser-context-menu__item-icon"}),t.jsx("span",{children:h.label})]},h.id))})})}function vL({type:e,entry:n,entryFullPath:s,onConfirm:a,onCancel:r,loading:o,error:l}){const c=i.useRef(null),d=e==="rename"?n.name:"",[u,h]=i.useState(d);i.useEffect(()=>{setTimeout(()=>c.current?.focus(),50)},[]),i.useEffect(()=>{if(e==="rename"&&c.current){const g=n.name.lastIndexOf(".");g>0?c.current.setSelectionRange(0,g):c.current.select()}},[e,n.name]);const m=g=>{g.key==="Enter"&&u.trim()&&a(u.trim()),g.key==="Escape"&&r()};if(e==="delete")return t.jsx("div",{className:"context-menu-overlay",onClick:r,children:t.jsxs("div",{className:"file-browser-dialog",onClick:g=>g.stopPropagation(),children:[t.jsxs("div",{className:"file-browser-dialog-title",children:["Delete ",n.type==="directory"?"Folder":"File"]}),t.jsxs("div",{className:"file-browser-dialog-message",children:["Are you sure you want to delete ",t.jsx("strong",{children:n.name}),"?",n.type==="directory"&&" This will delete all contents recursively."]}),l&&t.jsx("div",{className:"file-browser-dialog-error",children:l}),t.jsxs("div",{className:"file-browser-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:r,disabled:o,children:"Cancel"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>a(""),disabled:o,children:o?"Deleting...":"Delete"})]})]})});const p={copy:{title:"Copy",placeholder:"Destination path",confirm:"Copy"},move:{title:"Move",placeholder:"Destination path",confirm:"Move"},rename:{title:"Rename",placeholder:"New name",confirm:"Rename"}}[e];return t.jsx("div",{className:"context-menu-overlay",onClick:r,children:t.jsxs("div",{className:"file-browser-dialog",onClick:g=>g.stopPropagation(),children:[t.jsx("div",{className:"file-browser-dialog-title",children:p.title}),t.jsx("div",{className:"file-browser-dialog-info",children:e==="rename"?n.name:s}),t.jsx("input",{ref:c,className:"file-browser-dialog-input",type:"text",value:u,onChange:g=>h(g.target.value),placeholder:p.placeholder,onKeyDown:m,disabled:o}),l&&t.jsx("div",{className:"file-browser-dialog-error",children:l}),t.jsxs("div",{className:"file-browser-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:r,disabled:o,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>a(u.trim()),disabled:o||!u.trim(),children:o?`${p.confirm}ing...`:p.confirm})]})]})})}function yL({entries:e,currentPath:n,onSelectFile:s,onNavigate:a,loading:r,error:o,onRetry:l,workspace:c,onRefresh:d,projectId:u}){const[h,m]=i.useState(wo),[f,p]=i.useState(nu),[g,w]=i.useState(!1),[v,b]=i.useState(null),[y,N]=i.useState(!1),[S,C]=i.useState(null),x=i.useRef(null),k=i.useRef(null),R=i.useRef(null),z=i.useRef(!1),_=i.useCallback(()=>{x.current!==null&&(window.clearTimeout(x.current),x.current=null),k.current!==null&&(window.clearTimeout(k.current),k.current=null)},[]),A=i.useCallback(()=>{_(),R.current=null,N(!1),C(null)},[_]);i.useEffect(()=>()=>{_()},[_]);const X=i.useCallback((P,$,j,q)=>{m({visible:!0,x:P,y:$,entry:j,entryFullPath:q})},[]),H=i.useCallback((P,$,j)=>{if(P.touches.length!==1)return;const q=P.touches[0];q&&(A(),R.current={x:q.clientX,y:q.clientY},k.current=window.setTimeout(()=>{N(!0),C(j)},gL),x.current=window.setTimeout(()=>{const le=R.current;le&&(z.current=!0,N(!1),C(null),_(),X(le.x,le.y,$,j))},bL))},[A,_,X]),M=i.useCallback(P=>{const $=R.current,j=P.touches[0];!$||!j||(Math.abs(j.clientX-$.x)>xg||Math.abs(j.clientY-$.y)>xg)&&A()},[A]),T=i.useCallback(()=>{A()},[A]);i.useEffect(()=>{if(!h.visible)return;const P=document.querySelector(".file-browser-list"),$=()=>{z.current=!1,A(),m(wo)};return P?.addEventListener("scroll",$),()=>P?.removeEventListener("scroll",$)},[A,h.visible]),i.useEffect(()=>{if(!h.visible)return;const P=$=>{$.key==="Escape"&&(z.current=!1,m(wo))};return document.addEventListener("keydown",P),()=>document.removeEventListener("keydown",P)},[h.visible]);const F=i.useCallback((P,$)=>{P.preventDefault(),P.stopPropagation(),A(),z.current=!1,X(P.clientX,P.clientY,$,bg(n,$.name))},[A,n,X]),W=i.useCallback(P=>{if(!h.entry)return;z.current=!1;const $=h.entry,j=h.entryFullPath;if(m(wo),P==="download"){if(!c)return;const q=Jb(c,j,u);window.open(Ci(q),"_blank");return}if(P==="download-zip"){if(!c)return;const q=j0(c,j,u);window.open(Ci(q),"_blank");return}p({type:P,entry:$,entryFullPath:j}),b(null)},[h,c,u]),oe=i.useCallback(async P=>{if(!(!f.type||!f.entry||!c)){w(!0),b(null);try{switch(f.type){case"copy":await v0(c,f.entryFullPath,P,u);break;case"move":await y0(c,f.entryFullPath,P,u);break;case"rename":await k0(c,f.entryFullPath,P,u);break;case"delete":await w0(c,f.entryFullPath,u);break}p(nu),d?.()}catch($){b(Me($)||"Operation failed")}finally{w(!1)}}},[f,c,d,u]),D=i.useCallback(()=>{p(nu),b(null)},[]),E=i.useCallback((P,$)=>{if(z.current){z.current=!1;return}h.visible||(P.type==="directory"?a($):s($))},[h.visible,a,s]);return r?t.jsxs("div",{className:"file-browser-loading",children:[t.jsx(St,{className:"spin",size:24}),t.jsx("span",{children:"Loading files..."})]}):o?t.jsxs("div",{className:"file-browser-error",children:[t.jsxs("p",{children:["Error: ",o]}),l&&t.jsx("button",{className:"btn btn-sm",onClick:l,children:"Retry"})]}):t.jsxs("div",{className:"file-browser",children:[t.jsxs("div",{className:"file-browser-header",children:[n!=="."&&t.jsxs("button",{className:"file-browser-up",onClick:()=>{a(IE(n))},children:[t.jsx(Wn,{size:16,style:{transform:"rotate(-90deg)"}}),"Up one level"]}),t.jsx("span",{className:"file-browser-path",children:n==="."?"Root":Qr(n)})]}),t.jsx("div",{className:"file-browser-list",children:e.length===0?t.jsx("div",{className:"file-browser-empty",children:"(empty directory)"}):e.map(P=>{const $=bg(n,P.name),j=y&&S===$;return t.jsxs("div",{className:`file-node file-node--${P.type} ${j?"file-node--long-pressing":""}`,onClick:()=>E(P,$),onContextMenu:q=>F(q,P),onTouchStart:q=>H(q,P,$),onTouchMove:M,onTouchEnd:T,onTouchCancel:T,children:[t.jsx("div",{className:"file-node-icon",children:P.type==="directory"?t.jsx(js,{size:16}):t.jsx(Ib,{size:16})}),t.jsx("div",{className:"file-node-name",children:P.name}),P.type==="file"&&P.size!==void 0&&t.jsx("div",{className:"file-node-size",children:pL(P.size)}),P.mtime&&t.jsx("div",{className:"file-node-time",children:fL(P.mtime)})]},P.name)})}),h.visible&&h.entry&&t.jsx(xL,{x:h.x,y:h.y,entry:h.entry,onAction:W,onClose:()=>{z.current=!1,m(wo)}}),f.type&&f.entry&&t.jsx(vL,{type:f.type,entry:f.entry,entryFullPath:f.entryFullPath,onConfirm:oe,onCancel:D,loading:g,error:v})]})}function wL(e){if(!e)return null;const n=e.toLowerCase();return n.endsWith(".js")||n.endsWith(".mjs")||n.endsWith(".cjs")||n.endsWith(".jsx")?Xm({jsx:!0}):n.endsWith(".ts")||n.endsWith(".tsx")?Xm({jsx:!0,typescript:!0}):n.endsWith(".css")?lw():n.endsWith(".json")?cw():n.endsWith(".md")||n.endsWith(".markdown")||n.endsWith(".mdx")?dw():null}function kL(e){if(!e)return!1;const n=e.toLowerCase();return n.endsWith(".md")||n.endsWith(".markdown")||n.endsWith(".mdx")}function vg(){return document.documentElement.dataset.theme!=="light"}function yg(e){return e?[mw]:[hw(pw)]}function jL({content:e,onChange:n,readOnly:s,filePath:a,showLineNumbers:r=!1,onToggleLineNumbers:o,canToggleLineNumbers:l=!0,toolbarExpanded:c,toolbarActionsId:d}){const[u,h]=i.useState(!1),[m,f]=i.useState(!0),[p,g]=i.useState(!1),w=c!==void 0,v=w?c:p,b=i.useRef(null),y=i.useRef(null),N=i.useRef(!1),S=i.useRef(n);S.current=n;const C=i.useRef(new ao),x=i.useRef(new ao),k=i.useRef(new ao),R=i.useRef(new ao),z=i.useRef(new ao),_=kL(a),A=i.useId(),X=d??A,[H,M]=i.useState(()=>vg()),T=_&&(s?!0:u),F=r&&!s&&!T,W=!!o&&l&&!s&&!T,oe=_||!s||W,D=i.useMemo(()=>wL(a),[a]),E=i.useCallback(()=>h(!1),[]),P=i.useCallback(()=>h(!0),[]),$=i.useCallback(()=>f(q=>!q),[]),j=i.useCallback(()=>{w||g(q=>!q)},[w]);return i.useEffect(()=>{if(!b.current||T)return;const q=ro.theme({"&":{height:"100%",fontFamily:"var(--font-mono)",backgroundColor:"var(--bg)",color:"var(--text)"},".cm-gutters":{backgroundColor:"var(--surface)",color:"var(--text-muted)",borderRight:"calc(var(--space-xs) * 0.25) solid var(--border)"},"&.cm-focused":{outline:"none"}}),le=Zm.create({doc:e,extensions:[C.current.of(F?uw():[]),x.current.of(m?ro.lineWrapping:[]),k.current.of(s?[Zm.readOnly.of(!0),ro.editable.of(!1)]:[]),R.current.of(D??[]),z.current.of(yg(H)),q,ro.updateListener.of(Ce=>{!Ce.docChanged||N.current||S.current(Ce.state.doc.toString())})]}),fe=new ro({state:le,parent:b.current});return y.current=fe,()=>{y.current=null,fe.destroy()}},[e,T,D,s,F,m]),i.useEffect(()=>{const q=new MutationObserver(()=>{M(vg())});return q.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>q.disconnect()},[]),i.useEffect(()=>{const q=y.current;q&&q.dispatch({effects:z.current.reconfigure(yg(H))})},[H]),i.useEffect(()=>{const q=y.current;!q||q.state.doc.toString()===e||(N.current=!0,q.dispatch({changes:{from:0,to:q.state.doc.length,insert:e}}),N.current=!1)},[e]),t.jsxs("div",{className:"file-editor-container",children:[oe&&(v||!w)?t.jsxs("div",{className:`file-editor-toolbar ${v?"file-editor-toolbar--expanded":""}`,children:[!w&&t.jsx("button",{className:"btn btn-sm btn-icon file-editor-toolbar-button",onClick:j,"aria-label":"Toggle editor options",title:"Toggle editor options","aria-expanded":v,"aria-controls":X,children:v?t.jsx(pi,{size:14}):t.jsx(jn,{size:14})}),t.jsxs("div",{className:"file-editor-toolbar-actions",id:X,hidden:!v,children:[_?t.jsxs(t.Fragment,{children:[!s&&t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${T?"":"btn-primary"}`,onClick:E,disabled:!T,"aria-label":"Edit mode",children:[t.jsx(Rb,{size:14}),"Edit"]}),t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${T?"btn-primary":""}`,onClick:P,disabled:T,"aria-label":"Preview mode",children:[t.jsx(Gr,{size:14}),"Preview"]})]}):null,W&&t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${r?"btn-primary":""}`,onClick:o,"aria-label":"Toggle line numbers","aria-pressed":r,title:"Toggle line numbers",children:[t.jsx(Xk,{size:14}),t.jsx("span",{children:"Line #"})]}),!s&&t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${m?"btn-primary":""}`,onClick:$,"aria-label":"Toggle word wrap",title:"Toggle word wrap",children:[t.jsx(tm,{size:14}),t.jsx("span",{children:"Wrap"})]})]})]}):null,T?t.jsx("div",{className:"file-editor-preview markdown-body",children:t.jsx(ti,{remarkPlugins:[ni],children:e})}):t.jsx("div",{className:"file-editor-codemirror",ref:b,"aria-label":a?`Editor for ${a}`:"File editor"})]})}function NL(e,n=44){if(e)return e.length<=n?e:`${e.slice(0,n-1)}…`}function SL({currentWorkspace:e,projectName:n,workspaces:s,onSelect:a}){const[r,o]=i.useState(!1),l=typeof e=="string"?e:"project",c=i.useMemo(()=>l==="project"?n||"Project Root":s.find(u=>u.id===l)?.label??l,[l,n,s]);return t.jsxs("div",{className:"workspace-selector",children:[t.jsxs("button",{type:"button",className:"workspace-selector-trigger",onClick:()=>o(d=>!d),"aria-haspopup":"listbox","aria-expanded":r,children:[l==="project"?t.jsx(sh,{size:14}):t.jsx(bu,{size:14}),t.jsx("span",{className:"workspace-selector-trigger-label",children:c}),t.jsx(jn,{size:14,className:`workspace-selector-trigger-icon${r?" open":""}`})]}),r&&t.jsxs("div",{className:"workspace-selector-menu",role:"listbox","aria-label":"Select workspace",children:[t.jsxs("button",{type:"button",className:`workspace-selector-option${l==="project"?" active":""}`,onClick:()=>{a("project"),o(!1)},children:[t.jsxs("div",{className:"workspace-selector-option-main",children:[t.jsx(sh,{size:14}),t.jsx("span",{children:"Project Root"})]}),t.jsx("span",{className:"workspace-selector-option-meta",children:n})]}),s.length>0&&t.jsxs("div",{className:"workspace-selector-group",children:[t.jsx("div",{className:"workspace-selector-group-label",children:"Task Worktrees"}),s.map(d=>t.jsxs("button",{type:"button",className:`workspace-selector-option${l===d.id?" active":""}`,onClick:()=>{a(d.id),o(!1)},children:[t.jsxs("div",{className:"workspace-selector-option-main",children:[t.jsx(bu,{size:14}),t.jsx("span",{children:d.id})]}),d.title&&t.jsx("span",{className:"workspace-selector-option-meta",title:d.title,children:NL(d.title)})]},d.id))]})]})]})}const CL=768,EL=280,Bl=180,Ul=500,wg="fusion:file-browser-sidebar-width",kg="kb-files-line-numbers",my=new Set([".png",".jpg",".jpeg",".gif",".webp",".ico",".bmp",".svgz"]),_L=new Set([...my,".exe",".dll",".so",".dylib",".zip",".tar",".gz",".bz2",".xz",".7z",".rar",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".mp3",".mp4",".avi",".mov",".webm",".mkv",".flv",".woff",".woff2",".ttf",".otf",".eot",".wasm",".bin"]);function ko(e){const n=e.slice(e.lastIndexOf(".")).toLowerCase();return _L.has(n)}function ML(e){const n=e.slice(e.lastIndexOf(".")).toLowerCase();return my.has(n)}function AL(e){const n=e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),s=n.lastIndexOf("/");return s>0?n.slice(0,s):"."}function RL({initialWorkspace:e="project",initialFile:n=null,onClose:s,onWorkspaceChange:a,projectId:r}){const{projectName:o,workspaces:l}=hL(r),c=i.useRef(null);qi(c,!0,"fusion:files-modal-size");const d=ra(s),[u,h]=i.useState(e),[m,f]=i.useState(null),[p,g]=i.useState(!1),[w,v]=i.useState("list"),[b,y]=i.useState(EL),[N,S]=i.useState(!1),[C,x]=i.useState(!1),k=i.useId(),{entries:R,currentPath:z,setPath:_,loading:A,error:X,refresh:H}=lL(u,!0,r),{content:M,setContent:T,originalContent:F,loading:W,saving:oe,error:D,save:E,hasChanges:P,mtime:$}=cL(u,m,!0,r);i.useEffect(()=>{h(e)},[e]),i.useEffect(()=>{const L=()=>{g(window.innerWidth<=CL)};return L(),window.addEventListener("resize",L),()=>window.removeEventListener("resize",L)},[]),i.useEffect(()=>{m||v("list"),x(!1)},[m]),i.useEffect(()=>{if(!n){f(null);return}f(n),_(AL(n)),p&&v("editor")},[n,p,_]),i.useEffect(()=>{try{const L=localStorage.getItem(wg);if(!L)return;const Y=Number.parseInt(L,10);if(!Number.isNaN(Y)){const ue=Math.max(Bl,Math.min(Ul,Y));y(ue)}}catch{}},[]),i.useEffect(()=>{const L=Gn(kg,r);S(L==="true")},[r]),i.useEffect(()=>{const L=Y=>{Y.key==="Escape"&&s(),(Y.metaKey||Y.ctrlKey)&&Y.key==="s"&&(Y.preventDefault(),P&&!oe&&E())};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[s,P,oe,E]);const j=i.useCallback(L=>{f(L),p&&v("editor")},[p]),q=i.useCallback(()=>{v("list")},[]),le=i.useCallback(()=>{T(F)},[F,T]),fe=i.useCallback(L=>{h(L),f(null),v("list"),a?.(L)},[a]),Ce=i.useCallback(L=>{try{localStorage.setItem(wg,String(L))}catch{}},[]),Ae=i.useCallback(L=>{if(p)return;L.preventDefault(),L.stopPropagation();const Y=L.currentTarget;typeof Y.setPointerCapture=="function"&&Y.setPointerCapture(L.pointerId);const ue=L.clientX,B=b;let xe=B;document.body.style.userSelect="none";const je=Ue=>{const De=Ue.clientX-ue,dt=Math.max(Bl,Math.min(Ul,B+De));xe=dt,y(dt)},se=Ue=>{typeof Y.releasePointerCapture=="function"&&Y.releasePointerCapture(Ue.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",je),document.removeEventListener("pointerup",se),Ce(xe)};document.addEventListener("pointermove",je),document.addEventListener("pointerup",se)},[p,Ce,b]),re=i.useCallback(L=>{if(p)return;const Y=20;if(L.key!=="ArrowLeft"&&L.key!=="ArrowRight")return;L.preventDefault();const ue=L.key==="ArrowLeft"?-Y:Y,B=Math.max(Bl,Math.min(Ul,b+ue));y(B),Ce(B)},[p,Ce,b]),Z=i.useCallback(()=>{S(L=>{const Y=!L;return cs(kg,String(Y),r),Y})},[r]),ie=`Files — ${i.useMemo(()=>u==="project"?"Project":l.find(L=>L.id===u)?.id??u,[u,l])}`,ve=i.useMemo(()=>!m||!ML(m)?null:Jb(u,m,r),[m,u,r]),ne=L=>{const Y=new Blob([L]).size;return Y<1024?`${Y} B`:`${(Y/1024).toFixed(1)} KB`};return t.jsx("div",{className:"modal-overlay open",...d,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal file-browser-modal",ref:c,children:[t.jsxs("div",{className:"modal-header file-browser-modal-header",children:[t.jsxs("div",{className:"file-browser-header-title",children:[t.jsx(js,{size:18}),t.jsx("span",{children:ie}),m&&t.jsx("span",{className:"file-browser-header-path",children:m})]}),t.jsxs("div",{className:"file-browser-header-actions",children:[t.jsx(SL,{currentWorkspace:u,projectName:o,workspaces:l,onSelect:fe}),t.jsx("button",{className:"modal-close",onClick:s,"aria-label":"Close",children:t.jsx(yn,{size:20})})]})]}),t.jsxs("div",{className:"file-browser-body",children:[t.jsx("div",{className:`file-browser-sidebar ${p?"mobile":""} ${w==="list"?"active":""}`,style:p?void 0:{width:`${b}px`},children:t.jsx(yL,{entries:R,currentPath:z,onSelectFile:j,onNavigate:_,loading:A,error:X,onRetry:H,workspace:u,onRefresh:H,projectId:r})}),!p&&t.jsx("div",{className:"file-browser-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Bl,"aria-valuemax":Ul,"aria-valuenow":b,"aria-label":"Resize sidebar",tabIndex:0,onPointerDown:Ae,onKeyDown:re}),t.jsx("div",{className:`file-browser-content ${p?"mobile":""} ${w==="editor"?"active":""}`,children:m?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"file-browser-toolbar",children:[t.jsxs("div",{className:"file-browser-file-info",children:[p&&w==="editor"&&t.jsxs("button",{className:"file-browser-back-button",onClick:q,"aria-label":"Back to file list",children:[t.jsx(tr,{size:16}),t.jsx("span",{children:"Back"})]}),!ko(m)&&t.jsx("button",{className:"btn btn-sm btn-icon file-editor-toolbar-button",onClick:()=>x(L=>!L),"aria-label":"Toggle editor options",title:"Toggle editor options","aria-expanded":C,"aria-controls":k,children:C?t.jsx(pi,{size:14}):t.jsx(jn,{size:14})}),m,ko(m)&&t.jsxs("span",{className:"file-browser-binary-indicator",children:[t.jsx(wk,{size:12}),"Binary file — read only"]}),$&&t.jsxs("span",{className:"file-browser-mtime",children:["Modified: ",new Date($).toLocaleString()]}),W&&t.jsx("span",{className:"file-browser-loading",children:"Loading..."})]}),t.jsx("div",{className:"file-browser-actions",children:!ve&&P&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm",onClick:le,disabled:oe,children:[t.jsx(Ij,{size:14}),"Discard"]}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>void E(),disabled:oe,children:[t.jsx(Lb,{size:14}),oe?"Saving...":"Save"]})]})})]}),D&&!ve&&t.jsx("div",{className:"file-browser-error-banner",children:D}),ve?t.jsx("div",{className:"file-browser-image-preview",children:t.jsx("img",{src:ve,alt:m??"",className:"file-browser-image"})}):t.jsx("div",{className:"file-editor-wrapper",children:t.jsx(jL,{content:M,onChange:T,filePath:m,readOnly:ko(m),showLineNumbers:N&&!ko(m),onToggleLineNumbers:Z,canToggleLineNumbers:!ko(m),toolbarExpanded:C,toolbarActionsId:k})}),!ve&&t.jsxs("div",{className:"file-browser-footer",children:[t.jsx("span",{children:ne(M)}),P&&t.jsx("span",{className:"file-browser-unsaved",children:"Unsaved changes"})]})]}):t.jsxs("div",{className:"file-browser-placeholder",children:[t.jsx(js,{size:48,opacity:.3}),t.jsx("p",{children:"Select a file to edit"})]})})]})]})})}const IL=i.lazy(()=>Tn(()=>import("./TodoView-C6sLLEQu.js"),__vite__mapDeps([13,1,6,7,8,14])).then(e=>({default:e.TodoView})));function TL({onClose:e,projectId:n,addToast:s,onPlanningMode:a}){const r=ra(e),l=ii()==="mobile",{keyboardOverlap:c,viewportHeight:d,viewportOffsetTop:u,keyboardOpen:h}=la({enabled:l});_i(l);const m=h?{"--keyboard-overlap":`${c}px`,"--vv-offset-top":`${u}px`,...d!==null?{"--vv-height":`${d}px`}:{}}:{};return i.useEffect(()=>{const f=p=>{p.key==="Escape"&&e()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[e]),t.jsx("div",{className:"modal-overlay open",...r,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal todo-modal",style:m,children:[t.jsxs("div",{className:"modal-header todo-modal-header",children:[t.jsxs("div",{className:"todo-modal-header-title",children:[t.jsx(Yk,{size:18}),t.jsxs("div",{children:[t.jsx("h2",{children:"Todos"}),t.jsx("p",{children:"Manage reusable todo lists for your project."})]})]}),t.jsx("button",{className:"modal-close",onClick:e,"aria-label":"Close",children:t.jsx(yn,{size:20})})]}),t.jsx("div",{className:"todo-modal-body",children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(IL,{projectId:n,addToast:s,onPlanningMode:a,onClose:e,mobileKeyboardActive:l&&h})})})]})})}function PL(e={}){const{pollInterval:n=3e4,autoRefresh:s=!0}=e,[a,r]=i.useState({providers:[],loading:!0,error:null,lastUpdated:null}),o=i.useRef(null),l=i.useRef(null),c=i.useCallback(async(u=!1)=>{l.current&&l.current.abort(),l.current=new AbortController,u&&r(h=>({...h,loading:!0,error:null}));try{const{providers:h}=await bS();r({providers:h,loading:!1,error:null,lastUpdated:new Date})}catch(h){if(h instanceof Error&&h.name==="AbortError")return;r(m=>({...m,loading:!1,error:Me(h)||"Failed to fetch usage data"}))}},[]);i.useEffect(()=>{c()},[c]),i.useEffect(()=>{if(s)return o.current=setInterval(()=>{c(!1)},n),()=>{o.current&&(clearInterval(o.current),o.current=null)}},[s,n,c]),i.useEffect(()=>()=>{l.current&&l.current.abort(),o.current&&clearInterval(o.current)},[]);const d=i.useCallback(()=>c(!0),[c]);return{providers:a.providers,loading:a.loading,error:a.error,lastUpdated:a.lastUpdated,refresh:d}}function $L(e){const n=new Date(e),s=new Date,a=n.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0});if(n.toDateString()===s.toDateString())return a;const o=new Date(s.getFullYear(),s.getMonth(),s.getDate()),l=new Date(n.getFullYear(),n.getMonth(),n.getDate()),c=Math.round((l.getTime()-o.getTime())/(1440*60*1e3));return c>=1&&c<=7?`${n.toLocaleDateString(void 0,{weekday:"short"})} ${a}`:`${n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}, ${a}`}function DL(e){return e>90?"usage-progress-fill--high":e>70?"usage-progress-fill--medium":"usage-progress-fill--low"}const hy="kb-usage-hidden-windows",py="kb-usage-modal-size",fy="kb-usage-provider-order";function jg(e){const n=Gn(py,e);if(!n)return null;try{const s=JSON.parse(n);if(s&&typeof s.width=="number"&&typeof s.height=="number"&&s.width>0&&s.height>0)return{width:s.width,height:s.height}}catch{}return null}function Ng(e){const n=Gn(hy,e);if(!n)return{};try{const s=JSON.parse(n);return!s||typeof s!="object"?{}:Object.entries(s).reduce((a,[r,o])=>{if(Array.isArray(o)){const l=o.filter(c=>typeof c=="string");l.length>0&&(a[r]=l)}return a},{})}catch{return{}}}function LL(e,n){cs(hy,JSON.stringify(e),n)}function Sg(e){const n=Gn(fy,e);if(!n)return[];try{const s=JSON.parse(n);return Array.isArray(s)?s.filter(a=>typeof a=="string"):[]}catch{return[]}}function Cg(e,n){cs(fy,JSON.stringify(e),n)}function gy(e,n,s){return s[e]?.includes(n)??!1}function OL({window:e,viewMode:n,isHidden:s,onToggleHidden:a}){const r=DL(e.percentUsed),o=n==="remaining",l=Math.round(o?e.percentLeft:e.percentUsed),c=o?`${Math.round(e.percentLeft)}% remaining`:`${Math.round(e.percentUsed)}% used`,d=o?`${Math.round(e.percentUsed)}% used`:`${Math.round(e.percentLeft)}% left`;let u=e.resetText;if(!u&&e.resetAt){const v=new Date(e.resetAt).getTime()-Date.now();if(v>0){const b=Math.floor(v/36e5),y=Math.floor(b/24),N=b%24;y>0&&N>0?u=`resets in ${y}d ${N}h`:y>0?u=`resets in ${y}d`:b>0?u=`resets in ${b}h`:u=`resets in ${Math.floor(v/6e4)}m`}}const h=e.pace,m=h!==void 0;let f=0;m&&(f=o?100-h.percentElapsed:h.percentElapsed);const p=h?.status==="ahead",g=h?.status==="behind",w=h?.status==="on-track";return t.jsxs("div",{className:`usage-window ${s?"usage-window--hidden":""}`,children:[t.jsxs("div",{className:"usage-window-header",children:[t.jsx("span",{className:"usage-window-label",children:e.label}),t.jsxs("div",{className:"usage-window-header-controls",children:[!s&&t.jsx("span",{className:"usage-window-percentage",children:c}),!s&&t.jsx("button",{className:"btn-icon usage-window-hide-btn",onClick:a,"aria-label":`Hide ${e.label}`,"data-testid":"usage-window-hide-btn",children:t.jsx(Gr,{size:14})})]})]}),t.jsxs("div",{className:"usage-progress-wrapper",children:[t.jsx("div",{className:"usage-progress-bar",children:t.jsx("div",{className:`usage-progress-fill ${r}`,style:{width:`${l}%`},role:"progressbar","aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":100,"aria-label":`${e.label}: ${c}`})}),m&&t.jsx("div",{className:"usage-pace-marker",style:{left:`${f}%`},"aria-hidden":"true","data-testid":"pace-marker"})]}),t.jsxs("div",{className:"usage-window-footer",children:[t.jsx("span",{className:"usage-window-left",children:d}),t.jsxs("span",{className:"usage-window-reset-group",children:[u&&t.jsx("span",{className:"usage-window-reset",children:u}),e.resetAt&&t.jsx("span",{className:"usage-window-reset-at",children:$L(e.resetAt)})]})]}),m&&t.jsxs("div",{className:"usage-pace-row","data-testid":"pace-row",children:[p&&t.jsxs(t.Fragment,{children:[t.jsx(Kr,{size:14,className:"pace-icon pace-ahead"}),t.jsx("span",{className:"pace-text pace-ahead",children:h.message})]}),g&&t.jsxs(t.Fragment,{children:[t.jsx(Zj,{size:14,className:"pace-icon pace-behind"}),t.jsx("span",{className:"pace-text pace-behind",children:h.message})]}),w&&t.jsxs(t.Fragment,{children:[t.jsx(ts,{size:14,className:"pace-icon pace-ontrack"}),t.jsx("span",{className:"pace-text pace-ontrack",children:h.message})]})]})]})}function FL(e){const n=e.toLowerCase();return n.includes("claude")||n.includes("anthropic")?"anthropic":n.includes("codex")||n.includes("openai")||n.includes("gpt")?"openai":n.includes("gemini")||n.includes("google")||n.includes("antigravity")?"google":n.includes("ollama")?"ollama":n.includes("minimax")?"minimax":n.includes("zai")||n.includes("zhipu")?"zai":n.includes("kimi")||n.includes("moonshot")?"kimi":n.includes("bedrock")||n.includes("amazon")?"bedrock":n.includes("xai")||n.includes("grok")?"xai":n.includes("opencode")?"opencode":n.includes("copilot")||n==="github copilot"?"github-copilot":e}function zL({provider:e,viewMode:n,hiddenWindows:s,onToggleWindow:a,onShowAllHidden:r,isDragging:o,isDragOver:l,dragOverPosition:c,onDragStart:d,onDragOver:u,onDragLeave:h,onDrop:m,onDragEnd:f,isTouchReorderMode:p,canMoveUp:g,canMoveDown:w,onMoveUp:v,onMoveDown:b}){const y=s[e.name]?.length??0,N=()=>{switch(e.status){case"ok":return null;case"error":return t.jsx("span",{className:"usage-status-badge usage-status-badge--error",children:"Error"});case"no-auth":default:return t.jsx("span",{className:"usage-status-badge usage-status-badge--not-configured",children:"Not configured"})}};return t.jsxs("div",{className:`usage-provider${o?" usage-provider--dragging":""}${l&&c==="before"?" usage-provider--drag-over-before":""}${l&&c==="after"?" usage-provider--drag-over-after":""}`,"data-provider":e.name,"data-status":e.status,draggable:!p,onDragStart:p?void 0:d,onDragOver:p?void 0:u,onDragLeave:p?void 0:h,onDrop:p?void 0:m,onDragEnd:p?void 0:f,children:[t.jsxs("div",{className:"usage-provider-header",children:[t.jsxs("div",{className:"usage-provider-info",children:[t.jsx(Kn,{provider:FL(e.name),size:"md"}),t.jsx("span",{className:"usage-provider-name",children:e.name}),y>0&&t.jsxs("button",{className:"btn btn-sm usage-show-hidden-btn",onClick:()=>r(e.name),"data-testid":"usage-show-hidden-btn",children:["Show hidden (",y,")"]})]}),t.jsxs("div",{className:"usage-provider-actions",children:[p&&t.jsxs("div",{className:"usage-provider-reorder-controls",role:"group","aria-label":`Reorder ${e.name}`,children:[t.jsx("button",{className:"btn-icon usage-provider-reorder-btn",type:"button",onClick:v,disabled:!g,"aria-label":`Move ${e.name} up`,children:t.jsx(pi,{size:14})}),t.jsx("button",{className:"btn-icon usage-provider-reorder-btn",type:"button",onClick:b,disabled:!w,"aria-label":`Move ${e.name} down`,children:t.jsx(jn,{size:14})})]}),N(),t.jsx("div",{className:"usage-provider-drag-handle","aria-hidden":"true",children:t.jsx(Sc,{size:16})})]})]}),e.error&&t.jsx("div",{className:"usage-provider-error",children:e.error}),e.plan&&t.jsx("div",{className:"usage-provider-meta",children:t.jsx("span",{className:"usage-provider-plan",children:e.plan})}),e.windows.length>0?t.jsx("div",{className:"usage-provider-windows",children:e.windows.map((S,C)=>{const x=gy(e.name,S.label,s);return t.jsx(OL,{window:S,viewMode:n,isHidden:x,onToggleHidden:()=>a(e.name,S.label)},`${e.name}-${S.label}-${C}`)})}):e.status==="ok"?t.jsx("div",{className:"usage-provider-empty",children:"No usage data available"}):null]})}function BL(){return t.jsx("div",{className:"usage-skeleton",children:[1,2,3].map(e=>t.jsxs("div",{className:"usage-skeleton-provider",children:[t.jsxs("div",{className:"usage-skeleton-header",children:[t.jsx("div",{className:"usage-skeleton-icon"}),t.jsx("div",{className:"usage-skeleton-name"}),t.jsx("div",{className:"usage-skeleton-badge"})]}),t.jsx("div",{className:"usage-skeleton-bar"}),t.jsx("div",{className:"usage-skeleton-text"})]},e))})}function UL({isOpen:e,onClose:n,projectId:s,anchorRect:a}){const{providers:r,loading:o,error:l,lastUpdated:c,refresh:d}=PL({autoRefresh:e}),[u,h]=i.useState(!1),[m,f]=i.useState(()=>typeof window<"u"?window.innerWidth>=769:!1),[p,g]=i.useState(()=>typeof window>"u"?!1:window.matchMedia?.("(pointer: coarse)").matches??!1),[w,v]=i.useState("used"),[b,y]=i.useState(()=>Ng(s)),[N,S]=i.useState(()=>Sg(s)),[C,x]=i.useState(null),[k,R]=i.useState(null),[z,_]=i.useState(null),A=i.useRef(null),X=i.useRef(null),H=i.useRef(e),M=i.useRef(!1),[T,F]=i.useState(()=>jg(s));i.useEffect(()=>{F(jg(s))},[s]),i.useEffect(()=>{if(!e||!m)return;const B=X.current;if(!B||typeof ResizeObserver>"u")return;let xe=null;const je=new ResizeObserver(se=>{const Ue=se[0];if(!Ue)return;const{width:De,height:dt}=Ue.contentRect;De<=0||dt<=0||(xe&&clearTimeout(xe),xe=setTimeout(()=>{cs(py,JSON.stringify({width:Math.round(De),height:Math.round(dt)}),s)},250))});return je.observe(B),()=>{xe&&clearTimeout(xe),je.disconnect()}},[e,m,s]),i.useEffect(()=>{e||(M.current=!1)},[e]),i.useEffect(()=>{r.length>0&&(M.current=!0)},[r.length]),i.useEffect(()=>{if(typeof window>"u")return;const B=window.matchMedia?.("(pointer: coarse)"),xe=()=>{f(window.innerWidth>=769),g(B?.matches??!1)};return xe(),window.addEventListener("resize",xe),B?.addEventListener?.("change",xe),()=>{window.removeEventListener("resize",xe),B?.removeEventListener?.("change",xe)}},[]),i.useEffect(()=>{!H.current&&e&&(!c||Date.now()-c.getTime()>5e3)&&d(),H.current=e},[e,c,d]),i.useEffect(()=>{const B=Gn("kb-usage-view-mode",s);if(B==="used"||B==="remaining"){v(B);return}v("used")},[s]);const W=i.useCallback(B=>{v(B),cs("kb-usage-view-mode",B,s)},[s]);i.useEffect(()=>{y(Ng(s)),S(Sg(s))},[s]),i.useEffect(()=>{LL(b,s)},[b,s]);const oe=i.useCallback((B,xe)=>{y(je=>{if(gy(B,xe,je)){const se=(je[B]??[]).filter(Ue=>Ue!==xe);if(se.length===0){const{[B]:Ue,...De}=je;return De}return{...je,[B]:se}}return{...je,[B]:[...je[B]??[],xe]}})},[]),D=i.useCallback(B=>{y(xe=>{if(!xe[B])return xe;const{[B]:je,...se}=xe;return se})},[]),E=i.useCallback(B=>{if(N.length===0)return B;const xe=new Map(B.map(se=>[se.name,se])),je=[];for(const se of N){const Ue=xe.get(se);Ue&&(je.push(Ue),xe.delete(se))}return[...je,...xe.values()]},[N]),P=i.useCallback((B,xe)=>{B.dataTransfer.effectAllowed="move",B.dataTransfer.setData("text/plain",xe),x(xe)},[]),$=i.useCallback((B,xe)=>{if(!C||C===xe)return;B.preventDefault(),B.dataTransfer.dropEffect="move";const{top:je,height:se}=B.currentTarget.getBoundingClientRect(),Ue=je+se/2,De=B.clientY<Ue?"before":"after";R(xe),_(De)},[C]),j=i.useCallback((B,xe)=>{B.preventDefault();const je=C??B.dataTransfer.getData("text/plain");if(!je||je===xe){R(null),_(null);return}const Ue=E(r).map(Pe=>Pe.name).filter(Pe=>Pe!==je),De=Ue.indexOf(xe);if(De<0){R(null),_(null);return}const dt=z==="after"?De+1:De;Ue.splice(dt,0,je),Cg(Ue,s),S(Ue),R(null),_(null)},[C,z,s,r,E]),q=i.useCallback(()=>{x(null),R(null),_(null)},[]),le=i.useCallback((B,xe)=>{const je=E(r).map(Pe=>Pe.name),se=je.indexOf(B),Ue=se+xe;if(se<0||Ue<0||Ue>=je.length)return;const De=[...je],[dt]=De.splice(se,1);De.splice(Ue,0,dt),Cg(De,s),S(De)},[s,r,E]),fe=i.useCallback(async()=>{h(!0),await d(),h(!1)},[d]);i.useEffect(()=>{if(!e)return;const B=xe=>{xe.key==="Escape"&&n()};return document.addEventListener("keydown",B),()=>document.removeEventListener("keydown",B)},[e,n]);const Ce=i.useCallback(B=>{B.target===B.currentTarget&&n()},[n]);if(!e)return null;const Ae=!!(a&&m),re=8,Z=12,ie=T?.width??420,ve=Ae?Math.min((a?.bottom??0)+re,window.innerHeight-Z):void 0,ne=Ae?Math.max(8,(a?.right??0)-ie):void 0,L=m&&T?{width:T.width,height:T.height}:{},Y=E(r),ue=t.jsxs("div",{ref:X,className:`usage-modal${Ae?" usage-modal--popover":" modal"}`,"data-testid":"usage-modal",style:Ae?{position:"fixed",top:ve,left:ne,...L}:L,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"usage-header",children:[t.jsx(Ls,{size:18,className:"usage-header-icon"}),t.jsx("h3",{children:"Usage"})]}),t.jsxs("div",{className:"usage-header-actions",children:[t.jsxs("div",{className:"usage-view-toggle",role:"group","aria-label":"Usage view mode",children:[t.jsx("button",{className:`usage-view-toggle-btn ${w==="used"?"active":""}`,onClick:()=>W("used"),"aria-pressed":w==="used","data-testid":"usage-view-toggle-used",children:"Used"}),t.jsx("button",{className:`usage-view-toggle-btn ${w==="remaining"?"active":""}`,onClick:()=>W("remaining"),"aria-pressed":w==="remaining","data-testid":"usage-view-toggle-remaining",children:"Remaining"})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close usage modal","data-testid":"usage-modal-close",children:t.jsx(yn,{size:20})})]})]}),t.jsx("div",{className:"usage-content",ref:A,children:(o||!M.current&&!l)&&r.length===0?t.jsx(BL,{}):l&&r.length===0?t.jsxs("div",{className:"usage-error",children:[t.jsx("p",{children:"Failed to load usage data"}),t.jsx("p",{className:"usage-error-message",children:l}),t.jsx("button",{className:"btn btn-sm",onClick:fe,children:"Retry"})]}):r.length===0?t.jsxs("div",{className:"usage-empty",children:[t.jsx("p",{children:"No AI providers configured"}),t.jsx("p",{className:"usage-empty-hint",children:"Configure authentication in Settings to see usage data."})]}):t.jsx("div",{className:"usage-providers",children:Y.map((B,xe)=>t.jsx(zL,{provider:B,viewMode:w,hiddenWindows:b,onToggleWindow:oe,onShowAllHidden:D,isDragging:C===B.name,isDragOver:k===B.name,dragOverPosition:k===B.name?z:null,onDragStart:je=>P(je,B.name),onDragOver:je=>$(je,B.name),onDragLeave:()=>{k===B.name&&(R(null),_(null))},onDrop:je=>j(je,B.name),onDragEnd:q,isTouchReorderMode:p,canMoveUp:xe>0,canMoveDown:xe<Y.length-1,onMoveUp:()=>le(B.name,-1),onMoveDown:()=>le(B.name,1)},B.name))})}),t.jsxs("div",{className:"modal-actions usage-actions",children:[t.jsx("div",{className:"modal-actions-left usage-actions-left",children:t.jsx("div",{className:"usage-last-updated",children:c&&t.jsxs("span",{children:["Last updated: ",c.toLocaleTimeString()]})})}),t.jsxs("div",{className:"modal-actions-right usage-actions-right",children:[t.jsxs("button",{className:"btn btn-sm",onClick:fe,disabled:o||u,"data-testid":"usage-refresh-btn",children:[t.jsx(bs,{size:14,className:u?"spin":"",style:{marginRight:6}}),"Refresh"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:n,children:"Close"})]})]})]});return Ae?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"usage-popover-backdrop",onClick:n,"data-testid":"usage-modal-overlay"}),ue]}):t.jsx("div",{className:"modal-overlay open",onClick:Ce,"data-testid":"usage-modal-overlay",children:ue})}function by(e){if(e<1e3)return`${e}ms`;const n=Math.floor(e/1e3);if(n<60)return`${n}s`;const s=Math.floor(n/60),a=n%60;if(s<60)return a>0?`${s}m ${a}s`:`${s}m`;const r=Math.floor(s/60),o=s%60;return o>0?`${r}h ${o}m`:`${r}h`}function fc(e){const n=Date.now(),s=new Date(e).getTime(),a=n-s;if(a<0){const r=Math.abs(a);return r<6e4?"in a moment":r<36e5?`in ${Math.floor(r/6e4)}m`:r<864e5?`in ${Math.floor(r/36e5)}h`:`in ${Math.floor(r/864e5)}d`}return a<6e4?"just now":a<36e5?`${Math.floor(a/6e4)}m ago`:a<864e5?`${Math.floor(a/36e5)}h ago`:`${Math.floor(a/864e5)}d ago`}const HL={cron:"var(--color-blue, #3b82f6)",webhook:"var(--color-purple, #a855f7)",api:"var(--color-green, #22c55e)",manual:"var(--color-gray, #6b7280)"},xy={cron:"Cron",webhook:"Webhook",api:"API",manual:"Manual"},qL={cron:Eb,webhook:Ob,api:_b,manual:us},VL={parallel:"Concurrent",queue:"Queued",reject:"Exclusive"},WL={run:"Catch up",skip:"Skip missed",run_one:"Catch up (latest)"};function GL({result:e}){const n=e.completedAt&&e.startedAt?new Date(e.completedAt).getTime()-new Date(e.startedAt).getTime():0;return t.jsxs("span",{className:`schedule-run-badge ${e.success?"success":"failure"}`,children:[e.success?t.jsx(ts,{size:12}):t.jsx(Xo,{size:12}),t.jsx("span",{children:e.success?"Success":"Failed"}),n>0&&t.jsx("span",{className:"schedule-run-duration",children:by(n)})]})}function KL({result:e,index:n}){const[s,a]=i.useState(!1),r=e.completedAt&&e.startedAt?new Date(e.completedAt).getTime()-new Date(e.startedAt).getTime():0;return t.jsxs("div",{className:"schedule-history-item",children:[t.jsxs("button",{className:"schedule-history-header",onClick:()=>a(!s),"aria-expanded":s,"aria-label":`Run #${n+1}: ${e.success?"succeeded":"failed"} ${fc(e.startedAt)}`,children:[t.jsx("span",{className:`schedule-history-status ${e.success?"success":"failure"}`,children:e.success?t.jsx(ts,{size:12}):t.jsx(Xo,{size:12})}),t.jsx("span",{className:"schedule-history-time",children:fc(e.startedAt)}),e.triggerType&&t.jsx("span",{className:"routine-history-trigger-type",children:xy[e.triggerType]}),t.jsx("span",{className:"schedule-history-duration",children:by(r)}),s?t.jsx(pi,{size:12}):t.jsx(jn,{size:12})]}),s&&t.jsxs("div",{className:"schedule-history-detail",children:[e.output&&t.jsx("pre",{className:"schedule-history-output",children:e.output}),e.error&&t.jsx("div",{className:"schedule-history-error",children:e.error})]})]})}function JL({routine:e,onEdit:n,onDelete:s,onRun:a,onToggle:r,running:o,lastRunOutput:l}){const[c,d]=i.useState(!1),{confirm:u}=ai(),h=i.useCallback(async()=>{await u({title:"Delete Routine",message:`Delete routine "${e.name}"? This cannot be undone.`,danger:!0})&&s(e)},[e,s,u]),m=HL[e.trigger.type],f=qL[e.trigger.type],p=e.trigger.type==="cron"?("cronExpression"in e.trigger?e.trigger.cronExpression:void 0)||e.cronExpression||"":e.cronExpression||"";return t.jsxs("div",{className:`routine-card${e.enabled?"":" disabled"}${o?" running":""}`,children:[t.jsxs("div",{className:"routine-card-header",children:[t.jsxs("div",{className:"routine-card-info",children:[t.jsxs("div",{className:"routine-card-name-row",children:[t.jsx("span",{className:"routine-card-name",children:e.name}),t.jsxs("span",{className:"routine-trigger-badge",style:{borderColor:m,color:m},children:[t.jsx(f,{size:10}),xy[e.trigger.type]]}),e.scope&&t.jsxs("span",{className:`routine-scope-badge${e.scope==="global"?" global":" project"}`,title:`${e.scope==="global"?"Global":"Project"}-scoped routine`,children:[e.scope==="global"?t.jsx(jc,{size:10}):t.jsx(js,{size:10}),e.scope]})]}),e.description&&t.jsx("p",{className:"routine-card-description",children:e.description})]}),t.jsxs("div",{className:"routine-card-actions",children:[t.jsx("button",{className:"btn-icon",onClick:()=>a(e),disabled:o,title:o?"Running…":"Run now","aria-label":o?"Running…":`Run ${e.name} now`,children:o?t.jsx(St,{className:"spinner"}):t.jsx(ds,{})}),t.jsx("button",{className:"btn-icon",onClick:()=>r(e),title:e.enabled?"Disable":"Enable","aria-label":e.enabled?`Disable ${e.name}`:`Enable ${e.name}`,"aria-pressed":e.enabled,children:e.enabled?t.jsx(mi,{}):t.jsx(ds,{})}),t.jsx("button",{className:"btn-icon",onClick:()=>n(e),title:"Edit","aria-label":`Edit ${e.name}`,children:t.jsx(Hs,{})}),t.jsx("button",{className:"btn-icon",onClick:h,title:"Delete","aria-label":`Delete ${e.name}`,children:t.jsx(zn,{})})]})]}),t.jsxs("div",{className:"routine-card-meta",children:[e.steps&&e.steps.length>0?t.jsxs("div",{className:"routine-meta-item",children:[t.jsx(Ga,{size:12}),t.jsxs("span",{className:"routine-policy-badge",children:[e.steps.length," step",e.steps.length===1?"":"s"]})]}):e.command?t.jsx("div",{className:"routine-meta-item routine-meta-command-preview",title:e.command,children:t.jsx("code",{className:"routine-cron",children:e.command})}):null,e.trigger.type==="cron"&&p&&t.jsxs("div",{className:"routine-meta-item",children:[t.jsx(ia,{size:12}),t.jsx("code",{className:"routine-cron",children:p})]}),t.jsx("div",{className:"routine-meta-item",children:t.jsx("span",{className:"routine-policy-badge",title:`Execution policy: ${e.executionPolicy}`,children:VL[e.executionPolicy]})}),t.jsx("div",{className:"routine-meta-item",children:t.jsx("span",{className:"routine-policy-badge",title:`Catch-up policy: ${e.catchUpPolicy}`,children:WL[e.catchUpPolicy]})}),e.nextRunAt&&e.enabled&&t.jsxs("div",{className:"routine-meta-item",children:[t.jsx("span",{className:"routine-meta-label",children:"Next:"}),t.jsx("span",{title:e.nextRunAt,children:fc(e.nextRunAt)})]}),e.lastRunAt&&t.jsxs("div",{className:"routine-meta-item",children:[t.jsx("span",{className:"routine-meta-label",children:"Last:"}),t.jsx("span",{title:e.lastRunAt,children:fc(e.lastRunAt)})]}),e.lastRunResult&&t.jsx(GL,{result:e.lastRunResult}),t.jsxs("div",{className:"routine-meta-item",children:[t.jsx("span",{className:"routine-meta-label",children:"Runs:"}),t.jsx("span",{children:e.runCount})]})]}),l&&t.jsxs("div",{className:`routine-run-output ${l.success?"success":"failure"}`,children:[l.output&&t.jsx("pre",{className:"routine-run-output-text",children:l.output}),l.error&&t.jsx("div",{className:"routine-run-output-error",children:l.error})]}),e.runHistory.length>0&&t.jsxs("div",{className:"routine-card-history",children:[t.jsxs("button",{className:"schedule-history-toggle",onClick:()=>d(g=>!g),"aria-expanded":c,children:[c?t.jsx(pi,{size:12}):t.jsx(jn,{size:12}),t.jsxs("span",{children:["Run History (",e.runHistory.length,")"]})]}),c&&t.jsxs("div",{className:"schedule-history-list",children:[e.runHistory.slice(0,10).map((g,w)=>t.jsx(KL,{result:g,index:w},`${g.startedAt}-${w}`)),e.runHistory.length>10&&t.jsxs("div",{className:"schedule-history-more",children:["…and ",e.runHistory.length-10," more"]})]})]})]})}function YL({type:e,size:n=12}){return e==="command"?t.jsxs("span",{className:"step-type-badge step-type-command",title:"Command step",children:[t.jsx(sa,{size:n}),t.jsx("span",{children:"Command"})]}):e==="create-task"?t.jsxs("span",{className:"step-type-badge step-type-create-task",title:"Create Task step",children:[t.jsx(ej,{size:n}),t.jsx("span",{children:"Create Task"})]}):t.jsxs("span",{className:"step-type-badge step-type-ai-prompt",title:"AI Prompt step",children:[t.jsx(fs,{size:n}),t.jsx("span",{children:"AI Prompt"})]})}function su(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`step-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function QL(e){return e==="command"?{id:su(),type:e,name:"New Command Step",command:"",continueOnFailure:!1}:e==="ai-prompt"?{id:su(),type:e,name:"New AI Prompt Step",prompt:"",continueOnFailure:!1}:{id:su(),type:e,name:"New Create Task Step",taskDescription:"",taskColumn:"triage",continueOnFailure:!1}}function XL({step:e,onSave:n,onCancel:s}){const[a,r]=i.useState(e.name),[o,l]=i.useState(e.type),[c,d]=i.useState(e.command??""),[u,h]=i.useState(e.prompt??""),[m,f]=i.useState(e.modelProvider??""),[p,g]=i.useState(e.modelId??""),[w,v]=i.useState(e.taskTitle??""),[b,y]=i.useState(e.taskDescription??""),[N,S]=i.useState(e.taskColumn??"triage"),[C,x]=i.useState(e.timeoutMs),[k,R]=i.useState(e.continueOnFailure??!1),[z,_]=i.useState({}),[A,X]=i.useState([]),[H,M]=i.useState(!1),[T,F]=i.useState(null);i.useEffect(()=>{let P=!1;return M(!0),F(null),Ws().then($=>{P||X($.models)}).catch($=>{P||F($ instanceof Error?$.message:"Failed to load models")}).finally(()=>{P||M(!1)}),()=>{P=!0}},[]);const W=i.useCallback(()=>{const P={};return a.trim()||(P.name="Step name is required"),o==="command"&&!c.trim()&&(P.command="Command is required"),o==="ai-prompt"&&!u.trim()&&(P.prompt="Prompt is required"),o==="create-task"&&!b.trim()&&(P.taskDescription="Task description is required"),(o==="ai-prompt"||o==="create-task")&&(m||p)&&(!m||!p)&&(P.modelProvider="Both model provider and model ID must be set together"),C!==void 0&&C<1e3&&(P.timeoutMs="Timeout must be at least 1 second (1000ms)"),_(P),Object.keys(P).length===0},[a,o,c,u,b,m,p,C]),oe=m&&p?`${m}/${p}`:"",D=i.useCallback(P=>{if(!P)f(""),g("");else{const $=P.indexOf("/");$!==-1&&(f(P.slice(0,$)),g(P.slice($+1)))}},[]),E=i.useCallback(()=>{if(!W())return;const P={...e,name:a.trim(),type:o,command:o==="command"?c.trim():void 0,prompt:o==="ai-prompt"?u.trim():void 0,taskTitle:o==="create-task"&&w.trim()?w.trim():void 0,taskDescription:o==="create-task"&&b.trim()?b.trim():void 0,taskColumn:o==="create-task"?N:void 0,modelProvider:(o==="ai-prompt"||o==="create-task")&&m.trim()?m.trim():void 0,modelId:(o==="ai-prompt"||o==="create-task")&&p.trim()?p.trim():void 0,timeoutMs:C||void 0,continueOnFailure:k};o!=="ai-prompt"&&delete P.prompt,o!=="create-task"&&(delete P.taskTitle,delete P.taskDescription,delete P.taskColumn),n(P)},[W,n,e,a,o,c,u,w,b,N,m,p,C,k]);return t.jsxs("div",{className:"step-editor",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-name-${e.id}`,children:"Step Name"}),t.jsx("input",{id:`step-name-${e.id}`,type:"text",placeholder:"e.g. Run tests",value:a,onChange:P=>r(P.target.value),"aria-invalid":!!z.name}),z.name&&t.jsx("small",{className:"field-error",children:z.name})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-type-${e.id}`,children:"Step Type"}),t.jsxs("select",{id:`step-type-${e.id}`,value:o,onChange:P=>l(P.target.value),children:[t.jsx("option",{value:"command",children:"Command"}),t.jsx("option",{value:"ai-prompt",children:"AI Prompt"}),t.jsx("option",{value:"create-task",children:"Create Task"})]})]}),o==="command"&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-command-${e.id}`,children:"Command"}),t.jsx("textarea",{id:`step-command-${e.id}`,placeholder:"e.g. npm test",value:c,onChange:P=>d(P.target.value),rows:2,"aria-invalid":!!z.command}),z.command&&t.jsx("small",{className:"field-error",children:z.command})]}),o==="ai-prompt"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-prompt-${e.id}`,children:"Prompt"}),t.jsx("textarea",{id:`step-prompt-${e.id}`,placeholder:"e.g. Summarize the test results and highlight any failures",value:u,onChange:P=>h(P.target.value),rows:3,"aria-invalid":!!z.prompt}),z.prompt&&t.jsx("small",{className:"field-error",children:z.prompt})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-model-${e.id}`,children:"Model (optional)"}),t.jsx(Ms,{id:`step-model-${e.id}`,label:"Model",models:A,value:oe,onChange:D,placeholder:"Use default",disabled:H}),T&&t.jsx("small",{className:"field-error",children:T}),t.jsx("small",{children:"AI model for this step. Uses default if not selected."})]})]}),o==="create-task"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-title-${e.id}`,children:"Task Title (optional)"}),t.jsx("input",{id:`step-task-title-${e.id}`,type:"text",placeholder:"e.g. Review weekly dependencies",value:w,onChange:P=>v(P.target.value)}),t.jsx("small",{children:"Leave blank to auto-summarize from description"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-description-${e.id}`,children:"Task Description *"}),t.jsx("textarea",{id:`step-task-description-${e.id}`,placeholder:"e.g. Check all npm dependencies for security vulnerabilities and update outdated packages",value:b,onChange:P=>y(P.target.value),rows:4,"aria-invalid":!!z.taskDescription}),z.taskDescription&&t.jsx("small",{className:"field-error",children:z.taskDescription})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-column-${e.id}`,children:"Target Column"}),t.jsxs("select",{id:`step-task-column-${e.id}`,value:N,onChange:P=>S(P.target.value),children:[t.jsx("option",{value:"triage",children:"Triage"}),t.jsx("option",{value:"todo",children:"To Do"})]}),t.jsx("small",{children:"Column where the new task will be created"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-model-${e.id}`,children:"Executor Model (optional)"}),t.jsx(Ms,{id:`step-task-model-${e.id}`,label:"Model",models:A,value:oe,onChange:D,placeholder:"Use default",disabled:H}),T&&t.jsx("small",{className:"field-error",children:T}),z.modelProvider&&t.jsx("small",{className:"field-error",children:z.modelProvider}),t.jsx("small",{children:"AI model for executing the created task. Uses default if not selected."})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-timeout-${e.id}`,children:"Timeout (ms, optional)"}),t.jsx("input",{id:`step-timeout-${e.id}`,type:"number",min:1e3,step:1e3,placeholder:"Override schedule timeout",value:C??"",onChange:P=>x(P.target.value?Number(P.target.value):void 0),"aria-invalid":!!z.timeoutMs}),z.timeoutMs&&t.jsx("small",{className:"field-error",children:z.timeoutMs})]}),t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{htmlFor:`step-continue-${e.id}`,className:"checkbox-label",children:[t.jsx("input",{id:`step-continue-${e.id}`,type:"checkbox",checked:k,onChange:P=>R(P.target.checked)}),"Continue on failure"]}),t.jsx("small",{children:"If checked, the next step will run even if this one fails"})]}),t.jsxs("div",{className:"step-editor-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:s,children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:E,children:"Save Step"})]})]})}function ZL({steps:e,onChange:n,onEditingChange:s}){const[a,r]=i.useState(null);i.useEffect(()=>{s?.(a!==null)},[a,s]);const o=i.useCallback(u=>{const h=QL(u);n([...e,h]),r(h.id)},[e,n]),l=i.useCallback(u=>{n(e.filter(h=>h.id!==u)),a===u&&r(null)},[e,n,a]),c=i.useCallback((u,h)=>{const m=e.findIndex(g=>g.id===u);if(m<0)return;const f=h==="up"?m-1:m+1;if(f<0||f>=e.length)return;const p=[...e];[p[m],p[f]]=[p[f],p[m]],n(p)},[e,n]),d=i.useCallback(u=>{n(e.map(h=>h.id===u.id?u:h)),r(null)},[e,n]);return t.jsxs("div",{className:"steps-editor",children:[t.jsx("div",{className:"steps-editor-header",children:t.jsxs("span",{className:"steps-editor-title",children:["Steps (",e.length,")"]})}),e.length===0&&t.jsx("div",{className:"steps-empty-state",children:t.jsx("p",{children:"No steps added yet. Add a command or AI prompt step to get started."})}),t.jsx("div",{className:"steps-list",children:e.map((u,h)=>t.jsx("div",{className:"step-card",children:a===u.id?t.jsx(XL,{step:u,onSave:d,onCancel:()=>r(null)}):t.jsxs("div",{className:"step-card-row",children:[t.jsx("div",{className:"step-card-drag",children:t.jsx(Sc,{size:14})}),t.jsx("span",{className:"step-card-index",children:h+1}),t.jsx(YL,{type:u.type}),t.jsx("span",{className:"step-card-name",children:u.name}),u.continueOnFailure&&t.jsx("span",{className:"step-card-flag",title:"Continues on failure",children:"⚡"}),t.jsxs("div",{className:"step-card-actions",children:[t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>c(u.id,"up"),disabled:h===0,title:"Move up","aria-label":`Move ${u.name} up`,children:t.jsx(pi,{})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>c(u.id,"down"),disabled:h===e.length-1,title:"Move down","aria-label":`Move ${u.name} down`,children:t.jsx(jn,{})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>r(u.id),title:"Edit","aria-label":`Edit ${u.name}`,children:t.jsx(Hs,{})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>l(u.id),title:"Delete","aria-label":`Delete ${u.name}`,children:t.jsx(zn,{})})]})]})},u.id))}),t.jsxs("div",{className:"steps-add-buttons",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("command"),children:[t.jsx(Bn,{size:14}),"Add Command Step"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("ai-prompt"),children:[t.jsx(Bn,{size:14}),"Add AI Prompt Step"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("create-task"),children:[t.jsx(Bn,{size:14}),"Add Create Task Step"]})]})]})}const vy={hourly:"0 * * * *",daily:"0 0 * * *",weekly:"0 0 * * 1",monthly:"0 0 1 * *"},eO={hourly:"Every hour",daily:"Every day (midnight)",weekly:"Every week (Monday)",monthly:"Every month (1st)",custom:"Custom cron expression"};function tO(e){const n=e.trim();for(const[s,a]of Object.entries(vy))if(a===n)return s;return"custom"}function nO(e){const n=e.trim().split(/\s+/);return n.length!==5?!1:n.every(s=>/^[\d*,/-]+$/.test(s))}function sO(e,n,s,a,r){switch(e){case"cron":return{type:"cron",cronExpression:n};case"webhook":return{type:"webhook",webhookPath:s||"/trigger/"+Math.random().toString(36).slice(2,10),secret:a||void 0};case"api":return{type:"api",endpoint:r||"/api/routine/"+Math.random().toString(36).slice(2,10)};case"manual":return{type:"manual"}}}function iO(e){const n=e.trigger;switch(n.type){case"cron":return{triggerType:"cron",cronExpression:n.cronExpression,webhookPath:"",webhookSecret:"",endpoint:""};case"webhook":return{triggerType:"webhook",cronExpression:"",webhookPath:n.webhookPath,webhookSecret:n.secret||"",endpoint:""};case"api":return{triggerType:"api",cronExpression:"",webhookPath:"",webhookSecret:"",endpoint:n.endpoint};case"manual":return{triggerType:"manual",cronExpression:"",webhookPath:"",webhookSecret:"",endpoint:""}}}const aO=[{value:"parallel",label:"Allow concurrent runs"},{value:"queue",label:"Queue after current (one at a time)"},{value:"reject",label:"Reject new runs while running"}],rO=[{value:"skip",label:"Skip missed runs"},{value:"run_one",label:"Run the most recent missed run"},{value:"run",label:"Run all missed runs"}];function Eg(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`step-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function _g({routine:e,onSubmit:n,onCancel:s,scope:a,projectId:r,onScopeChange:o}){const l=!!e,c=e?iO(e):{triggerType:"cron",cronExpression:"0 * * * *",webhookPath:"",webhookSecret:"",endpoint:""},[d,u]=i.useState(e?.name??""),[h,m]=i.useState(e?.description??""),[f,p]=i.useState(c.triggerType),[g,w]=i.useState(c.cronExpression),[v,b]=i.useState(()=>c.triggerType!=="cron"?"custom":tO(c.cronExpression)),[y,N]=i.useState(c.webhookPath),[S,C]=i.useState(c.webhookSecret),[x,k]=i.useState(c.endpoint),[R,z]=i.useState(e?.executionPolicy??"queue"),[_,A]=i.useState(e?.catchUpPolicy??"run_one"),[X,H]=i.useState(e?.enabled??!0),M=e?.steps&&e.steps.length===1&&e.steps[0].type==="ai-prompt"&&!e.command,T=e?.steps&&e.steps.length===1&&e.steps[0].type==="create-task"&&!e.command,[F,W]=i.useState(e?.steps&&e.steps.length>0&&!M&&!T?"advanced":"simple"),[oe,D]=i.useState(()=>M?"ai-prompt":T?"create-task":"command"),[E,P]=i.useState(e?.command??""),[$,j]=i.useState(e?.steps??[]),[q,le]=i.useState(!1),[fe,Ce]=i.useState(e?.timeoutMs??3e5),[Ae,re]=i.useState(M?e.steps?.[0]?.prompt??"":""),[Z,pe]=i.useState(T?e.steps?.[0]?.taskTitle??"":""),[ie,ve]=i.useState(T?e.steps?.[0]?.taskDescription??"":""),[ne,L]=i.useState(T?e.steps?.[0]?.taskColumn??"triage":"triage"),[Y,ue]=i.useState(M||T?e.steps?.[0]?.modelProvider??"":""),[B,xe]=i.useState(M||T?e.steps?.[0]?.modelId??"":""),[je,se]=i.useState([]),[Ue,De]=i.useState(!1),[dt,Pe]=i.useState(null),[ce,Ee]=i.useState(a??"global"),[Oe,ht]=i.useState({}),[Ve,ge]=i.useState(!1),me=i.useRef(!0);i.useEffect(()=>()=>{me.current=!1},[]),i.useEffect(()=>{a&&Ee(a)},[a]),i.useEffect(()=>{let ye=!1;return De(!0),Pe(null),Ws().then(it=>{ye||se(it.models)}).catch(it=>{ye||Pe(it instanceof Error?it.message:"Failed to load models")}).finally(()=>{ye||De(!1)}),()=>{ye=!0}},[]);const $e=Y&&B?`${Y}/${B}`:"",mt=i.useCallback(ye=>{if(!ye){ue(""),xe("");return}const it=ye.indexOf("/");it!==-1&&(ue(ye.slice(0,it)),xe(ye.slice(it+1)))},[]),jt=i.useCallback(()=>{const ye={};if(d.trim()||(ye.name="Name is required"),ce==="project"&&!r&&(ye.scope="Project-specific entries require an active project."),f==="cron"&&v==="custom"&&(g.trim()?nO(g)||(ye.cronExpression="Invalid cron format — expected 5 fields (e.g. '0 */6 * * *')"):ye.cronExpression="Cron expression is required"),f==="webhook"&&!y.trim()&&(ye.webhookPath="Webhook path is required"),f==="api"&&!x.trim()&&(ye.endpoint="API endpoint is required"),F==="simple")oe==="command"&&!E.trim()&&(ye.command="Command is required"),oe==="ai-prompt"&&!Ae.trim()&&(ye.prompt="Prompt is required"),oe==="create-task"&&!ie.trim()&&(ye.taskDescription="Task description is required"),(Y.trim()&&!B.trim()||!Y.trim()&&B.trim())&&(ye.model="Both model provider and model ID must be set, or both must be empty");else{$.length===0&&(ye.steps="At least one step is required"),q&&(ye.stepsEditing="Please save or cancel all step edits before saving the routine");const it=[];$.forEach((He,he)=>{He.name?.trim()||it.push(`Step ${he+1}: Name is required`),He.type==="command"&&!He.command?.trim()&&it.push(`Step ${he+1}: Command is required`),He.type==="ai-prompt"&&!He.prompt?.trim()&&it.push(`Step ${he+1}: Prompt is required`),He.type==="create-task"&&!He.taskDescription?.trim()&&it.push(`Step ${he+1}: Task description is required`)}),it.length>0&&(ye.steps=it.join("; "))}return fe<1e3&&(ye.timeoutMs="Timeout must be at least 1 second (1000ms)"),ht(ye),Object.keys(ye).length===0},[d,f,g,v,y,x,ce,r,F,oe,E,Ae,ie,Y,B,$,q,fe]),tt=i.useCallback(async ye=>{if(ye.preventDefault(),!!jt()){ge(!0);try{let it=e?.scope??ce??(r?"project":"global");it==="project"&&!r&&(it="global");const He=sO(f,g,y,S,x);let he,et;F==="simple"?oe==="command"?he=E.trim()||void 0:oe==="ai-prompt"?et=[{id:Eg(),type:"ai-prompt",name:d.trim(),prompt:Ae.trim(),modelProvider:Y.trim()||void 0,modelId:B.trim()||void 0}]:et=[{id:Eg(),type:"create-task",name:d.trim(),taskTitle:Z.trim()||void 0,taskDescription:ie.trim(),taskColumn:ne,modelProvider:Y.trim()||void 0,modelId:B.trim()||void 0}]:et=$;const vt={name:d.trim(),agentId:e?.agentId??"",description:h.trim()||void 0,trigger:He,command:he,steps:et,timeoutMs:fe,executionPolicy:R,catchUpPolicy:_,enabled:X,scope:it};await n(vt)}finally{me.current&&ge(!1)}}},[jt,n,d,h,f,g,y,S,x,F,oe,E,Ae,Y,B,Z,ie,ne,$,fe,R,_,X,ce,r,e?.scope,e?.agentId]),bt="routine-name-error",Ie="routine-cron-error",Xe="routine-webhook-error",rt="routine-endpoint-error",It="routine-command-error",_t="routine-prompt-error",We="routine-task-description-error",J="routine-model-error",ke="routine-timeout-error",ot=i.useCallback(ye=>{b(ye),ye!=="custom"&&w(vy[ye])},[]);return t.jsxs("form",{className:"routine-form",onSubmit:tt,noValidate:!0,children:[t.jsx("h4",{className:"settings-section-heading",children:l?"Edit Routine":"New Routine"}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-name",children:"Name"}),t.jsx("input",{id:"routine-name",type:"text",placeholder:"e.g. Daily standup reminder",value:d,onChange:ye=>u(ye.target.value),"aria-invalid":!!Oe.name,"aria-describedby":Oe.name?bt:void 0}),Oe.name&&t.jsx("small",{id:bt,className:"field-error",children:Oe.name})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-description",children:"Description (optional)"}),t.jsx("textarea",{id:"routine-description",placeholder:"What does this routine do?",value:h,onChange:ye=>m(ye.target.value),rows:2})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Scope"}),t.jsxs("div",{className:"routine-scope-toggle",role:"radiogroup","aria-label":"Routine scope",children:[t.jsxs("button",{type:"button",className:`routine-scope-btn${ce==="global"?" active":""}`,onClick:()=>{Ee("global"),o?.("global")},role:"radio","aria-checked":ce==="global"?"true":"false",disabled:!!e?.scope,title:e?.scope?`Scope is locked to ${e.scope} for existing routines`:"Global scope",children:[t.jsx(jc,{size:12}),"Global"]}),t.jsxs("button",{type:"button",className:`routine-scope-btn${ce==="project"?" active":""}`,onClick:()=>{Ee("project"),o?.("project")},role:"radio","aria-checked":ce==="project"?"true":"false",disabled:!!e?.scope||!r,title:e?.scope?`Scope is locked to ${e.scope} for existing routines`:r?"Project scope":"Select a project to enable project scope",children:[t.jsx(js,{size:12}),"Project"]})]}),t.jsx("small",{children:!r&&!e?.scope?"No active project. Routines will be created at global scope.":ce==="project"&&r?"This routine will be scoped to the current project.":"This routine will be created at global scope."}),Oe.scope&&t.jsx("small",{className:"field-error",children:Oe.scope})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Trigger Type"}),t.jsxs("div",{className:"routine-trigger-type-selector",role:"radiogroup","aria-label":"Trigger type",children:[t.jsxs("button",{type:"button",className:`routine-trigger-btn${f==="cron"?" active":""}`,onClick:()=>p("cron"),role:"radio","aria-checked":f==="cron",children:[t.jsx(Eb,{size:14}),"Cron"]}),t.jsxs("button",{type:"button",className:`routine-trigger-btn${f==="webhook"?" active":""}`,onClick:()=>p("webhook"),role:"radio","aria-checked":f==="webhook",children:[t.jsx(Ob,{size:14}),"Webhook"]}),t.jsxs("button",{type:"button",className:`routine-trigger-btn${f==="api"?" active":""}`,onClick:()=>p("api"),role:"radio","aria-checked":f==="api",children:[t.jsx(_b,{size:14}),"API"]}),t.jsxs("button",{type:"button",className:`routine-trigger-btn${f==="manual"?" active":""}`,onClick:()=>p("manual"),role:"radio","aria-checked":f==="manual",children:[t.jsx(us,{size:14}),"Manual"]})]})]}),f==="cron"&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-frequency",children:"Frequency"}),t.jsx("select",{id:"routine-frequency",value:v,onChange:ye=>ot(ye.target.value),children:Object.entries(eO).map(([ye,it])=>t.jsx("option",{value:ye,children:it},ye))}),t.jsx("label",{htmlFor:"routine-cron",children:"Cron Expression"}),t.jsx("input",{id:"routine-cron",type:"text",placeholder:"* * * * *",value:g,onChange:ye=>w(ye.target.value),disabled:v!=="custom","aria-invalid":!!Oe.cronExpression,"aria-describedby":Oe.cronExpression?Ie:void 0}),Oe.cronExpression?t.jsx("small",{id:Ie,className:"field-error",children:Oe.cronExpression}):t.jsx("small",{children:v==="custom"?t.jsxs(t.Fragment,{children:["min hour day month weekday — ",t.jsx("a",{href:"https://crontab.guru",target:"_blank",rel:"noopener noreferrer",children:"crontab.guru"})]}):`Auto-filled from preset: ${g}`})]}),f==="webhook"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-webhook-path",children:"Webhook Path"}),t.jsx("input",{id:"routine-webhook-path",type:"text",placeholder:"/trigger/my-routine",value:y,onChange:ye=>N(ye.target.value),"aria-invalid":!!Oe.webhookPath,"aria-describedby":Oe.webhookPath?Xe:void 0}),Oe.webhookPath?t.jsx("small",{id:Xe,className:"field-error",children:Oe.webhookPath}):t.jsx("small",{children:"URL path for the webhook endpoint"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-webhook-secret",children:"Webhook Secret (optional)"}),t.jsx("input",{id:"routine-webhook-secret",type:"password",placeholder:"Optional — leave empty for unauthenticated webhooks",value:S,onChange:ye=>C(ye.target.value)}),t.jsx("small",{children:"HMAC secret for signature verification. Leave empty for unauthenticated webhooks."})]})]}),f==="api"&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-endpoint",children:"API Endpoint"}),t.jsx("input",{id:"routine-endpoint",type:"text",placeholder:"/api/routine/my-routine",value:x,onChange:ye=>k(ye.target.value),"aria-invalid":!!Oe.endpoint,"aria-describedby":Oe.endpoint?rt:void 0}),Oe.endpoint?t.jsx("small",{id:rt,className:"field-error",children:Oe.endpoint}):t.jsx("small",{children:"API endpoint path that triggers this routine"})]}),f==="manual"&&t.jsx("div",{className:"form-group",children:t.jsx("small",{className:"routine-trigger-info",children:"This routine will be triggered manually via the dashboard or API."})}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Action Mode"}),t.jsxs("div",{className:"schedule-mode-toggle",role:"radiogroup","aria-label":"Action mode",children:[t.jsx("button",{type:"button",className:`schedule-mode-btn${F==="simple"?" active":""}`,onClick:()=>W("simple"),role:"radio","aria-checked":F==="simple",children:"Simple"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${F==="advanced"?" active":""}`,onClick:()=>W("advanced"),role:"radio","aria-checked":F==="advanced",children:"Multi-Step"})]}),t.jsx("small",{children:F==="simple"?"Run one command, prompt, or task creation action":"Run multiple actions sequentially"})]}),F==="simple"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Action Type"}),t.jsxs("div",{className:"schedule-mode-toggle",role:"radiogroup","aria-label":"Action type",children:[t.jsx("button",{type:"button",className:`schedule-mode-btn${oe==="command"?" active":""}`,onClick:()=>D("command"),role:"radio","aria-checked":oe==="command",children:"Command"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${oe==="ai-prompt"?" active":""}`,onClick:()=>D("ai-prompt"),role:"radio","aria-checked":oe==="ai-prompt",children:"AI Prompt"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${oe==="create-task"?" active":""}`,onClick:()=>D("create-task"),role:"radio","aria-checked":oe==="create-task",children:"Create Task"})]})]}),oe==="command"?t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-command",children:"Command"}),t.jsx("input",{id:"routine-command",type:"text",placeholder:"e.g. npx runfusion.ai backup --create",value:E,onChange:ye=>P(ye.target.value),"aria-invalid":!!Oe.command,"aria-describedby":Oe.command?It:void 0}),Oe.command?t.jsx("small",{id:It,className:"field-error",children:Oe.command}):t.jsx("small",{children:"Shell command to execute."})]}):oe==="ai-prompt"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-prompt",children:"Prompt"}),t.jsx("textarea",{id:"routine-prompt",placeholder:"e.g. Summarize recent activity and create action items",value:Ae,onChange:ye=>re(ye.target.value),rows:3,"aria-invalid":!!Oe.prompt,"aria-describedby":Oe.prompt?_t:void 0}),Oe.prompt?t.jsx("small",{id:_t,className:"field-error",children:Oe.prompt}):t.jsx("small",{children:"AI prompt to execute."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-model",children:"Model (optional)"}),t.jsx(Ms,{id:"routine-model",label:"Model",models:je,value:$e,onChange:mt,placeholder:"Use default",disabled:Ue}),dt&&t.jsx("small",{className:"field-error",children:dt}),Oe.model&&t.jsx("small",{id:J,className:"field-error",children:Oe.model})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-task-title",children:"Task Title (optional)"}),t.jsx("input",{id:"routine-task-title",type:"text",placeholder:"e.g. Review weekly dependencies",value:Z,onChange:ye=>pe(ye.target.value)})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-task-description",children:"Task Description"}),t.jsx("textarea",{id:"routine-task-description",placeholder:"e.g. Check npm dependencies for security vulnerabilities",value:ie,onChange:ye=>ve(ye.target.value),rows:4,"aria-invalid":!!Oe.taskDescription,"aria-describedby":Oe.taskDescription?We:void 0}),Oe.taskDescription?t.jsx("small",{id:We,className:"field-error",children:Oe.taskDescription}):t.jsx("small",{children:"Describes the task that will be created."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-task-column",children:"Target Column"}),t.jsxs("select",{id:"routine-task-column",value:ne,onChange:ye=>L(ye.target.value),children:[t.jsx("option",{value:"triage",children:"Triage"}),t.jsx("option",{value:"todo",children:"To Do"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-task-model",children:"Executor Model (optional)"}),t.jsx(Ms,{id:"routine-task-model",label:"Executor Model",models:je,value:$e,onChange:mt,placeholder:"Use default",disabled:Ue}),dt&&t.jsx("small",{className:"field-error",children:dt}),Oe.model&&t.jsx("small",{id:J,className:"field-error",children:Oe.model})]})]})]}):t.jsxs(t.Fragment,{children:[t.jsx(ZL,{steps:$,onChange:j,onEditingChange:le}),Oe.steps&&t.jsx("small",{className:"field-error",children:Oe.steps}),Oe.stepsEditing&&t.jsx("small",{className:"field-error",children:Oe.stepsEditing})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-timeout",children:"Timeout (ms)"}),t.jsx("input",{id:"routine-timeout",type:"number",min:1e3,step:1e3,value:fe,onChange:ye=>Ce(Number(ye.target.value)),"aria-invalid":!!Oe.timeoutMs,"aria-describedby":Oe.timeoutMs?ke:void 0}),Oe.timeoutMs?t.jsx("small",{id:ke,className:"field-error",children:Oe.timeoutMs}):t.jsx("small",{children:"Maximum execution time in milliseconds."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-execution-policy",children:"Execution Policy"}),t.jsx("select",{id:"routine-execution-policy",value:R,onChange:ye=>z(ye.target.value),children:aO.map(ye=>t.jsx("option",{value:ye.value,children:ye.label},ye.value))}),t.jsx("small",{children:"How to handle concurrent executions of this routine"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-catchup-policy",children:"Catch-up Policy"}),t.jsx("select",{id:"routine-catchup-policy",value:_,onChange:ye=>A(ye.target.value),children:rO.map(ye=>t.jsx("option",{value:ye.value,children:ye.label},ye.value))}),t.jsx("small",{children:"What to do when a scheduled run is missed"})]}),t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{htmlFor:"routine-enabled",className:"checkbox-label",children:[t.jsx("input",{id:"routine-enabled",type:"checkbox",checked:X,onChange:ye=>H(ye.target.checked)}),"Enabled"]}),t.jsx("small",{children:"When disabled, the routine will not run automatically"})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:s,disabled:Ve,children:"Cancel"}),t.jsx("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:Ve,children:Ve?"Saving…":l?"Save Changes":"Create Routine"})]})]})}const oO=3e4;function lO({onClose:e,addToast:n,projectId:s}){const[a,r]=i.useState(()=>s?"project":"global"),[o,l]=i.useState([]),[c,d]=i.useState("list"),[u,h]=i.useState(),[m,f]=i.useState(null),[p,g]=i.useState({}),w=i.useRef(null);qi(w,!0,"fusion:automation-modal-size");const v=i.useMemo(()=>({scope:a,projectId:a==="project"?s:void 0}),[a,s]),b=i.useCallback(async()=>{try{const M=await q0(v);l(M),g(T=>{const F={...T};for(const W of M){const oe=F[W.id];if(!oe||!W.lastRunResult)continue;const D=W.lastRunResult;D.success===oe.success&&(D.output||"")===oe.output&&(D.error||"")===(oe.error||"")&&delete F[W.id]}return F})}catch(M){n(Me(M)||"Failed to load routines","error")}},[n,v]);i.useEffect(()=>{b()},[b]),i.useEffect(()=>{const M=setInterval(()=>{b()},oO);return()=>clearInterval(M)},[b]),i.useEffect(()=>{const M=T=>{T.key==="Escape"&&(c!=="list"?(d("list"),h(void 0)):e())};return document.addEventListener("keydown",M),()=>document.removeEventListener("keydown",M)},[e,c]);const y=ra(e),N=i.useCallback(async M=>{try{await V0(M,v),n("Routine created","success"),d("list"),await b()}catch(T){n(Me(T)||"Failed to create routine","error")}},[n,b,v]),S=i.useCallback(M=>{h(M),d("edit")},[]),C=i.useCallback(async M=>{if(u)try{await kh(u.id,M,v),n("Routine updated","success"),d("list"),h(void 0),await b()}catch(T){n(Me(T)||"Failed to update routine","error")}},[u,n,b,v]),x=i.useCallback(async M=>{try{await W0(M.id,v),n(`Deleted "${M.name}"`,"success"),await b()}catch(T){n(Me(T)||"Failed to delete routine","error")}},[n,b,v]),k=i.useCallback(async M=>{f(M.id);try{const{result:T}=await G0(M.id,v);g(F=>({...F,[M.id]:{output:T.output||"",error:T.error,success:T.success}})),T.success?n(`"${M.name}" completed successfully`,"success"):n(`"${M.name}" failed: ${T.error||"Unknown error"}`,"error"),await b()}catch(T){n(Me(T)||"Failed to run routine","error")}finally{f(null)}},[n,b,v]),R=i.useCallback(async M=>{try{await kh(M.id,{enabled:!M.enabled},v),n(`"${M.name}" ${M.enabled?"disabled":"enabled"}`,"success"),await b()}catch(T){n(Me(T)||"Failed to toggle routine","error")}},[n,b,v]),z=i.useCallback(()=>{d("list"),h(void 0)},[]);i.useEffect(()=>{c!=="list"&&g({})},[c]);const _=i.useCallback(M=>{r(M),d("list"),h(void 0),g({})},[]),A=()=>c==="create"?t.jsx(_g,{onSubmit:N,onCancel:z,scope:a,projectId:s}):c==="edit"&&u?t.jsx(_g,{routine:u,onSubmit:C,onCancel:z,scope:a,projectId:s}):o.length===0?t.jsxs("div",{className:"routine-empty-state",children:[t.jsx(us,{size:48,strokeWidth:1}),t.jsx("h4",{children:"No automations yet"}),t.jsx("p",{children:"Create an automation with a schedule, webhook, API, or manual trigger."}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>d("create"),children:[t.jsx(Bn,{size:14}),"Create your first automation"]})]}):t.jsx("div",{className:"routine-list",children:o.map(M=>t.jsx(JL,{routine:M,onEdit:S,onDelete:x,onRun:k,onToggle:R,running:m===M.id,lastRunOutput:p[M.id]??null},M.id))}),X=()=>A(),H=c==="list"&&o.length>0;return t.jsx("div",{className:"modal-overlay open",...y,children:t.jsxs("div",{ref:w,className:"modal modal-lg automation-modal",role:"dialog","aria-modal":"true","aria-labelledby":"schedules-modal-title",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(us,{size:20,className:"icon-triage"}),t.jsx("h3",{id:"schedules-modal-title",children:"Automations"})]}),t.jsx("button",{className:"modal-close",onClick:e,"aria-label":"Close",children:t.jsx(yn,{size:20})})]}),t.jsxs("div",{className:"scheduling-toolbar","aria-live":"polite",children:[t.jsxs("div",{className:"scheduling-toolbar-left",role:"group","aria-label":"Scheduling scope",children:[t.jsxs("div",{className:"scheduling-scope-selector",children:[t.jsxs("button",{type:"button",className:`scope-btn${a==="global"?" active":""}`,onClick:()=>_("global"),"aria-pressed":a==="global",title:"Global (user-level) automations",children:[t.jsx(jc,{size:14}),"Global"]}),t.jsxs("button",{type:"button",className:`scope-btn${a==="project"?" active":""}`,onClick:()=>_("project"),"aria-pressed":a==="project",title:"Project-scoped automations",children:[t.jsx(js,{size:14}),"Project"]})]}),t.jsxs("span",{className:"scheduling-count",children:[t.jsx(us,{size:14}),o.length," automation",o.length===1?"":"s"]})]}),t.jsx("div",{className:"scheduling-toolbar-right",children:H&&t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>d("create"),"aria-label":"Create new automation",children:[t.jsx(Bn,{size:14}),"New Automation"]})})]}),t.jsx("div",{className:"schedule-modal-content",id:"scheduled-tasks-content",children:X()})]})})}const cO=3e4,Vu=new Map,iu=new Map;function Mg(e){return e??"default"}function Ag(e){const n=Vu.get(e);return n?Date.now()>=n.expiresAt?(Vu.delete(e),null):n:null}function dO(e,n){const s=e.some(r=>r.id!=="github"&&r.authenticated),a=e.some(r=>r.id==="github"&&r.authenticated)||(n?.authenticated??!1);return{hasAiProvider:s,hasGithub:a}}async function uO(e){const n=iu.get(e);if(n)return n;const s=qo().then(({providers:a,ghCli:r})=>{const l={...dO(a,r),ghCli:r,expiresAt:Date.now()+cO};return Vu.set(e,l),l}).finally(()=>{iu.delete(e)});return iu.set(e,s),s}function yy(e){const n=Mg(e),s=Ag(n),[a,r]=i.useState(s?.hasAiProvider??!1),[o,l]=i.useState(s?.hasGithub??!1),[,c]=i.useState(s?.ghCli),[d,u]=i.useState(s==null),h=i.useRef(!!s);return i.useEffect(()=>{let m=!1;const f=Mg(e),p=Ag(f);if(p)return r(p.hasAiProvider),l(p.hasGithub),c(p.ghCli),u(!1),h.current=!0,()=>{m=!0};h.current=!1;async function g(){!h.current&&u(!0);try{const v=await uO(f);if(m)return;r(v.hasAiProvider),l(v.hasGithub),c(v.ghCli)}catch{}finally{m||(h.current=!0,u(!1))}}return g(),()=>{m=!0}},[e]),i.useMemo(()=>({hasAiProvider:a,hasGithub:o,loading:d,hasWarnings:!a||!o}),[a,o,d])}function wy({hasAiProvider:e,hasGithub:n,compact:s=!1,onDismiss:a}){if(e&&n)return null;const r=a?t.jsx("button",{type:"button",className:"setup-warning-banner__dismiss touch-target","aria-label":"Dismiss setup warning",onClick:a,children:t.jsx(yn,{size:16,"aria-hidden":"true"})}):null;if(s)return t.jsxs("div",{className:`setup-warning-banner setup-warning-banner--compact${a?" setup-warning-banner--dismissible":""}`,role:"status","aria-live":"polite",children:[t.jsx("p",{className:"setup-warning-banner__compact-text",children:"⚠ Setup incomplete — AI and/or GitHub features will be limited."}),r]});const o=[];return e||o.push({key:"ai",title:"No AI provider connected",description:"AI agents won't be able to work on tasks until you connect a provider. Set one up in Settings → AI Setup."}),n||o.push({key:"github",title:"GitHub not connected",description:"You won't be able to import issues from GitHub, but you can still create tasks manually."}),t.jsxs("div",{className:`setup-warning-banner${a?" setup-warning-banner--dismissible":""}`,role:"status","aria-live":"polite",children:[r,o.map(l=>t.jsxs("div",{className:"setup-warning-banner__item",children:[t.jsx("strong",{className:"setup-warning-banner__title",children:l.title}),t.jsx("p",{className:"setup-warning-banner__description",children:l.description})]},l.key))]})}function mO({isOpen:e,onClose:n,projectId:s,tasks:a,onCreateTask:r,addToast:o}){const{confirm:l}=ai(),c=ii();_i(e);const{keyboardOverlap:d,viewportHeight:u,viewportOffsetTop:h,keyboardOpen:m}=la({enabled:c==="mobile"}),f=m?{"--keyboard-overlap":`${d}px`,"--vv-offset-top":`${h}px`,...u!==null?{"--vv-height":`${u}px`}:{}}:{},[p,g]=i.useState(""),[w,v]=i.useState([]),[b,y]=i.useState(""),[N,S]=i.useState(""),[C,x]=i.useState([]),[k,R]=i.useState(!1),[z,_]=i.useState(""),[A,X]=i.useState(""),[H,M]=i.useState(""),[T,F]=i.useState(""),[W,oe]=i.useState(""),[D,E]=i.useState("default"),[P,$]=i.useState(!1),[j,q]=i.useState([]),[le,fe]=i.useState(!1),[Ce,Ae]=i.useState(void 0),[re,Z]=i.useState(Ps),[pe,ie]=i.useState(void 0),[ve,ne]=i.useState(!1),[L,Y]=i.useState(""),[ue,B]=i.useState(null),[xe,je]=i.useState([]),[se,Ue]=i.useState(!1),[De,dt]=i.useState(!1),Pe=i.useRef(null),[ce,Ee]=i.useState(!1),[Oe,ht]=i.useState(""),Ve=i.useRef(null),{hasAiProvider:ge,hasGithub:me,loading:$e}=yy(s),{nodes:mt}=Pc(),jt=i.useCallback(He=>{fe(!0),q(He)},[]),tt=i.useCallback(()=>{fe(!1)},[]),bt=i.useCallback(async()=>{if(xe.length>0){Ue(!0);return}dt(!0);try{const He=await Yr(void 0,s);je(He),Ue(!0)}catch(He){const he=Me(He);o(he?`Failed to load agents: ${he}`:"Failed to load agents","error"),Ue(!1)}finally{dt(!1)}},[xe.length,s,o]);i.useEffect(()=>{if(!se)return;const He=he=>{Pe.current&&!Pe.current.contains(he.target)&&Ue(!1)};return document.addEventListener("mousedown",He),()=>document.removeEventListener("mousedown",He)},[se]),i.useEffect(()=>{if(!ce)return;const He=he=>{Ve.current&&!Ve.current.contains(he.target)&&(Ee(!1),ht(""))};return document.addEventListener("mousedown",He),()=>document.removeEventListener("mousedown",He)},[ce]);const Ie=a.filter(He=>!w.includes(He.id)).sort((He,he)=>{const et=he.createdAt.localeCompare(He.createdAt);if(et!==0)return et;const vt=parseInt(He.id.slice(He.id.lastIndexOf("-")+1),10)||0;return(parseInt(he.id.slice(he.id.lastIndexOf("-")+1),10)||0)-vt}),Xe=Oe?Ie.filter(He=>He.id.toLowerCase().includes(Oe.toLowerCase())||He.title&&He.title.toLowerCase().includes(Oe.toLowerCase())||He.description&&He.description.toLowerCase().includes(Oe.toLowerCase())):Ie,rt=(He,he)=>He.length>he?He.slice(0,he)+"…":He,It=L.trim(),_t=It.length>0&&!Ac.test(It);i.useEffect(()=>{const He=p.trim()!==""||w.length>0||C.length>0||z!==""||A!==""||H!==""||T!==""||j.length>0||ue!==null||Ce!==void 0||re!==Ps||pe!==void 0||b!==""||N!==""||ve||It!=="";$(He)},[p,w,C,z,A,H,T,j,ue,Ce,re,pe,b,N,ve,It]);const We=i.useCallback(async()=>{P&&!await l({title:"Discard Changes",message:"You have unsaved changes. Discard them?",danger:!0})||(C.forEach(He=>URL.revokeObjectURL(He.previewUrl)),x([]),g(""),v([]),_(""),X(""),M(""),F(""),oe(""),E("default"),q([]),fe(!1),B(null),Ue(!1),Ae(void 0),Z(Ps),ie(void 0),y(""),S(""),$(!1),ne(!1),Y(""),n())},[P,n,C,l]),J=i.useCallback(async()=>{const He=p.trim();if(!(!He||k||_t)){R(!0);try{const he=z.indexOf("/"),et=A.indexOf("/"),vt=H.indexOf("/"),Ct=await r({title:void 0,description:He,column:"triage",dependencies:w.length?w:void 0,enabledWorkflowSteps:le?j.length>0?j:[]:void 0,...ue?{assignedAgentId:ue}:{},modelPresetId:D==="preset"&&W||void 0,modelProvider:z&&he!==-1?z.slice(0,he):void 0,modelId:z&&he!==-1?z.slice(he+1):void 0,validatorModelProvider:A&&et!==-1?A.slice(0,et):void 0,validatorModelId:A&&et!==-1?A.slice(et+1):void 0,planningModelProvider:H&&vt!==-1?H.slice(0,vt):void 0,planningModelId:H&&vt!==-1?H.slice(vt+1):void 0,thinkingLevel:T!==""?T:void 0,reviewLevel:Ce,priority:re,nodeId:pe,branch:b.trim()===""?void 0:b.trim(),baseBranch:N.trim()===""?void 0:N.trim(),...ve||It!==""?{githubTracking:{enabled:ve,...It!==""?{repoOverride:It}:{}}}:{}});if(C.length>0){const Et=[];for(const Tt of C)try{await Ic(Ct.id,Tt.file,s)}catch{Et.push(Tt.file.name)}Et.length>0&&o(`Failed to upload: ${Et.join(", ")}`,"error")}C.forEach(Et=>URL.revokeObjectURL(Et.previewUrl)),x([]),g(""),v([]),_(""),X(""),M(""),F(""),oe(""),E("default"),q([]),fe(!1),B(null),Ue(!1),Ae(void 0),Z(Ps),ie(void 0),y(""),S(""),o(`Created ${Ct.id}`,"success"),n()}catch(he){o(Me(he)||"Failed to create task","error")}finally{R(!1)}}},[p,w,C,z,A,H,T,k,r,o,n,s,D,W,j,le,ue,Ce,re,pe,b,N]),ke=i.useCallback(He=>{He.key==="Escape"&&(He.preventDefault(),We())},[We]),ye=(ue?xe.find(He=>He.id===ue):void 0)?.name??ue,it=t.jsxs("div",{className:"new-task-quick-fields",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"dep-trigger-wrap",ref:Ve,children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>Ee(He=>!He),disabled:k,"data-testid":"dep-trigger",children:w.length>0?`${w.length} selected`:"Add dependencies"}),ce&&t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:Oe,onChange:He=>ht(He.target.value),onClick:He=>He.stopPropagation()}),Xe.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):Xe.map(He=>t.jsxs("div",{className:`dep-dropdown-item${w.includes(He.id)?" selected":""}`,onClick:()=>{v(w.includes(He.id)?w.filter(he=>he!==He.id):[...w,He.id]),Ee(!1),ht("")},onMouseDown:he=>he.preventDefault(),children:[t.jsx("span",{className:"dep-dropdown-id",children:He.id}),t.jsx("span",{className:"dep-dropdown-title",children:rt(He.title||He.description||He.id,30)})]},He.id))]})]}),w.length>0&&t.jsx("div",{className:"selected-deps",children:w.map(He=>t.jsxs("span",{className:"dep-chip",children:[He,t.jsx("button",{type:"button",className:"dep-chip-remove",onClick:()=>v(w.filter(he=>he!==He)),disabled:k,children:"×"})]},He))})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Assign Agent"}),t.jsxs("div",{className:"agent-trigger-wrap",ref:Pe,children:[t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{se?Ue(!1):bt()},disabled:k,"data-testid":"new-task-agent-button",children:[t.jsx(es,{size:12,style:{verticalAlign:"middle"}}),ye?` ${ye}`:" Assign agent"]}),se&&t.jsxs("div",{className:"dep-dropdown agent-picker-dropdown",onMouseDown:He=>He.preventDefault(),children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select agent"}),De&&t.jsx("div",{className:"dep-dropdown-empty",children:"Loading agents..."}),!De&&xe.map(He=>t.jsxs("div",{className:`dep-dropdown-item${ue===He.id?" selected":""}`,onMouseDown:he=>he.preventDefault(),onClick:()=>{B(He.id===ue?null:He.id),Ue(!1)},"data-testid":`agent-option-${He.id}`,children:[t.jsx(es,{size:12,style:{marginRight:6}}),t.jsx("span",{className:"dep-dropdown-id",children:He.role}),t.jsx("span",{className:"dep-dropdown-title",children:He.name})]},He.id)),!De&&xe.length===0&&t.jsx("div",{className:"dep-dropdown-empty",children:"No agents available"}),ue&&t.jsx("div",{className:"dep-dropdown-item",onMouseDown:He=>He.preventDefault(),onClick:()=>{B(null),Ue(!1)},children:t.jsx("span",{className:"dep-dropdown-title",children:"Clear selection"})})]})]})]})]});return e?t.jsx("div",{className:"modal-overlay open",onClick:We,onKeyDown:ke,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg new-task-modal",onClick:He=>He.stopPropagation(),style:f,children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:"New Task"}),t.jsx("button",{className:"modal-close",onClick:We,disabled:k,"aria-label":"Close",children:"×"})]}),t.jsxs("div",{className:"modal-body",children:[!$e&&t.jsx(wy,{hasAiProvider:ge,hasGithub:me}),t.jsx(Xv,{mode:"create",description:p,onDescriptionChange:g,dependencies:w,onDependenciesChange:v,executorModel:z,onExecutorModelChange:_,validatorModel:A,onValidatorModelChange:X,presetMode:D,onPresetModeChange:E,selectedPresetId:W,onSelectedPresetIdChange:oe,selectedWorkflowSteps:j,onWorkflowStepsChange:jt,onDefaultOnApplied:tt,pendingImages:C,onImagesChange:x,tasks:a,projectId:s,disabled:k,addToast:o,isActive:e,onClose:We,planningModel:H,onPlanningModelChange:M,thinkingLevel:T,onThinkingLevelChange:F,reviewLevel:Ce,onReviewLevelChange:Ae,priority:re,onPriorityChange:Z,branch:b,onBranchChange:y,baseBranch:N,onBaseBranchChange:S,nodeId:pe,onNodeIdChange:ie,nodeOptions:mt,githubTrackingEnabled:ve,onGithubTrackingEnabledChange:ne,githubRepoOverride:L,onGithubRepoOverrideChange:Y,renderBelowPrimary:it,hideDependencies:!0,autoExpandMoreOptionsOnSelection:!1})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:We,disabled:k,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:J,disabled:!p.trim()||k||_t,children:k?"Creating...":"Create Task"})]})]})}):null}function ji(e){if(!Number.isFinite(e)||e<0)return"—";const n=e/(1024*1024);return n<1024?`${n.toFixed(0)} MB`:`${(n/1024).toFixed(2)} GB`}function Rg(e,n){return!Number.isFinite(e)||!Number.isFinite(n)||n<=0?"—":`${(e/n*100).toFixed(1)}%`}function hO(e,n){if(n<=0)return"normal";const s=e/n;return s>=.85?"critical":s>=.65?"warning":"normal"}function pO(e,n){if(n<=0)return"normal";const s=e/n;return s>=.5?"critical":s>=.25?"warning":"normal"}function fO(e,n){if(n<=0)return"normal";const s=e/n;return s>=.9?"critical":s>=.75?"warning":"normal"}function gO(e,n){if(e===null||!Number.isFinite(e)||e<0)return"normal";const s=n>0?e/n:e;return s>=80?"critical":s>=50?"warning":"normal"}function Hl(e){return e==="critical"?"system-stats-modal__value--critical":e==="warning"?"system-stats-modal__value--warning":""}function bO(e){if(!e)return"Not yet";const n=new Date(e);return Number.isNaN(n.getTime())?"Not yet":n.toLocaleString()}function xO({isOpen:e,onClose:n,projectId:s}){const[a,r]=i.useState(null),[o,l]=i.useState(!1),[c,d]=i.useState(null),[u,h]=i.useState(!0),[m,f]=i.useState(90),[p,g]=i.useState(!1),[w,v]=i.useState(!1),[b,y]=i.useState(null),[N,S]=i.useState(null),[C,x]=i.useState(null),k=i.useCallback(async Z=>{l(!0);try{const pe=await _1(s);r(pe),d(null),x(Date.now()),Z?.preserveKillResult||y(null)}catch(pe){d(pe instanceof Error?pe.message:"Failed to load system stats")}finally{l(!1)}},[s]);i.useEffect(()=>{if(!e)return;k();const Z=window.setInterval(()=>{k()},5e3);return()=>{window.clearInterval(Z)}},[e,k]),i.useEffect(()=>{if(!e)return;(async()=>{try{const pe=await aa();h(pe.vitestAutoKillEnabled??!0),f(pe.vitestKillThresholdPct??90),S(null)}catch(pe){S(pe instanceof Error?pe.message:"Failed to load vitest settings")}})()},[e]),i.useEffect(()=>{if(!e)return;const Z=pe=>{pe.key==="Escape"&&n()};return document.addEventListener("keydown",Z),()=>document.removeEventListener("keydown",Z)},[e,n]);const R=i.useMemo(()=>{if(!a)return[];const Z=a.systemStats,pe=Hl(hO(Z.heapUsed,Z.heapLimit)),ie=Hl(pO(Z.rss,Z.systemTotalMem));return[{label:"RSS",value:ji(Z.rss),detail:Rg(Z.rss,Z.systemTotalMem),className:ie},{label:"Heap Used",value:ji(Z.heapUsed),detail:`of ${ji(Z.heapTotal)}`,className:pe},{label:"Heap Limit",value:ji(Z.heapLimit),detail:"V8 limit"},{label:"External",value:ji(Z.external)},{label:"Array Buffers",value:ji(Z.arrayBuffers)}]},[a]),z=i.useCallback(async Z=>{h(Z);try{await Jn({vitestAutoKillEnabled:Z}),S(null)}catch(pe){S(pe instanceof Error?pe.message:"Failed to save vitest settings")}},[]),_=i.useCallback(async Z=>{const pe=Math.min(99,Math.max(50,Number.isFinite(Z)?Math.round(Z):90));f(pe);try{await Jn({vitestKillThresholdPct:pe}),S(null)}catch(ie){S(ie instanceof Error?ie.message:"Failed to save vitest settings")}},[]),A=i.useCallback(async()=>{if(!p){if(!w){v(!0);return}g(!0);try{const Z=await M1(s);y(Z),v(!1),await k({preserveKillResult:!0})}catch(Z){d(Z instanceof Error?Z.message:"Failed to kill vitest processes")}finally{g(!1)}}},[w,p,k,s]);if(!e)return null;const X=a?.systemStats,H=o&&!!a,M=C?`Updated ${new Date(C).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`:"Waiting for first update",T=a?.taskStats,F=X?X.systemTotalMem-X.systemFreeMem:0,W=X?fO(F,X.systemTotalMem):"normal",oe=X?Hl(W):"",D=X&&Number.isFinite(X.systemTotalMem)&&X.systemTotalMem>0?Math.max(0,Math.min(100,F/X.systemTotalMem*100)):0,E=X?`System memory used: ${D.toFixed(1)}% (${ji(F)} of ${ji(X.systemTotalMem)})`:"System memory usage unavailable",P=a?.vitestProcessCount,$=gO(X?.cpuPercent??null,X?.cpuCount??0),j=Hl($),q=X?.cpuPercent??null,le=q===null?0:Math.max(0,Math.min(100,q)),fe=q===null?"Sampling…":`${q.toFixed(1)}%`,Ce=q===null?"App CPU usage unavailable: waiting for another sample":`App CPU usage: ${q.toFixed(1)}%`,Ae=b?b.killed>0?"system-stats-modal__kill-result system-stats-modal__kill-result--success":"system-stats-modal__kill-result system-stats-modal__kill-result--error":"",re=bO(a?.vitestLastAutoKillAt);return t.jsx("div",{className:"modal-overlay open",role:"dialog","aria-modal":"true","aria-labelledby":"system-stats-modal-title",onClick:Z=>{Z.target===Z.currentTarget&&n()},"data-testid":"system-stats-modal-overlay",children:t.jsxs("div",{className:"modal modal-lg system-stats-modal","data-testid":"system-stats-modal",children:[t.jsxs("div",{className:"modal-header system-stats-modal__header",children:[t.jsxs("h2",{id:"system-stats-modal-title",className:"system-stats-modal__title",children:[t.jsx(Pr,{}),t.jsx("span",{children:"System Stats"})]}),t.jsxs("div",{className:"system-stats-modal__header-actions",children:[t.jsxs("span",{className:"system-stats-modal__auto-refresh","aria-live":"polite",children:[t.jsx("span",{children:"Auto-refresh · 5s"}),t.jsx("span",{className:"system-stats-modal__auto-refresh-time",children:M})]}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>void k(),title:"Refresh","aria-label":"Refresh system stats",children:t.jsx(bs,{size:16,className:H?"system-stats-modal__refresh--spinning":void 0})}),t.jsx("button",{type:"button",className:"modal-close",onClick:n,"aria-label":"Close",children:t.jsx(yn,{})})]})]}),o&&!a&&t.jsx("div",{className:"system-stats-modal__state",children:"Loading system stats…"}),c&&!a&&t.jsx("div",{className:"system-stats-modal__state system-stats-modal__state--error",role:"alert",children:c}),a&&t.jsxs("div",{className:"system-stats-modal__content",children:[t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Process stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"Process"}),t.jsx("dl",{className:"system-stats-modal__grid",children:R.map(Z=>t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:Z.label}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${Z.className}`.trim(),children:Z.value}),Z.detail?t.jsx("span",{className:"system-stats-modal__detail",children:Z.detail}):null]})]},Z.label))})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"CPU and load stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"CPU & Load"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row system-stats-modal__row--cpu-used",children:[t.jsx("dt",{children:"App CPU"}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${j}`.trim(),children:fe}),t.jsx("span",{className:"system-stats-modal__detail",children:q===null?"First sample pending":"process usage"})]}),t.jsx("div",{className:"system-stats-modal__memory-progress-wrapper",children:t.jsx("div",{className:`system-stats-modal__memory-progress-track system-stats-modal__memory-progress-track--${$}`,role:"progressbar","aria-valuenow":Math.round(le),"aria-valuemin":0,"aria-valuemax":100,"aria-label":Ce,children:t.jsx("div",{className:`system-stats-modal__memory-progress-fill system-stats-modal__memory-progress-fill--${$}`,style:{width:`${le}%`}})})})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Load Avg"}),t.jsx("dd",{children:X?.loadAvg.map(Z=>Z.toFixed(2)).join(" ")??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Cores"}),t.jsx("dd",{children:X?.cpuCount??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Platform"}),t.jsx("dd",{children:X?.platform??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Node"}),t.jsx("dd",{children:X?.nodeVersion??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"PID"}),t.jsx("dd",{children:X?.pid??"—"})]})]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"System memory stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"System"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row system-stats-modal__row--memory-used",children:[t.jsx("dt",{children:"Memory Used"}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${oe}`.trim(),children:X?ji(F):"—"}),t.jsx("span",{className:"system-stats-modal__detail",children:X?`${Rg(F,X.systemTotalMem)} of ${ji(X.systemTotalMem)}`:""})]}),t.jsx("div",{className:"system-stats-modal__memory-progress-wrapper",children:t.jsx("div",{className:`system-stats-modal__memory-progress-track system-stats-modal__memory-progress-track--${W}`,role:"progressbar","aria-valuenow":Math.round(D),"aria-valuemin":0,"aria-valuemax":100,"aria-label":E,children:t.jsx("div",{className:`system-stats-modal__memory-progress-fill system-stats-modal__memory-progress-fill--${W}`,style:{width:`${D}%`}})})})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Memory Free"}),t.jsx("dd",{children:X?ji(X.systemFreeMem):"—"})]})]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Task stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"Tasks"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Total"}),t.jsx("dd",{children:T?.total??0})]}),Object.entries(T?.byColumn??{}).map(([Z,pe])=>t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:Z}),t.jsx("dd",{children:pe})]},Z))]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Agent stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"Agents"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"idle"}),t.jsx("dd",{children:T?.agents.idle??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"active"}),t.jsx("dd",{children:T?.agents.active??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"running"}),t.jsx("dd",{children:T?.agents.running??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"error"}),t.jsx("dd",{children:T?.agents.error??0})]})]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Vitest controls",children:[t.jsxs("h3",{className:"system-stats-modal__section-title system-stats-modal__section-title--with-icon",children:[t.jsx(zj,{}),t.jsx("span",{children:"Vitest Controls"})]}),t.jsx("dl",{className:"system-stats-modal__grid system-stats-modal__vitest-controls",children:t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Vitest Processes"}),t.jsx("dd",{children:P??"—"})]})}),t.jsxs("div",{className:"system-stats-modal__vitest-controls",children:[t.jsx("div",{className:"system-stats-modal__kill-row",children:t.jsxs("button",{type:"button",className:"btn btn-danger",onClick:()=>void A(),disabled:p||P===0,children:[t.jsx(qj,{}),t.jsx("span",{children:w?"Confirm Kill?":"Kill Vitest Processes"})]})}),t.jsxs("label",{className:"system-stats-modal__toggle-row",children:[t.jsx("input",{type:"checkbox",checked:u,onChange:Z=>{z(Z.target.checked)}}),t.jsx("span",{children:"Auto-kill vitest on memory pressure"})]}),t.jsxs("div",{className:"system-stats-modal__threshold-row",children:[t.jsx("label",{htmlFor:"vitest-threshold-number",children:"Kill threshold (%)"}),t.jsxs("div",{className:"system-stats-modal__threshold-controls",children:[t.jsx("input",{id:"vitest-threshold-range",type:"range",min:50,max:99,value:m,"aria-label":"Kill threshold slider (%)",onChange:Z=>{const pe=Number.parseInt(Z.target.value,10);_(Number.isNaN(pe)?90:pe)}}),t.jsx("input",{id:"vitest-threshold-number",type:"number",className:"input",min:50,max:99,value:m,"aria-label":"Kill threshold (%)",onChange:Z=>{const pe=Number.parseInt(Z.target.value,10);_(Number.isNaN(pe)?90:pe)},onBlur:()=>{_(m)}})]})]}),b&&t.jsxs("p",{className:Ae,children:["Killed ",b.killed," processes"]}),t.jsxs("p",{className:"system-stats-modal__last-kill",children:["Last auto-kill: ",re]}),N&&t.jsx("p",{className:"system-stats-modal__kill-result system-stats-modal__kill-result--error",children:N})]})]})]}),c&&a&&t.jsxs("div",{className:"system-stats-modal__footer-error",children:["Latest refresh failed: ",c]})]})})}const vO=5e3;function yO(e={}){const{projectId:n,type:s,limit:a=50,autoRefresh:r=!0,useCentralFeed:o=!1}=e,[l,c]=i.useState([]),[d,u]=i.useState(!1),[h,m]=i.useState(null),[f,p]=i.useState(!1),g=i.useRef(null),w=i.useRef(void 0),v=i.useCallback(async()=>{try{u(!0),m(null);let N;o?N=await Ah({limit:a,projectId:n,type:s}):N=(await jh({limit:a,type:s,projectId:n})).map(C=>({...C,projectId:n??"",projectName:""})),c(N),p(N.length===a),N.length>0&&(w.current=N[N.length-1].timestamp)}catch(N){m(N instanceof Error?N.message:"Failed to load activity log")}finally{u(!1)}},[a,n,s,o]),b=i.useCallback(async()=>{if(w.current)try{u(!0);let N;o?N=await Ah({limit:a,projectId:n,type:s,since:w.current}):N=(await jh({limit:a,type:s,since:w.current,projectId:n})).map(C=>({...C,projectId:n??"",projectName:""})),c(S=>[...S,...N]),p(N.length===a),N.length>0&&(w.current=N[N.length-1].timestamp)}catch(N){m(N instanceof Error?N.message:"Failed to load more entries")}finally{u(!1)}},[a,n,s,o]),y=i.useCallback(()=>{c([]),p(!1),w.current=void 0},[]);return i.useEffect(()=>{v()},[v]),i.useEffect(()=>{if(r)return g.current=setInterval(()=>{v()},vO),()=>{g.current&&(clearInterval(g.current),g.current=null)}},[r,v]),{entries:l,loading:d,error:h,refresh:v,clear:y,hasMore:f,loadMore:b}}const au={"task:created":"Task Created","task:moved":"Task Moved","task:updated":"Task Updated","task:deleted":"Task Deleted","task:merged":"Task Merged","task:failed":"Task Failed","settings:updated":"Settings Updated"},wO={"task:created":t.jsx(Bn,{size:14,className:"activity-icon created"}),"task:moved":t.jsx(Qo,{size:14,className:"activity-icon moved"}),"task:updated":t.jsx(bs,{size:14,className:"activity-icon updated"}),"task:deleted":t.jsx(yn,{size:14,className:"activity-icon deleted"}),"task:merged":t.jsx(ts,{size:14,className:"activity-icon merged"}),"task:failed":t.jsx(Xo,{size:14,className:"activity-icon failed"}),"settings:updated":t.jsx(Do,{size:14,className:"activity-icon settings"})};function kO(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(a/36e5),l=Math.floor(a/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function jO({isOpen:e,onClose:n,tasks:s,onOpenTaskDetail:a,projectId:r,projects:o=[],onProjectFilterChange:l,currentProject:c}){const[d,u]=i.useState("all"),[h,m]=i.useState(r||"all"),[f,p]=i.useState(!1);i.useEffect(()=>{m(r||"all")},[r]);const g=d==="all"?void 0:d,w=h==="all"?void 0:h,v=!c&&o.length>0,{entries:b,loading:y,error:N,refresh:S,hasMore:C}=yO({projectId:w,type:g,limit:100,autoRefresh:e,useCentralFeed:v}),x=b.map(A=>({id:A.id,timestamp:A.timestamp,type:A.type,taskId:A.taskId,taskTitle:A.taskTitle,details:A.details,metadata:A.metadata,projectId:A.projectId,projectName:A.projectName})),k=async()=>{try{await K0(),S(),p(!1)}catch{p(!1)}},R=A=>{a&&a(A)},z=A=>{m(A),l?.(A==="all"?void 0:A)};i.useEffect(()=>{if(!e)return;const A=X=>{X.key==="Escape"&&(f?p(!1):n())};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[e,n,f]);const _=d!=="all"||h!=="all";return e?t.jsx("div",{className:"modal-overlay open",onClick:A=>{A.target===A.currentTarget&&n()},role:"dialog","aria-modal":"true","data-testid":"activity-log-modal-overlay",children:t.jsxs("div",{className:"modal modal-lg activity-log-modal","data-testid":"activity-log-modal",children:[t.jsxs("div",{className:"modal-header activity-log-header",children:[t.jsxs("div",{className:"activity-log-title",children:[t.jsx(Wa,{size:18}),t.jsx("span",{children:"Activity Log"})]}),t.jsxs("div",{className:"activity-log-actions",children:[o.length>0&&t.jsxs("div",{className:"activity-log-filter activity-log-filter--project",children:[t.jsx(js,{size:14}),t.jsxs("select",{value:h,onChange:A=>z(A.target.value),className:"activity-log-filter-select","data-testid":"activity-project-filter",children:[t.jsx("option",{value:"all",children:"All Projects"}),o.map(A=>t.jsx("option",{value:A.id,children:A.name},A.id))]})]}),t.jsxs("div",{className:"activity-log-filter",children:[t.jsx(Zl,{size:14}),t.jsxs("select",{value:d,onChange:A=>u(A.target.value),className:"activity-log-filter-select","data-testid":"activity-filter",children:[t.jsx("option",{value:"all",children:"All Events"}),Object.entries(au).map(([A,X])=>t.jsx("option",{value:A,children:X},A))]})]}),t.jsx("button",{className:"activity-log-refresh",onClick:()=>S(),title:"Refresh","data-testid":"activity-refresh",children:y?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14})}),x.length>0&&t.jsx("button",{className:"activity-log-clear",onClick:()=>p(!0),title:"Clear Log","data-testid":"activity-clear",children:t.jsx(zn,{size:14})})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",title:"Close","data-testid":"activity-close",children:"×"})]}),_&&t.jsxs("div",{className:"activity-log-active-filters",children:[t.jsx("span",{className:"activity-log-filter-label",children:"Active filters:"}),h!=="all"&&t.jsxs("span",{className:"activity-log-filter-badge",children:["Project: ",o.find(A=>A.id===h)?.name||h]}),d!=="all"&&t.jsxs("span",{className:"activity-log-filter-badge",children:["Type: ",au[d]]}),t.jsx("button",{className:"activity-log-clear-filters",onClick:()=>{u("all"),m("all"),l?.(void 0)},children:"Clear all"})]}),t.jsxs("div",{className:"activity-log-content","data-testid":"activity-log-content",children:[N&&t.jsxs("div",{className:"activity-log-error","data-testid":"activity-error",children:[t.jsx(Vs,{size:16}),t.jsx("span",{children:N})]}),x.length===0&&!y&&!N&&t.jsxs("div",{className:"activity-log-empty","data-testid":"activity-empty",children:[t.jsx(Wa,{size:48,className:"activity-log-empty-icon"}),t.jsx("p",{children:_?"No activity matches the current filters":"No activity recorded yet"}),_&&t.jsx("button",{className:"btn btn-secondary",onClick:()=>{u("all"),m("all"),l?.(void 0)},children:"Clear Filters"})]}),t.jsx("div",{className:"activity-log-list",children:x.map(A=>t.jsxs("div",{className:"activity-log-entry","data-testid":"activity-entry",children:[t.jsx("div",{className:"activity-log-entry-icon",children:wO[A.type]}),t.jsxs("div",{className:"activity-log-entry-content",children:[t.jsxs("div",{className:"activity-log-entry-header",children:[t.jsx("span",{className:"activity-log-entry-type",children:au[A.type]}),t.jsx("span",{className:"activity-log-entry-time",children:kO(A.timestamp)})]}),t.jsxs("div",{className:"activity-log-entry-details",children:[A.taskId&&t.jsx("button",{className:"activity-log-task-link",onClick:()=>R(A.taskId),"data-testid":"activity-task-link",children:A.taskId}),A.taskTitle&&t.jsx("span",{className:"activity-log-task-title",children:A.taskTitle}),t.jsx("span",{className:"activity-log-entry-text",children:Es(A.details??"")})]}),A.metadata&&Object.keys(A.metadata).length>0&&t.jsxs("div",{className:"activity-log-entry-metadata",children:[typeof A.metadata.from=="string"&&typeof A.metadata.to=="string"&&t.jsxs("span",{className:"activity-log-metadata-item",children:[A.metadata.from," → ",A.metadata.to]}),typeof A.metadata.merged=="boolean"&&t.jsx("span",{className:`activity-log-metadata-item ${A.metadata.merged?"success":"error"}`,children:A.metadata.merged?"Merged":"Not merged"})]})]})]},A.id))}),C&&!y&&t.jsx("button",{className:"activity-log-load-more",onClick:S,"data-testid":"activity-load-more",children:"Load More"}),y&&x.length>0&&t.jsx("div",{className:"activity-log-loading",children:t.jsx(St,{size:20,className:"spin"})})]}),f&&t.jsx("div",{className:"activity-log-confirm-overlay",children:t.jsxs("div",{className:"activity-log-confirm-dialog",children:[t.jsx("h3",{children:"Clear Activity Log?"}),t.jsx("p",{children:"This will permanently delete all activity log entries. This action cannot be undone."}),t.jsxs("div",{className:"activity-log-confirm-actions",children:[t.jsx("button",{className:"activity-log-confirm-cancel",onClick:()=>p(!1),children:"Cancel"}),t.jsx("button",{className:"activity-log-confirm-clear",onClick:k,children:"Clear Log"})]})]})})]})}):null}const jo=[{id:"status",label:"Status",icon:Db},{id:"changes",label:"Changes",icon:gu},{id:"commits",label:"Commits",icon:Ir},{id:"branches",label:"Branches",icon:Os},{id:"worktrees",label:"Worktrees",icon:Lk},{id:"stashes",label:"Stashes",icon:Wr},{id:"remotes",label:"Remotes",icon:Tb}];function Ig({status:e}){switch(e){case"added":case"untracked":return t.jsx(gk,{size:14,className:"gm-file-icon gm-file-added"});case"modified":return t.jsx(Rb,{size:14,className:"gm-file-icon gm-file-modified"});case"deleted":return t.jsx(hk,{size:14,className:"gm-file-icon gm-file-deleted"});case"renamed":case"copied":return t.jsx(Na,{size:14,className:"gm-file-icon gm-file-renamed"});default:return t.jsx(xk,{size:14,className:"gm-file-icon"})}}function Tg({status:e}){const n=e==="untracked"?"U":e==="added"?"A":e==="modified"?"M":e==="deleted"?"D":e==="renamed"?"R":e==="copied"?"C":"?";return t.jsx("span",{className:`gm-file-badge gm-file-badge-${e}`,children:n})}function NO(e){return i.useCallback(async(n,s)=>{try{await navigator.clipboard.writeText(n),e(`Copied ${s||"to clipboard"}`,"success")}catch{e("Failed to copy","error")}},[e])}function zr(e){if(!e)return"—";const n=new Date(e);if(isNaN(n.getTime()))return"—";const a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4);if(r<1)return"just now";if(r<60)return`${r}m ago`;const o=Math.floor(r/60);if(o<24)return`${o}h ago`;const l=Math.floor(o/24);return l<30?`${l}d ago`:n.toLocaleDateString()}function SO({isOpen:e,onClose:n,tasks:s,addToast:a,projectId:r}){const o=ai(),l=ii();_i(e);const{keyboardOverlap:c,viewportHeight:d,viewportOffsetTop:u,keyboardOpen:h}=la({enabled:l==="mobile"}),m=h?{"--keyboard-overlap":`${c}px`,"--vv-offset-top":`${u}px`,...d!==null?{"--vv-height":`${d}px`}:{}}:{},f=i.useCallback(()=>{if(l==="mobile"){const ae=document.activeElement;ae instanceof HTMLElement&&ae.blur(),window.scrollTo(0,0),requestAnimationFrame(()=>{window.scrollTo(0,0)})}n()},[n,l]),[p,g]=i.useState("status"),[w,v]=i.useState(!1),[b,y]=i.useState(null),N=i.useRef(null);qi(N,e,"fusion:git-modal-size");const S=ra(f),C=NO(a),[x,k]=i.useState(null),[R,z]=i.useState([]),[_,A]=i.useState(new Set),[X,H]=i.useState(""),[M,T]=i.useState(!1),[F,W]=i.useState(null),[oe,D]=i.useState(!1),[E,P]=i.useState(null),[$,j]=i.useState(null),q=i.useRef(0),[le,fe]=i.useState([]),[Ce,Ae]=i.useState(null),[re,Z]=i.useState(null),[pe,ie]=i.useState(!1),[ve,ne]=i.useState(20),[L,Y]=i.useState(""),[ue,B]=i.useState([]),[xe,je]=i.useState(""),[se,Ue]=i.useState(""),[De,dt]=i.useState(""),[Pe,ce]=i.useState(null),[Ee,Oe]=i.useState([]),[ht,Ve]=i.useState(!1),[ge,me]=i.useState(null),[$e,mt]=i.useState(null),[jt,tt]=i.useState(!1),[bt,Ie]=i.useState([]),[Xe,rt]=i.useState([]),[It,_t]=i.useState(""),[We,J]=i.useState(null),[ke,ot]=i.useState(null),[ye,it]=i.useState(null),[He,he]=i.useState(!1),[et,vt]=i.useState(null),Ct=i.useRef(0),[Et,Tt]=i.useState(null),[Jt,cn]=i.useState(null),Vt=i.useCallback(async()=>{if(e){v(!0),y(null);try{switch(p){case"status":{const ae=await ki(r);k(ae);break}case"changes":{const[ae,Ke]=await Promise.all([ki(r),fr(r)]);k(ae),z(Ke),A(new Set),j(null),W(null),P(null);break}case"commits":{const ae=await QS(ve,r);fe(ae);break}case"branches":{const[ae,Ke]=await Promise.all([oo(r),ki(r)]);B(ae),k(Ke);break}case"worktrees":{const ae=await t0(r);Ie(ae);break}case"stashes":{const ae=await gl(r);rt(ae),ot(null),it(null),vt(null),Ct.current+=1;break}case"remotes":{const ae=await ki(r);k(ae);break}}}catch(ae){y(Me(ae)||"Failed to fetch git data"),a(Me(ae)||"Failed to fetch git data","error")}finally{v(!1)}}},[p,e,ve,a,r]);i.useEffect(()=>{e&&Vt()},[Vt,e]),i.useEffect(()=>{if(!e)return;const ae=Ke=>{if(Ke.key==="Escape"){f();return}if((Ke.key==="ArrowUp"||Ke.key==="ArrowDown")&&Ke.altKey){Ke.preventDefault();const gt=jo.findIndex(Wt=>Wt.id===p);Ke.key==="ArrowUp"&>>0?g(jo[gt-1].id):Ke.key==="ArrowDown"&><jo.length-1&&g(jo[gt+1].id)}};return document.addEventListener("keydown",ae),()=>document.removeEventListener("keydown",ae)},[e,f,p]);const hn=i.useCallback(async ae=>{try{await bh(ae,r),a(`Staged ${ae.length} file(s)`,"success");const Ke=await fr(r);z(Ke),A(new Set),j(null),W(null),P(null)}catch(Ke){a(Me(Ke)||"Failed to stage files","error")}},[a,r]),dn=i.useCallback(async ae=>{try{await m0(ae,r),a(`Unstaged ${ae.length} file(s)`,"success");const Ke=await fr(r);z(Ke),A(new Set),j(null),W(null),P(null)}catch(Ke){a(Me(Ke)||"Failed to unstage files","error")}},[a,r]),An=i.useCallback(async ae=>{if(await o.confirm({title:"Discard Changes",message:`Discard changes to ${ae.length} file(s)? This cannot be undone.`,danger:!0}))try{await h0(ae,r),a(`Discarded changes to ${ae.length} file(s)`,"success");const[gt,Wt]=await Promise.all([fr(r),ki(r)]);z(gt),k(Wt),A(new Set),j(null),W(null),P(null)}catch(gt){a(Me(gt)||"Failed to discard changes","error")}},[a,r,o]),nn=i.useCallback(async ae=>{if(ae.preventDefault(),!!X.trim()){T(!0);try{const Ke=await xh(X.trim(),r);a(`Committed: ${Ke.hash}`,"success"),H("");const[gt,Wt]=await Promise.all([fr(r),ki(r)]);z(gt),k(Wt),j(null),W(null),P(null)}catch(Ke){a(Me(Ke)||"Failed to commit","error")}finally{T(!1)}}},[X,a,r]),Dn=i.useCallback(async()=>{if(X.trim()){T(!0);try{const ae=R.filter(fn=>!fn.staged).map(fn=>fn.file);ae.length>0&&await bh(ae,r);const Ke=await xh(X.trim(),r);a(`Committed: ${Ke.hash}`,"success"),H("");const[gt,Wt]=await Promise.all([fr(r),ki(r)]);z(gt),k(Wt),j(null),W(null),P(null)}catch(ae){a(Me(ae)||"Failed to commit","error")}finally{T(!1)}}},[X,R,a,r]),Nn=i.useCallback(async(ae,Ke)=>{j({file:ae,staged:Ke}),D(!0),P(null);const gt=q.current+1;q.current=gt;try{const Wt=await u0(ae,Ke,r);if(q.current!==gt)return;W(Wt)}catch(Wt){if(q.current!==gt)return;const fn=Me(Wt)||"Failed to load file diff";W(null),P(fn),a(fn,"error")}finally{q.current===gt&&D(!1)}},[a,r]),zt=i.useCallback(ae=>{A(Ke=>{const gt=new Set(Ke);return gt.has(ae)?gt.delete(ae):gt.add(ae),gt})},[]),sn=i.useCallback(async ae=>{if(Ce===ae){Ae(null),Z(null);return}Ae(ae),ie(!0);try{const Ke=await ic(ae,r);Z(Ke)}catch(Ke){a(Me(Ke)||"Failed to load diff","error"),Z(null)}finally{ie(!1)}},[Ce,a,r]),xn=i.useCallback(()=>{ne(ae=>Math.min(ae+20,100))},[]),Xt=i.useMemo(()=>{if(!L.trim())return le;const ae=L.toLowerCase();return le.filter(Ke=>Ke.message.toLowerCase().includes(ae)||Ke.author.toLowerCase().includes(ae)||Ke.shortHash.toLowerCase().includes(ae))},[le,L]),Yt=i.useCallback(async ae=>{if(ae.preventDefault(),!!xe.trim()){v(!0);try{await n0(xe.trim(),se.trim()||void 0,r),a(`Created branch ${xe}`,"success"),je(""),Ue("");const Ke=await oo(r);B(Ke)}catch(Ke){a(Me(Ke)||"Failed to create branch","error")}finally{v(!1)}}},[xe,se,a,r]),rn=i.useCallback(async ae=>{v(!0);try{await s0(ae,r),a(`Switched to ${ae}`,"success");const[Ke,gt]=await Promise.all([ki(r),oo(r)]);k(Ke),B(gt)}catch(Ke){a(Me(Ke)||"Failed to checkout branch","error")}finally{v(!1)}},[a,r]),Zt=i.useCallback(async ae=>{if(await o.confirm({title:"Delete Branch",message:`Delete branch "${ae}"?`,danger:!0})){v(!0);try{await gh(ae,void 0,r),a(`Deleted branch ${ae}`,"success");const gt=await oo(r);B(gt)}catch(gt){if(Me(gt).includes("not fully merged")){if(await o.confirm({title:"Force Delete Branch",message:"Branch has unmerged commits. Force delete?",danger:!0}))try{await gh(ae,!0,r),a(`Force deleted branch ${ae}`,"success");const fn=await oo(r);B(fn)}catch(fn){a(Me(fn)||"Failed to delete branch","error")}}else a(Me(gt)||"Failed to delete branch","error")}finally{v(!1)}}},[a,r,o]),en=i.useMemo(()=>{if(!De.trim())return ue;const ae=De.toLowerCase();return ue.filter(Ke=>Ke.name.toLowerCase().includes(ae))},[ue,De]),un=i.useCallback(async ae=>{if(Pe===ae){ce(null),Oe([]),me(null),mt(null);return}ce(ae),Oe([]),me(null),mt(null),Ve(!0);try{const Ke=await e0(ae,10,r);Oe(Ke)}catch{Oe([])}finally{Ve(!1)}},[Pe,r]),Qt=i.useCallback(async ae=>{if(ge===ae){me(null),mt(null);return}me(ae),mt(null),tt(!0);try{const Ke=await ic(ae,r);mt(Ke)}catch{mt(null)}finally{tt(!1)}},[ge,r]),pn=i.useCallback(()=>{ce(null),Oe([]),me(null),mt(null)},[]),Dt=i.useCallback(()=>{Ct.current+=1,ot(null),it(null),vt(null),he(!1)},[]),Bt=i.useCallback(async ae=>{ae.preventDefault(),J("create"),Dt();try{await o0(It.trim()||void 0,r),a("Changes stashed","success"),_t("");const Ke=await gl(r);rt(Ke)}catch(Ke){a(Me(Ke)||"Failed to stash changes","error")}finally{J(null)}},[It,a,r,Dt]),be=i.useCallback(async(ae,Ke=!1)=>{J(`apply-${ae}`),Dt();try{await l0(ae,Ke,r),a(Ke?"Stash popped":"Stash applied","success");const gt=await gl(r);rt(gt)}catch(gt){a(Me(gt)||"Failed to apply stash","error")}finally{J(null)}},[a,r,Dt]),Re=i.useCallback(async ae=>{if(await o.confirm({title:"Drop Stash",message:`Drop stash@{${ae}}? This cannot be undone.`,danger:!0})){J(`drop-${ae}`),Dt();try{await c0(ae,r),a("Stash dropped","success");const gt=await gl(r);rt(gt)}catch(gt){a(Me(gt)||"Failed to drop stash","error")}finally{J(null)}}},[a,r,o,Dt]),nt=i.useCallback(async ae=>{if(ke===ae){Dt();return}const Ke=Ct.current+1;Ct.current=Ke,ot(ae),it(null),vt(null),he(!0);try{const gt=await d0(ae,r);if(Ct.current!==Ke)return;it(gt)}catch(gt){if(Ct.current!==Ke)return;it(null),vt(Me(gt)||"Failed to load stash diff")}finally{Ct.current===Ke&&he(!1)}},[ke,r,Dt]),ut=i.useCallback(async()=>{Tt("fetch");try{const ae=await i0(void 0,r);cn(ae),a(ae.message||"Fetch completed",ae.fetched?"success":"info");const Ke=await ki(r);k(Ke)}catch(ae){a(Me(ae)||"Fetch failed","error")}finally{Tt(null)}},[a,r]),Ye=i.useCallback(async ae=>{Tt("pull");try{const Ke=await a0(ae,r);if(cn(Ke),Ke.conflict)a("Merge conflict detected. Resolve manually.","error");else{const Wt=ae?.rebase?"Pull --rebase completed":"Pull completed";a(Ke.message||Wt,"success")}const gt=await ki(r);k(gt)}catch(Ke){a(Me(Ke)||"Pull failed","error")}finally{Tt(null)}},[a,r]),lt=i.useCallback(async()=>{Tt("push");try{const ae=await r0(r);cn(ae),a(ae.message||"Push completed","success");const Ke=await ki(r);k(Ke)}catch(ae){a(Me(ae)||"Push failed","error")}finally{Tt(null)}},[a,r]),wt=i.useMemo(()=>R.filter(ae=>ae.staged),[R]),Q=i.useMemo(()=>R.filter(ae=>!ae.staged),[R]);return e?t.jsx("div",{className:"modal-overlay open git-manager-modal-overlay",...S,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal gm-modal",ref:N,style:m,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h3",{children:[t.jsx(bu,{size:18,style:{marginRight:8,verticalAlign:"middle"}}),"Git Manager"]}),t.jsxs("div",{className:"gm-header-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:Vt,disabled:w,title:"Refresh",children:t.jsx(bs,{size:14,className:w?"spin":""})}),t.jsx("button",{className:"modal-close",onClick:f,"aria-label":"Close",children:t.jsx(yn,{size:18})})]})]}),t.jsxs("div",{className:"gm-layout",children:[t.jsx("nav",{className:"gm-sidebar",role:"tablist","aria-label":"Git Manager Sections",children:jo.map(ae=>{const Ke=ae.icon;return t.jsxs("button",{role:"tab","aria-selected":p===ae.id,className:`gm-nav-item${p===ae.id?" active":""}`,onClick:()=>g(ae.id),children:[t.jsx(Ke,{size:16}),t.jsx("span",{className:"gm-nav-label",children:ae.label})]},ae.id)})}),t.jsxs("div",{className:"gm-content",role:"tabpanel",children:[w&&t.jsxs("div",{className:"gm-loading",children:[t.jsx(St,{size:24,className:"spin"}),t.jsx("span",{children:"Loading..."})]}),b&&!w&&t.jsxs("div",{className:"gm-error",children:[t.jsx(Vs,{size:18}),t.jsx("span",{children:b}),t.jsx("button",{className:"btn btn-sm",onClick:Vt,children:"Retry"})]}),p==="status"&&!w&&x&&t.jsx(CO,{status:x,copyToClipboard:C}),p==="changes"&&!w&&t.jsx(EO,{status:x,stagedFiles:wt,unstagedFiles:Q,selectedFiles:_,toggleFileSelection:zt,onStageFiles:hn,onUnstageFiles:dn,onDiscardChanges:An,onSelectDiffFile:Nn,selectedDiffTarget:$,changeDiff:F,loadingChangeDiff:oe,changeDiffError:E,commitMessage:X,setCommitMessage:H,onCommit:nn,onStageAllAndCommit:Dn,committing:M}),p==="commits"&&!w&&t.jsx(_O,{commits:Xt,commitSearch:L,setCommitSearch:Y,selectedCommit:Ce,commitDiff:re,loadingDiff:pe,onCommitClick:sn,onLoadMore:xn,canLoadMore:le.length>=ve&&ve<100,copyToClipboard:C}),p==="branches"&&!w&&t.jsx(MO,{branches:en,branchSearch:De,setBranchSearch:dt,newBranchName:xe,setNewBranchName:je,branchBase:se,setBranchBase:Ue,onCreateBranch:Yt,onCheckoutBranch:rn,onDeleteBranch:Zt,loading:w,allBranches:ue,selectedBranch:Pe,branchCommits:Ee,loadingBranchCommits:ht,expandedBranchCommit:ge,branchCommitDiff:$e,loadingBranchCommitDiff:jt,onSelectBranch:un,onBranchCommitClick:Qt,onCloseBranchDetails:pn}),p==="worktrees"&&!w&&t.jsx(AO,{worktrees:bt}),p==="stashes"&&!w&&t.jsx(RO,{stashes:Xe,stashMessage:It,setStashMessage:_t,onCreateStash:Bt,onApplyStash:be,onDropStash:Re,onToggleStashDiff:nt,stashLoading:We,expandedStashIndex:ke,stashDiff:ye,loadingStashDiff:He,stashDiffError:et}),p==="remotes"&&!w&&t.jsx(IO,{status:x,remoteLoading:Et,lastRemoteResult:Jt,onFetch:ut,onPull:Ye,onPush:lt,addToast:a,projectId:r,copyToClipboard:C})]})]})]})}):null}function CO({status:e,copyToClipboard:n}){return t.jsxs("div",{className:"gm-panel","data-testid":"status-panel",children:[t.jsx("div",{className:"gm-panel-header",children:t.jsx("h4",{children:"Repository Status"})}),t.jsxs("div",{className:"gm-status-grid",children:[t.jsxs("div",{className:"gm-status-card",children:[t.jsx("span",{className:"gm-status-label",children:"Branch"}),t.jsxs("span",{className:"gm-status-value",children:[t.jsx(Os,{size:14}),t.jsx("span",{children:e.branch})]})]}),t.jsxs("div",{className:"gm-status-card",children:[t.jsx("span",{className:"gm-status-label",children:"Commit"}),t.jsxs("span",{className:"gm-status-value",children:[t.jsx("code",{className:"gm-hash",children:e.commit}),t.jsx("button",{className:"gm-icon-btn",onClick:()=>n(e.commit,"commit hash"),title:"Copy commit hash",children:t.jsx(ja,{size:12})})]})]}),t.jsxs("div",{className:"gm-status-card",children:[t.jsx("span",{className:"gm-status-label",children:"Working Tree"}),t.jsx("span",{className:`gm-status-badge ${e.isDirty?"dirty":"clean"}`,children:e.isDirty?t.jsxs(t.Fragment,{children:[t.jsx(Vs,{size:12}),"Modified"]}):t.jsxs(t.Fragment,{children:[t.jsx(ts,{size:12}),"Clean"]})})]}),t.jsxs("div",{className:"gm-status-card",children:[t.jsx("span",{className:"gm-status-label",children:"Remote Sync"}),t.jsxs("span",{className:"gm-status-value",children:[e.ahead>0&&t.jsxs("span",{className:"gm-ahead",title:`${e.ahead} commit(s) ahead`,children:[t.jsx(Va,{size:12}),e.ahead]}),e.behind>0&&t.jsxs("span",{className:"gm-behind",title:`${e.behind} commit(s) behind`,children:[t.jsx(Yo,{size:12}),e.behind]}),e.ahead===0&&e.behind===0&&t.jsxs("span",{className:"gm-in-sync",children:[t.jsx(ts,{size:12}),"Up to date"]})]})]})]})]})}function EO({status:e,stagedFiles:n,unstagedFiles:s,selectedFiles:a,toggleFileSelection:r,onStageFiles:o,onUnstageFiles:l,onDiscardChanges:c,onSelectDiffFile:d,selectedDiffTarget:u,changeDiff:h,loadingChangeDiff:m,changeDiffError:f,commitMessage:p,setCommitMessage:g,onCommit:w,onStageAllAndCommit:v,committing:b}){const y=s.filter(S=>a.has(`unstaged:${S.file}`)),N=n.filter(S=>a.has(`staged:${S.file}`));return t.jsxs("div",{className:"gm-panel","data-testid":"changes-panel",children:[e&&t.jsxs("div",{className:"gm-changes-header",children:[t.jsxs("span",{className:"gm-branch-indicator",children:[t.jsx(Os,{size:14}),e.branch]}),e.isDirty&&t.jsx("span",{className:"gm-dirty-badge",children:"Modified"})]}),t.jsxs("div",{className:"gm-changes-split",children:[t.jsxs("div",{className:"gm-changes-lists",children:[t.jsxs("div",{className:"gm-file-section",children:[t.jsxs("div",{className:"gm-file-section-header",children:[t.jsxs("h5",{children:["Unstaged Changes (",s.length,")"]}),t.jsxs("div",{className:"gm-file-section-actions",children:[y.length>0&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>o(y.map(S=>S.file)),title:"Stage selected",children:[t.jsx(Bn,{size:12})," Stage (",y.length,")"]}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>c(y.map(S=>S.file)),title:"Discard selected",children:t.jsx(Xo,{size:12})})]}),s.length>0&&t.jsx("button",{className:"btn btn-sm",onClick:()=>o(s.map(S=>S.file)),title:"Stage all",children:"Stage All"})]})]}),t.jsx("div",{className:"gm-file-list gm-file-list-unstaged","data-testid":"gm-file-list-unstaged",children:s.length===0?t.jsx("div",{className:"gm-empty",children:"No unstaged changes"}):s.map(S=>{const C=u?.file===S.file&&u.staged===!1;return t.jsxs("div",{className:`gm-file-item${C?" active":""}`,onClick:()=>d(S.file,!1),role:"button",tabIndex:0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),d(S.file,!1))},children:[t.jsx("label",{className:"gm-file-checkbox",onClick:x=>x.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:a.has(`unstaged:${S.file}`),onChange:()=>r(`unstaged:${S.file}`)})}),t.jsx(Ig,{status:S.status}),t.jsx("span",{className:"gm-file-name",title:S.file,children:t.jsx("bdo",{dir:"ltr",children:S.file})}),t.jsx(Tg,{status:S.status}),t.jsx("button",{className:"gm-icon-btn",onClick:x=>{x.stopPropagation(),o([S.file])},title:"Stage file",children:t.jsx(Bn,{size:12})})]},`unstaged:${S.file}`)})})]}),t.jsxs("div",{className:"gm-file-section",children:[t.jsxs("div",{className:"gm-file-section-header",children:[t.jsxs("h5",{children:["Staged Changes (",n.length,")"]}),t.jsxs("div",{className:"gm-file-section-actions",children:[N.length>0&&t.jsxs("button",{className:"btn btn-sm",onClick:()=>l(N.map(S=>S.file)),title:"Unstage selected",children:["Unstage (",N.length,")"]}),n.length>0&&t.jsx("button",{className:"btn btn-sm",onClick:()=>l(n.map(S=>S.file)),title:"Unstage all",children:"Unstage All"})]})]}),t.jsx("div",{className:"gm-file-list gm-file-list-staged","data-testid":"gm-file-list-staged",children:n.length===0?t.jsx("div",{className:"gm-empty",children:"No staged changes"}):n.map(S=>{const C=u?.file===S.file&&u.staged===!0;return t.jsxs("div",{className:`gm-file-item staged${C?" active":""}`,onClick:()=>d(S.file,!0),role:"button",tabIndex:0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),d(S.file,!0))},children:[t.jsx("label",{className:"gm-file-checkbox",onClick:x=>x.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:a.has(`staged:${S.file}`),onChange:()=>r(`staged:${S.file}`)})}),t.jsx(Ig,{status:S.status}),t.jsx("span",{className:"gm-file-name",title:S.file,children:t.jsx("bdo",{dir:"ltr",children:S.file})}),t.jsx(Tg,{status:S.status}),t.jsx("button",{className:"gm-icon-btn",onClick:x=>{x.stopPropagation(),l([S.file])},title:"Unstage file",children:t.jsx(yn,{size:12})})]},`staged:${S.file}`)})})]})]}),t.jsx("div",{className:"gm-changes-diff",children:u||m||h||f?t.jsxs("div",{className:"gm-diff-section",children:[u&&t.jsxs("div",{className:"gm-diff-target",children:[t.jsx(gu,{size:14}),t.jsxs("span",{children:[u.staged?"Staged":"Unstaged"," diff: "]}),t.jsx("code",{children:u.file})]}),m&&t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading diff..."]}),f&&!m&&t.jsx("div",{className:"gm-diff-error",children:f}),h&&!m&&t.jsxs("div",{className:"gm-diff-viewer",children:[h.stat&&t.jsx("pre",{className:"gm-diff-stat",children:h.stat}),t.jsx("pre",{className:"gm-diff-patch",children:h.patch})]})]}):t.jsxs("div",{className:"gm-diff-empty",children:[t.jsx(gu,{size:20}),t.jsx("span",{children:"Select a file to view its diff"})]})})]}),t.jsxs("form",{className:"gm-commit-form",onSubmit:w,children:[t.jsx("textarea",{className:"gm-commit-input",placeholder:"Commit message...",value:p,onChange:S=>g(S.target.value),rows:3,disabled:b}),t.jsxs("div",{className:"gm-commit-actions",children:[t.jsxs("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:b||!p.trim()||n.length===0,title:n.length===0?"No staged changes to commit":"Commit staged changes",children:[b?t.jsx(St,{size:14,className:"spin"}):t.jsx(qa,{size:14}),"Commit"]}),s.length>0&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,disabled:b||!p.trim(),title:"Stage all and commit",children:"Stage All & Commit"})]})]})]})}function _O({commits:e,commitSearch:n,setCommitSearch:s,selectedCommit:a,commitDiff:r,loadingDiff:o,onCommitClick:l,onLoadMore:c,canLoadMore:d,copyToClipboard:u}){return t.jsxs("div",{className:"gm-panel","data-testid":"commits-panel",children:[t.jsxs("div",{className:"gm-panel-header",children:[t.jsx("h4",{children:"Commits"}),t.jsxs("div",{className:"gm-search-box",children:[t.jsx(zi,{size:14}),t.jsx("input",{type:"text",placeholder:"Search commits...",value:n,onChange:h=>s(h.target.value)})]})]}),t.jsx("div",{className:"gm-commits-list",children:e.length===0?t.jsx("div",{className:"gm-empty",children:n?"No matching commits":"No commits found"}):e.map((h,m)=>t.jsxs("div",{className:"gm-commit-item",children:[t.jsxs("div",{className:"gm-commit-graph",children:[t.jsx("div",{className:"gm-commit-dot"}),m<e.length-1&&t.jsx("div",{className:"gm-commit-line"})]}),t.jsxs("div",{className:"gm-commit-body",children:[t.jsxs("button",{className:"gm-commit-header",onClick:()=>l(h.hash),children:[t.jsxs("div",{className:"gm-commit-top-row",children:[t.jsx("code",{className:"gm-hash",children:h.shortHash}),t.jsx("span",{className:"gm-commit-message",title:h.message,children:h.message})]}),t.jsxs("div",{className:"gm-commit-meta",children:[t.jsx("span",{children:h.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(h.date)}),h.parents.length>1&&t.jsx("span",{className:"gm-merge-badge",children:"merge"})]})]}),t.jsx("div",{className:"gm-commit-actions-row",children:t.jsx("button",{className:"gm-icon-btn",onClick:()=>u(h.hash,"commit hash"),title:"Copy full hash",children:t.jsx(ja,{size:12})})}),a===h.hash&&t.jsx("div",{className:"gm-commit-diff",children:o?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading diff..."]}):r?t.jsxs(t.Fragment,{children:[h.body&&t.jsx("div",{className:"gm-commit-message-full",children:h.body}),r.stat&&t.jsx("pre",{className:"gm-diff-stat",children:r.stat}),t.jsx("pre",{className:"gm-diff-patch",children:r.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]})]},h.hash))}),d&&t.jsx("button",{className:"gm-load-more",onClick:c,children:"Load more commits"})]})}function MO({branches:e,branchSearch:n,setBranchSearch:s,newBranchName:a,setNewBranchName:r,branchBase:o,setBranchBase:l,onCreateBranch:c,onCheckoutBranch:d,onDeleteBranch:u,loading:h,allBranches:m,selectedBranch:f,branchCommits:p,loadingBranchCommits:g,expandedBranchCommit:w,branchCommitDiff:v,loadingBranchCommitDiff:b,onSelectBranch:y,onBranchCommitClick:N,onCloseBranchDetails:S}){return t.jsxs("div",{className:"gm-panel","data-testid":"branches-panel",children:[t.jsxs("div",{className:"gm-panel-header",children:[t.jsx("h4",{children:"Branches"}),t.jsxs("div",{className:"gm-search-box",children:[t.jsx(zi,{size:14}),t.jsx("input",{type:"text",placeholder:"Filter branches...",value:n,onChange:C=>s(C.target.value)})]})]}),t.jsxs("form",{className:"gm-create-form",onSubmit:c,children:[t.jsx("input",{type:"text",placeholder:"New branch name",value:a,onChange:C=>r(C.target.value),disabled:h}),t.jsxs("select",{value:o,onChange:C=>l(C.target.value),disabled:h,className:"gm-branch-select",children:[t.jsx("option",{value:"",children:"Base: HEAD"}),m.map(C=>t.jsx("option",{value:C.name,children:C.name},C.name))]}),t.jsxs("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:h||!a.trim(),children:[t.jsx(Bn,{size:14}),"Create"]})]}),t.jsx("div",{className:"gm-branches-list",children:e.length===0?t.jsx("div",{className:"gm-empty",children:n?"No matching branches":"No branches found"}):e.map(C=>t.jsxs("div",{children:[t.jsxs("div",{className:`gm-branch-item${C.isCurrent?" current":""}${f===C.name?" selected":""}`,onClick:()=>y(C.name),children:[t.jsxs("div",{className:"gm-branch-info",children:[t.jsxs("span",{className:"gm-branch-name",children:[C.isCurrent&&t.jsx(vs,{size:14,className:"gm-current-icon"}),C.name]}),C.remote&&t.jsxs("span",{className:"gm-branch-remote",children:["→ ",C.remote]}),C.lastCommitDate&&t.jsx("span",{className:"gm-branch-date",children:zr(C.lastCommitDate)})]}),t.jsx("div",{className:"gm-branch-actions",children:!C.isCurrent&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:x=>{x.stopPropagation(),d(C.name)},disabled:h,title:"Checkout",children:t.jsx(Os,{size:14})}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:x=>{x.stopPropagation(),u(C.name)},disabled:h,title:"Delete",children:t.jsx(zn,{size:14})})]})})]}),f===C.name&&t.jsxs("div",{className:"gm-branch-details",children:[t.jsxs("div",{className:"gm-branch-details-header",children:[t.jsxs("span",{className:"gm-branch-details-title",children:[t.jsx(Ir,{size:14}),"Commits on ",C.name]}),t.jsx("button",{className:"gm-icon-btn",onClick:S,title:"Close","data-testid":"close-branch-details",children:t.jsx(yn,{size:14})})]}),g?t.jsxs("div",{className:"gm-branch-details-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading commits..."]}):p.length===0?t.jsx("div",{className:"gm-empty",children:"No commits found"}):t.jsx("div",{className:"gm-branch-commits-list",children:p.map(x=>t.jsxs("div",{className:"gm-branch-commit",children:[t.jsxs("button",{className:"gm-branch-commit-row",onClick:()=>N(x.hash),"data-testid":`branch-commit-${x.shortHash}`,children:[t.jsx("span",{className:"gm-commit-hash",children:x.shortHash}),t.jsx("span",{className:"gm-commit-message",title:x.message,children:x.message}),t.jsxs("div",{className:"gm-commit-meta",children:[t.jsx("span",{children:x.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(x.date)}),x.parents.length>1&&t.jsx("span",{className:"gm-merge-badge",children:"merge"})]})]}),w===x.hash&&t.jsx("div",{className:"gm-commit-diff",children:b?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading diff..."]}):v?t.jsxs(t.Fragment,{children:[(x.body||x.message)&&t.jsx("div",{className:"gm-commit-message-full",children:x.body||x.message}),v.stat&&t.jsx("pre",{className:"gm-diff-stat",children:v.stat}),t.jsx("pre",{className:"gm-diff-patch",children:v.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},x.hash))})]})]},C.name))})]})}function AO({worktrees:e}){return t.jsxs("div",{className:"gm-panel","data-testid":"worktrees-panel",children:[t.jsxs("div",{className:"gm-panel-header",children:[t.jsx("h4",{children:"Worktrees"}),t.jsxs("div",{className:"gm-worktree-stats",children:[t.jsxs("span",{children:[e.length," total"]}),t.jsx("span",{className:"gm-stat-separator",children:"•"}),t.jsxs("span",{children:[e.filter(n=>n.taskId).length," in use"]})]})]}),t.jsx("div",{className:"gm-worktrees-list",children:e.map(n=>t.jsx("div",{className:`gm-worktree-item${n.isMain?" main":""}`,children:t.jsxs("div",{className:"gm-worktree-info",children:[t.jsxs("div",{className:"gm-worktree-path-row",children:[n.isMain&&t.jsx("span",{className:"gm-badge main",children:"main"}),n.isBare&&t.jsx("span",{className:"gm-badge bare",children:"bare"}),t.jsx("span",{className:"gm-worktree-path",title:n.path,children:um(n.path)||n.path})]}),t.jsxs("div",{className:"gm-worktree-detail",children:[n.branch&&t.jsxs("span",{className:"gm-worktree-branch",children:[t.jsx(Os,{size:12}),n.branch]}),n.taskId&&t.jsx("span",{className:"gm-worktree-task",children:n.taskId})]})]})},n.path))})]})}function RO({stashes:e,stashMessage:n,setStashMessage:s,onCreateStash:a,onApplyStash:r,onDropStash:o,onToggleStashDiff:l,stashLoading:c,expandedStashIndex:d,stashDiff:u,loadingStashDiff:h,stashDiffError:m}){return t.jsxs("div",{className:"gm-panel","data-testid":"stashes-panel",children:[t.jsx("div",{className:"gm-panel-header",children:t.jsx("h4",{children:"Stashes"})}),t.jsxs("form",{className:"gm-create-form",onSubmit:a,children:[t.jsx("input",{type:"text",placeholder:"Stash message (optional)",value:n,onChange:f=>s(f.target.value),disabled:c!==null}),t.jsxs("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:c!==null,children:[c==="create"?t.jsx(St,{size:14,className:"spin"}):t.jsx(Wr,{size:14}),"Stash"]})]}),t.jsx("div",{className:"gm-stash-list",children:e.length===0?t.jsx("div",{className:"gm-empty",children:"No stashes"}):e.map(f=>t.jsxs("div",{className:"gm-stash-item",children:[t.jsxs("div",{className:"gm-stash-header",children:[t.jsxs("div",{className:"gm-stash-info",children:[t.jsxs("span",{className:"gm-stash-ref",children:["stash@",`{${f.index}}`]}),t.jsx("span",{className:"gm-stash-message",children:f.message}),t.jsxs("div",{className:"gm-stash-meta",children:[f.branch&&t.jsxs("span",{className:"gm-stash-branch",children:[t.jsx(Os,{size:12}),f.branch]}),t.jsx("span",{children:zr(f.date)})]})]}),t.jsxs("div",{className:"gm-stash-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>l(f.index),disabled:c!==null,children:d===f.index?"Hide":"View"}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>r(f.index,!1),disabled:c!==null,title:"Apply stash (keep)",children:c===`apply-${f.index}`?t.jsx(St,{size:14,className:"spin"}):"Apply"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>r(f.index,!0),disabled:c!==null,title:"Pop stash (apply and drop)",children:"Pop"}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>o(f.index),disabled:c!==null,title:"Drop stash",children:c===`drop-${f.index}`?t.jsx(St,{size:14,className:"spin"}):t.jsx(zn,{size:14})})]})]}),d===f.index&&t.jsx("div",{className:"gm-stash-diff",children:h?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(St,{size:14,className:"spin"}),"Loading stash diff…"]}):m?t.jsx("div",{className:"gm-diff-error",children:m}):u?t.jsxs("div",{className:"gm-diff-viewer",children:[u.stat&&t.jsx("pre",{className:"gm-diff-stat",children:u.stat}),t.jsx("pre",{className:"gm-diff-patch",children:u.patch})]}):null})]},f.index))})]})}function IO({status:e,remoteLoading:n,lastRemoteResult:s,onFetch:a,onPull:r,onPush:o,addToast:l,projectId:c,copyToClipboard:d}){const u=me=>{try{return new URL(me).hostname}catch{return me.replace(/^git@/,"").split(":")[0]||me}},[h,m]=i.useState([]),[f,p]=i.useState(!1),[g,w]=i.useState(null),[v,b]=i.useState(""),[y,N]=i.useState(""),[S,C]=i.useState(null),[x,k]=i.useState(""),[R,z]=i.useState(""),[_,A]=i.useState(!1),[X,H]=i.useState(!1),M=i.useRef(null),[T,F]=i.useState([]),[W,oe]=i.useState(!1),[D,E]=i.useState(null),[P,$]=i.useState([]),[j,q]=i.useState(!1),[le,fe]=i.useState(null),Ce=i.useRef(0),Ae=h.find(me=>me.name===D);i.useEffect(()=>{(n!==null||f)&&H(!1)},[n,f]),i.useEffect(()=>{if(!X)return;const me=mt=>{M.current?.contains(mt.target)||H(!1)},$e=mt=>{mt.key==="Escape"&&H(!1)};return document.addEventListener("mousedown",me),document.addEventListener("keydown",$e),()=>{document.removeEventListener("mousedown",me),document.removeEventListener("keydown",$e)}},[X]);const[re,Z]=i.useState(null),[pe,ie]=i.useState(null),[ve,ne]=i.useState(!1),[L,Y]=i.useState(null),[ue,B]=i.useState(null),[xe,je]=i.useState(!1);i.useEffect(()=>{se()},[]),i.useEffect(()=>{e&&e.ahead>0?Ue():e&&e.ahead===0&&F([])},[e?.ahead]),i.useEffect(()=>{h.length>0&&!D&&E(h[0].name)},[h]),i.useEffect(()=>{D?De(D):($([]),fe(null))},[D]),i.useEffect(()=>{!D||!s||De(D)},[D,s]),i.useEffect(()=>{D&&!h.find(me=>me.name===D)&&E(h.length>0?h[0].name:null)},[h,D]);const se=async()=>{p(!0);try{const me=await HS(c);m(me)}catch(me){l(Me(me)||"Failed to load remotes","error")}finally{p(!1)}},Ue=async()=>{oe(!0);try{const me=await XS(c);F(me)}catch{F([])}finally{oe(!1)}},De=async me=>{const $e=Ce.current+1;Ce.current=$e,q(!0),fe(null);try{const mt=await ZS(me,void 0,10,c);if(Ce.current!==$e)return;$(mt)}catch(mt){if(Ce.current!==$e)return;fe(Me(mt)||"Failed to load remote commits"),$([])}finally{Ce.current===$e&&q(!1)}},dt=ai(),Pe=async me=>{if(me.preventDefault(),!(!v.trim()||!y.trim())){w("add");try{await qS(v.trim(),y.trim(),c),l(`Remote '${v}' added successfully`,"success"),b(""),N(""),A(!1),await se()}catch($e){l(Me($e)||"Failed to add remote","error")}finally{w(null)}}},ce=async me=>{if(await dt.confirm({title:"Remove Remote",message:`Are you sure you want to remove remote '${me}'?`,danger:!0})){w(`remove-${me}`);try{await VS(me,c),l(`Remote '${me}' removed`,"success"),await se()}catch(mt){l(Me(mt)||"Failed to remove remote","error")}finally{w(null)}}},Ee=async me=>{if(R.trim()){w(`rename-${me}`);try{await WS(me,R.trim(),c),l(`Remote renamed to '${R.trim()}'`,"success"),C(null),z(""),await se()}catch($e){l(Me($e)||"Failed to rename remote","error")}finally{w(null)}}},Oe=async me=>{if(x.trim()){w(`url-${me}`);try{await GS(me,x.trim(),c),l("Remote URL updated","success"),C(null),k(""),await se()}catch($e){l(Me($e)||"Failed to update remote URL","error")}finally{w(null)}}},ht=i.useCallback(async(me,$e)=>{if($e==="ahead"){if(re===me){Z(null),ie(null);return}Z(me),ie(null),ne(!0);try{const mt=await ic(me);ie(mt)}catch{ie(null)}finally{ne(!1)}}else{if(L===me){Y(null),B(null);return}Y(me),B(null),je(!0);try{const mt=await ic(me);B(mt)}catch{B(null)}finally{je(!1)}}},[re,L]),Ve=me=>{C(`url-${me.name}`),k(me.pushUrl||me.fetchUrl)},ge=me=>{C(`name-${me.name}`),z(me.name)};return t.jsx("div",{className:"gm-panel gm-remotes-panel","data-testid":"remotes-panel",children:t.jsxs("div",{className:"gm-remotes-layout",children:[t.jsxs("div",{className:"gm-remote-selector","data-testid":"remote-selector",children:[t.jsxs("div",{className:"gm-remote-selector-header",children:[t.jsx("span",{className:"gm-remote-selector-title",children:"Remotes"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>A(!_),disabled:g!==null,title:_?"Cancel":"Add Remote",children:_?t.jsx(yn,{size:14}):t.jsx(Bn,{size:14})})]}),_&&t.jsxs("form",{className:"gm-remote-form",onSubmit:Pe,children:[t.jsx("input",{type:"text",placeholder:"Remote name",value:v,onChange:me=>b(me.target.value),disabled:g==="add",className:"input gm-input"}),t.jsx("input",{type:"text",placeholder:"Repository URL",value:y,onChange:me=>N(me.target.value),disabled:g==="add",className:"input gm-input gm-input-url"}),t.jsxs("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:!v.trim()||!y.trim()||g==="add",children:[g==="add"?t.jsx(St,{size:12,className:"spin"}):t.jsx(Bn,{size:12}),"Add"]})]}),f?t.jsxs("div",{className:"gm-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading..."]}):h.length===0?t.jsx("div",{className:"gm-empty",children:"No remotes"}):h.map(me=>t.jsxs("div",{className:`gm-remote-selector-item${D===me.name?" selected":""}`,onClick:()=>E(me.name),role:"button",tabIndex:0,onKeyDown:$e=>{($e.key==="Enter"||$e.key===" ")&&($e.preventDefault(),E(me.name))},children:[t.jsxs("div",{className:"gm-remote-selector-info",children:[t.jsxs("span",{className:"gm-remote-selector-name",children:[t.jsx("span",{className:"gm-remote-selector-name-text",children:me.name}),me.name==="origin"&&t.jsx("span",{className:"gm-remote-default-badge",children:"default"})]}),t.jsx("span",{className:"gm-remote-selector-host",title:me.fetchUrl,children:u(me.fetchUrl)})]}),t.jsx("button",{className:"btn btn-icon btn-sm gm-remote-remove-btn",onClick:$e=>{$e.stopPropagation(),ce(me.name)},disabled:g!==null,title:"Remove remote",children:t.jsx(zn,{size:14})})]},me.name))]}),t.jsxs("div",{className:"gm-remote-detail","data-testid":"remote-detail-panel",children:[D&&Ae?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"gm-remote-sync-card","data-testid":"remote-sync-card",children:[t.jsxs("div",{className:"gm-remote-sync-card-header",children:[t.jsx("span",{className:"gm-remote-sync-card-title",children:D}),e&&(e.ahead>0||e.behind>0)&&t.jsxs("div",{className:"gm-remote-status",children:[e.ahead>0&&t.jsxs("div",{className:"gm-remote-indicator ahead",children:[t.jsx("span",{className:"status-dot status-dot--online","aria-hidden":"true"}),t.jsx(Va,{size:14}),e.ahead," to push"]}),e.behind>0&&t.jsxs("div",{className:"gm-remote-indicator behind",children:[t.jsx("span",{className:"status-dot status-dot--pending","aria-hidden":"true"}),t.jsx(Yo,{size:14}),e.behind," to pull"]})]})]}),t.jsxs("div",{className:"gm-remote-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:a,disabled:n!==null||f,children:[n==="fetch"?t.jsx(St,{size:14,className:"spin"}):t.jsx(bs,{size:14}),"Fetch"]}),t.jsxs("div",{className:"gm-pull-split",ref:M,children:[t.jsxs("button",{className:"btn btn-primary gm-pull-split-main",onClick:()=>{H(!1),r({rebase:!1})},disabled:n!==null||f,children:[n==="pull"?t.jsx(St,{size:14,className:"spin"}):t.jsx(Zs,{size:14}),"Pull"]}),t.jsx("button",{className:"btn btn-primary btn-icon gm-pull-split-toggle",onClick:()=>H(me=>!me),disabled:n!==null||f,"aria-label":"Pull options","aria-haspopup":"menu","aria-expanded":X,children:t.jsx(jn,{size:14})}),X?t.jsxs("div",{className:"gm-pull-menu",role:"menu","aria-label":"Pull options menu",children:[t.jsx("button",{className:"gm-pull-menu-item",role:"menuitem",onClick:()=>{H(!1),r({rebase:!1})},children:"Pull"}),t.jsx("button",{className:"gm-pull-menu-item",role:"menuitem",onClick:()=>{H(!1),r({rebase:!0})},children:"Pull --rebase"})]}):null]}),t.jsxs("button",{className:"btn btn-primary",onClick:o,disabled:n!==null||f,children:[n==="push"?t.jsx(St,{size:14,className:"spin"}):t.jsx(Va,{size:14}),"Push"]})]})]}),t.jsxs("div",{className:"gm-remote-detail-card","data-testid":"remote-detail-card",children:[t.jsxs("div",{className:"gm-remote-detail-urls",children:[t.jsxs("div",{className:"gm-remote-detail-url-row",children:[t.jsx("span",{className:"gm-url-label",children:"Fetch:"}),S===`url-${D}`?t.jsxs("div",{className:"gm-remote-edit",children:[t.jsx("input",{type:"text",value:x,onChange:me=>k(me.target.value),className:"input gm-input",autoFocus:!0}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>Oe(D),disabled:g===`url-${D}`,children:g===`url-${D}`?t.jsx(St,{size:12,className:"spin"}):t.jsx(vs,{size:12})}),t.jsx("button",{className:"btn btn-sm",onClick:()=>{C(null),k("")},title:"Cancel",children:t.jsx(yn,{size:12})})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"gm-url-value",title:Ae.fetchUrl,children:t.jsx("bdo",{dir:"ltr",children:Ae.fetchUrl})}),t.jsxs("div",{className:"gm-remote-inline-actions",children:[t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>d(Ae.fetchUrl,"fetch URL"),title:"Copy fetch URL",children:t.jsx(ja,{size:14})}),t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>Ve(Ae),disabled:g!==null,title:"Edit remote URL",children:t.jsx(Hs,{size:14})})]})]})]}),Ae.pushUrl&&Ae.pushUrl!==Ae.fetchUrl&&t.jsxs("div",{className:"gm-remote-detail-url-row",children:[t.jsx("span",{className:"gm-url-label",children:"Push:"}),t.jsx("span",{className:"gm-url-value",title:Ae.pushUrl,children:t.jsx("bdo",{dir:"ltr",children:Ae.pushUrl})}),t.jsx("div",{className:"gm-remote-inline-actions",children:t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>d(Ae.pushUrl,"push URL"),title:"Copy push URL",children:t.jsx(ja,{size:14})})})]})]}),t.jsx("div",{className:"gm-remote-detail-name-row",children:S===`name-${D}`?t.jsxs("div",{className:"gm-remote-edit",children:[t.jsx("input",{type:"text",value:R,onChange:me=>z(me.target.value),className:"input gm-input",autoFocus:!0}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>Ee(D),disabled:g===`rename-${D}`,children:g===`rename-${D}`?t.jsx(St,{size:12,className:"spin"}):t.jsx(vs,{size:12})}),t.jsx("button",{className:"btn btn-sm",onClick:()=>{C(null),z("")},title:"Cancel",children:t.jsx(yn,{size:12})})]}):t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>ge(Ae),disabled:g!==null,title:"Edit remote name",children:t.jsx(Hs,{size:14})})})]}),e&&e.ahead>0&&t.jsxs("div",{className:"gm-remote-section","data-testid":"commits-to-push",children:[t.jsx("div",{className:"gm-section-subheader",children:t.jsxs("h5",{children:[t.jsx(Va,{size:14}),"Commits to Push (",e.ahead,")"]})}),W?t.jsxs("div",{className:"gm-loading",children:[t.jsx(St,{size:14,className:"spin"}),"Loading..."]}):T.length>0?t.jsx("div",{className:"gm-ahead-commits-list","data-testid":"ahead-commits-list",children:T.map(me=>t.jsxs("div",{className:"gm-commit-item-compact-wrapper",children:[t.jsxs("div",{className:"gm-commit-item-compact gm-commit-clickable",onClick:()=>ht(me.hash,"ahead"),role:"button",tabIndex:0,onKeyDown:$e=>{($e.key==="Enter"||$e.key===" ")&&($e.preventDefault(),ht(me.hash,"ahead"))},title:"Click to view diff",children:[t.jsx("div",{className:"gm-commit-compact-hash",children:t.jsx("code",{className:"gm-hash",children:me.shortHash})}),t.jsxs("div",{className:"gm-commit-compact-info",children:[t.jsx("span",{className:"gm-commit-message",title:me.message,children:me.message}),t.jsxs("span",{className:"gm-commit-meta",children:[t.jsx("span",{children:me.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(me.date)})]})]}),t.jsx("span",{className:"gm-commit-expand-icon",children:re===me.hash?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14})})]}),re===me.hash&&t.jsx("div",{className:"gm-commit-diff gm-commit-diff-compact",children:ve?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading diff..."]}):pe?t.jsxs(t.Fragment,{children:[(me.body||me.message)&&t.jsx("div",{className:"gm-commit-message-full",children:me.body||me.message}),pe.stat&&t.jsx("pre",{className:"gm-diff-stat",children:pe.stat}),t.jsx("pre",{className:"gm-diff-patch",children:pe.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},me.hash))}):t.jsx("div",{className:"gm-empty",children:"No ahead commits found (may need to fetch first)"})]}),t.jsxs("div",{className:"gm-remote-section","data-testid":"remote-commits-section",children:[t.jsx("div",{className:"gm-section-subheader",children:t.jsxs("h5",{children:[t.jsx(Db,{size:14}),"Recent commits on ",D]})}),j?t.jsxs("div",{className:"gm-loading",children:[t.jsx(St,{size:14,className:"spin"}),"Loading commits..."]}):le?t.jsxs("div",{className:"gm-error",children:[t.jsx(Vs,{size:14}),le]}):P.length===0?t.jsxs("div",{className:"gm-empty",children:["No commits found on ",D,". Try fetching first."]}):t.jsx("div",{className:"gm-remote-commits-list","data-testid":"remote-commits-list",children:P.map(me=>t.jsxs("div",{className:"gm-commit-item-compact-wrapper",children:[t.jsxs("div",{className:"gm-commit-item-compact gm-commit-clickable",onClick:()=>ht(me.hash,"remote"),role:"button",tabIndex:0,onKeyDown:$e=>{($e.key==="Enter"||$e.key===" ")&&($e.preventDefault(),ht(me.hash,"remote"))},title:"Click to view diff",children:[t.jsx("div",{className:"gm-commit-compact-hash",children:t.jsx("code",{className:"gm-hash",children:me.shortHash})}),t.jsxs("div",{className:"gm-commit-compact-info",children:[t.jsx("span",{className:"gm-commit-message",title:me.message,children:me.message}),t.jsxs("span",{className:"gm-commit-meta",children:[t.jsx("span",{children:me.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(me.date)})]})]}),t.jsx("span",{className:"gm-commit-expand-icon",children:L===me.hash?t.jsx(jn,{size:14}):t.jsx(Wn,{size:14})})]}),L===me.hash&&t.jsx("div",{className:"gm-commit-diff gm-commit-diff-compact",children:xe?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(St,{size:16,className:"spin"}),"Loading diff..."]}):ue?t.jsxs(t.Fragment,{children:[(me.body||me.message)&&t.jsx("div",{className:"gm-commit-message-full",children:me.body||me.message}),ue.stat&&t.jsx("pre",{className:"gm-diff-stat",children:ue.stat}),t.jsx("pre",{className:"gm-diff-patch",children:ue.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},me.hash))})]})]}):t.jsx("div",{className:"gm-empty",children:"Select a remote to view details"}),s&&t.jsx("div",{className:"gm-remote-result",children:s.message})]})]})})}const kr={name:"",description:"",mode:"prompt",phase:"pre-merge",prompt:"",gateMode:"advisory",scriptName:"",enabled:!0,defaultOn:!1,modelProvider:"",modelId:""};function TO(e,n){return e&&n?`${e}/${n}`:""}function PO(e){if(!e)return{provider:"",modelId:""};const n=e.indexOf("/");return n===-1?{provider:"",modelId:""}:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Pg(e){switch(e){case"file-text":return Na;case"check-circle":return ts;case"shield":return Uj;case"zap":return us;case"eye":return Gr;case"globe":return jc;case"layout-grid":return Sa;case"puzzle":return Ej;default:return ts}}function $g(e){switch(e.toLowerCase()){case"quality":return"wfm-badge-category wfm-badge-category-quality";case"security":return"wfm-badge-category wfm-badge-category-security";default:return"wfm-badge-category"}}function $O({isOpen:e,onClose:n,addToast:s,projectId:a}){const[r,o]=i.useState([]),[l,c]=i.useState([]),[d,u]=i.useState({}),[h,m]=i.useState(!0),[f,p]=i.useState(!0),[g,w]=i.useState("my-steps"),[v,b]=i.useState(null),[y,N]=i.useState(!1),[S,C]=i.useState(!1),[x,k]=i.useState(kr),[R,z]=i.useState(!1),[_,A]=i.useState(!1),[X,H]=i.useState(null),[M,T]=i.useState(null),[F,W]=i.useState({}),[oe,D]=i.useState([]),E=i.useRef(null);qi(E,e,"fusion:workflow-steps-modal-size");const P=i.useCallback(async()=>{try{m(!0);const L=await sl(a);o(L)}catch(L){s(Me(L)||"Failed to load workflow steps","error")}finally{m(!1)}},[s,a]),$=i.useCallback(async()=>{try{const L=await Vo(a);W(L||{})}catch{}},[a]),j=i.useCallback(async()=>{try{const L=await Ws();D(L.models||[])}catch{}},[]),q=i.useCallback(async()=>{try{p(!0);const[L,Y]=await Promise.all([X0(),Z0()]);c(L.templates);const ue=Object.fromEntries(Y.templates.map(({pluginId:B,template:xe})=>[xe.id,B]));u(ue)}catch(L){s(Me(L)||"Failed to load templates","error")}finally{p(!1)}},[s]);i.useEffect(()=>{e&&(P(),q(),$(),j())},[e,P,q,$,j]);const le=i.useCallback(()=>{C(!0),N(!1),b(null),k(kr)},[]),fe=i.useCallback(()=>{C(!1),N(!0),b(null),k(kr)},[]),Ce=i.useCallback(L=>{b(L.id),N(!1),k({name:L.name,description:L.description,mode:L.mode||"prompt",phase:L.phase||"pre-merge",prompt:L.prompt,gateMode:L.gateMode||((L.mode||"prompt")==="script"?"gate":"advisory"),scriptName:L.scriptName||"",enabled:L.enabled,defaultOn:L.defaultOn||!1,modelProvider:L.modelProvider||"",modelId:L.modelId||""})},[]),Ae=i.useCallback(()=>{b(null),N(!1),C(!1),k(kr)},[]),re=i.useCallback(async()=>{if(!x.name.trim()||!x.description.trim()){s("Name and description are required","error");return}z(!0);try{const L=x.mode==="prompt"&&x.modelProvider&&x.modelId?{modelProvider:x.modelProvider,modelId:x.modelId}:x.mode==="prompt"?{modelProvider:void 0,modelId:void 0}:{};if(y){const Y={name:x.name.trim(),description:x.description.trim(),mode:x.mode,phase:x.phase,prompt:x.mode==="prompt"&&x.prompt.trim()||void 0,gateMode:x.gateMode,scriptName:x.mode==="script"?x.scriptName.trim():void 0,enabled:x.enabled,defaultOn:x.defaultOn||void 0,...L};await Nh(Y,a),s("Workflow step created","success")}else v&&(await J0(v,{name:x.name.trim(),description:x.description.trim(),mode:x.mode,phase:x.phase,prompt:x.mode==="prompt"?x.prompt:"",gateMode:x.gateMode,scriptName:x.mode==="script"?x.scriptName.trim():void 0,enabled:x.enabled,defaultOn:x.defaultOn,...L},a),s("Workflow step updated","success"));N(!1),b(null),k(kr),await P()}catch(L){s(Me(L)||"Failed to save workflow step","error")}finally{z(!1)}},[x,y,v,s,P]),Z=i.useCallback(async L=>{try{await Y0(L,a),s("Workflow step deleted","success"),H(null),v===L&&(b(null),k(kr)),await P()}catch(Y){s(Me(Y)||"Failed to delete workflow step","error")}},[v,s,P]),pe=i.useCallback(async()=>{if(!(!v&&!y)&&x.mode==="prompt"){if(y){if(!x.name.trim()||!x.description.trim()){s("Name and description are required before refining","error");return}z(!0);try{const L=x.modelProvider&&x.modelId?{modelProvider:x.modelProvider,modelId:x.modelId}:{},Y={name:x.name.trim(),description:x.description.trim(),mode:"prompt",prompt:x.prompt.trim()||void 0,gateMode:x.gateMode,enabled:x.enabled,defaultOn:x.defaultOn||void 0,...L},ue=await Nh(Y,a);N(!1),b(ue.id),A(!0);const B=await Sh(ue.id,a);k(xe=>({...xe,prompt:B.prompt})),s("Prompt refined with AI","success"),await P()}catch(L){s(Me(L)||"Failed to refine prompt","error")}finally{z(!1),A(!1)}return}if(v){A(!0);try{const L=await Sh(v,a);k(Y=>({...Y,prompt:L.prompt})),s("Prompt refined with AI","success"),await P()}catch(L){s(Me(L)||"Failed to refine prompt","error")}finally{A(!1)}}}},[v,y,x,s,P]),ie=i.useCallback(async L=>{T(L.id);try{await e1(L.id,a),s(`Added ${L.name} workflow step`,"success"),await P(),w("my-steps"),C(!1)}catch(Y){const ue=Me(Y);ue?.includes("already exists")?s(`A workflow step named '${L.name}' already exists`,"error"):s(ue||"Failed to add workflow step from template","error")}finally{T(null)}},[s,P]),ve=ra(n);if(!e)return null;const ne=y||v!==null;return t.jsx("div",{className:"modal-overlay open",...ve,"data-testid":"workflow-step-manager",children:t.jsxs("div",{ref:E,className:"modal workflow-step-manager-modal",role:"dialog","aria-modal":"true","aria-label":"Workflow Steps",children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h2",{children:"Workflow Steps"}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]}),t.jsx("div",{className:"wfm-body",children:h?t.jsx("div",{className:"wfm-loading",children:"Loading..."}):t.jsxs(t.Fragment,{children:[!ne&&t.jsxs("div",{className:"wfm-tab-row",children:[t.jsxs("button",{className:`btn ${g==="my-steps"?"btn-primary":"btn-secondary"} wfm-tab-btn`,onClick:()=>w("my-steps"),"data-testid":"tab-my-steps",children:[t.jsx(Rw,{size:14}),"My Workflow Steps (",r.length,")"]}),t.jsxs("button",{className:`btn ${g==="templates"?"btn-primary":"btn-secondary"} wfm-tab-btn`,onClick:()=>w("templates"),"data-testid":"tab-templates",children:[t.jsx(Sa,{size:14}),"Templates (",l.length,")"]})]}),g==="my-steps"&&!ne&&!S&&t.jsxs(t.Fragment,{children:[r.length===0&&t.jsx("div",{className:"wfm-empty","data-testid":"empty-state",children:"No workflow steps defined. Create one to get started, or add one from the Templates tab."}),r.length>0&&t.jsx("div",{className:"wfm-step-list",children:r.map(L=>t.jsx("div",{className:"wfm-step-card","data-testid":`workflow-step-${L.id}`,children:t.jsxs("div",{className:"wfm-step-card-top",children:[t.jsxs("div",{className:"wfm-step-card-info",children:[t.jsxs("div",{className:"wfm-step-card-title-row",children:[t.jsx("span",{className:"wfm-step-card-name",children:L.name}),t.jsx("span",{className:`wfm-badge ${L.enabled?"wfm-badge-enabled":"wfm-badge-disabled"}`,children:L.enabled?"Enabled":"Disabled"}),t.jsx("span",{className:`wfm-badge ${(L.mode||"prompt")==="script"?"wfm-badge-script":"wfm-badge-prompt"}`,children:(L.mode||"prompt")==="script"?"Script":"AI Prompt"}),t.jsx("span",{className:`wfm-badge ${(L.phase||"pre-merge")==="post-merge"?"wfm-badge-post-merge":"wfm-badge-pre-merge"}`,children:(L.phase||"pre-merge")==="post-merge"?"Post-merge":"Pre-merge"}),t.jsx("span",{className:`wfm-badge ${(L.gateMode||((L.mode||"prompt")==="script"?"gate":"advisory"))==="gate"?"wfm-badge-gate":"wfm-badge-advisory"}`,children:(L.gateMode||((L.mode||"prompt")==="script"?"gate":"advisory"))==="gate"?"Gate":"Advisory"}),L.defaultOn&&t.jsx("span",{className:"wfm-badge wfm-badge-default-on",children:"Default on"})]}),t.jsx("div",{className:"wfm-step-card-desc",children:L.description})]}),t.jsxs("div",{className:"wfm-step-card-actions",children:[t.jsx("button",{className:"btn-icon",onClick:()=>Ce(L),title:"Edit","aria-label":`Edit ${L.name}`,children:t.jsx(Hs,{size:14})}),X===L.id?t.jsxs("div",{className:"wfm-delete-confirm",children:[t.jsx("button",{className:"btn-icon wfm-delete-confirm-btn",onClick:()=>Z(L.id),title:"Confirm delete","aria-label":`Confirm delete ${L.name}`,children:t.jsx(vs,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:()=>H(null),title:"Cancel delete","aria-label":"Cancel delete",children:t.jsx(yn,{size:14})})]}):t.jsx("button",{className:"btn-icon",onClick:()=>H(L.id),title:"Delete","aria-label":`Delete ${L.name}`,children:t.jsx(zn,{size:14})})]})]})},L.id))})]}),g==="templates"&&!ne&&!S&&t.jsx(t.Fragment,{children:f?t.jsxs("div",{className:"wfm-loading",children:[t.jsx(St,{size:24,className:"spin wfm-spinner"}),"Loading templates..."]}):l.length===0?t.jsx("div",{className:"wfm-empty","data-testid":"no-templates-state",children:"No templates available."}):t.jsx("div",{className:"wfm-template-list",children:l.map(L=>{const Y=Pg(L.icon),ue=$g(L.category),B=M===L.id;return t.jsx("div",{className:"wfm-template-card","data-testid":`template-${L.id}`,children:t.jsxs("div",{className:"wfm-template-inner",children:[t.jsx("div",{className:"wfm-template-icon",children:t.jsx(Y,{size:20})}),t.jsxs("div",{className:"wfm-template-content",children:[t.jsxs("div",{className:"wfm-template-title-row",children:[t.jsx("span",{className:"wfm-template-name",children:L.name}),t.jsx("span",{className:ue,children:L.category}),d[L.id]&&t.jsx("span",{className:"wfm-badge-category wfm-badge-category-plugin",children:d[L.id]})]}),t.jsx("div",{className:"wfm-template-desc",children:L.description}),t.jsx("button",{className:"btn btn-primary wfm-template-add-btn",onClick:()=>ie(L),disabled:B,"data-testid":`add-template-${L.id}`,children:B?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:12,className:"spin"}),"Adding..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Bn,{size:12}),"Add"]})})]})]})},L.id)})})}),S&&!ne&&t.jsxs("div",{className:"wfm-create-chooser","data-testid":"workflow-step-create-chooser",children:[t.jsx("h3",{className:"wfm-form-title",children:"How would you like to create this workflow step?"}),t.jsx("p",{className:"wfm-create-chooser-hint",children:"Start from a built-in template or create a fully custom workflow step."}),t.jsxs("button",{className:"btn wfm-create-custom-btn",onClick:fe,"data-testid":"create-custom-step",children:[t.jsx(Bn,{size:14}),"Custom workflow step"]}),f?t.jsxs("div",{className:"wfm-loading","data-testid":"create-chooser-template-loading",children:[t.jsx(St,{size:24,className:"spin wfm-spinner"}),"Loading built-in templates..."]}):l.length===0?t.jsx("div",{className:"wfm-empty","data-testid":"create-chooser-no-templates",children:"No built-in templates are available right now. You can still create a custom step."}):t.jsx("div",{className:"wfm-template-list","data-testid":"create-chooser-templates",children:l.map(L=>{const Y=Pg(L.icon),ue=$g(L.category),B=M===L.id;return t.jsx("div",{className:"wfm-template-card","data-testid":`chooser-template-${L.id}`,children:t.jsxs("div",{className:"wfm-template-inner",children:[t.jsx("div",{className:"wfm-template-icon",children:t.jsx(Y,{size:20})}),t.jsxs("div",{className:"wfm-template-content",children:[t.jsxs("div",{className:"wfm-template-title-row",children:[t.jsx("span",{className:"wfm-template-name",children:L.name}),t.jsx("span",{className:ue,children:L.category}),d[L.id]&&t.jsx("span",{className:"wfm-badge-category wfm-badge-category-plugin",children:d[L.id]})]}),t.jsx("div",{className:"wfm-template-desc",children:L.description}),t.jsx("button",{className:"btn btn-primary wfm-template-add-btn",onClick:()=>ie(L),disabled:B,"data-testid":`chooser-add-template-${L.id}`,children:B?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:12,className:"spin"}),"Adding..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Bn,{size:12}),"Add template"]})})]})]})},L.id)})})]}),ne&&t.jsxs("div",{className:"wfm-form","data-testid":"workflow-step-form",children:[t.jsx("h3",{className:"wfm-form-title",children:y?"New Workflow Step":"Edit Workflow Step"}),t.jsxs("div",{className:"wfm-form-fields",children:[t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Name"}),t.jsx("input",{type:"text",value:x.name,onChange:L=>k(Y=>({...Y,name:L.target.value})),placeholder:"e.g. Documentation Review","data-testid":"workflow-step-name"})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{value:x.description,onChange:L=>k(Y=>({...Y,description:L.target.value})),placeholder:"Brief description of what this step does",rows:2,"data-testid":"workflow-step-description"})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Execution Mode"}),t.jsxs("div",{className:"wfm-mode-selector","data-testid":"workflow-step-mode-selector",children:[t.jsxs("button",{className:`btn ${x.mode==="prompt"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,mode:"prompt",gateMode:L.gateMode||"advisory",scriptName:""})),"data-testid":"mode-prompt",children:[t.jsx(na,{size:14}),"AI Prompt"]}),t.jsxs("button",{className:`btn ${x.mode==="script"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,mode:"script",gateMode:"gate",prompt:"",modelProvider:"",modelId:""})),"data-testid":"mode-script",children:[t.jsx(sa,{size:14}),"Run Script"]})]})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Execution Phase"}),t.jsxs("div",{className:"wfm-mode-selector","data-testid":"workflow-step-phase-selector",children:[t.jsx("button",{className:`btn ${x.phase==="pre-merge"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,phase:"pre-merge"})),"data-testid":"phase-pre-merge",children:"Pre-merge"}),t.jsx("button",{className:`btn ${x.phase==="post-merge"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,phase:"post-merge"})),"data-testid":"phase-post-merge",children:"Post-merge"})]}),t.jsx("div",{className:"wfm-field-hint",children:x.phase==="pre-merge"?"Runs before merge — can block merge on failure":"Runs after merge success — failures are logged but do not block"})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Failure Behavior"}),t.jsxs("div",{className:"wfm-mode-selector","data-testid":"workflow-step-gate-mode-selector",children:[t.jsx("button",{className:`btn ${x.gateMode==="advisory"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,gateMode:"advisory"})),"data-testid":"gate-mode-advisory",children:"Advisory"}),t.jsx("button",{className:`btn ${x.gateMode==="gate"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,gateMode:"gate"})),"data-testid":"gate-mode-gate",children:"Gate"})]}),t.jsx("div",{className:"wfm-field-hint",children:x.gateMode==="gate"?"Failures block merge and request remediation.":"Failures are recorded as advisory and do not block merge."})]}),x.mode==="prompt"&&t.jsxs("div",{className:"wfm-field",children:[t.jsxs("div",{className:"wfm-prompt-header",children:[t.jsx("label",{children:"Agent Prompt"}),t.jsxs("button",{className:"btn-icon wfm-refine-btn",onClick:pe,disabled:!x.description.trim()||_,title:"Refine with AI","aria-label":"Refine prompt with AI","data-testid":"refine-btn",children:[_?t.jsx(St,{size:12,className:"spin"}):t.jsx(fs,{size:12}),t.jsx("span",{children:"Refine with AI"})]})]}),t.jsx("textarea",{value:x.prompt,onChange:L=>k(Y=>({...Y,prompt:L.target.value})),placeholder:"Leave empty to use AI refinement",rows:6,className:"wfm-prompt-textarea","data-testid":"workflow-step-prompt"})]}),x.mode==="prompt"&&t.jsxs("div",{className:"wfm-field","data-testid":"workflow-step-model-field",children:[t.jsxs("div",{className:"wfm-model-header",children:[t.jsx("label",{children:"Model Override"}),x.modelProvider&&x.modelId&&t.jsxs("button",{type:"button",className:"btn-icon wfm-model-clear-btn",onClick:()=>k(L=>({...L,modelProvider:"",modelId:""})),title:"Clear model override (use global default)","data-testid":"clear-model-override",children:[t.jsx(yn,{size:12}),t.jsx("span",{children:"Use default"})]})]}),t.jsx("span",{className:"wfm-model-hint",children:x.modelProvider&&x.modelId?`Using ${x.modelProvider}/${x.modelId}`:"Using global default model"}),t.jsx("div",{"data-testid":"workflow-step-model-select",children:t.jsx(Ms,{models:oe,value:TO(x.modelProvider,x.modelId),onChange:L=>{const Y=PO(L);k(ue=>({...ue,modelProvider:Y.provider,modelId:Y.modelId}))},placeholder:"Select a model override…",label:"Model override for this workflow step"})})]}),x.mode==="script"&&t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Script"}),Object.keys(F).length===0?t.jsx("div",{className:"wfm-no-scripts","data-testid":"no-scripts-message",children:"No scripts configured. Add scripts in Settings → Scripts first."}):t.jsxs("select",{value:x.scriptName,onChange:L=>k(Y=>({...Y,scriptName:L.target.value})),"data-testid":"workflow-step-script-select",children:[t.jsx("option",{value:"",children:"Select a script…"}),Object.entries(F).map(([L,Y])=>t.jsxs("option",{value:L,children:[L," (",Y,")"]},L))]})]}),t.jsxs("label",{className:"wfm-checkbox-label",children:[t.jsx("input",{type:"checkbox",checked:x.enabled,onChange:L=>k(Y=>({...Y,enabled:L.target.checked})),"data-testid":"workflow-step-enabled"}),"Enabled (available for selection on new tasks)"]}),t.jsxs("label",{className:"wfm-checkbox-label",children:[t.jsx("input",{type:"checkbox",checked:x.defaultOn,onChange:L=>k(Y=>({...Y,defaultOn:L.target.checked})),"data-testid":"workflow-step-default-on"}),"Default on for new tasks"]}),t.jsxs("div",{className:"wfm-form-actions",children:[t.jsx("button",{className:"btn btn-secondary",onClick:Ae,disabled:R,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:re,disabled:R||!x.name.trim()||!x.description.trim()||x.mode==="script"&&!x.scriptName.trim(),"data-testid":"save-workflow-step",children:R?"Saving...":y?"Create":"Save"})]})]})]})]})}),!ne&&!S&&t.jsx("div",{className:"wfm-footer",children:t.jsxs("button",{className:"btn btn-primary wfm-footer-add-btn",onClick:le,"data-testid":"add-workflow-step",children:[t.jsx(Bn,{size:14}),"Add Workflow Step"]})})]})})}const DO=36e5,LO=3e5,ru=[{value:3e5,label:"5m"},{value:9e5,label:"15m"},{value:18e5,label:"30m"},{value:36e5,label:"1h"},{value:108e5,label:"3h"},{value:216e5,label:"6h"},{value:432e5,label:"12h"},{value:864e5,label:"24h"},{value:1728e5,label:"48h"},{value:2592e5,label:"72h"},{value:6048e5,label:"1w"}];function OO(e){return e<1e3?`${e}ms`:e<6e4?`${Math.round(e/1e3)}s`:e<36e5?`${Math.round(e/6e4)}m`:e<864e5?`${Math.round(e/36e5)}h`:e<6048e5?`${Math.round(e/864e5)}d`:`${Math.round(e/6048e5)}w`}function FO(e){return typeof e!="number"||!Number.isFinite(e)?DO:Math.max(LO,Math.round(e))}function XB(e){if(ru.some(s=>s.value===e))return[...ru];const n={value:e,label:`${OO(e)} (custom)`};return[...ru,n].sort((s,a)=>s.value-a.value)}const zO=4,BO=5*6e4;function UO(e){const n=FO(e?.heartbeatIntervalMs);return Math.max(n*zO,BO)}function Dg(e){const n=Math.floor(e/6e4);if(n<1)return"<1m";const s=Math.floor(n/60),a=n%60;return s>0&&a>0?`${s}h ${a}m`:s>0?`${s}h`:`${a}m`}function HO(e){const n=e.metadata;return n&&(n.agentKind==="task-worker"||n.taskWorker===!0||n.managedBy==="task-executor")?!0:!!(e.role==="executor"&&e.name?.startsWith("executor-")&&e.taskId)}function qO(e){const s=e.metadata?.heartbeatTimerRepair;if(!s||typeof s!="object")return{};const a=s;return{repairedAt:typeof a.repairedAt=="string"?a.repairedAt:void 0,staleAtRepair:typeof a.staleAtRepair=="boolean"?a.staleAtRepair:void 0,staleRepairReason:typeof a.staleRepairReason=="string"?a.staleRepairReason:void 0}}function VO(e){const{state:n,lastHeartbeatAt:s,lastError:a,pauseReason:r,runtimeConfig:o}=e,l=HO(e),c=l||o?.enabled!==!1;if(n==="error")return{label:a??"Error",icon:t.jsx(Ls,{size:14}),color:"var(--state-error-text)",stateDerived:!a};if(n==="paused")return{label:r?`Paused: ${r}`:"Paused",icon:t.jsx(mi,{size:14}),color:"var(--state-paused-text)",stateDerived:!r};if(n==="running"||l&&n==="active")return{label:"Running",icon:t.jsx(Ls,{size:14}),color:"var(--state-active-text)",stateDerived:!0};if(!c)return{label:"Heartbeat Disabled",icon:t.jsx(mi,{size:14}),color:"var(--state-paused-text)",stateDerived:!1};if(!s)return{label:n==="active"?"Starting...":"Idle",icon:t.jsx(es,{size:14}),color:"var(--text-muted)",stateDerived:!1};const d=qO(e);if(d.staleAtRepair&&d.repairedAt){const f=Date.parse(d.repairedAt),p=Date.parse(s);if(Number.isFinite(f)&&Number.isFinite(p)&&p<f)return{label:"Unresponsive",icon:t.jsx(Ls,{size:14}),color:"var(--state-error-text)",stateDerived:!1,reason:d.staleRepairReason??"Heartbeat scheduler repaired a missing timer; waiting for recovery heartbeat"}}const u=new Date(s).getTime(),h=Date.now()-u,m=UO(o);if(h>m){const f=`No heartbeat for ${Dg(h)} (threshold: ${Dg(m)})`;return{label:"Unresponsive",icon:t.jsx(Ls,{size:14}),color:"var(--state-error-text)",stateDerived:!1,reason:f}}return{label:"Healthy",icon:t.jsx(Fk,{size:14}),color:"var(--state-active-text)",stateDerived:!1}}function gc({agent:e,size:n=36,className:s}){const[a,r]=i.useState(!1);i.useEffect(()=>{r(!1)},[e.imageUrl]);const o=i.useMemo(()=>{if(!e.imageUrl)return;const l=encodeURIComponent(e.updatedAt??""),c=e.imageUrl.includes("?")?"&":"?";return`${e.imageUrl}${c}t=${l}`},[e.imageUrl,e.updatedAt]);return t.jsx("span",{className:`agent-avatar${s?` ${s}`:""}`,style:{width:`${n}px`,height:`${n}px`},"aria-label":`${e.name} avatar`,children:o&&!a?t.jsx("img",{src:o,alt:`${e.name} avatar`,onError:()=>r(!0)}):e.icon?.trim()?t.jsx("span",{className:"agent-avatar-emoji",style:{fontSize:`calc(${n}px * 0.58)`},"aria-hidden":"true",children:e.icon}):t.jsx(es,{size:Math.max(14,Math.round(n*.55)),"aria-hidden":"true"})})}const WO="https://github.com/Runfusion/Fusion/issues/new";function GO(e,n){const s=`[Agent Error] ${n.surface}${n.agentName?` - ${n.agentName}`:""}`,a=["## Agent Error Report","",`- Surface: ${n.surface}`,`- Agent ID: ${n.agentId??"unknown"}`,`- Agent Name: ${n.agentName??"unknown"}`,`- Agent State: ${n.agentState??"unknown"}`,`- Run ID: ${n.runId??"n/a"}`,`- Task ID: ${n.taskId??"n/a"}`,`- Timestamp: ${n.timestamp??new Date().toISOString()}`,"","## Error","```text",e,"```"],r=new URLSearchParams({title:s,body:a.join(`
|
|
694
|
+
`)});return`${WO}?${r.toString()}`}function KO({open:e,onClose:n,errorText:s,issueContext:a}){const[r,o]=i.useState(!1),l=i.useMemo(()=>GO(s,a),[s,a]);return e?t.jsx("div",{className:"modal-overlay open",onClick:c=>c.target===c.currentTarget&&n(),role:"dialog","aria-modal":"true","aria-label":"Agent error details",children:t.jsxs("div",{className:"modal agent-error-modal",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h2",{className:"modal-title",children:[t.jsx(Vs,{size:16}),"Agent Error Details"]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]}),t.jsx("div",{className:"agent-error-modal__content",children:t.jsx("pre",{className:"agent-error-modal__error",children:s})}),t.jsxs("div",{className:"modal-actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>{navigator.clipboard.writeText(s).then(()=>{o(!0),setTimeout(()=>o(!1),1500)})},"aria-label":r?"Copied error to clipboard":"Copy error to clipboard",children:[r?t.jsx(vs,{size:14}):t.jsx(ja,{size:14}),r?"Copied":"Copy"]}),t.jsxs("a",{className:"btn btn-sm btn-warning",href:l,target:"_blank",rel:"noreferrer",onClick:c=>{c.preventDefault(),window.open(l,"_blank","noopener,noreferrer")},children:[t.jsx(Ab,{size:14}),"Report on GitHub"]})]})]})}):null}function JO({errorText:e,issueContext:n,summaryPrefix:s="Error"}){const[a,r]=i.useState(!1);return t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",className:"agent-error-indicator",onClick:()=>r(!0),"aria-label":"Open error details",children:[t.jsx(Vs,{size:14}),t.jsx("span",{className:"agent-error-indicator__label",children:s})]}),t.jsx(KO,{open:a,onClose:()=>r(!1),errorText:e,issueContext:n})]})}const ql=[{value:"triage",label:"Triage",icon:"⊕"},{value:"executor",label:"Executor",icon:"▶"},{value:"reviewer",label:"Reviewer",icon:"⊙"},{value:"merger",label:"Merger",icon:"⊞"},{value:"scheduler",label:"Scheduler",icon:"◷"},{value:"engineer",label:"Engineer",icon:"⎔"},{value:"custom",label:"Custom",icon:"✦"}];function YO({isOpen:e,onClose:n,addToast:s,projectId:a}){const[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState(!1),[h,m]=i.useState(""),[f,p]=i.useState("custom"),[g,w]=i.useState("all"),[v,b]=i.useState(()=>{if(typeof window>"u")return"list";const $=Gn("fn-agent-view",a);return $==="board"||$==="list"?$:"list"});i.useEffect(()=>{const $=Gn("fn-agent-view",a);if($==="board"||$==="list"){b($);return}b("list")},[a]),i.useEffect(()=>{cs("fn-agent-view",v,a)},[a,v]);const[y,N]=i.useState(null),S=i.useRef(null),[C,x]=i.useState(new Set),[k,R]=i.useState(new Map),{confirm:z}=ai(),_=i.useMemo(()=>k.size===0?r:r.map($=>{const j=k.get($.id);return j?{...$,state:j}:$}),[r,k]),A=i.useMemo(()=>g!=="all"?_:[..._].sort(($,j)=>{const q=$.state==="paused"?1:0,le=j.state==="paused"?1:0;return q!==le?q-le:(j.updatedAt??"").localeCompare($.updatedAt??"")}),[_,g]),X=i.useCallback(async()=>{c(!0);try{const j=await Yr(g!=="all"?{state:g}:void 0,a);o(j)}catch($){s(`Failed to load agents: ${Me($)}`,"error")}finally{c(!1)}},[g,s,a]);i.useEffect(()=>{e&&X()},[e,X]),i.useEffect(()=>{if(!e)return;const $=setInterval(()=>{X()},3e4);return()=>{clearInterval($)}},[e,X]);const H=async()=>{if(h.trim())try{await c1({name:h.trim(),role:f},a),s(`Agent "${h}" created`,"success"),m(""),u(!1),X()}catch($){s(`Failed to create agent: ${Me($)}`,"error")}},M=async($,j)=>{if(!C.has($)){x(q=>new Set(q).add($)),R(q=>{const le=new Map(q);return le.set($,j),le});try{await u1($,j,a),s(`Agent state updated to ${j}`,"success"),await X(),R(q=>{const le=new Map(q);return le.delete($),le})}catch(q){R(le=>{const fe=new Map(le);return fe.delete($),fe}),s(`Failed to update state: ${Me(q)}`,"error")}finally{x(q=>{const le=new Set(q);return le.delete($),le})}}},T=async($,j)=>{if(await z({title:"Delete Agent",message:`Delete agent "${j}"? This cannot be undone.`,danger:!0}))try{await m1($,a),s(`Agent "${j}" deleted`,"success"),X()}catch(le){s(`Failed to delete agent: ${Me(le)}`,"error")}},F=async($,j)=>{const q=r.find(le=>le.id===$);if(q){if(q.role===j){N(null);return}try{await d1($,{role:j},a),s(`Agent role updated to ${ql.find(le=>le.value===j)?.label??j}`,"success"),N(null),X()}catch(le){s(`Failed to update role: ${Me(le)}`,"error")}}},W=($,j)=>{$.key==="Escape"&&N(null)},oe=$=>ql.find(j=>j.value===$)?.label??$,D=$=>VO($),E=$=>$.color==="var(--state-active-text)"?"active":$.color==="var(--state-paused-text)"?"paused":$.color==="var(--state-error-text)"?"error":"muted",P=($,j)=>$.state==="error"?{title:void 0,label:"Error"}:{title:j.reason??j.label,label:j.stateDerived?null:j.label};return e?t.jsx("div",{className:"modal-overlay open",onClick:$=>$.target===$.currentTarget&&n(),role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal--wide agent-list-modal",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h2",{className:"modal-title",children:[t.jsx(es,{size:20}),"Agents"]}),t.jsxs("div",{className:"modal-actions",children:[t.jsxs("div",{className:"view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${v==="board"?" active":""}`,onClick:()=>b("board"),title:"Board view","aria-label":"Board view","aria-pressed":v==="board",children:t.jsx(Sa,{size:16})}),t.jsx("button",{className:`view-toggle-btn${v==="list"?" active":""}`,onClick:()=>b("list"),title:"List view","aria-label":"List view","aria-pressed":v==="list",children:t.jsx(xu,{size:16})})]}),t.jsx("button",{className:"btn-icon",onClick:()=>void X(),title:"Refresh",disabled:l,children:t.jsx(bs,{size:16,className:l?"spin":""})}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]})]}),t.jsxs("div",{className:"modal-content agent-modal-content",children:[t.jsxs("div",{className:"agent-controls",children:[t.jsxs("div",{className:"agent-state-filter",children:[t.jsx(Zl,{size:14}),t.jsxs("select",{className:"agent-state-filter-select",value:g,onChange:$=>w($.target.value),"aria-label":"Filter agents by state",children:[t.jsx("option",{value:"all",children:"All States"}),t.jsx("option",{value:"idle",children:"Idle"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"running",children:"Running"}),t.jsx("option",{value:"paused",children:"Paused"}),t.jsx("option",{value:"error",children:"Error"})]})]}),t.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>u(!d),children:[t.jsx(Bn,{size:16}),d?"Cancel":"New Agent"]})]}),d&&t.jsxs("div",{className:"agent-create-form",children:[t.jsx("input",{type:"text",placeholder:"Agent name...",value:h,onChange:$=>m($.target.value),onKeyDown:$=>$.key==="Enter"&&H(),className:"input",autoFocus:!0}),t.jsx("select",{className:"select",value:f,onChange:$=>p($.target.value),children:ql.map($=>t.jsxs("option",{value:$.value,children:[$.icon," ",$.label]},$.value))}),t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:()=>void H(),children:"Create"})]}),t.jsx("div",{className:v==="board"?"agent-board":"agent-list",children:A.length===0?t.jsxs("div",{className:"agent-empty",children:[t.jsx(es,{size:48,opacity:.3}),t.jsx("p",{children:"No agents found"}),t.jsx("p",{className:"text-secondary",children:"Create an agent to get started"})]}):v==="board"?A.map($=>{const j=D($),q=P($,j),le=E(j);return t.jsxs("div",{className:"agent-board-card","data-state":$.state,children:[t.jsxs("div",{className:"agent-board-header",children:[t.jsx("span",{className:"agent-board-icon",children:t.jsx(gc,{agent:$,size:20})}),t.jsx("span",{className:"agent-board-badge","data-state":$.state,children:$.state}),t.jsx("span",{className:"agent-board-health","data-health":le,title:q.title,children:j.icon})]}),t.jsx("div",{className:"agent-board-name",title:$.name,children:$.name}),t.jsx("div",{className:"agent-board-id",children:$.id}),t.jsxs("div",{className:"agent-board-actions",children:[$.state==="idle"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Activate",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:t.jsx(zn,{size:14})})]}),$.state==="active"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:t.jsx(mi,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:t.jsx(Fi,{size:14})})]}),$.state==="paused"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Resume",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:t.jsx(zn,{size:14})})]}),$.state==="running"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:t.jsx(mi,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:t.jsx(Fi,{size:14})})]}),$.state==="error"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Retry",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:t.jsx(Fi,{size:14})})]})]})]},$.id)}):A.map($=>{const j=D($),q=P($,j),le=E(j);return t.jsxs("div",{className:"agent-card","data-state":$.state,children:[t.jsxs("div",{className:"agent-card-header",children:[t.jsxs("div",{className:"agent-info",children:[y===$.id?t.jsx("select",{ref:S,className:"select agent-role-select",value:$.role,onChange:fe=>void F($.id,fe.target.value),onKeyDown:fe=>W(fe,$.id),onBlur:()=>N(null),autoFocus:!0,children:ql.map(fe=>t.jsxs("option",{value:fe.value,children:[fe.icon," ",fe.label]},fe.value))}):t.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:()=>N($.id),title:"Click to change role",role:"button",tabIndex:0,onKeyDown:fe=>{(fe.key==="Enter"||fe.key===" ")&&N($.id)},children:t.jsx(gc,{agent:$,size:20})}),t.jsxs("div",{className:"agent-meta",children:[t.jsx("span",{className:"agent-name",children:$.name}),t.jsx("span",{className:"agent-id text-secondary",children:$.id})]})]}),t.jsxs("div",{className:"agent-badges",children:[t.jsx("span",{className:"badge agent-list-state-badge","data-state":$.state,children:$.state}),t.jsxs("span",{className:"badge agent-list-health-badge","data-health":le,title:q.title,children:[j.icon,q.label?` ${q.label}`:""]}),t.jsx("span",{className:"badge text-secondary",children:oe($.role)})]})]}),t.jsxs("div",{className:"agent-card-body",children:[$.state==="error"&&$.lastError?t.jsx(JO,{errorText:$.lastError,issueContext:{surface:"AgentListModal list",agentId:$.id,agentName:$.name,agentState:$.state,taskId:$.taskId}}):null,$.taskId&&t.jsxs("div",{className:"agent-task",children:[t.jsx("span",{className:"text-secondary",children:"Working on:"}),t.jsx("span",{className:"badge",children:$.taskId})]}),$.lastHeartbeatAt&&t.jsxs("div",{className:"agent-heartbeat",children:[t.jsx("span",{className:"text-secondary",children:"Last heartbeat:"}),t.jsx("span",{children:new Date($.lastHeartbeatAt).toLocaleString()})]})]}),t.jsxs("div",{className:"agent-card-actions",children:[$.state==="idle"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Activate",children:[t.jsx(ds,{size:14})," Start"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:[t.jsx(zn,{size:14})," Delete"]})]}),$.state==="active"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:[t.jsx(mi,{size:14})," Pause"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:[t.jsx(Fi,{size:14})," Stop"]})]}),$.state==="paused"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Resume",children:[t.jsx(ds,{size:14})," Resume"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:[t.jsx(zn,{size:14})," Delete"]})]}),$.state==="running"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:[t.jsx(mi,{size:14})," Pause"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:[t.jsx(Fi,{size:14})," Stop"]})]}),$.state==="error"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Retry",children:[t.jsx(ds,{size:14})," Retry"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:[t.jsx(Fi,{size:14})," Stop"]})]})]})]},$.id)})})]})]})}):null}function QO({authenticated:e,onToggled:n,compact:s=!1}){const[a,r]=i.useState(null),[o,l]=i.useState(null),[c,d]=i.useState(null),u=i.useRef(!0);i.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]);const h=i.useCallback(async()=>{try{const b=await xS();return u.current&&r(b),b}catch(b){return u.current&&d({kind:"error",message:b instanceof Error?b.message:String(b)}),null}},[]);i.useEffect(()=>{h()},[h]);const m=i.useCallback(async()=>{l("testing"),d(null),await h(),u.current&&l(null)},[h]),f=i.useCallback(async b=>{l(b?"enabling":"disabling"),d(null);try{const y=await NS(b);u.current&&d({kind:y.enabled?"enabled":"disabled",restartRequired:y.restartRequired}),n?.(y.enabled),await h()}catch(y){u.current&&d({kind:"error",message:y instanceof Error?y.message:String(y)})}finally{u.current&&l(null)}},[n,h]),p=a?.binary.available??!1,g=a?.enabled??e,w=t.jsxs("span",{className:"onboarding-provider-card__description",children:["Route AI calls through your locally-installed ",t.jsx("code",{children:"claude"})," CLI. Uses your existing Claude subscription / quota instead of an API key."]}),v=t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:12,className:"animate-spin"}),"Testing…"]}):"Test"}),g?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void f(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void f(!0),disabled:o!==null||!p,title:p?void 0:"`claude` binary not detected on PATH — install Claude CLI first.",children:o==="enabling"?"Enabling…":"Enable"})]});return s?t.jsxs("div",{className:`auth-provider-card auth-provider-card--cli${e?" auth-provider-card--authenticated":""}`,"data-testid":"claude-cli-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Kn,{provider:"claude-cli",size:"sm"}),t.jsx("strong",{children:"Anthropic — via Claude CLI"}),t.jsx(XO,{status:a,authenticated:e})]}),t.jsx("div",{className:"auth-provider-cli-actions",children:v})]}),t.jsxs("details",{className:"auth-provider-cli-details",children:[t.jsx("summary",{children:"Details"}),t.jsxs("div",{className:"auth-provider-cli-details-body",children:[w,t.jsx(Lg,{status:a,authenticated:e}),c&&t.jsx(Og,{action:c})]})]})]}):t.jsxs("div",{className:`onboarding-provider-card${e?" onboarding-provider-card--connected":""}`,"data-testid":"claude-cli-provider-card",children:[t.jsx("div",{className:"onboarding-provider-card__icon",children:t.jsx(Kn,{provider:"claude-cli",size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:"Anthropic — via Claude CLI"}),w,t.jsx(Lg,{status:a,authenticated:e})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:v}),c&&t.jsx(Og,{action:c})]})}function XO({status:e,authenticated:n}){const s=e?.enabled??n,a=e?.binary.available??!1;return s?t.jsx("span",{className:"auth-status-badge authenticated",children:"✓ Active"}):!a&&e?t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not installed"}):t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not connected"})}function Lg({status:e,authenticated:n}){if(!e)return t.jsxs("small",{className:"settings-muted",children:[t.jsx(St,{size:10,className:"animate-spin"})," Probing local CLI…"]});const{binary:s,enabled:a,extension:r,ready:o}=e;return s.available?a?r&&r.status!=="ok"?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--warning",children:["⚠ Extension load failed: ",r.reason??r.status]}):o||n?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--connected",children:["✓ Connected",s.version?` — ${s.version}`:""]}):t.jsx("small",{className:"settings-muted",children:"Enabled. Validating…"}):t.jsxs("small",{className:"settings-muted",children:[t.jsx("code",{children:"claude"})," ",s.version?`(${s.version})`:""," detected",s.binaryPath?` at ${s.binaryPath}`:"",". Click Enable to route AI calls through it."]}):t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--error",children:["✗ ",s.reason??"`claude` not found on PATH"]})}function Og({action:e}){if(e.kind==="error")return t.jsx("p",{className:"onboarding-helper-text onboarding-helper-text--error",children:e.message});const n=e.kind==="enabled"?"Enabled":"Disabled";return t.jsxs("p",{className:"onboarding-helper-text",children:[n,"."," ",e.kind==="enabled"?"Claude-CLI-routed models are now visible in the model picker.":"Claude-CLI-routed models are hidden from the model picker."]})}function ZO({authenticated:e,compact:n=!1,onToggled:s}){const[a,r]=i.useState(null),[o,l]=i.useState(null),c=i.useRef(!0);i.useEffect(()=>(c.current=!0,()=>{c.current=!1}),[]);const d=i.useCallback(async()=>{try{const g=await kS();return c.current&&r(g),g}catch{return null}},[]);i.useEffect(()=>{d()},[d]);const u=i.useCallback(async g=>{l(g?"enabling":"disabling");try{const w=await CS(g);s?.(w.enabled),await d()}finally{c.current&&l(null)}},[s,d]),h=a?.enabled??e,m=a?.binary.available??!1,f=t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{l("testing"),d().finally(()=>{c.current&&l(null)})},disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:12,className:"animate-spin"})," Testing…"]}):"Test"}),h?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void u(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void u(!0),disabled:o!==null||!m,children:o==="enabling"?"Enabling…":"Enable"})]}),p=a?a.binary.available?h?`Connected${a.binary.version?` — ${a.binary.version}`:""}`:"Detected. Click Enable to route calls through Cursor CLI.":a.binary.reason??"`cursor-agent` not found on PATH":"Probing local CLI…";return n?t.jsxs("div",{className:`cursor-cli-provider-card auth-provider-card auth-provider-card--cli${e?" auth-provider-card--authenticated":""}`,"data-testid":"cursor-cli-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Kn,{provider:"cursor-cli",size:"sm"}),t.jsx("strong",{children:"Cursor — via Cursor CLI"}),t.jsx("span",{className:`auth-status-badge ${h?"authenticated":"not-authenticated"}`,children:h?"✓ Active":"✗ Not connected"})]}),t.jsx("div",{className:"auth-provider-cli-actions",children:f})]}),t.jsx("small",{className:"settings-muted",children:p})]}):t.jsxs("div",{className:`cursor-cli-provider-card onboarding-provider-card${e?" onboarding-provider-card--connected":""}`,"data-testid":"cursor-cli-provider-card",children:[t.jsx("div",{className:"onboarding-provider-card__icon",children:t.jsx(Kn,{provider:"cursor-cli",size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:"Cursor — via Cursor CLI"}),t.jsx("span",{className:"onboarding-provider-card__description",children:"Route AI calls through your local Cursor agent runtime."}),t.jsx("small",{className:"settings-muted",children:p})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:f})]})}function eF({authenticated:e,onToggled:n,compact:s=!1}){const[a,r]=i.useState(null),[o,l]=i.useState(null),c=i.useRef(!0);i.useEffect(()=>(c.current=!0,()=>{c.current=!1}),[]);const d=i.useCallback(async()=>{const w=await jS();return c.current&&r(w),w},[]);i.useEffect(()=>{d()},[d]);const u=i.useCallback(async w=>{l(w?"enabling":"disabling");try{const v=await ES(w);n?.(v.enabled),await d()}finally{c.current&&l(null)}},[n,d]),h=i.useCallback(async()=>{l("testing");try{await d()}finally{c.current&&l(null)}},[d]),m=a?.enabled??e,f=a?.server.available??!1,p=a?a.server.available?`Server reachable at ${a.server.url}`:`Server unavailable: ${a.server.reason??"not reachable"}`:"Probing llama.cpp server…",g=t.jsxs("div",{className:"auth-provider-cli-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void h(),disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:12,className:"animate-spin"}),"Testing…"]}):"Test"}),m?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void u(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void u(!0),disabled:o!==null||!f,children:o==="enabling"?"Enabling…":"Enable"})]});return s?t.jsxs("div",{className:`auth-provider-card auth-provider-card--cli llama-cpp-provider-card llama-cpp-provider-card--compact${m?" auth-provider-card--authenticated":""}`,"data-testid":"llama-cpp-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Kn,{provider:"llama-cpp",size:"sm"}),t.jsx("strong",{children:"llama.cpp — via HTTP server"})]}),g]}),t.jsx("small",{className:`auth-hint llama-cpp-status${a?.ready?" llama-cpp-status--ok":""}`,children:p})]}):t.jsxs("div",{className:"onboarding-provider-card llama-cpp-provider-card llama-cpp-provider-card--full","data-testid":"llama-cpp-provider-card",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Kn,{provider:"llama-cpp",size:"md"}),t.jsx("strong",{children:"llama.cpp — via HTTP server"})]}),t.jsx("small",{className:`llama-cpp-status${a?.ready?" llama-cpp-status--ok":""}`,children:p}),g]})}function tF(e){const n="([A-Z0-9]{2,}(?:-[A-Z0-9]{2,})+|[A-Z0-9]{6,9})",s=new RegExp(`\\b(?:device\\s+code|your\\s+code|code)\\s*(?:is|:)?\\s*${n}\\b`,"i"),a=new RegExp(`\\b(?:enter|use)\\s+${n}\\b`,"i"),r=/\b([A-Z0-9]{2,}(?:-[A-Z0-9]{2,})+)\b/,o=e.match(s);if(o?.[1])return o[1];const l=e.match(a);if(l?.[1])return l[1];const c=e.match(r);return c?.[1]?c[1]:null}function ou({instructions:e,"data-testid":n}){const[s,a]=i.useState(!1),r=tF(e),o=i.useRef(null),l=i.useCallback(()=>{a(!0),setTimeout(()=>a(!1),2e3)},[]),c=i.useCallback(async()=>{const d=r??e;try{await navigator.clipboard.writeText(d),l()}catch{}},[r,e,l]);return i.useEffect(()=>{const d=o.current===null&&r!==null;if(o.current=r,!d)return;(async()=>{try{await navigator.clipboard.writeText(r),l()}catch{}})()},[r,l]),t.jsx("p",{className:"auth-login-instructions","data-testid":n,children:r?t.jsx(t.Fragment,{children:e.split(r).map((d,u,h)=>t.jsxs("span",{children:[d,u<h.length-1&&t.jsxs("span",{className:"device-code-wrapper",children:[t.jsx("code",{className:"device-code",children:r}),t.jsx("button",{className:"device-code-copy-btn",onClick:c,title:s?"Copied!":"Copy code","aria-label":s?"Copied to clipboard":"Copy device code",type:"button",children:s?t.jsx(vs,{size:12}):t.jsx(ja,{size:12})})]})]},u))}):e})}function nF({value:e,onChange:n,onSubmit:s,prompt:a,placeholder:r,helpText:o,disabled:l=!1,submitLabel:c="Submit code","data-testid":d}){const u=i.useRef(null),h=i.useRef(null),[m,f]=i.useState(!1),p=i.useCallback(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return!1;const v=window.matchMedia("(max-width: 768px)").matches,b=window.matchMedia("(pointer: coarse)").matches;return v||b},[]),g=i.useCallback(()=>typeof window>"u"||typeof window.matchMedia!="function"||window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth",[]),w=i.useCallback(()=>{if(!p())return;const v=h.current??u.current;if(!v||typeof v.scrollIntoView!="function")return;const b=g();requestAnimationFrame(()=>{v.scrollIntoView({block:"center",behavior:b,inline:"nearest"}),window.setTimeout(()=>{v.scrollIntoView({block:"center",behavior:b,inline:"nearest"})},120)})},[g,p]);return i.useEffect(()=>{if(!m||!p())return;w();const v=window.visualViewport;if(!v)return;const b=()=>{document.activeElement===h.current&&w()};return v.addEventListener("resize",b),v.addEventListener("scroll",b),()=>{v.removeEventListener("resize",b),v.removeEventListener("scroll",b)}},[m,w,p]),t.jsxs("div",{ref:u,className:"oauth-manual-code","data-testid":d,children:[t.jsx("p",{className:"oauth-manual-code__prompt",children:a}),t.jsx("textarea",{ref:h,className:"form-input oauth-manual-code__input",value:e,onChange:v=>n(v.target.value),onFocus:()=>{f(!0),w()},onBlur:()=>f(!1),placeholder:r,rows:3,spellCheck:!1,disabled:l}),t.jsx("div",{className:"oauth-manual-code__actions",children:t.jsx("button",{type:"button",className:"btn btn-sm",onClick:s,disabled:l,children:c})}),o&&t.jsx("p",{className:"oauth-manual-code__help",children:o})]})}const sF=new Set(["anthropic","claude-cli","pi-claude-cli","openai","openai-codex","google","gemini","google-antigravity","antigravity","google-vertex","vertex","google-cloud-code","cloud-code","google-gemini-cli","google-generative-ai","ollama","github","github-copilot","openrouter","minimax","minimax-cn","zai","kimi","moonshot","kimi-coding","bedrock","amazon-bedrock","xai","grok","opencode","opencode-go","qwen","qwen-ai","qwen-coder","alibaba","tongyi","lmstudio","lm-studio","huggingface","hugging-face","hf","mistral","mistral-ai","azure","azure-openai","azure-openai-responses","fireworks","fireworks-ai","fireworksai","cerebras","groq","vercel","vercel-ai-gateway","hermes","hermes-agent","hermesagent","openclaw","open-claw","paperclip","paperclipai","paperclip-ai"]),iF=/^[a-z][a-z0-9-]*$/,Fg=["openai-completions","openai-responses","anthropic-messages","google-generative-ai"];function zg(){return{id:"",name:"",reasoning:!1}}function aF({initialConfig:e,onSave:n,onCancel:s,saving:a=!1,error:r}){const o=!!e,[l,c]=i.useState(e?.id??""),[d,u]=i.useState(e?.name??""),[h,m]=i.useState(e?.baseUrl??""),[f,p]=i.useState(e?.api??"openai-completions"),[g,w]=i.useState(e?.apiKey??""),[v,b]=i.useState(e?.models?.length?e.models:[zg()]),[y,N]=i.useState(null),[S,C]=i.useState(!1),[x,k]=i.useState(null),R=v.length>1,z=i.useMemo(()=>y??r??null,[y,r]);function _(F,W){b(oe=>oe.map((D,E)=>E===F?{...D,...W}:D))}function A(F){b(W=>W.length<=1?W:W.filter((oe,D)=>D!==F))}const X=f==="anthropic-messages"?"anthropic-compatible":f==="google-generative-ai"?"google-generative-ai":"openai-compatible",H=i.useCallback(async()=>{const F=h.trim();if(!F){k("Base URL is required to detect models.");return}C(!0),k(null);try{const W=await RS({baseUrl:F,apiKey:g.trim()||void 0,apiType:X});if(W.models.length===0){k("No models found. The provider may require an API key.");return}const oe=new Set(v.map(E=>E.id.trim())),D=W.models.filter(E=>!oe.has(E.id.trim())).map(E=>({id:E.id,name:E.name||E.id,reasoning:!!E.reasoning,contextWindow:E.contextWindow,maxTokens:E.maxTokens}));D.length>0?b(E=>[...E.filter($=>$.id.trim().length>0),...D]):k("All discovered models are already in the list.")}catch(W){k(W instanceof Error?W.message:"Failed to detect models")}finally{C(!1)}},[h,g,X,v]);function M(){if(!l.trim())return"Provider ID is required.";if(!iF.test(l.trim()))return"Provider ID must be kebab-case.";if(!o&&sF.has(l.trim()))return"Provider ID conflicts with a built-in provider.";if(!h.trim())return"Base URL is required.";try{const F=new URL(h.trim());if(F.protocol!=="http:"&&F.protocol!=="https:")return"Base URL must use http or https."}catch{return"Base URL must be a valid URL."}return Fg.includes(f)?v.length===0?"At least one model is required.":v.some(F=>!F.id?.trim())?"Each model must have a model ID.":null:"API type is required."}async function T(F){F.preventDefault();const W=M();N(W),!W&&await n({id:l.trim(),name:d.trim()||void 0,baseUrl:h.trim(),api:f,apiKey:g.trim()||void 0,models:v.map(oe=>({id:oe.id.trim(),name:oe.name?.trim()||void 0,reasoning:!!oe.reasoning,contextWindow:oe.contextWindow,maxTokens:oe.maxTokens}))})}return t.jsxs("form",{onSubmit:T,className:"custom-provider-form","aria-label":"custom-provider-form",children:[t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-id",children:"Provider ID"}),t.jsx("input",{id:"custom-provider-id",className:"input",value:l,onChange:F=>c(F.target.value),disabled:o||a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-name",children:"Display Name"}),t.jsx("input",{id:"custom-provider-name",className:"input",value:d,onChange:F=>u(F.target.value),disabled:a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-base-url",children:"Base URL"}),t.jsx("input",{id:"custom-provider-base-url",className:"input",value:h,onChange:F=>m(F.target.value),disabled:a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-api",children:"API Type"}),t.jsx("select",{id:"custom-provider-api",className:"select",value:f,onChange:F=>p(F.target.value),disabled:a,children:Fg.map(F=>t.jsx("option",{value:F,children:F},F))})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-api-key",children:"API Key"}),t.jsx("input",{id:"custom-provider-api-key",className:"input",placeholder:"sk-..., MY_API_KEY, or !command",value:g,onChange:F=>w(F.target.value),disabled:a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{children:"Models"}),t.jsx("div",{className:"custom-provider-form__models",children:v.map((F,W)=>t.jsxs("div",{className:"custom-provider-form__model-row",children:[t.jsx("input",{className:"input","aria-label":`Model ID ${W+1}`,placeholder:"Model ID",value:F.id,onChange:oe=>_(W,{id:oe.target.value}),disabled:a}),t.jsx("input",{className:"input","aria-label":`Model name ${W+1}`,placeholder:"Display name",value:F.name??"",onChange:oe=>_(W,{name:oe.target.value}),disabled:a}),t.jsxs("label",{className:"checkbox-label custom-provider-form__toggle",children:[t.jsx("input",{type:"checkbox",checked:!!F.reasoning,onChange:oe=>_(W,{reasoning:oe.target.checked}),disabled:a}),"Reasoning"]}),t.jsx("input",{className:"input","aria-label":`Context window ${W+1}`,placeholder:"Context window",type:"number",value:F.contextWindow??"",onChange:oe=>_(W,{contextWindow:oe.target.value?Number(oe.target.value):void 0}),disabled:a}),t.jsx("input",{className:"input","aria-label":`Max tokens ${W+1}`,placeholder:"Max tokens",type:"number",value:F.maxTokens??"",onChange:oe=>_(W,{maxTokens:oe.target.value?Number(oe.target.value):void 0}),disabled:a}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>A(W),disabled:a||!R,"aria-label":`Remove model ${W+1}`,children:"×"})]},`${W}-model`))}),t.jsxs("div",{className:"custom-provider-form__model-actions",style:{display:"flex",gap:"8px",alignItems:"center"},children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>b(F=>[...F,zg()]),disabled:a,children:"+ Add model"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void H(),disabled:a||S||!h.trim(),title:"Call the provider's /models endpoint to discover available models",children:S?t.jsxs(t.Fragment,{children:[t.jsx(St,{className:"spin",size:14})," Detecting…"]}):t.jsxs(t.Fragment,{children:[t.jsx(zi,{size:14})," Detect Models"]})})]}),x?t.jsx("div",{className:"form-error",style:{marginTop:"4px"},children:x}):null]}),z?t.jsx("div",{className:"form-error",children:z}):null,t.jsxs("div",{className:"custom-provider-form__actions",children:[s?t.jsx("button",{type:"button",className:"btn",onClick:s,disabled:a,children:"Cancel"}):null,t.jsx("button",{type:"submit",className:"btn btn-primary",disabled:a,children:a?"Saving...":"Save Provider"})]})]})}const rF=new Set(["google-antigravity","antigravity","google-gemini-cli"]);function oF(e){return!rF.has(e)}function Bg(e){return e.filter(n=>oF(n.id))}const ky={host:"web",activeProfileId:null,profiles:[]},jy=i.createContext({shellApi:null,state:ky,ready:!0,openConnectionManagerSignal:0});function lF({children:e}){const n=i.useMemo(()=>typeof window<"u"?window.fusionShell??null:null,[]),[s,a]=i.useState(ky),[r,o]=i.useState(!n),[l,c]=i.useState(0);return i.useEffect(()=>{if(!n)return;let d=!1;n.getState().then(m=>{d||(a(m),o(!0))});const u=n.subscribe(m=>{a(m)}),h=()=>{c(m=>m+1)};return window.addEventListener("shell:open-connection-manager",h),()=>{d=!0,u(),window.removeEventListener("shell:open-connection-manager",h)}},[n]),t.jsx(jy.Provider,{value:{shellApi:n,state:s,ready:r,openConnectionManagerSignal:l},children:e})}function cF(){return i.useContext(jy)}const dF={host:"web",activeProfileId:null,profiles:[]};function uF(e){if(!e)return dF;const n=Array.isArray(e.profiles)?e.profiles.filter(a=>!!(a&&a.id&&a.serverUrl)):[],s=e.activeProfileId&&n.some(a=>a.id===e.activeProfileId)?e.activeProfileId:null;return{...e,activeProfileId:s,profiles:n}}function Bm(e){return new Error(`${e} is only available in native shell mode`)}async function mF(e,n){if(!e)throw Bm("Saving connection profiles");return e.saveProfile(n)}async function hF(e,n){if(!e)throw Bm("Deleting connection profiles");await e.deleteProfile(n)}async function pF(e,n){if(!e)throw Bm("Switching connection profiles");return e.setActiveProfile(n)}function Ny(){const e=cF(),n=i.useMemo(()=>uF(e.state),[e.state]),s=i.useCallback(o=>mF(e.shellApi,o),[e.shellApi]),a=i.useCallback(o=>hF(e.shellApi,o),[e.shellApi]),r=i.useCallback(o=>pF(e.shellApi,o),[e.shellApi]);return{...e,state:n,saveProfile:s,removeProfile:a,setActiveProfile:r}}const er="fusion_model_onboarding_state",Br=[],Ur=[],bc=!1,xc=!1,Hr={},fF=void 0,ba=["ai-setup","github","project-setup","first-task"],gF={"ai-setup":"AI Setup",github:"GitHub","project-setup":"Project","first-task":"First Task",complete:"Complete"};function si(){if(typeof window>"u")return null;try{const e=localStorage.getItem(er);if(!e)return null;const n=JSON.parse(e);return n&&typeof n=="object"&&"currentStep"in n&&typeof n.currentStep=="string"?bF(n):null}catch{return null}}function bF(e){const n=e.postOnboardingDismissedAt??fF;return{...e,completedSteps:e.completedSteps??Br,skippedSteps:e.skippedSteps??Ur,dismissed:e.dismissed??bc,completed:e.completed??xc,stepData:e.stepData??Hr,...n?{postOnboardingDismissedAt:n}:{}}}function Vl(e,n){if(!(typeof window>"u")){if(!n){const s={currentStep:e,updatedAt:new Date().toISOString(),completedSteps:Br,skippedSteps:Ur,dismissed:bc,completed:xc,stepData:Hr};try{localStorage.setItem(er,JSON.stringify(s))}catch{}return}try{const s=si(),a=new Date().toISOString(),r=n.completed??xc;let o=n.dismissed??bc;r&&(o=!1);const l=n.completedSteps??s?.completedSteps??Br,c=n.skippedSteps??s?.skippedSteps??Ur,d={...s?.stepData??Hr};if(n.stepData)for(const[h,m]of Object.entries(n.stepData))m!==void 0&&(d[h]={...d[h]??{},...m});const u={currentStep:e,updatedAt:a,completedSteps:l,skippedSteps:c,dismissed:o,completed:r,stepData:d};localStorage.setItem(er,JSON.stringify(u))}catch{}}}function xF(e){if(!(typeof window>"u"))try{const n=si(),s=new Date().toISOString();if(!n){const o={currentStep:e,updatedAt:s,completedSteps:Br,skippedSteps:[e],dismissed:bc,completed:xc,stepData:Hr};localStorage.setItem(er,JSON.stringify(o));return}const a=n.skippedSteps.includes(e)?n.skippedSteps:[...n.skippedSteps,e],r={...n,skippedSteps:a,completedSteps:n.completedSteps.filter(o=>o!==e),updatedAt:s};localStorage.setItem(er,JSON.stringify(r))}catch{}}function Ug(){if(!(typeof window>"u"))try{const e=si(),n=new Date().toISOString(),s=e?{...e,completedAt:n,completed:!0,dismissed:!1,updatedAt:n}:{currentStep:"complete",updatedAt:n,completedAt:n,completedSteps:Br,skippedSteps:Ur,dismissed:!1,completed:!0,stepData:Hr};localStorage.setItem(er,JSON.stringify(s))}catch{}}function qr(){const e=si();return e?e.completed===!0?!0:typeof e.completedAt=="string"&&e.completedAt.length>0:!1}function vF(){if(!(typeof window>"u"))try{const e=si(),n=new Date().toISOString(),s=e?{...e,updatedAt:n,postOnboardingDismissedAt:n}:{currentStep:"complete",updatedAt:n,completedSteps:Br,skippedSteps:Ur,dismissed:!1,completed:!1,stepData:Hr,postOnboardingDismissedAt:n};localStorage.setItem(er,JSON.stringify(s))}catch{}}function Sy(){const e=si();return e?typeof e.postOnboardingDismissedAt=="string"&&e.postOnboardingDismissedAt.length>0:!1}function yF(){const e=si();return!e||qr()?!1:e.currentStep!=="complete"}function wF(){const e=si();if(!e||qr()||e.currentStep==="complete")return null;const n=e.currentStep,s=gF[n]??NF(e.currentStep);return{currentStep:e.currentStep,label:s,completedSteps:e.completedSteps}}function kF(){const e=si();return e?e.skippedSteps:Ur}function jF(e){const n=si();return!n||!n.stepData?null:n.stepData[e]??null}function NF(e){return e.replace(/[-_]/g," ").replace(/\b\w/g,n=>n.toUpperCase())}const Cy="fusion_onboarding_events",Hg="fusion_onboarding_session_id",SF=200,CF=50;function ci(e,n={}){if(!(typeof window>"u"))try{const s=_F(),a=RF(n.step),r={type:e,timestamp:new Date().toISOString(),...a?{step:a}:{},metadata:n,sessionId:EF()},o=AF([...s,r]);MF(o)}catch{}}function EF(){if(typeof window>"u")return"server-session";try{const e=sessionStorage.getItem(Hg);if(e)return e;const n=qg();return sessionStorage.setItem(Hg,n),n}catch{return qg()}}function qg(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`onboarding-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function _F(){try{const e=localStorage.getItem(Cy);if(!e)return[];const n=JSON.parse(e);return Array.isArray(n)?n.filter(IF):[]}catch{return[]}}function MF(e){try{localStorage.setItem(Cy,JSON.stringify(e))}catch{}}function AF(e){const n=[...e];for(;n.length>SF;)n.splice(0,CF);return n}function RF(e){if(e==="ai-setup"||e==="github"||e==="first-task"||e==="complete")return e}function IF(e){if(!e||typeof e!="object")return!1;const n=e;return typeof n.type=="string"&&typeof n.timestamp=="string"&&typeof n.sessionId=="string"&&!!n.metadata&&typeof n.metadata=="object"}const TF=e=>({id:e.id,name:e.name,baseUrl:e.baseUrl,api:"api"in e?e.api:e.apiType==="anthropic-compatible"?"anthropic-messages":"openai-responses",apiKey:e.apiKey,models:e.models?.map(n=>({id:n.id,name:n.name}))??[]}),PF={anthropic:{description:"Claude models — strong at reasoning, analysis, and code"},openai:{description:"GPT models — versatile for a wide range of tasks",apiKeyInfo:{fieldLabel:"OpenAI API Key",setupInstructions:"Create an API key from your OpenAI dashboard under API keys.",dashboardUrl:"https://platform.openai.com/api-keys",inputPlaceholder:"sk-...",usageDescription:"Used for GPT models in task execution and planning"}},"openai-codex":{description:"Codex models by OpenAI — optimized for coding tasks"},google:{description:"Gemini models — multimodal with strong reasoning"},gemini:{description:"Gemini models — multimodal with strong reasoning"},ollama:{description:"Run open-source models locally on your machine",apiKeyInfo:{fieldLabel:"Ollama Endpoint",setupInstructions:"Enter your Ollama endpoint URL (for example http://localhost:11434).",inputPlaceholder:"http://localhost:11434",usageDescription:"Connects to your local Ollama instance"}},minimax:{description:"MiniMax models — cost-effective for high-volume usage",apiKeyInfo:{fieldLabel:"MiniMax API Key",setupInstructions:"Generate an API key from the MiniMax platform developer console.",dashboardUrl:"https://platform.minimaxi.com/",inputPlaceholder:"Enter your MiniMax API key",usageDescription:"Used for MiniMax models in task execution"}},zai:{description:"GLM models by Zhipu AI — strong multilingual support",apiKeyInfo:{fieldLabel:"Zhipu AI API Key",setupInstructions:"Create an API key in the Zhipu AI open platform account settings.",dashboardUrl:"https://open.bigmodel.cn/",inputPlaceholder:"Enter your Zhipu AI API key",usageDescription:"Used for GLM models in task execution"}},kimi:{description:"Kimi by Moonshot AI — long-context capabilities"},moonshot:{description:"Kimi by Moonshot AI — long-context capabilities"},"kimi-coding":{description:"Kimi by Moonshot AI — long-context capabilities",apiKeyInfo:{fieldLabel:"Kimi API Key",setupInstructions:"Create your API key in the Moonshot platform account settings.",dashboardUrl:"https://platform.moonshot.cn/",inputPlaceholder:"Enter your Kimi API key",usageDescription:"Used for Kimi/Moonshot AI models in task execution and planning"}},openrouter:{description:"OpenRouter — route requests across multiple AI providers",apiKeyInfo:{fieldLabel:"OpenRouter API Key",setupInstructions:"Create an API key from your OpenRouter account key management page.",dashboardUrl:"https://openrouter.ai/keys",inputPlaceholder:"sk-or-v1-...",usageDescription:"Routes to multiple AI model providers through a single key"}}},Ey={anthropic:{pattern:/^sk-ant-/,hint:"Starts with sk-ant-",example:"sk-ant-api03-..."},openai:{pattern:/^sk-/,hint:"Starts with sk-",example:"sk-..."},"openai-codex":{pattern:/^sk-/,hint:"Starts with sk-",example:"sk-..."},openrouter:{pattern:/^sk-or-/,hint:"Starts with sk-or-",example:"sk-or-v1-..."},google:{pattern:/^AIza/,hint:"Starts with AIza",example:"AIza..."},gemini:{pattern:/^AIza/,hint:"Starts with AIza",example:"AIza..."},minimax:{pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},ollama:{pattern:/^.+$/,hint:"Any non-empty value",example:"ollama"},zai:{pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},kimi:{pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},"kimi-coding":{pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},moonshot:{pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."}},$F={pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},Vg={anthropic:"Anthropic",openai:"OpenAI","openai-codex":"OpenAI Codex",openrouter:"OpenRouter",google:"Google",gemini:"Gemini",minimax:"MiniMax",ollama:"Ollama",zai:"Zhipu AI",kimi:"Kimi","kimi-coding":"Kimi Coding",moonshot:"Moonshot"},DF=e=>`After you sign in with ${e}, the browser will try to redirect to a localhost address that this dashboard can't reach. The redirect tab will look like it failed. Before that happens, copy the full URL from the browser address bar — you'll paste it back here to finish login. Continue?`;function Wu(e){if(Vg[e])return Vg[e];const n=e.trim();return n?n.split(/[-_\s]+/).filter(Boolean).map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(" "):"This provider"}const lu=["anthropic","openai","google","gemini","ollama"],LF=["anthropic","claude-cli","droid-cli","cursor-cli","llama-cpp","openai-codex","gemini","minimax","kimi","zai"],OF={anthropic:"anthropic","claude-cli":"claude-cli","droid-cli":"droid-cli","llama-cpp":"llama-cpp","openai-codex":"openai-codex",google:"gemini",gemini:"gemini",minimax:"minimax",kimi:"kimi",moonshot:"kimi","kimi-coding":"kimi",zai:"zai"},FF={gemini:["google","gemini"],kimi:["kimi","moonshot","kimi-coding"]};function Gu(e){return OF[e]??e}function Wg(e){const n=Gu(e),s=LF.indexOf(n);return s===-1?Number.POSITIVE_INFINITY:s}function Gg(e,n){if(e.authenticated!==n.authenticated)return e.authenticated?-1:1;const s=Wg(e.id),a=Wg(n.id);if(s!==a)return s-a;const r=Gu(e.id),o=Gu(n.id);if(r!==o)return r.localeCompare(o);const l=FF[r];if(l){const d=l.indexOf(e.id),u=l.indexOf(n.id);if(d!==u)return(d===-1?Number.POSITIVE_INFINITY:d)-(u===-1?Number.POSITIVE_INFINITY:u)}const c=e.name.localeCompare(n.name);return c!==0?c:e.id.localeCompare(n.id)}function zF(e,n){const s=n.trim();if(!s)return"API key is required";const a=Ey[e]??$F;return a.pattern.test(s)?null:`${Wu(e)} keys should follow this format: ${a.hint} (e.g. ${a.example})`}const _y={fieldLabel:"API Key",setupInstructions:"Enter your API key for this provider.",inputPlaceholder:"Enter API key",usageDescription:"Used by Fusion to authenticate requests to this provider"},BF={description:"AI provider — connect to start using AI models",apiKeyInfo:_y};function Ku(e){return PF[e]??BF}function UF(e){return Ku(e.id).apiKeyInfo??_y}function HF({items:e}){return e.some(s=>s.status!=="connected")?t.jsxs("div",{className:"onboarding-readiness-summary","data-testid":"readiness-summary",role:"status",children:[t.jsx("p",{className:"onboarding-readiness-header",children:"Setup Summary"}),e.map(s=>{const a=s.status==="connected"?"✓":s.status==="missing"?"⚠":"○";return t.jsxs("div",{className:`onboarding-readiness-item onboarding-readiness-item--${s.status}`,"data-status":s.status,children:[t.jsx("span",{className:"onboarding-readiness-icon","aria-hidden":"true",children:a}),t.jsxs("span",{className:"onboarding-readiness-content",children:[t.jsx("span",{className:"onboarding-readiness-label",children:s.label}),s.detail&&t.jsx("span",{className:"onboarding-readiness-detail",children:s.detail})]})]},s.label)})]}):t.jsx("div",{className:"onboarding-readiness-summary","data-testid":"readiness-summary",role:"status",children:t.jsx("p",{className:"onboarding-readiness-all-connected",children:"✓ All integrations connected"})})}function qF({provider:e,apiKeyInfo:n,inputValue:s,isSaving:a,error:r,success:o,isConnected:l,onInputChange:c,onSave:d,onClear:u}){const h=`onboarding-apikey-input-${e.id}`,m=a||!s.trim(),f=Ey[e.id],p=`input onboarding-apikey-input${r?" onboarding-apikey-input--error":""}${o?" onboarding-apikey-input--success":""}`,g=t.jsxs(t.Fragment,{children:[f&&t.jsxs("small",{className:"onboarding-apikey-hint",children:["Format: ",f.hint]}),t.jsx("p",{className:"onboarding-apikey-instructions",children:n.setupInstructions}),n.dashboardUrl&&t.jsx("a",{href:n.dashboardUrl,target:"_blank",rel:"noreferrer",className:"onboarding-apikey-dashboard-link",children:"Get your API key →"}),t.jsx("p",{className:"onboarding-apikey-usage",children:n.usageDescription})]});return l?t.jsxs("div",{className:"onboarding-apikey-form","data-testid":`onboarding-apikey-form-${e.id}`,children:[t.jsxs("div",{className:"onboarding-apikey-connected-header",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:n.fieldLabel}),t.jsx("span",{className:"auth-status-badge connected",children:"✓ API key saved"})]}),t.jsx("button",{className:"btn btn-sm",onClick:()=>u(e.id),disabled:a,children:a?"Removing…":"Remove Key"}),t.jsx(di,{summary:"Advanced setup details",children:g}),r&&t.jsx("small",{className:"field-error",children:r})]}):t.jsxs("div",{className:"onboarding-apikey-form","data-testid":`onboarding-apikey-form-${e.id}`,children:[t.jsx("label",{htmlFor:h,className:"onboarding-apikey-field-label",children:n.fieldLabel}),t.jsxs("div",{className:"onboarding-apikey-input-row",children:[t.jsx("input",{id:h,type:"password",className:p,placeholder:n.inputPlaceholder??"Enter API key",value:s,onChange:w=>c(e.id,w.target.value),onKeyDown:w=>{w.key==="Enter"&&d(e.id,s)},"data-testid":h}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>d(e.id,s),disabled:m,"data-testid":`onboarding-apikey-save-${e.id}`,children:a?"Saving…":"Save"})]}),r&&t.jsx("small",{className:"field-error",children:r}),o&&!r&&t.jsx("small",{className:"onboarding-apikey-success","data-testid":`onboarding-apikey-success-${e.id}`,children:o}),t.jsx(di,{summary:"Advanced setup details",children:g})]})}const VF=150;function WF({onComplete:e,addToast:n,projectId:s,onOpenSetupWizard:a,onOpenNewTask:r,onOpenGitHubImport:o,firstCreatedTask:l,onViewTask:c}){const{confirm:d}=ai(),u=si(),h=u?.currentStep,m=h==="complete"?"ai-setup":ba.includes(h)?h:"ai-setup",f=u?.completedSteps??[],p=u?.skippedSteps??kF(),[g,w]=i.useState(!0),[v,b]=i.useState(m),[y,N]=i.useState(f),[S,C]=i.useState(p),[x,k]=i.useState(!1),[R,z]=i.useState(""),[_,A]=i.useState(!1),[X,H]=i.useState(null),[M,T]=i.useState(null),[F,W]=i.useState([]),[oe,D]=i.useState(void 0),[E,P]=i.useState(!0),[$,j]=i.useState(null),[q,le]=i.useState({}),[fe,Ce]=i.useState({}),[Ae,re]=i.useState({}),[Z,pe]=i.useState({}),[ie,ve]=i.useState(null),[ne,L]=i.useState([]),[Y,ue]=i.useState(""),[B,xe]=i.useState(!1),[je,se]=i.useState({}),[Ue,De]=i.useState({}),[dt,Pe]=i.useState({}),[ce,Ee]=i.useState([]),[Oe,ht]=i.useState(!1),[Ve,ge]=i.useState(!1),[me,$e]=i.useState(),[mt,jt]=i.useState("Remote Server"),[tt,bt]=i.useState(""),[Ie,Xe]=i.useState(""),[rt,It]=i.useState(!1),[_t,We]=i.useState(null),J=i.useRef({}),ke=i.useRef(null),ot=i.useRef(null),ye=i.useRef(null),[it,He]=i.useState({}),[he,et]=i.useState(()=>si()?.stepData?.github?.skipped===!0),vt=i.useRef(0),Ct=i.useRef(l),{shellApi:Et,state:Tt}=Ny(),Jt=i.useRef(!1),cn=u?.currentStep,Vt=!!u&&u.currentStep!=="complete";qi(ot,g,"fusion:model-onboarding-modal-size"),i.useEffect(()=>{const O=ke.current;O&&(O.scrollTop=0)},[v]);const[hn,dn]=i.useState(()=>si()?.stepData?.["ai-setup"]?.skippedProviders??{}),An=[{key:"ai-setup",label:"AI Setup"},{key:"github",label:"GitHub"},{key:"project-setup",label:"Project"},{key:"first-task",label:"First Task"}],nn=An.findIndex(O=>O.key===v),Dn=v==="complete"?An.length:nn;i.useEffect(()=>{v!=="complete"&&Vl(v,{completedSteps:y,skippedSteps:S})},[v,y,S]),i.useEffect(()=>{Jt.current||(Jt.current=!0,ci("onboarding:wizard-opened",{source:Vt?"resume":"initial",resumedFromStep:cn}))},[Vt,cn]),i.useEffect(()=>{const O=Ct.current!=null,qe=l!=null;!O&&qe&&k(!0),qe||k(!1),Ct.current=l},[l]);const Nn=i.useRef(m);i.useEffect(()=>{if(Nn.current==="ai-setup"&&v!=="ai-setup"&&!F.some(qe=>qe.id!=="github"&&qe.authenticated)){const qe={};for(const Ze of F)Ze.id!=="github"&&!Ze.authenticated&&!hn[Ze.id]&&(qe[Ze.id]=!0);if(Object.keys(qe).length>0){const Ze={...hn,...qe};dn(Ze),Vl(v,{stepData:{"ai-setup":{skippedProviders:Ze}}})}}Nn.current=v},[v,F,hn]);const zt=i.useCallback(async()=>{try{const{providers:O,ghCli:qe}=await qo(),Ze=Bg(O);W(Ze),D(qe),le(Je=>{const pt={};for(const[At,Lt]of Object.entries(Je)){const ln=Ze.find(kn=>kn.id===At);ln&&!ln.authenticated&&ln.loginInProgress&&(pt[At]=Lt)}return Object.keys(pt).length===Object.keys(Je).length?Je:pt}),He(Je=>{let pt=!1;const At={...Je};for(const[Lt,ln]of Object.entries(Je)){if(ln!=="pending")continue;Ze.find(te=>te.id===Lt)?.loginInProgress||(delete At[Lt],pt=!0)}return pt?At:Je}),dn(Je=>{const pt={...Je};for(const At of Ze)At.authenticated&&pt[At.id]&&delete pt[At.id];return Object.keys(pt).length===Object.keys(Je).length?Je:pt})}catch{}},[]),sn=i.useCallback(async()=>{try{const O=await _S();Ee((O.providers??[]).map(TF))}catch{}},[]),xn=i.useCallback(async O=>{ge(!0),$e(void 0);try{await AS(O),await sn(),await Ws().then(qe=>L(qe.models??[])),ht(!1)}catch(qe){$e(Me(qe)||"Failed to create custom provider")}finally{ge(!1)}},[sn]),Xt=i.useRef(!1);i.useEffect(()=>{v==="ai-setup"&&sn(),Xt.current&&zt(),Xt.current=v!=="ai-setup"},[v,zt,sn]),i.useEffect(()=>{if(!F.some(Ze=>Ze.loginInProgress))return;const qe=setInterval(()=>{zt()},2e3);return()=>clearInterval(qe)},[F,zt]);const Yt=F.find(O=>O.id==="github"),rn=!!Yt,Zt=Yt?.authenticated??!1,en=Yt?.loginInProgress??!1,un=oe?.authenticated??!1,Qt=Zt||un,pn=!Zt&&un,Dt=i.useCallback(O=>{if(O.authenticated)return"connected";const qe=it?.[O.id];return qe==="timeout"||qe==="failed"?"retry":hn[O.id]?"skipped":"not-connected"},[it,hn]);function Bt({status:O}){const qe={connected:{text:"✓ Connected",className:"auth-status-badge connected"},"not-connected":{text:"Not connected",className:"auth-status-badge not-connected"},skipped:{text:"Skipped",className:"auth-status-badge skipped"},retry:{text:"Retry",className:"auth-status-badge retry"}},{text:Ze,className:Je}=qe[O];return t.jsx("span",{"data-testid":"provider-status-badge",className:Je,"data-status":O,children:Ze})}const be=i.useCallback(()=>{if(Qt)return"connected";const O=it.github;return O==="pending"?"pending":O==="failed"||O==="timeout"?"failed":he?"skipped":"not-connected"},[Qt,it,he]);function Re({status:O}){const qe={connected:{text:"✓ Connected",className:"auth-status-badge connected"},pending:{text:"⏳ Connecting…",className:"auth-status-badge pending"},failed:{text:"✗ Connection failed",className:"auth-status-badge retry"},skipped:{text:"Skipped",className:"auth-status-badge skipped"},"not-connected":{text:"Not connected",className:"auth-status-badge not-connected"}},{text:Ze,className:Je}=qe[O];return t.jsx("span",{"data-testid":"github-status-badge",className:Je,"data-status":O,children:Ze})}const nt=i.useCallback(async()=>{try{const O=await Ws();L(O.models)}catch{}},[]),ut=i.useCallback(async()=>{try{const O=await aa();if(O.defaultProvider&&O.defaultModelId){const qe=`${O.defaultProvider}/${O.defaultModelId}`;ue(qe)}}catch{}},[]);i.useEffect(()=>{Promise.all([zt(),nt(),ut()]).finally(()=>P(!1))},[zt,nt,ut]),i.useEffect(()=>{const O=jF("ai-setup");if(O?.loginOutcomes){const qe=O.loginOutcomes,Ze={};for(const[Je,pt]of Object.entries(qe))pt!=="pending"&&(Ze[Je]=pt);Object.keys(Ze).length>0&&He(Ze)}},[]);const Ye=i.useCallback((O,qe)=>{Vl(v,{completedSteps:y,stepData:{"ai-setup":{loginOutcomes:{[O]:qe}}}})},[v,y]);i.useEffect(()=>{const O=Object.entries(it).filter(([qe,Ze])=>Ze!=="pending");for(const[qe,Ze]of O)Ye(qe,Ze)},[it,Ye]),i.useEffect(()=>()=>{ye.current&&clearInterval(ye.current),Object.values(J.current).forEach(clearTimeout),J.current={}},[]);const lt=i.useCallback(O=>{et(O),Vl(v,{completedSteps:y,stepData:{github:{skipped:O}}})},[v,y]),wt=i.useCallback(O=>O==="complete"?-1:ba.indexOf(O),[]),Q=i.useCallback(()=>{N(qe=>[...new Set([...qe,v])]),C(qe=>qe.filter(Ze=>Ze!==v)),ci("onboarding:step-completed",{step:v}),v==="github"&&!Zt&<(!1);const O=wt(v);O>=0&&O<ba.length-1&&b(ba[O+1])},[v,Zt,lt,wt]),ae=i.useCallback(()=>{C(qe=>[...new Set([...qe,v])]),xF(v),ci("onboarding:step-skipped",{step:v}),v==="github"&&!Zt&<(!0);const O=wt(v);O>=0&&O<ba.length-1&&b(ba[O+1])},[v,Zt,lt,wt]),Ke=i.useCallback(()=>{const O=v;N(Ze=>Ze.filter(Je=>Je!==O)),C(Ze=>Ze.filter(Je=>Je!==O)),O==="github"&&!Zt&<(!1);const qe=wt(v);qe>0&&b(ba[qe-1])},[v,Zt,lt,wt]),gt=i.useCallback(()=>{ae()},[ae]),Wt=i.useCallback(async O=>{const qe=F.find(Je=>Je.id===O);if(qe?.requiresManualCode===!0&&!await d({title:"Heads up — manual paste-back required",message:DF(qe.name),confirmLabel:"Continue to login",cancelLabel:"Cancel"}))return;He(Je=>{const pt=Je[O];if(pt&&pt!=="pending"){const{[O]:At,...Lt}=Je;return Lt}return Je});const Ze=()=>{le(Je=>{if(!(O in Je))return Je;const pt={...Je};return delete pt[O],pt}),Ce(Je=>{if(!(O in Je))return Je;const pt={...Je};return delete pt[O],pt}),pe(Je=>{if(!(O in Je))return Je;const pt={...Je};return delete pt[O],pt}),re(Je=>{if(!(O in Je))return Je;const pt={...Je};return delete pt[O],pt})};Ze(),He(Je=>({...Je,[O]:"pending"})),j(O),vt.current=0;try{const{url:Je,instructions:pt,manualCode:At,deviceCode:Lt}=await IS(O);pt?.trim()&&!(O==="github-copilot"&&Lt)&&le(ln=>({...ln,[O]:pt})),At&&Ce(ln=>({...ln,[O]:At})),Lt&&O==="github-copilot"&&re(ln=>({...ln,[O]:Lt})),window.open(Ci(Lt?.verificationUri??Je),"_blank"),ye.current=setInterval(async()=>{if(vt.current++,vt.current>=VF){ye.current&&(clearInterval(ye.current),ye.current=null),j(null),W(ln=>ln.map(kn=>kn.id===O?{...kn,loginInProgress:!1}:kn)),He(ln=>({...ln,[O]:"timeout"})),Ze(),n("Login timed out. Please try again.","warning");return}try{const{providers:ln,ghCli:kn}=await qo(),te=Bg(ln);W(te),D(kn);const Fe=te.find(Ge=>Ge.id===O);if(Fe?.authenticated){ye.current&&(clearInterval(ye.current),ye.current=null),j(null),He(Ge=>({...Ge,[O]:"success"})),Ze(),O==="github"&<(!1),n("Login successful","success");return}Fe?.loginInProgress||(ye.current&&(clearInterval(ye.current),ye.current=null),j(null),He(Ge=>({...Ge,[O]:"failed"})),Ze(),n("Login did not complete. Please try again.","error"))}catch{}},2e3)}catch(Je){Je instanceof Error&&Je.message.includes("already in progress")||Je&&typeof Je=="object"&&"status"in Je&&Je.status===409?(n("Login already in progress. Cancel it to retry.","warning"),He(At=>({...At,[O]:"pending"})),zt()):(n(Je instanceof Error?Je.message:"Login failed","error"),He(At=>({...At,[O]:"failed"}))),j(null),Ze()}},[n,F,d,zt,lt]),fn=i.useCallback(async O=>{const qe=Z[O]?.trim();if(!qe){n("Paste the full redirect URL or authorization code first.","warning");return}ve(O);try{(await TS(O,qe)).submitted?(pe(Je=>{if(!(O in Je))return Je;const pt={...Je};return delete pt[O],pt}),n("Authorization code received. Finishing login…","success")):n("That authorization code was already submitted. Waiting for login…","warning")}catch(Ze){n(Me(Ze)||"Failed to submit authorization code","error")}finally{ve(null)}},[n,Z]),Rn=i.useCallback(async O=>{ye.current&&(clearInterval(ye.current),ye.current=null),j(O),vt.current=0,W(qe=>qe.map(Ze=>Ze.id===O?{...Ze,loginInProgress:!1}:Ze)),He(qe=>({...qe,[O]:"cancelled"}));try{await $S(O),await zt().catch(()=>{}),n("Login cancelled","success")}catch(qe){n(Me(qe)||"Failed to cancel login","error")}finally{j(null),le(qe=>{if(!(O in qe))return qe;const Ze={...qe};return delete Ze[O],Ze}),Ce(qe=>{if(!(O in qe))return qe;const Ze={...qe};return delete Ze[O],Ze}),pe(qe=>{if(!(O in qe))return qe;const Ze={...qe};return delete Ze[O],Ze}),ve(qe=>qe===O?null:qe),re(qe=>{if(!(O in qe))return qe;const Ze={...qe};return delete Ze[O],Ze})}},[n,zt]),wn=i.useCallback((O,qe)=>{se(Je=>({...Je,[O]:qe}));const Ze=J.current[O];Ze&&(clearTimeout(Ze),delete J.current[O]),De(Je=>{if(!Je[O])return Je;const pt={...Je};return delete pt[O],pt}),Pe(Je=>{if(!Je[O])return Je;const pt={...Je};return delete pt[O],pt})},[]),mn=i.useCallback(()=>{const O=ke.current;if(!O)return;const qe=typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;try{if(typeof O.scrollTo=="function"){O.scrollTo({top:0,behavior:qe?"auto":"smooth"});return}}catch{}O.scrollTop=0},[]),Un=i.useCallback(async(O,qe)=>{const Ze=(qe??je[O]??"").trim(),Je=zF(O,Ze);if(Je){De(At=>({...At,[O]:Je}));return}const pt=J.current[O];pt&&(clearTimeout(pt),delete J.current[O]),j(O),De(At=>{const Lt={...At};return delete Lt[O],Lt}),Pe(At=>{if(!At[O])return At;const Lt={...At};return delete Lt[O],Lt});try{await DS(O,Ze),await zt(),mn(),se(At=>{const Lt={...At};return delete Lt[O],Lt}),De(At=>{if(!At[O])return At;const Lt={...At};return delete Lt[O],Lt}),Pe(At=>({...At,[O]:"✓ Key saved"})),J.current[O]=setTimeout(()=>{Pe(At=>{if(!At[O])return At;const Lt={...At};return delete Lt[O],Lt}),delete J.current[O]},3e3),n("API key saved","success")}catch(At){const Lt=At instanceof TypeError&&At.message.includes("Failed to fetch")?"Could not reach the server. Check your connection and try again.":At instanceof Error?At.message:"Failed to save API key";De(ln=>({...ln,[O]:Lt})),Pe(ln=>{if(!ln[O])return ln;const kn={...ln};return delete kn[O],kn}),n(Lt,"error")}finally{j(null)}},[je,n,zt,mn]),de=i.useCallback(async O=>{j(O);try{await LS(O),await zt(),n("API key removed","success")}catch(qe){n(qe instanceof Error?qe.message:"Failed to clear API key","error")}finally{j(null)}},[n,zt]),st=i.useCallback(async O=>{j(O);try{await PS(O),await zt(),n("Logged out","success")}catch(qe){n(qe instanceof Error?qe.message:"Logout failed","error")}finally{j(null)}},[n,zt]),ct=i.useCallback(O=>{ue(O)},[]),kt=i.useCallback(async()=>{try{const O={modelOnboardingComplete:!0};if(Y){const qe=Y.indexOf("/"),Ze=qe!==-1?Y.slice(0,qe):void 0,Je=qe!==-1?Y.slice(qe+1):Y,pt=ne.find(At=>At.id===Je);pt?(O.defaultProvider=pt.provider,O.defaultModelId=pt.id):Ze&&Je&&(O.defaultProvider=Ze,O.defaultModelId=Je)}await Jn(O),Ug()}catch{}},[Y,ne,Jn,Ug]),G=i.useCallback(async()=>{const O=[...new Set([...y,"first-task"])];xe(!0);try{await kt(),ci("onboarding:completed",{completedSteps:O,skippedSteps:S}),N(O),C(qe=>qe.filter(Ze=>Ze!=="first-task")),b("complete")}finally{xe(!1)}},[kt,y,S]),ze=i.useCallback(async()=>{if(!s)return;const O=R.trim();if(!O){H("Please enter a task description.");return}H(null),A(!0);let qe=!1;try{const Ze=await Vb({description:O,source:{sourceType:"dashboard_ui"}},s);T(Ze),k(!0),ci("onboarding:first-task-created",{taskId:Ze?.id}),n("Task created","success"),qe=!0}catch(Ze){const Je=Ze instanceof Error?Ze.message:"Something went wrong creating your task. Please try again.";H(Je),n(Je,"error")}finally{A(!1)}qe&&kt()},[s,R,n,kt]),Ut=i.useCallback(async()=>{xe(!0);try{await kt()}finally{xe(!1)}ci("onboarding:open-new-task",{}),r?.()},[kt,r]),gn=i.useCallback(async()=>{if(Qt){xe(!0);try{await kt()}finally{xe(!1)}w(!1),e(),ci("onboarding:open-github-import",{}),o?.()}},[kt,Qt,e,o]),In=i.useCallback(async()=>{ci("onboarding:dismissed",{currentStep:v,completedSteps:y,skippedSteps:S}),xe(!0);try{await Jn({modelOnboardingComplete:!0})}catch{}w(!1),e()},[v,y,S,e]),Ne=i.useCallback(()=>{ci("onboarding:finished",{}),w(!1),e()},[e]),xt=i.useCallback(()=>{const O=l??M;O&&(kt(),c?.(O),e())},[l,M,kt,c,e]),Mt=i.useCallback(()=>{kt(),e()},[kt,e]),Gt=be(),Sn=F.filter(O=>O.id!=="github"),on=Tt.host!=="web"&&!Tt.activeProfileId,qt=[...Sn].sort(Gg),Pt=qt.some(O=>!O.type||O.type==="oauth"),Hn=qt.some(O=>O.type==="api_key"),qn=Sn.filter(O=>O.authenticated),ns=qn.length>0,ss=!!s,ms=v==="github"&&!ns,ys=i.useCallback(async()=>{if(Et){We(null),It(!0);try{const O=await Et.saveProfile({name:mt,serverUrl:tt,authToken:Ie.trim()?Ie:null});try{await Et.setActiveProfile(O.id)}catch(qe){We(Me(qe)||"Saved profile but failed to activate it");return}bt(""),Xe(""),n("Remote server profile saved","success")}catch(O){We(Me(O)||"Failed to save shell connection")}finally{It(!1)}}},[Et,mt,tt,Ie,n]);if(!g)return null;const hs=(()=>{if(!Y)return"";const O=Y.indexOf("/"),qe=O===-1?void 0:Y.slice(0,O),Ze=O===-1?Y:Y.slice(O+1),Je=ne.find(pt=>pt.id===Ze&&(!qe||pt.provider===qe));return Je?.name?Je.name:qe?`${Wu(qe)} ${Ze}`:Y})(),On=[];if(ss?On.push({label:"Project",status:"connected",detail:"Project selected — task creation and imports are available"}):On.push({label:"Project",status:"missing",detail:"Register a project to enable task creation and imports"}),ns){const O=Wu(qn[0]?.id??"");On.push({label:"AI Provider",status:"connected",detail:`${O} connected — AI agents can work on tasks`})}else Sn.length>0&&Sn.some(O=>hn[O.id])?On.push({label:"AI Provider",status:"skipped",detail:"AI agents won't be available until you connect a provider"}):On.push({label:"AI Provider",status:"missing",detail:"Connect a provider in Settings → AI Setup"});Qt?On.push({label:"GitHub",status:"connected",detail:pn?"Connected via GitHub CLI — imports and PR tracking are available":"Issues and PRs can be imported"}):!rn||he?On.push({label:"GitHub",status:"skipped",detail:"You can connect anytime from Settings"}):On.push({label:"GitHub",status:"missing",detail:"Connect to import issues as tasks"}),hs&&On.push({label:"Default Model",status:"connected",detail:hs});const ws=l??M,Rs=ws?.description?.split(`
|
|
695
|
+
`)[0]?.trim()||ws?.title||"",Ns=new Set(lu),ee=qt.filter(O=>Ns.has(O.id)).sort((O,qe)=>{const Ze=lu.indexOf(O.id),Je=lu.indexOf(qe.id);return Ze!==Je?Ze-Je:Gg(O,qe)}),_e=qt.filter(O=>O.authenticated&&!Ns.has(O.id)),ft=qt.filter(O=>!O.authenticated&&!Ns.has(O.id)),Ot=O=>{const qe=it[O.id]==="timeout"||it[O.id]==="failed"||it[O.id]==="cancelled",Ze=O.loginInProgress&&!qe;if(O.id==="llama-cpp"&&O.type==="cli")return t.jsx(eF,{authenticated:O.authenticated,onToggled:()=>{zt()}},O.id);if(O.id==="claude-cli"&&O.type==="cli")return t.jsx(QO,{authenticated:O.authenticated,onToggled:()=>{zt()}},O.id);if(O.id==="cursor-cli"&&O.type==="cli")return t.jsx(ZO,{authenticated:O.authenticated,onToggled:()=>{zt()}},O.id);if(O.type==="api_key"){const Je=Ku(O.id),pt=UF(O);return t.jsxs("div",{"data-testid":`onboarding-provider-card-${O.id}`,className:`onboarding-provider-card${O.authenticated?" onboarding-provider-card--connected":""}`,children:[t.jsx("div",{className:"onboarding-provider-card__icon","data-testid":`onboarding-provider-icon-${O.id}`,"aria-hidden":"true",children:t.jsx(Kn,{provider:O.id,size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsxs("strong",{className:"onboarding-provider-card__name",children:[t.jsx(Pb,{size:14,className:"onboarding-provider-key-icon"}),O.name]}),t.jsx("span",{className:"onboarding-provider-card__description",children:Je.description}),t.jsx(Bt,{status:Dt(O)}),O.authenticated&&O.keyHint&&t.jsxs("span",{className:"auth-key-hint",children:["Key: ",O.keyHint]})]}),t.jsx("div",{className:"onboarding-provider-card__actions onboarding-provider-card__actions--api-key",children:t.jsx(qF,{provider:O,apiKeyInfo:pt,inputValue:je[O.id]??"",isSaving:$===O.id,error:Ue[O.id],success:dt[O.id],isConnected:O.authenticated,onInputChange:wn,onSave:Un,onClear:de})})]},O.id)}return t.jsxs("div",{"data-testid":`onboarding-provider-card-${O.id}`,className:`onboarding-provider-card${O.authenticated?" onboarding-provider-card--connected":""}`,children:[t.jsx("div",{className:"onboarding-provider-card__icon","data-testid":`onboarding-provider-icon-${O.id}`,"aria-hidden":"true",children:t.jsx(Kn,{provider:O.id,size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:O.name}),t.jsx("span",{className:"onboarding-provider-card__description",children:Ku(O.id).description}),t.jsx(Bt,{status:Dt(O)})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:$===O.id?O.authenticated?t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Logging out…"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void Rn(O.id),children:"Cancel"})]}):Ze?t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void Rn(O.id),children:"Cancel"})]}):O.authenticated?t.jsx("button",{className:"btn btn-sm",onClick:()=>st(O.id),children:"Logout"}):t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>Wt(O.id),children:"Login"})}),($===O.id||Ze)&&O.id==="github-copilot"&&Ae[O.id]&&t.jsxs("div",{className:"auth-device-code-panel","data-testid":`onboarding-device-code-${O.id}`,children:[t.jsx("strong",{children:"Enter this code on GitHub"}),t.jsx("div",{className:"auth-device-code-pill",children:Ae[O.id].userCode}),t.jsxs("div",{className:"auth-provider-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{navigator.clipboard?.writeText(Ae[O.id].userCode)},children:"Copy code"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>window.open(Ci(Ae[O.id].verificationUri),"_blank"),children:"Open GitHub"})]})]}),($===O.id||Ze)&&q[O.id]&&t.jsx(ou,{instructions:q[O.id],"data-testid":`onboarding-login-instructions-${O.id}`}),($===O.id||Ze)&&fe[O.id]&&t.jsx(nF,{value:Z[O.id]??"",onChange:Je=>pe(pt=>({...pt,[O.id]:Je})),onSubmit:()=>void fn(O.id),prompt:fe[O.id].prompt,placeholder:fe[O.id].placeholder,helpText:fe[O.id].helpText,disabled:ie===O.id,submitLabel:ie===O.id?"Submitting…":"Submit code","data-testid":`onboarding-manual-code-${O.id}`}),it[O.id]==="timeout"&&$!==O.id&&t.jsx("p",{className:"onboarding-helper-text onboarding-inline-feedback",children:"Login timed out. Please try again."}),it[O.id]==="failed"&&$!==O.id&&t.jsx("p",{className:"field-error onboarding-inline-feedback",children:"Login failed. Please try again."})]},O.id)};return t.jsx("div",{className:"modal-overlay open",role:"dialog","aria-modal":"true","aria-labelledby":"onboarding-title",children:t.jsxs("div",{className:"modal model-onboarding-modal",ref:ot,children:[t.jsxs("div",{className:"model-onboarding-header",children:[t.jsxs("h2",{id:"onboarding-title",className:"model-onboarding-title",children:[v==="ai-setup"&&t.jsxs(t.Fragment,{children:[t.jsx(us,{size:24})," Set Up AI ",t.jsx("span",{className:"onboarding-optional-badge",children:"Optional"})]}),v==="github"&&t.jsxs(t.Fragment,{children:[t.jsx(Zs,{size:24})," Connect GitHub ",t.jsx("span",{className:"onboarding-optional-badge",children:"Optional"})]}),v==="project-setup"&&t.jsxs(t.Fragment,{children:[t.jsx(ih,{size:24})," Set Up Your Project"]}),v==="first-task"&&t.jsxs(t.Fragment,{children:[t.jsx(ih,{size:24})," Create Your First Task"]}),v==="complete"&&t.jsxs(t.Fragment,{children:[t.jsx(ts,{size:24})," All Set!"]})]}),v!=="complete"&&t.jsx("button",{className:"modal-close",onClick:In,"aria-label":"Skip onboarding",title:"Skip for now",children:t.jsx(yn,{size:20})})]}),t.jsx("div",{className:"model-onboarding-steps",children:An.map((O,qe)=>{const Ze=Dn>qe,Je=y.includes(O.key)&&Ze,pt=S.includes(O.key)&&!y.includes(O.key)&&Ze,At=Je||pt;return t.jsxs("div",{className:"onboarding-step-wrapper",children:[qe>0&&t.jsx("div",{className:`model-onboarding-step-connector ${qe<=Dn?"done":""}`}),At?t.jsxs("button",{className:`model-onboarding-step-indicator ${v===O.key?"active":""} ${Je?"done":""} ${pt?"skipped":""}`,onClick:()=>b(O.key),"aria-label":`Go back to ${O.label}`,title:`Review ${O.label}`,children:[t.jsx("span",{className:"step-number",children:Je?t.jsx(ts,{size:14}):pt?t.jsx("span",{className:"onboarding-step-skip-mark",children:"–"}):qe+1}),t.jsx("span",{className:"step-label",children:O.label})]}):t.jsxs("div",{className:`model-onboarding-step-indicator ${v===O.key?"active":""} ${Je?"done":""} ${pt?"skipped":""}`,children:[t.jsx("span",{className:"step-number",children:Je?t.jsx(ts,{size:14}):pt?t.jsx("span",{className:"onboarding-step-skip-mark",children:"–"}):qe+1}),t.jsx("span",{className:"step-label",children:O.label})]})]},O.key)})}),t.jsxs("div",{className:"model-onboarding-content",ref:ke,children:[v==="ai-setup"&&t.jsxs("div",{className:"model-onboarding-ai-setup",children:[t.jsx("p",{className:"model-onboarding-description",children:"Fusion uses AI models to plan, write, and review code for you. Connect an AI provider below to get started — you can use a hosted service or enter an API key."}),t.jsx("p",{className:"onboarding-helper-text model-onboarding-primary-helper",children:"You only need one provider to get started."}),t.jsx("p",{className:"onboarding-helper-text",children:"Research runs require provider credentials and an enabled Research View. After onboarding, verify these in Settings → Authentication and Settings → Experimental Features."}),on&&t.jsxs("div",{className:"card",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Connect remote Fusion server"}),t.jsx("p",{className:"onboarding-helper-text",children:"Your native shell needs an active remote profile before dashboard handoff can complete."}),t.jsx("label",{htmlFor:"onboarding-shell-profile-name",className:"onboarding-apikey-field-label",children:"Profile name"}),t.jsx("input",{id:"onboarding-shell-profile-name",className:"input",value:mt,onChange:O=>jt(O.target.value)}),t.jsx("label",{htmlFor:"onboarding-shell-server-url",className:"onboarding-apikey-field-label",children:"Server URL"}),t.jsx("input",{id:"onboarding-shell-server-url",className:"input",placeholder:"https://your-fusion-host",value:tt,onChange:O=>bt(O.target.value)}),t.jsx("label",{htmlFor:"onboarding-shell-token",className:"onboarding-apikey-field-label",children:"Auth token (optional)"}),t.jsx("input",{id:"onboarding-shell-token",className:"input",type:"password",value:Ie,onChange:O=>Xe(O.target.value)}),_t&&t.jsx("small",{className:"field-error",children:_t}),t.jsxs("div",{className:"onboarding-apikey-input-row",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void Et?.openConnectionManager(),children:"Open manager"}),t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void ys(),disabled:!tt.trim()||rt,children:rt?"Saving…":"Save remote server"})]})]}),!E&&F.length>0&&(()=>{const O=F.filter(At=>At.id!=="github"&&At.authenticated).length,qe=F.filter(At=>At.id!=="github").length,Ze=Object.keys(hn).filter(At=>!F.find(Lt=>Lt.id===At)?.authenticated).length;if(qe===0)return null;let Je="onboarding-provider-summary",pt="";return O>0?(Je+=" onboarding-provider-summary--connected",pt=`✓ ${O} of ${qe} provider${qe!==1?"s":""} connected`):Ze>0?(Je+=" onboarding-provider-summary--skipped",pt=`${Ze} provider${Ze!==1?"s":""} skipped`):(Je+=" onboarding-provider-summary--none",pt="No providers connected yet"),t.jsx("div",{className:Je,"data-testid":"provider-summary",children:pt})})(),t.jsx(ya,{slotId:"onboarding-recommendation-card",projectId:s}),t.jsx(di,{summary:"What are AI providers?",children:t.jsx("p",{className:"onboarding-helper-text",children:"AI providers like OpenAI and Anthropic power the AI capabilities in Fusion. Connecting a provider lets Fusion's agents use AI models to help with your tasks."})}),F.length>0&&!F.some(O=>O.authenticated)&&t.jsx("p",{className:"onboarding-helper-text",children:"Skip this step if you'd like — you can always add providers later from Settings."}),E?t.jsxs("div",{className:"model-onboarding-loading",children:[t.jsx(St,{size:24,className:"animate-spin"}),t.jsx("span",{children:"Loading providers…"})]}):F.length===0?t.jsx("div",{className:"model-onboarding-empty",children:"No AI providers are configured. Please check your Fusion configuration."}):t.jsxs(t.Fragment,{children:[t.jsx(ya,{slotId:"onboarding-provider-card",projectId:s,renderPlaceholder:!1,actions:{refreshAuthProviders:()=>{zt()}}}),t.jsxs("section",{className:"onboarding-provider-section","data-testid":"onboarding-quick-start-providers",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Quick start providers"}),ee.length>0?t.jsx("div",{className:"model-onboarding-providers",children:ee.map(O=>Ot(O))}):t.jsx("p",{className:"onboarding-helper-text",children:"No quick-start providers are available in this environment."})]}),_e.length>0&&t.jsxs("section",{className:"onboarding-provider-section","data-testid":"onboarding-connected-providers",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Connected providers"}),t.jsx("div",{className:"model-onboarding-providers",children:_e.map(O=>Ot(O))})]}),t.jsxs("div",{className:"onboarding-model-section",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Default Model (Optional)"}),t.jsx("p",{className:"model-onboarding-description",children:"Pick a default model for AI tasks, or leave this blank to choose later. Models vary in speed, capability, and cost."}),t.jsx(di,{summary:"How do I choose a model?",children:t.jsx("p",{className:"onboarding-helper-text",children:"Models vary in speed, capability, and cost. A good default is usually the latest model from your connected provider. You can always change this later in Settings."})}),ne.length===0?t.jsx("div",{className:"model-onboarding-empty",children:"No models available yet. Connect a provider above to see model options."}):t.jsx("div",{className:"onboarding-model-selector",children:t.jsx(Ms,{models:ne,value:Y,onChange:ct,placeholder:"Select a default model…",label:"Default model"})}),Y&&t.jsx("div",{className:"onboarding-model-preview",children:t.jsxs("small",{className:"settings-muted",children:["Selected:"," ",ne.find(O=>O.id===Y)?.name??Y]})})]}),t.jsx(di,{summary:"Advanced provider settings",className:"onboarding-provider-advanced",children:t.jsxs("div",{"data-testid":"onboarding-advanced-provider-settings",children:[ft.length>0?t.jsx("div",{className:"model-onboarding-providers",children:ft.map(O=>Ot(O))}):t.jsx("p",{className:"onboarding-helper-text",children:"All currently available providers are already shown above."}),ce.length>0?t.jsx("div",{className:"onboarding-custom-provider-list",children:ce.map(O=>t.jsxs("div",{className:"onboarding-custom-provider-item",children:[t.jsx(Kn,{provider:O.id,size:"sm"}),t.jsx("span",{children:O.name||O.id})]},O.id))}):null,Oe?t.jsx(aF,{onSave:xn,onCancel:()=>{ht(!1),$e(void 0)},saving:Ve,error:me}):t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>ht(!0),children:"Add custom provider"})]})}),Pt&&t.jsx(di,{summary:"How does login work?",children:t.jsx("p",{className:"onboarding-helper-text",children:"Clicking Login opens the provider's website in a new tab where you sign in. Once you authorize Fusion, this page will automatically detect the connection. Your credentials are never stored in Fusion."})}),Hn&&t.jsx(di,{summary:"What is an API key?",children:t.jsx("p",{className:"onboarding-helper-text",children:"An API key is a secret token that authenticates Fusion with the provider. You can find your key in the provider's dashboard under API settings. Keys are stored securely on your machine."})}),t.jsx(ya,{slotId:"onboarding-setup-help",projectId:s})]})]}),v==="github"&&t.jsxs("div",{className:"model-onboarding-github",children:[Qt?t.jsx("p",{className:"model-onboarding-description",children:pn?"GitHub CLI is already authenticated — issue imports and pull request tracking work right now. You're all set; no further action needed.":"GitHub is connected — issue imports and pull request tracking are available. You're all set; no further action needed."}):t.jsx("p",{className:"model-onboarding-description",children:"Connecting GitHub unlocks issue imports and pull request tracking. You can skip this — task creation works without it."}),!Qt&&t.jsx("div",{className:"onboarding-feature-list",children:t.jsxs("ul",{children:[t.jsx("li",{className:"onboarding-feature-list-heading",children:t.jsx("strong",{children:"Without GitHub (available now):"})}),t.jsx("li",{className:"onboarding-helper-text",children:"Create tasks manually"}),t.jsx("li",{className:"onboarding-helper-text",children:"Describe work for AI agents"}),t.jsx("li",{className:"onboarding-helper-text",children:"Track progress on the board"}),t.jsx("li",{className:"onboarding-feature-list-heading",children:t.jsx("strong",{children:"With GitHub (after connecting):"})}),t.jsx("li",{className:"onboarding-helper-text onboarding-feature-list-item--with-github",children:"Import issues as tasks"}),t.jsx("li",{className:"onboarding-helper-text onboarding-feature-list-item--with-github",children:"Sync pull request status"}),t.jsx("li",{className:"onboarding-helper-text onboarding-feature-list-item--with-github",children:"Link code changes to tasks"})]})}),ms&&t.jsxs("div",{className:"onboarding-skip-banner",role:"status",children:[t.jsx("strong",{children:"No AI provider connected"}),t.jsx("p",{children:"AI features like task planning and code generation won't be available until you connect one. You can set this up later in Settings."})]}),t.jsx(di,{summary:"What does GitHub integration do?",children:t.jsx("p",{className:"onboarding-helper-text",children:"Without GitHub, you can still create and manage tasks manually. GitHub integration adds the ability to import issues as tasks, track pull request status alongside your work, and automatically link commits to tasks. Connect anytime from Settings → Authentication."})}),rn?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"onboarding-provider-row",children:[t.jsxs("div",{className:"onboarding-provider-info",children:[t.jsxs("strong",{children:[t.jsx(Zs,{size:16,className:"onboarding-provider-title-icon"}),"GitHub"]}),t.jsx("span",{"data-testid":"onboarding-auth-status-github",children:t.jsx(Re,{status:Gt})})]}),Zt&&($==="github"?t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Logging out…"}):t.jsx("button",{className:"btn btn-sm",onClick:()=>st("github"),children:"Disconnect"}))]}),(Gt==="not-connected"||Gt==="pending")&&t.jsxs("div",{className:"onboarding-github-connect-cta","data-testid":"onboarding-github-connect-cta",children:[$==="github"||en?t.jsxs("div",{className:"onboarding-github-connect-actions",children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void Rn("github"),children:"Cancel"})]}):t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>Wt("github"),children:[t.jsx(Zs,{size:16}),"Connect"]}),($==="github"||en)&&q.github&&t.jsx(ou,{instructions:q.github,"data-testid":"onboarding-login-instructions-github"})]}),Gt==="connected"&&t.jsx("div",{className:"onboarding-github-feedback onboarding-github-feedback--success",children:pn?"GitHub CLI is authenticated. Imports and pull request tracking are available. Connect OAuth in Settings → Authentication if you want dashboard-managed sign-in controls.":"GitHub OAuth is connected. You can import issues and track pull requests."}),Gt==="failed"&&t.jsxs("div",{className:"onboarding-github-feedback onboarding-github-feedback--error",children:[t.jsx("p",{children:"Connection failed or timed out."}),t.jsxs("div",{className:"onboarding-github-feedback-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Wt("github"),children:"Retry"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:gt,children:"Skip for now"})]})]}),Gt==="pending"&&t.jsx("div",{className:"onboarding-github-feedback onboarding-github-feedback--info",children:"Waiting for GitHub authorization…"}),Gt==="skipped"&&t.jsxs("div",{className:"onboarding-github-feedback onboarding-github-feedback--info",children:[t.jsx("p",{children:"GitHub was skipped. You can connect anytime from Settings → Authentication."}),t.jsx("div",{className:"onboarding-github-feedback-actions",children:t.jsx("button",{className:"btn btn-sm",onClick:()=>Wt("github"),children:"Connect anyway"})})]}),Gt==="not-connected"&&t.jsx("p",{className:"onboarding-helper-text",children:"No worries if you're not ready — connect GitHub anytime from Settings → Authentication."})]}):t.jsxs("div",{className:"model-onboarding-github-optional",children:[t.jsx("div",{className:"optional-icon optional-icon--github","aria-hidden":"true",children:t.jsx(Kn,{provider:"github",size:"lg"})}),pn?t.jsx("p",{children:"GitHub CLI is already authenticated, so imports and PR tracking work now. OAuth from the dashboard is optional and only controls dashboard-managed connect/disconnect."}):t.jsx("p",{children:"GitHub OAuth isn't connected yet. You can set it up in Settings → Authentication, or continue now and connect later."}),t.jsxs("div",{className:"model-onboarding-github-optional__actions",children:[t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>b("project-setup"),children:pn?"Continue with gh CLI auth →":"Continue without GitHub →"}),pn&&($==="github"||en?t.jsxs("button",{className:"btn btn-sm",disabled:!0,children:[t.jsx(St,{size:14,className:"onboarding-spinner"}),"Waiting for OAuth login…"]}):t.jsxs("button",{className:"btn btn-sm",onClick:()=>Wt("github"),children:[t.jsx(Kn,{provider:"github",size:"sm"}),"Connect OAuth (optional)"]}))]}),pn&&($==="github"||en)&&q.github&&t.jsx(ou,{instructions:q.github,"data-testid":"onboarding-login-instructions-github"})]})]}),v==="project-setup"&&t.jsxs("div",{className:"model-onboarding-project-setup",children:[t.jsx("p",{className:"model-onboarding-description",children:"Choose your first project before creating or importing tasks. You can register an existing local directory or clone a GitHub repository URL through the setup wizard."}),ss?t.jsx("div",{className:"onboarding-project-ready","data-testid":"onboarding-project-ready",role:"status",children:t.jsx("p",{children:"Project selected — task creation and imports are available."})}):t.jsxs("div",{className:"onboarding-project-prerequisite","data-testid":"onboarding-project-prerequisite",children:[t.jsx("p",{className:"onboarding-helper-text",children:"A project is required before first-task actions are available."}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:a,"data-testid":"onboarding-open-setup-wizard",children:"Set Up Project"}),t.jsx("p",{className:"onboarding-helper-text",children:"In the setup wizard, pick an existing directory or paste a GitHub clone URL."})]}),t.jsx(di,{summary:"What does project setup do?",children:t.jsx("p",{className:"onboarding-helper-text",children:"Project setup registers a workspace so Fusion knows where to read files, run commands, and track task changes."})})]}),v==="first-task"&&t.jsxs("div",{className:"model-onboarding-first-task",children:[t.jsx("p",{className:"model-onboarding-description",children:"Create your first task to start the board and launch AI execution."}),x&&ws?t.jsxs("div",{className:"onboarding-task-created",children:[t.jsx(ts,{size:56,className:"success-icon"}),t.jsx("h3",{className:"onboarding-task-created__title",children:"Your first task is ready!"}),t.jsx("div",{className:"onboarding-task-created__task-id",children:ws.id}),Rs&&t.jsx("p",{className:"onboarding-task-created__description",children:Rs}),t.jsx("p",{className:"onboarding-task-created__hint",children:"Your task has been created and will appear on the board."}),t.jsxs("div",{className:"onboarding-task-created__actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:xt,children:"View Task"}),t.jsx("button",{type:"button",className:"btn",onClick:Mt,children:"Go to Dashboard"})]})]}):t.jsxs(t.Fragment,{children:[ss?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"onboarding-first-task-form",children:[t.jsx("label",{className:"onboarding-first-task-form__label",htmlFor:"onboarding-first-task-input",children:"Describe your first task"}),t.jsx("textarea",{id:"onboarding-first-task-input",className:"input onboarding-first-task-form__input","data-testid":"onboarding-first-task-input",value:R,onChange:O=>{z(O.target.value),H(null)},placeholder:"Example: Build a login page with email and password",rows:4}),t.jsx("div",{className:"onboarding-first-task-form__actions",children:t.jsx("button",{type:"button",className:"btn btn-primary",onClick:ze,disabled:_,"data-testid":"onboarding-first-task-submit",children:_?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Creating task…"})]}):"Create First Task"})})]}),X&&t.jsxs("div",{className:"onboarding-task-error",role:"alert","data-testid":"onboarding-task-error",children:[t.jsx("p",{className:"field-error",children:X}),t.jsx("p",{className:"onboarding-helper-text",children:"Your text has been preserved — fix the issue and try again."})]})]}):t.jsxs("div",{className:"onboarding-project-prerequisite","data-testid":"onboarding-project-prerequisite",children:[t.jsx("p",{className:"onboarding-helper-text",children:"A project must be selected before you can create tasks or import from GitHub."}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:a,"data-testid":"onboarding-open-setup-wizard",children:"Set Up Project"})]}),t.jsx(HF,{items:On}),ss&&t.jsxs(t.Fragment,{children:[t.jsx(di,{summary:"What happens when I create a task?",children:t.jsx("p",{className:"onboarding-helper-text",children:"A task describes something you want done. Fusion's AI agents will read your description and work on implementing it. You can track progress on the board and review the results."})}),t.jsxs("div",{className:"onboarding-cta-options",children:[t.jsxs("button",{className:"onboarding-cta-card primary",onClick:Ut,disabled:B,children:[t.jsx("div",{className:"cta-icon",children:t.jsx(Bn,{size:24})}),t.jsxs("div",{className:"cta-content",children:[t.jsx("strong",{children:"Create a New Task"}),t.jsx("span",{children:"Describe what you need built and AI will work on it"})]})]}),t.jsxs("button",{className:`onboarding-cta-card${Qt?"":" onboarding-cta-card--disabled"}`,"data-testid":"cta-github-import",onClick:gn,disabled:B||!Qt,children:[t.jsx("div",{className:"cta-icon",children:t.jsx(Zs,{size:24})}),t.jsxs("div",{className:"cta-content",children:[t.jsx("strong",{children:"Import from GitHub"}),t.jsx("span",{children:"Turn GitHub issues into tasks you can track here"}),!Qt&&t.jsx("small",{className:"onboarding-cta-note",children:"Requires GitHub connection"})]})]})]}),t.jsxs("p",{className:"onboarding-skip-note",children:["You can create tasks anytime from the board, or use"," ",t.jsx("code",{children:"fn task create"})," in the terminal."]})]})]})]}),v==="complete"&&t.jsxs("div",{className:"model-onboarding-complete",children:[t.jsx(ts,{size:48,className:"success-icon"}),t.jsx("p",{children:"Setup complete! Head to the board to create your first task, or explore the dashboard to see what's available."})]})]}),t.jsxs("div",{className:"model-onboarding-footer",children:[v==="ai-setup"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:In,disabled:B,children:"Skip for now"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:ae,children:"Skip setup →"}),t.jsx("button",{className:"btn btn-primary",onClick:Q,children:"Next →"})]}),v==="github"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Ke,children:"← Back"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:ae,children:"Skip GitHub →"}),t.jsx("button",{className:"btn btn-primary",onClick:Q,children:"Next →"})]}),v==="project-setup"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Ke,children:"← Back"}),t.jsx("button",{className:"btn btn-primary",onClick:Q,disabled:!ss,children:"Next →"})]}),v==="first-task"&&!x&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Ke,children:"← Back"}),t.jsx("button",{className:"btn btn-primary",onClick:G,disabled:B,children:B?t.jsxs(t.Fragment,{children:[t.jsx(St,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Saving…"})]}):"Finish Setup"})]}),v==="complete"&&t.jsxs("button",{className:"btn btn-primary",onClick:Ne,children:[t.jsx(ts,{size:16}),t.jsx("span",{children:"Get Started"})]})]})]})})}function My({toasts:e}){return t.jsx("div",{className:"toast-container",id:"toasts",children:e.map(n=>t.jsx("div",{className:`toast toast-${n.type}`,children:n.message},n.id))})}const GF=i.lazy(()=>Tn(()=>import("./SetupWizardModal-B4eA3bpz.js"),__vite__mapDeps([15,1,16,17,18,19,6,7,8,20])).then(e=>({default:e.SetupWizardModal}))),KF=i.lazy(()=>Tn(()=>import("./SettingsModal-B86XhYB1.js"),__vite__mapDeps([21,1,22,23,24,2,3,6,7,8,25])).then(e=>({default:e.SettingsModal})));function JF(){(typeof window<"u"&&window.requestIdleCallback||(n=>globalThis.setTimeout(n,200)))(()=>{Tn(()=>import("./SettingsModal-B86XhYB1.js"),__vite__mapDeps([21,1,22,23,24,2,3,6,7,8,25]))},{timeout:1500})}function YF({projectId:e,tasks:n,projects:s,currentProject:a,addToast:r,toasts:o,removeToast:l,modalManager:c,projectActions:d,taskHandlers:u,taskOperations:h,deepLink:m,settings:f,onSettingsClose:p,onReopenOnboarding:g}){const[w,v]=i.useState(null),b=c.detailTask?(()=>{const k=n.find(R=>R.id===c.detailTask?.id);return k?"prompt"in c.detailTask?{...c.detailTask,...k,prompt:c.detailTask.prompt,log:c.detailTask.log}:k:c.detailTask})():null,y=p??c.closeSettings,N=i.useCallback(()=>{c.openNewTask()},[c]),S=i.useCallback(()=>{c.openGitHubImport()},[c]),C=i.useCallback(k=>{v(null),c.closeModelOnboarding(),c.openDetailTask(k)},[c]),x=i.useCallback(async k=>{const R=await u.handleModalCreate(k);return c.modelOnboardingOpen&&v(R),R},[u.handleModalCreate,c.modelOnboardingOpen]);return i.useEffect(()=>{!c.modelOnboardingOpen&&w&&v(null)},[c.modelOnboardingOpen,w]),i.useEffect(()=>{JF()},[]),t.jsxs(t.Fragment,{children:[b&&t.jsx(za,{children:t.jsx(r4,{task:b,projectId:e,tasks:n,onClose:m.handleDetailClose,onOpenDetail:c.openDetailTask,mobileHeaderMode:c.detailTaskOrigin==="list-mobile"?"back":"close",onMoveTask:h.moveTask,onDeleteTask:h.deleteTask,onMergeTask:h.mergeTask,onRetryTask:h.retryTask,onResetTask:h.resetTask,onDuplicateTask:h.duplicateTask,onTaskUpdated:c.updateDetailTask,addToast:r,prAuthAvailable:f.prAuthAvailable,initialTab:c.detailTaskInitialTab})}),c.settingsOpen&&t.jsx(za,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(KF,{onClose:y,addToast:r,initialSection:c.settingsInitialSection,projectId:e,themeMode:f.themeMode,colorTheme:f.colorTheme,onThemeModeChange:f.setThemeMode,onColorThemeChange:f.setColorTheme,dashboardFontScalePct:f.dashboardFontScalePct,onDashboardFontScaleChange:f.setDashboardFontScalePct,onReopenOnboarding:g})})}),t.jsx(wD,{isOpen:c.githubImportOpen,onClose:c.closeGitHubImport,onImport:u.handleGitHubImport,tasks:n,projectId:e}),t.jsx(za,{children:t.jsx(ED,{isOpen:c.isPlanningOpen,onClose:c.closePlanning,onTaskCreated:u.handlePlanningTaskCreated,onTasksCreated:u.handlePlanningTasksCreated,tasks:n,initialPlan:c.planningInitialPlan??void 0,projectId:e,resumeSessionId:c.planningResumeSessionId})}),t.jsx(za,{children:t.jsx(LD,{isOpen:c.isSubtaskOpen,onClose:c.closeSubtask,initialDescription:c.subtaskInitialDescription??"",onTasksCreated:u.handleSubtaskTasksCreated,projectId:e,resumeSessionId:c.subtaskResumeSessionId})}),t.jsx(aL,{isOpen:c.terminalOpen,onClose:c.closeTerminal,initialCommand:c.terminalInitialCommand,projectId:e}),t.jsx(oL,{isOpen:c.scriptsOpen,onClose:c.closeScripts,addToast:r,onRunScript:c.runScript,projectId:e}),c.filesOpen&&t.jsx(RL,{initialWorkspace:c.fileBrowserWorkspace,initialFile:c.fileBrowserInitialFile,isOpen:!0,onClose:c.closeFiles,onWorkspaceChange:c.setFileWorkspace,projectId:e}),c.todosOpen&&t.jsx(TL,{isOpen:!0,onClose:c.closeTodos,addToast:r,projectId:e,onPlanningMode:c.openPlanningWithInitialPlan}),t.jsx(UL,{isOpen:c.usageOpen,onClose:c.closeUsage,projectId:e,anchorRect:c.usageAnchorRect}),t.jsx(xO,{isOpen:c.systemStatsOpen,onClose:c.closeSystemStats,projectId:e}),c.schedulesOpen&&t.jsx(lO,{onClose:c.closeSchedules,addToast:r,projectId:e}),t.jsx(za,{children:t.jsx(mO,{isOpen:c.newTaskModalOpen,onClose:c.closeNewTask,tasks:n,onCreateTask:x,addToast:r,projectId:e})}),t.jsx(jO,{isOpen:c.activityLogOpen,onClose:c.closeActivityLog,tasks:n,projectId:e,projects:s,currentProject:a,onOpenTaskDetail:k=>{const R=n.find(z=>z.id===k);R&&c.openDetailTask(R)}}),t.jsx(za,{children:t.jsx(SO,{isOpen:c.gitManagerOpen,onClose:c.closeGitManager,tasks:n,addToast:r,projectId:e})}),t.jsx(za,{children:t.jsx($O,{isOpen:c.workflowStepsOpen,onClose:c.closeWorkflowSteps,addToast:r,projectId:e})}),t.jsx(YO,{isOpen:c.agentsOpen,onClose:c.closeAgents,addToast:r,projectId:e}),c.setupWizardOpen&&t.jsx(i.Suspense,{fallback:null,children:t.jsx(GF,{onProjectRegistered:d.handleSetupComplete,onClose:c.closeSetupWizard})}),c.modelOnboardingOpen&&t.jsx(WF,{onComplete:d.handleModelOnboardingComplete,addToast:r,projectId:e??"",onOpenSetupWizard:d.handleAddProject,onOpenNewTask:N,onOpenGitHubImport:S,firstCreatedTask:w,onViewTask:C}),t.jsx(My,{toasts:o,onRemove:l})]})}function QF({errorMessage:e,isRetrying:n,onRetry:s,onManageConnection:a}){return t.jsxs("div",{className:"project-overview-empty",role:"alert","aria-live":"polite",children:[t.jsx("h2",{children:"Can't reach the Fusion backend"}),t.jsx("p",{className:"settings-muted",children:"Fusion couldn't load your projects right now. Please make sure the backend is running and try again."}),t.jsxs("p",{className:"settings-muted",children:["Error: ",e]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:s,disabled:n,children:n?"Retrying…":"Retry Connection"}),a&&t.jsx("button",{type:"button",className:"btn",onClick:a,children:"Manage Connection"})]})]})}const Ju=[{id:"projects",label:"Loading projects"},{id:"project",label:"Selecting project"},{id:"tasks",label:"Fetching tasks"}];function XF(e,n){if(n==="ready")return"done";const s=Ju.findIndex(r=>r.id===n),a=Ju.findIndex(r=>r.id===e);return a<s?"done":a===s?"active":"pending"}function ZF({stage:e}){const[n]=i.useState(()=>lN());return t.jsx("div",{className:"dashboard-loader",role:"status","aria-live":"polite","aria-label":n?"Updating Fusion dashboard":"Loading Fusion dashboard","data-stage":e,"data-version-update":n?"true":void 0,children:t.jsxs("div",{className:"dashboard-loader__content",children:[t.jsx("h1",{className:"dashboard-loader__logo",children:"Fusion"}),n?t.jsx("p",{className:"dashboard-loader__message dashboard-loader__message--update",children:"Updating to a new frontend version..."}):t.jsx("p",{className:"dashboard-loader__message",children:"Initializing dashboard..."}),t.jsx("ol",{className:"dashboard-loader__steps","aria-label":"Dashboard loading progress",children:Ju.map(s=>{const a=XF(s.id,e);return t.jsxs("li",{className:`dashboard-loader__step dashboard-loader__step--${a}`,"data-testid":`dashboard-loader-step-${s.id}`,children:[t.jsx("span",{className:"dashboard-loader__step-icon","aria-hidden":"true",children:a==="done"?"✓":a==="active"?t.jsx(St,{className:"dashboard-loader__spinner animate-spin",size:14}):"•"}),t.jsx("span",{className:"dashboard-loader__step-label",children:s.label})]},s.id)})})]})})}const ez=5e3;function tz(e,n,s){return e||n&&s===0?"idle":n&&s>0?"paused":s>0?"running":"idle"}function nz(e,n,s){let a=0,r=0,o=0,l=0,c=0;for(const d of e){switch(d.column){case"in-progress":a++,oc(d,n,s)&&o++;break;case"todo":l++;break;case"in-review":c++;break}d.blockedBy&&d.blockedBy.length>0&&r++}return{runningTaskCount:a,blockedTaskCount:r,stuckTaskCount:o,queuedTaskCount:l,inReviewCount:c}}function sz(e,n,s,a){const[r,o]=i.useState({globalPause:!1,enginePaused:!1,maxConcurrent:2}),[l,c]=i.useState(!0),[d,u]=i.useState(null),h=i.useRef(null),m=i.useRef(null),f=i.useCallback(async()=>{m.current&&m.current.abort(),m.current=new AbortController;try{c(!0),u(null);const v=await E1(n);o(v)}catch(v){if(v instanceof Error&&v.name==="AbortError")return;u(v instanceof Error?v.message:"Failed to fetch executor stats")}finally{c(!1)}},[n]);i.useEffect(()=>(f(),()=>{m.current&&m.current.abort()}),[f]),i.useEffect(()=>(h.current&&clearInterval(h.current),h.current=setInterval(()=>{f()},ez),()=>{h.current&&(clearInterval(h.current),h.current=null)}),[f]);const p=nz(e,s,a),g=tz(r.globalPause,r.enginePaused,p.runningTaskCount);return{stats:{...p,executorState:g,maxConcurrent:r.maxConcurrent,lastActivityAt:r.lastActivityAt},loading:l,error:d,refresh:f}}const iz={planning:Ui,subtask:Ga,mission_interview:_s,milestone_interview:_s,slice_interview:_s},az={planning:"Planning",subtask:"Subtask Breakdown",mission_interview:"Mission Interview",milestone_interview:"Milestone Interview",slice_interview:"Slice Interview"};function rz({sessions:e,generating:n,needsInput:s,onOpenSession:a,onDismissSession:r}){const{confirm:o}=ai(),[l,c]=i.useState(!1),[d,u]=i.useState(new Set),h=i.useRef(null),m=i.useRef(new Map),f=i.useRef(null),{activeTabMap:p}=eo(),g=i.useMemo(()=>sr(),[]);if(i.useEffect(()=>{if(!l)return;const b=y=>{h.current&&!h.current.contains(y.target)&&c(!1)};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[l]),i.useEffect(()=>{const b=new Set,y=new Map;for(const N of e){const S=p.get(N.id),C=[N.status,N.updatedAt,S?.tabId??N.lockedByTab??"",S?.stale?"stale":"fresh"].join("|"),x=m.current.get(N.id);x&&x!==C&&b.add(N.id),y.set(N.id,C)}if(m.current=y,b.size!==0)return u(b),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{u(new Set),f.current=null},500),()=>{f.current&&(clearTimeout(f.current),f.current=null)}},[p,e]),e.length===0)return null;const w=e.length,v=s>0;return t.jsxs("div",{ref:h,className:"background-tasks-indicator",children:[t.jsxs("button",{className:`background-tasks-indicator__pill${v?" background-tasks-indicator__pill--attention":""}`,onClick:()=>c(b=>!b),title:`${w} background AI task${w!==1?"s":""}${s>0?` (${s} need${s!==1?"":"s"} input)`:""}`,children:[n>0&&t.jsx(St,{size:12,style:{animation:"spin 1s linear infinite"}}),s>0&&n===0&&t.jsx(pu,{size:12}),t.jsxs("span",{children:["AI ",w]})]}),l&&t.jsxs("div",{className:"background-tasks-indicator__popover",children:[t.jsx("div",{className:"background-tasks-indicator__popover-header",children:"Background Tasks"}),t.jsx("div",{className:"background-tasks-indicator__popover-list",children:e.map(b=>{const y=iz[b.type],N=b.status==="generating",S=b.status==="awaiting_input",C=b.status==="error",x=p.get(b.id),k=x?.tabId??b.lockedByTab??null,R=!!(k&&k!==g&&!x?.stale),z=d.has(b.id);return t.jsxs("div",{className:`background-tasks-indicator__item${z?" background-tasks-indicator__item--updated":""}`,style:{transition:"background-color 220ms ease, transform 220ms ease",backgroundColor:z?"var(--color-accent-soft, rgba(59, 130, 246, 0.14))":void 0,transform:z?"translateY(-1px)":void 0},onClick:async()=>{R&&!await o({title:"Open Active Session",message:"This session is active in another tab. Open anyway?"})||(a(b),c(!1))},children:[C?t.jsx(Vs,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--color-error)"}}):t.jsx(y,{size:14,className:"background-tasks-indicator__session-icon"}),t.jsxs("div",{className:"background-tasks-indicator__session-content",children:[t.jsx("div",{className:"background-tasks-indicator__session-title",children:b.title}),t.jsxs("div",{className:"background-tasks-indicator__session-meta",children:[C?"Failed":az[b.type],N&&" — generating...",S&&!R&&" — needs input",S&&R&&" — active in another tab"]})]}),N&&t.jsx(St,{size:14,className:"background-tasks-indicator__session-icon",style:{animation:"spin 1s linear infinite",color:"var(--color-success)"}}),S&&!R&&t.jsx(pu,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--triage)"}}),S&&R&&t.jsx(Ec,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--text-muted)"}}),t.jsx("button",{className:"background-tasks-indicator__item-dismiss",onClick:_=>{_.stopPropagation(),r(b.id)},title:"Dismiss",children:t.jsx(yn,{size:12})})]},b.id)})})]})]})}function oz(e){if(!e)return"no activity";const n=Date.now(),s=new Date(e).getTime(),a=n-s,r=Math.floor(a/1e3),o=Math.floor(r/60),l=Math.floor(o/60),c=Math.floor(l/24);return c>0?`${c}d ago`:l>0?`${l}h ago`:o>0?`${o}m ago`:r>10?`${r}s ago`:"just now"}function lz(e){switch(e){case"running":return{label:"Running",color:"var(--color-success)",icon:ds};case"paused":return{label:"Paused",color:"var(--triage)",icon:mi};case"idle":default:return{label:"Idle",color:"var(--text-muted)",icon:us}}}function cz({tasks:e,projectId:n,taskStuckTimeoutMs:s,staleHighFanoutBlockerAgeThresholdMs:a,backgroundSessions:r,backgroundGenerating:o,backgroundNeedsInput:l,onOpenBackgroundSession:c,onDismissBackgroundSession:d,lastFetchTimeMs:u,currentProjectPath:h,onOpenProjectDirectory:m,keyboardOpen:f}){if(f)return null;const{stats:p,loading:g,error:w}=sz(e,n,s,u),[v,b]=i.useState(!1),y=i.useMemo(()=>lz(p.executorState),[p.executorState]),N=i.useMemo(()=>oz(p.lastActivityAt),[p.lastActivityAt]),S=i.useMemo(()=>{const x=pm(e,{staleHighFanoutAgeThresholdMs:a??Hb});return Array.from(x.entries()).map(([R,z])=>({blockerId:R,entry:z})).filter(({entry:R})=>R.isHighFanout).sort((R,z)=>{if(z.entry.overlapBlockedTodoCount!==R.entry.overlapBlockedTodoCount)return z.entry.overlapBlockedTodoCount-R.entry.overlapBlockedTodoCount;const _=R.entry.escalation?.blockingAgeMs??0,A=z.entry.escalation?.blockingAgeMs??0;return A!==_?A-_:R.blockerId.localeCompare(z.blockerId,"en",{numeric:!0,sensitivity:"base"})})[0]??null},[e,a]),C=y.icon;return w?t.jsx("div",{className:"executor-status-bar executor-status-bar--error",role:"status","aria-label":"Executor status",children:t.jsxs("span",{className:"executor-status-bar__error",children:[t.jsx(Kr,{size:14}),w]})}):g&&p.runningTaskCount===0?t.jsx("div",{className:"executor-status-bar executor-status-bar--loading",role:"status","aria-label":"Executor status",children:t.jsx("span",{className:"executor-status-bar__loading-text",children:"Loading..."})}):t.jsxs("div",{className:`executor-status-bar ${p.executorState==="running"?"executor-status-bar--running":""}`,role:"status","aria-label":"Executor status",children:[r&&r.length>0&&c&&d&&t.jsxs(t.Fragment,{children:[t.jsx(rz,{sessions:r,generating:o??0,needsInput:l??0,onOpenSession:c,onDismissSession:d}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--queued","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Queued"}),t.jsx("span",{className:"executor-status-bar__count",children:p.queuedTaskCount})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:`executor-status-bar__indicator executor-status-bar__indicator--running ${p.runningTaskCount>0?"executor-status-bar__indicator--active":""}`,"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Running"}),t.jsx("span",{className:"executor-status-bar__count",children:p.runningTaskCount}),t.jsx("span",{className:"executor-status-bar__separator","aria-hidden":"true",children:"/"}),t.jsx("span",{className:"executor-status-bar__max",children:p.maxConcurrent})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),p.stuckTaskCount>0&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--stuck",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--stuck executor-status-bar__indicator--active","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Stuck"}),t.jsx("span",{className:"executor-status-bar__count executor-status-bar__count--error",children:p.stuckTaskCount})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:`executor-status-bar__indicator executor-status-bar__indicator--blocked ${p.blockedTaskCount>0?"executor-status-bar__indicator--active":""}`,"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Blocked"}),t.jsx("span",{className:`executor-status-bar__count ${p.blockedTaskCount>0?"executor-status-bar__count--warning":""}`,children:p.blockedTaskCount})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--review","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"In Review"}),t.jsx("span",{className:"executor-status-bar__count",children:p.inReviewCount})]}),S&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--fanout",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--fanout executor-status-bar__indicator--active","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Overlap queue"}),t.jsxs("span",{className:"executor-status-bar__fanout-summary",title:`${S.entry.escalation?"Escalated":"Temporary"} overlap bottleneck ${S.blockerId}: ${S.entry.overlapBlockedTodoCount} todo blocked via blockedBy (threshold ${am})`,children:[S.blockerId," · ",S.entry.overlapBlockedTodoCount," todo",S.entry.escalation?" (escalated)":""]})]})]}),h&&m&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--project-directory",children:[t.jsx("button",{className:`executor-status-bar__folder-toggle${v?" executor-status-bar__folder-toggle--active":""}`,onClick:()=>b(x=>!x),"aria-label":v?"Hide project directory":"Show project directory","aria-expanded":v,"data-testid":"executor-project-path-toggle",title:v?"Hide project directory":"Show project directory",children:t.jsx(js,{size:12,"aria-hidden":"true"})}),v&&t.jsx("button",{className:"executor-status-bar__project-path",onClick:m,title:h,"data-testid":"executor-project-path-link",children:h})]})]}),t.jsx("div",{className:"executor-status-bar__spacer"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--time",children:[t.jsx(ia,{size:12,className:"executor-status-bar__icon","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__time",children:N})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx(C,{size:12,style:{color:y.color},"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__state",style:{color:y.color},children:y.label})]})]})}const dz={planning:Ui,subtask:Ga,mission_interview:_s,milestone_interview:_s,slice_interview:_s},uz={planning:"Planning",subtask:"Subtask Breakdown",mission_interview:"Mission Interview",milestone_interview:"Milestone Interview",slice_interview:"Slice Interview"},Ay="fusion:session-banner-dismissed";function $o(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function mz(){if(typeof window>"u")return new Map;try{const e=window.localStorage.getItem(Ay);if(!e)return new Map;const n=JSON.parse(e),s=new Map;for(const[a,r]of Object.entries(n)){const o=typeof r=="number"?r:$o(r);s.set(a,o)}return s}catch{return new Map}}function hz(e){if(!(typeof window>"u"))try{const n={};for(const[s,a]of e)n[s]=a;window.localStorage.setItem(Ay,JSON.stringify(n))}catch{}}const ta=mz();function pz({sessions:e,onResumeSession:n,onDismissSession:s,onDismissAll:a}){const[r,o]=i.useState(0),l=()=>{hz(ta),o(g=>g+1)};i.useEffect(()=>{if(ta.size===0)return;const g=new Map(e.map(v=>[v.id,v]));let w=!1;for(const[v,b]of ta){const y=g.get(v);if(!y)continue;if(!(y.status==="awaiting_input"||y.status==="error")){ta.delete(v),w=!0;continue}$o(y.updatedAt)>b&&(ta.delete(v),w=!0)}w&&l()},[e]);const c=i.useMemo(()=>e.filter(g=>{if(g.status!=="awaiting_input"&&g.status!=="error")return!1;const w=ta.get(g.id);return w===void 0?!0:$o(g.updatedAt)>w}),[e,r]);if(c.length===0)return null;const d=c.filter(g=>g.status==="awaiting_input").length,u=c.filter(g=>g.status==="error").length;let h="";d>0&&u>0?h=`${d} AI session${d===1?"":"s"} need${d===1?"s":""} your input, ${u} failed`:d>0?h=`${d} AI session${d===1?"":"s"} need${d===1?"s":""} your input`:u>0&&(h=`${u} AI session${u===1?"":"s"} failed`);const m=g=>{ta.set(g.id,Math.max($o(g.updatedAt),Date.now())),l()},f=g=>{ta.delete(g.id),l(),n(g)},p=()=>{const g=Date.now();for(const w of c)ta.set(w.id,Math.max($o(w.updatedAt),g));l(),a()};return t.jsxs("section",{className:"session-notification-banner",role:"region","aria-live":"polite","aria-label":"AI sessions needing input or failed",children:[t.jsxs("div",{className:"session-notification-banner__header",children:[t.jsxs("div",{className:"session-notification-banner__headline",children:[t.jsx(Vs,{size:16,"aria-hidden":"true"}),t.jsx("span",{children:h})]}),t.jsxs("button",{className:"session-notification-banner__dismiss-all",onClick:p,children:[t.jsx(yn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Dismiss all"})]})]}),t.jsx("div",{className:"session-notification-banner__list",children:c.map(g=>{const w=dz[g.type],v=g.status==="error";return t.jsxs("article",{className:`session-notification-banner__item${v?" session-notification-banner__item--error":""}`,"data-session-type":g.type,"data-session-status":g.status,children:[t.jsxs("div",{className:"session-notification-banner__item-main",children:[v?t.jsx(Vs,{size:16,className:"session-notification-banner__type-icon session-notification-banner__type-icon--error","aria-hidden":"true"}):t.jsx(w,{size:16,className:"session-notification-banner__type-icon","aria-hidden":"true"}),t.jsxs("div",{className:"session-notification-banner__text",children:[t.jsx("p",{className:"session-notification-banner__title",title:g.title,children:g.title}),t.jsx("p",{className:"session-notification-banner__meta",children:v?"Failed":uz[g.type]})]})]}),t.jsxs("div",{className:"session-notification-banner__actions",children:[t.jsx("button",{className:"session-notification-banner__resume",onClick:()=>f(g),children:v?"Retry":"Resume"}),t.jsx("button",{className:"session-notification-banner__dismiss",onClick:()=>{m(g),s(g.id)},"aria-label":`Dismiss ${g.title}`,children:t.jsx(yn,{size:14,"aria-hidden":"true"})})]})]},g.id)})})]})}const Ry="fusion:cli-binary-banner-dismissed";function fz(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(Ry)==="1"}catch{return!1}}function gz(){if(!(typeof window>"u"))try{window.localStorage.setItem(Ry,"1")}catch{}}function bz({onOpenSettings:e}){const[n,s]=i.useState(null),[a,r]=i.useState(()=>fz()),[o,l]=i.useState(!1),[c,d]=i.useState(null);i.useEffect(()=>{if(a)return;let y=!1;return vS().then(N=>{y||s(N)}).catch(()=>{}),()=>{y=!0}},[a]);const u=i.useCallback(async()=>{l(!0),d(null);try{const y=await yS();s({binary:y.binary,expectedVersion:y.expectedVersion,state:y.state,install:y.install}),y.installResult.success||d(y.installResult.permissionsHint||y.installResult.stderr||`Install failed (exit ${y.installResult.exitCode??"n/a"})`)}catch(y){d(y instanceof Error?y.message:String(y))}finally{l(!1)}},[]),h=i.useCallback(()=>{gz(),r(!0)},[]);if(a||!n||n.state==="installed"||n.state==="skipped")return null;const m=n.state==="version-mismatch",f=n.binary.version,p=n.expectedVersion,g=m?"Update the Fusion CLI":"Install the Fusion CLI",w=m?t.jsxs(t.Fragment,{children:["Your installed ",t.jsx("code",{children:"fn"}),"/",t.jsx("code",{children:"fusion"})," CLI is"," ",t.jsxs("strong",{children:["v",f??"unknown"]})," but this dashboard expects"," ",t.jsxs("strong",{children:["v",p]}),". Update to stay in sync."]}):t.jsxs(t.Fragment,{children:["Get the ",t.jsx("code",{children:"fn"})," and ",t.jsx("code",{children:"fusion"})," commands on your terminal so you can drive Fusion from anywhere. One click below or copy the command into your shell."]}),v=m?"Update with npm":"Install with npm",b=m?"Updating…":"Installing…";return t.jsxs("div",{className:"cli-binary-banner",role:"status",children:[t.jsxs("div",{className:"cli-binary-banner__body",children:[t.jsx("div",{className:"cli-binary-banner__title",children:g}),t.jsx("div",{className:"cli-binary-banner__text",children:w}),t.jsxs("div",{className:"cli-binary-banner__actions",children:[t.jsx("button",{type:"button",className:"cli-binary-banner__primary",onClick:()=>void u(),disabled:o,children:o?b:v}),t.jsx("button",{type:"button",className:"cli-binary-banner__secondary",onClick:e,children:"Open Settings"})]}),c&&t.jsx("div",{className:"cli-binary-banner__error",children:c})]}),t.jsx("button",{type:"button",className:"cli-binary-banner__dismiss","aria-label":"Dismiss",onClick:h,children:t.jsx(yn,{size:16})})]})}function xz({signal:e,onDismiss:n}){return!e||!e.atRisk?null:t.jsxs("div",{className:`capacity-risk-banner${n?" capacity-risk-banner--dismissible":""}`,role:"status","aria-live":"polite",children:[t.jsxs("div",{className:"capacity-risk-banner__content",children:[t.jsx("strong",{children:"Capacity risk:"})," Todo ",e.todoCount," (threshold ",e.threshold,") · In Progress ",e.inProgressCount," · In Review ",e.inReviewCount," · Idle agents ",e.idleNonEphemeralAgentCount]}),n?t.jsx("button",{type:"button",className:"capacity-risk-banner__dismiss touch-target","aria-label":"Dismiss capacity warning",onClick:n,children:t.jsx(yn,{"aria-hidden":"true"})}):null]})}const vz={duplicate_active_id:"Duplicate active task ID",id_in_active_and_archived:"Task ID present in active and archived storage",next_sequence_at_or_below_used:"Allocator next sequence overlaps an existing task ID",task_row_outside_known_prefix:"Task row uses a prefix outside allocator state"};function yz(e){return e.length<=5?e.join(", "):`${e.slice(0,5).join(", ")} +${e.length-5} more`}function wz({report:e,recommendedAction:n,onRefresh:s}){const[a,r]=i.useState(!1),[o,l]=i.useState(null);if(e.status!=="anomaly")return null;const c=async()=>{r(!0),l(null);try{const d=await VN();s?.(d.taskIdIntegrity,d.taskIdIntegrity.recommendedAction)}catch(d){l(d instanceof Error?d.message:"Failed to refresh integrity status.")}finally{r(!1)}};return t.jsxs("section",{className:"task-id-integrity-banner",role:"alert","aria-live":"assertive",children:[t.jsxs("div",{className:"task-id-integrity-banner__header",children:[t.jsxs("div",{className:"task-id-integrity-banner__headline-wrap",children:[t.jsx("span",{className:"status-dot status-dot--error","aria-hidden":"true"}),t.jsx(Kr,{"aria-hidden":"true"}),t.jsx("h2",{className:"task-id-integrity-banner__headline",children:"Task ID integrity anomaly detected"})]}),t.jsxs("button",{type:"button",className:"btn btn-sm task-id-integrity-banner__refresh",onClick:()=>{c()},disabled:a,children:[t.jsx(bs,{className:a?"task-id-integrity-banner__refresh-icon task-id-integrity-banner__refresh-icon--spinning":"task-id-integrity-banner__refresh-icon","aria-hidden":"true"}),a?"Re-checking…":"Re-check"]})]}),t.jsx("p",{className:"task-id-integrity-banner__body",children:"Fusion found allocator state that can cause task IDs to be reused or overwrite live task records."}),t.jsx("ul",{className:"task-id-integrity-banner__list",children:e.anomalies.map(d=>t.jsxs("li",{className:"task-id-integrity-banner__item",children:[t.jsx("strong",{className:"task-id-integrity-banner__item-title",children:vz[d.kind]}),t.jsx("span",{className:"task-id-integrity-banner__item-detail",children:d.details}),t.jsx("code",{className:"task-id-integrity-banner__ids",children:yz(d.affectedIds)})]},`${d.kind}:${d.prefix}:${d.affectedIds.join(",")}`))}),t.jsx("p",{className:"task-id-integrity-banner__footer",children:n}),o?t.jsx("p",{className:"task-id-integrity-banner__error",children:o}):null]})}function kz({latestVersion:e,currentVersion:n,onDismiss:s}){return t.jsxs("div",{className:"update-available-banner",role:"status","aria-live":"polite",children:[t.jsxs("p",{className:"update-available-banner__text",children:["Update available: v",e," (current: v",n,"). Run ",t.jsx("code",{children:"fn update"})," for an installed CLI, or pull this source checkout."," ",t.jsx("a",{className:"update-available-banner__link",href:"https://github.com/Runfusion/Fusion/blob/main/CHANGELOG.md",target:"_blank",rel:"noreferrer",children:"Release notes"})," ","·"," ",t.jsx("a",{className:"update-available-banner__link",href:"https://runfusion.ai",target:"_blank",rel:"noreferrer",children:"Learn more"})]}),t.jsx("button",{type:"button",className:"update-available-banner__dismiss touch-target","aria-label":"Dismiss update notice",onClick:s,children:t.jsx(yn,{size:16,"aria-hidden":"true"})})]})}function jz({pendingCount:e,onOpenMailbox:n,onDismiss:s}){const a=e===1?"request":"requests";return t.jsx("section",{className:"approval-notification-banner",role:"region","aria-live":"polite","aria-label":"Approval requests",children:t.jsxs("div",{className:"approval-notification-banner__content",children:[t.jsxs("div",{className:"approval-notification-banner__headline",children:[t.jsx("span",{className:"status-dot","aria-hidden":"true"}),t.jsx(Kr,{"aria-hidden":"true"}),t.jsxs("span",{children:[e," approval ",a," need your attention"]})]}),t.jsxs("div",{className:"approval-notification-banner__actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:n,children:[t.jsx(xa,{"aria-hidden":"true"}),t.jsx("span",{children:"Open Mailbox"})]}),t.jsx("button",{type:"button",className:"btn-icon approval-notification-banner__dismiss",onClick:s,"aria-label":"Dismiss approval notification banner",children:t.jsx(yn,{"aria-hidden":"true"})})]})]})})}function Nz({onResume:e}){const n=wF();if(!n)return null;const s=n.completedSteps.length,a=ba.length,r=s>0?`${s} of ${a} step${s!==1?"s":""} complete — You're on the `:"You're on the ";return t.jsxs("section",{className:"onboarding-resume-card",role:"region","aria-label":"Resume onboarding",children:[t.jsxs("div",{className:"onboarding-resume-card__main",children:[t.jsx("div",{className:"onboarding-resume-card__icon","aria-hidden":"true",children:t.jsx(fs,{size:20})}),t.jsxs("div",{className:"onboarding-resume-card__content",children:[t.jsx("h2",{className:"onboarding-resume-card__title",children:"Continue Setup"}),t.jsxs("p",{className:"onboarding-resume-card__description",children:[r,t.jsx("strong",{children:n.label})," step. Continue where you left off to complete your dashboard setup."]})]})]}),t.jsx("div",{className:"onboarding-resume-card__actions",children:t.jsxs("button",{className:"onboarding-resume-card__resume-btn btn btn-primary btn-sm",onClick:()=>{ci("onboarding:resumed",{source:"resume-card",resumedFromStep:n.currentStep}),e()},children:[t.jsx(ds,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Continue onboarding"})]})})]})}function Sz({onOpenSettings:e,onOpenModelOnboarding:n}){const s=qr(),a=Sy(),[r,o]=i.useState(!0),[l,c]=i.useState(!1),[d,u]=i.useState(!1),[h,m]=i.useState({needsAiProvider:!1,needsDefaultModel:!1,needsGitHub:!1});i.useEffect(()=>{if(!s||a){o(!1);return}let b=!1;return(async()=>{try{o(!0),c(!1);const[N,S]=await Promise.all([qo(),aa()]);if(b)return;const C=N.providers??[],x=C.find(A=>A.id==="github"),R=!C.some(A=>A.id!=="github"&&A.authenticated),z=!S.defaultProvider&&!S.defaultModelId,_=x?!x.authenticated:!1;m({needsAiProvider:R,needsDefaultModel:z,needsGitHub:_})}catch{b||c(!0)}finally{b||o(!1)}})(),()=>{b=!0}},[s,a]);const f=i.useCallback(()=>{vF(),u(!0)},[]),p=i.useCallback(()=>{n()},[n]),g=i.useCallback(()=>{e("global-models")},[e]),w=i.useCallback(()=>{e("authentication")},[e]),v=i.useMemo(()=>{const b=[];return h.needsAiProvider&&b.push({id:"ai-provider",title:"Connect AI Provider",description:"Connect an AI provider to enable AI agents for task planning and code generation",actionLabel:"Set Up AI",onAction:p,icon:us}),h.needsDefaultModel&&b.push({id:"default-model",title:"Select Default Model",description:"Choose a default AI model for task execution",actionLabel:"Choose Model",onAction:g,icon:Pb}),h.needsGitHub&&b.push({id:"github",title:"Connect GitHub",description:"Connect GitHub to import issues and track pull requests",actionLabel:"Connect GitHub",onAction:w,icon:Zs}),b},[h.needsAiProvider,h.needsDefaultModel,h.needsGitHub,w,g,p]);return!s||a||d||r||l||v.length===0?null:t.jsxs("section",{className:"post-onboarding-recommendations",role:"region","aria-label":"Setup recommendations",children:[t.jsxs("div",{className:"post-onboarding-recommendations__main",children:[t.jsx("div",{className:"post-onboarding-recommendations__icon","aria-hidden":"true",children:t.jsx(Ui,{size:18,"aria-hidden":!0})}),t.jsxs("div",{className:"post-onboarding-recommendations__content",children:[t.jsx("h2",{className:"post-onboarding-recommendations__title",children:"Recommended Next Steps"}),t.jsx("p",{className:"post-onboarding-recommendations__description",children:"Complete these setup items to get the most out of Fusion."}),t.jsx("ul",{className:"post-onboarding-recommendations__list",children:v.map(b=>{const y=b.icon;return t.jsxs("li",{className:"post-onboarding-recommendations__item",children:[t.jsx("span",{className:"post-onboarding-recommendations__item-icon","aria-hidden":"true",children:t.jsx(y,{size:14,"aria-hidden":!0})}),t.jsxs("span",{className:"post-onboarding-recommendations__item-text",children:[t.jsx("strong",{children:b.title}),t.jsx("span",{children:b.description})]}),t.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:b.onAction,children:b.actionLabel})]},b.id)})}),t.jsx(ya,{slotId:"post-onboarding-recommendation",renderPlaceholder:!1,actions:{openSettingsSection:e,openModelOnboarding:n}})]})]}),t.jsx("button",{type:"button",className:"post-onboarding-recommendations__dismiss",onClick:f,"aria-label":"Dismiss recommendations",children:t.jsx(yn,{size:16,"aria-hidden":!0})})]})}function Cz({size:e=20}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:t.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}function No(e){return e>99?"99+":String(e)}function Ez({view:e,onChangeView:n,footerVisible:s,modalOpen:a=!1,keyboardOpen:r=!1,onOpenSettings:o,onOpenActivityLog:l,onOpenSystemStats:c,onOpenMailbox:d,mailboxUnreadCount:u=0,mailboxPendingApprovalCount:h=0,chatHasUnreadResponse:m=!1,stashOrphanCount:f=0,onOpenGitManager:p,onOpenWorkflowSteps:g,onOpenSchedules:w,onOpenScripts:v,onToggleTerminal:b,onOpenFiles:y,onOpenTodos:N,todosOpen:S=!1,onOpenGitHubImport:C,onOpenPlanning:x,onResumePlanning:k,activePlanningSessionCount:R=0,onOpenUsage:z,onRunScript:_,projectId:A,onViewAllProjects:X,showSkillsTab:H,experimentalFeatures:M,onOpenNodes:T,pluginDashboardViews:F=[],shellConnectionControl:W}){const oe=ii(),[D,E]=i.useState(!1),[P,$]=i.useState(!1),[j,q]=i.useState({}),[le,fe]=i.useState(!1),Ce=i.useMemo(()=>Object.entries(j).sort(([se],[Ue])=>se.localeCompare(Ue)),[j]);i.useEffect(()=>{if(!P)return;let se=!1;return fe(!0),Vo(A).then(Ue=>{se||q(Ue)}).catch(()=>{se||q({})}).finally(()=>{se||fe(!1)}),()=>{se=!0}},[P,A]);const Ae=i.useCallback(()=>E(!1),[]),re=i.useCallback(se=>{Ae(),se?.()},[Ae]);if(i.useEffect(()=>{if(!D)return;const se=Ue=>{Ue.key==="Escape"&&E(!1)};return document.addEventListener("keydown",se),()=>document.removeEventListener("keydown",se)},[D]),oe!=="mobile"||a||r)return null;const Z=R>0&&k?k:x,pe=!!H,ie=!!M?.todoView,ve=pe,ne=pe&&!ve,ue=F.filter(se=>se.view.placement==="primary").sort((se,Ue)=>(se.view.order??Number.MAX_SAFE_INTEGER)-(Ue.view.order??Number.MAX_SAFE_INTEGER)).slice(0,1),B=new Set(ue.map(se=>`${se.pluginId}:${se.view.viewId}`)),xe=F.filter(se=>!B.has(`${se.pluginId}:${se.view.viewId}`)).sort((se,Ue)=>(se.view.order??Number.MAX_SAFE_INTEGER)-(Ue.view.order??Number.MAX_SAFE_INTEGER)),je=e==="documents"||e==="reliability"||!!M?.evalsView&&e==="evals"||e==="research"||e==="insights"||e==="memory"||e==="devserver"||e==="dev-server"||S&&ie||e==="skills"&&!ve||e==="graph"||e==="stash-recovery"||Mr(e)&&!ue.some(se=>Lo(se.pluginId,se.view.viewId)===e);return t.jsxs(t.Fragment,{children:[t.jsxs("nav",{className:`mobile-nav-bar${s?" mobile-nav-bar--with-footer":""}`,role:"tablist","aria-label":"Primary navigation",children:[t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="board"||e==="list"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-tasks",role:"tab","aria-selected":e==="board"||e==="list",onClick:()=>{n(e==="board"||e==="list"?e:"board")},children:[t.jsx(Sa,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Tasks"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="agents"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-agents",role:"tab","aria-selected":e==="agents",onClick:()=>n("agents"),children:[t.jsx(es,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Agents"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="missions"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-missions",role:"tab","aria-selected":e==="missions",onClick:()=>n("missions"),children:[t.jsx(_s,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Missions"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="chat"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-chat",role:"tab","aria-selected":e==="chat",onClick:()=>n("chat"),children:[t.jsxs("span",{className:"mobile-nav-tab-icon-wrapper",children:[t.jsx(na,{}),m&&e!=="chat"&&t.jsx("span",{className:"status-dot status-dot--pending mobile-nav-chat-unread-dot","aria-label":"Unread chat response"})]}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Chat"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="mailbox"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-mailbox",role:"tab","aria-selected":e==="mailbox",onClick:()=>n("mailbox"),children:[t.jsxs("span",{className:"mobile-nav-tab-icon-wrapper",children:[t.jsx(Ka,{}),h>0&&e!=="mailbox"&&t.jsx("span",{className:"status-dot status-dot--pending mobile-nav-chat-unread-dot","aria-label":"Pending approvals"})]}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Mailbox"}),u>0&&t.jsx("span",{className:"mobile-nav-tab-badge",children:No(u)})]}),ve&&t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="skills"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-skills",role:"tab","aria-selected":e==="skills",onClick:()=>n("skills"),children:[t.jsx(us,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Skills"})]}),ue.map(se=>{const Ue=Lo(se.pluginId,se.view.viewId),De=rc(se.view.icon);return t.jsxs("button",{type:"button",className:`mobile-nav-tab${e===Ue||e==="graph"&&se.pluginId==="fusion-plugin-dependency-graph"&&se.view.viewId==="graph"?" mobile-nav-tab--active":""}`,"data-testid":`mobile-nav-tab-plugin-${se.pluginId}-${se.view.viewId}`,role:"tab","aria-selected":e===Ue||e==="graph"&&se.pluginId==="fusion-plugin-dependency-graph"&&se.view.viewId==="graph",onClick:()=>n(se.pluginId==="fusion-plugin-dependency-graph"&&se.view.viewId==="graph"?"graph":Ue),children:[t.jsx(De,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:se.view.label})]},`${se.pluginId}:${se.view.viewId}`)}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${je?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-more",role:"tab","aria-selected":!1,onClick:()=>E(se=>!se),children:[t.jsx(fu,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"More"})]})]}),D&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"mobile-more-sheet-backdrop",onClick:Ae}),t.jsxs("div",{className:"mobile-more-sheet",children:[t.jsx("div",{className:"mobile-more-sheet-handle"}),t.jsx("div",{className:"mobile-more-sheet-title",children:"Navigate"}),W?t.jsx("div",{className:"mobile-more-shell-connection","data-testid":"mobile-more-shell-connection",children:W}):null,t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-mailbox",onClick:()=>re(d),children:[t.jsx(Ka,{}),t.jsx("span",{children:"Mailbox"}),u>0&&t.jsx("span",{className:"mobile-more-item-badge mobile-more-item-badge--unread",children:No(u)}),h>0&&t.jsx("span",{className:"mobile-more-item-badge",children:No(h)})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-activity",onClick:()=>re(l),children:[t.jsx(Ls,{}),t.jsx("span",{children:"Activity Log"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-system-stats",onClick:()=>re(c),children:[t.jsx(Pr,{}),t.jsx("span",{children:"System Stats"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-git",onClick:()=>re(p),children:[t.jsx(Os,{}),t.jsx("span",{children:"Git Manager"})]}),t.jsxs("div",{className:"mobile-more-split-row",children:[t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-split-primary","data-testid":"mobile-more-item-terminal",onClick:()=>re(b),children:[t.jsx(sa,{}),t.jsx("span",{children:"Terminal"})]}),t.jsx("button",{type:"button",className:"mobile-more-split-toggle","data-testid":"mobile-more-terminal-split-toggle",onClick:()=>$(se=>!se),"aria-expanded":P,"aria-haspopup":"menu","aria-label":"Show scripts",children:t.jsx(Wn,{size:14,className:`mobile-more-chevron${P?" mobile-more-chevron--open":""}`})})]}),P&&t.jsx("div",{className:"mobile-more-submenu",role:"menu","aria-label":"Scripts submenu",children:le?t.jsxs("div",{className:"mobile-more-submenu-loading","data-testid":"mobile-more-scripts-loading",children:[t.jsx(St,{className:"animate-spin"}),t.jsx("span",{children:"Loading scripts…"})]}):Ce.length>0?t.jsxs(t.Fragment,{children:[Ce.map(([se,Ue])=>t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem","data-testid":`mobile-more-script-item-${se}`,onClick:()=>{_&&_(se,Ue),Ae(),$(!1)},children:[t.jsx(ds,{}),t.jsx("span",{children:se})]},se)),v&&t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem mobile-more-subitem--manage","data-testid":"mobile-more-scripts-manage",onClick:()=>{Ae(),$(!1),v()},children:[t.jsx(Ni,{}),t.jsx("span",{children:"Manage Scripts…"})]})]}):v&&t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem","data-testid":"mobile-more-scripts-manage",onClick:()=>{Ae(),$(!1),v()},children:[t.jsx(Ni,{}),t.jsx("span",{children:"No scripts — add one…"})]})}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-files",onClick:()=>re(y),children:[t.jsx(js,{}),t.jsx("span",{children:"Files"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-planning",onClick:()=>re(Z),children:[t.jsx(Ui,{}),t.jsx("span",{children:"Planning"}),R>0&&t.jsx("span",{className:"mobile-more-item-badge",children:No(R)})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-workflow",onClick:()=>re(g),children:[t.jsx(ec,{}),t.jsx("span",{children:"Workflow Steps"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-schedules",onClick:()=>re(w),children:[t.jsx(ia,{}),t.jsx("span",{children:"Automation"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-github",onClick:()=>re(C),children:[t.jsx(Cz,{}),t.jsx("span",{children:"Import from GitHub"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-usage",onClick:()=>re(z),children:[t.jsx(Ls,{}),t.jsx("span",{children:"Usage"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-projects",onClick:()=>re(X),children:[t.jsx(Nc,{}),t.jsx("span",{children:"Projects"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-documents",onClick:()=>re(()=>n("documents")),children:[t.jsx(Na,{}),t.jsx("span",{children:"Documents"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-reliability",onClick:()=>re(()=>n("reliability")),children:[t.jsx(Ls,{}),t.jsx("span",{children:"Reliability"})]}),M?.evalsView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-evals",onClick:()=>re(()=>n("evals")),children:[t.jsx(_s,{}),t.jsx("span",{children:"Evals"})]}),ne&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-skills",onClick:()=>re(()=>n("skills")),children:[t.jsx(us,{}),t.jsx("span",{children:"Skills"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-stash-recovery",onClick:()=>re(()=>n("stash-recovery")),children:[t.jsx(Wa,{}),t.jsx("span",{children:"Stash Recovery"}),f>0?t.jsx("span",{className:"mobile-more-item-badge",children:No(f)}):null]}),M?.researchView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-research",onClick:()=>re(()=>n("research")),children:[t.jsx(zi,{}),t.jsx("span",{children:"Research"})]}),M?.insights&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-insights",onClick:()=>re(()=>n("insights")),children:[t.jsx(fs,{}),t.jsx("span",{children:"Insights"})]}),M?.memoryView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-memory",onClick:()=>re(()=>n("memory")),children:[t.jsx(Uo,{}),t.jsx("span",{children:"Memory"})]}),M?.devServerView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-dev-server",onClick:()=>{re(()=>n("dev-server"))},children:[t.jsx(Pr,{}),t.jsx("span",{children:"Dev Server"})]}),M?.nodesView&&T&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-nodes",onClick:()=>re(T),children:[t.jsx(vj,{}),t.jsx("span",{children:"Nodes"})]}),ie&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-todos",onClick:()=>re(()=>N?.()),children:[t.jsx(em,{}),t.jsx("span",{children:"Todos"})]}),xe.map(se=>{const Ue=Lo(se.pluginId,se.view.viewId),De=rc(se.view.icon);return t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":`mobile-more-item-plugin-${se.pluginId}-${se.view.viewId}`,onClick:()=>re(()=>n(se.pluginId==="fusion-plugin-dependency-graph"&&se.view.viewId==="graph"?"graph":Ue)),children:[t.jsx(De,{}),t.jsx("span",{children:se.view.label})]},`${se.pluginId}:${se.view.viewId}`)}),t.jsx("div",{className:"mobile-more-separator"}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-settings",onClick:()=>re(o),children:[t.jsx(Do,{}),t.jsx("span",{children:"Settings"})]})]})]})]})}function Kg(e){return e.trim().toLowerCase().replace(/[\s-]+/g,"_").replace(/_+/g,"_")}function Iy(e,n){const s=n.trim();if(!s)return!0;const a=Kg(s);return Kg(e).includes(a)||e.toLowerCase().includes(s.toLowerCase())}function _z({agents:e,filter:n,highlightedIndex:s,visible:a,onSelect:r,position:o="below",roomMemberIds:l,roomName:c}){const d=i.useMemo(()=>e.filter(g=>Iy(g.name,n)),[e,n]),u=!!l,h=u&&n.trim().length>0,m=i.useMemo(()=>u?d.filter(g=>l?.has(g.id)):d,[d,l,u]),f=i.useMemo(()=>u?d.filter(g=>!l?.has(g.id)):[],[d,l,u]),p=h?[...m,...f]:m;return a?t.jsx("div",{className:`agent-mention-popup agent-mention-popup--${o}`,"data-testid":"agent-mention-popup",role:"listbox","aria-label":"Agent mention suggestions",children:p.length===0?t.jsx("div",{className:"agent-mention-empty",children:"No agents found"}):t.jsxs(t.Fragment,{children:[u&&t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-members-header",children:c?`Members of #${c}`:"Room members"}),m.map((g,w)=>t.jsxs("button",{type:"button",className:`agent-mention-item${w===s?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${g.id}`,onMouseDown:v=>v.preventDefault(),onClick:()=>r(g),role:"option","aria-selected":w===s,children:[t.jsx(gc,{agent:g,size:20}),u&&t.jsx("span",{className:"status-dot agent-mention-member-dot","aria-label":"Room member"}),t.jsx("span",{className:"agent-mention-name",children:g.name}),t.jsx("span",{className:"agent-mention-role",children:g.role})]},g.id)),u&&!h&&f.length>0&&t.jsx("div",{className:"agent-mention-hint","data-testid":"agent-mention-other-hint",children:"Type to search other agents"}),u&&h&&f.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-others-header",children:"Other agents"}),f.map((g,w)=>{const v=m.length+w;return t.jsxs("button",{type:"button",className:`agent-mention-item${v===s?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${g.id}`,onMouseDown:b=>b.preventDefault(),onClick:()=>r(g),role:"option","aria-selected":v===s,children:[t.jsx(gc,{agent:g,size:20}),t.jsx("span",{className:"agent-mention-name",children:g.name}),t.jsx("span",{className:"agent-mention-role",children:g.role})]},g.id)})]})]})}):null}function Jg(e){const{sessionId:n,tempUserMessageId:s,setStreamingText:a,setStreamingThinking:r,setStreamingToolCalls:o,cancelStreamingFlushesRef:l,addToast:c,onDone:d,onError:u,onFallbackSession:h}=e;let m="",f="",p=[],g,w=null,v=null;const b=()=>{w=null,a(m)},y=()=>{v=null,r(f)},N=()=>{w!==null&&(cancelAnimationFrame(w),w=null),v!==null&&(cancelAnimationFrame(v),v=null)};return l.current=N,{handlers:{onThinking:C=>{f+=C,v===null&&(v=requestAnimationFrame(y))},onText:C=>{m+=C,w===null&&(w=requestAnimationFrame(b))},onToolStart:C=>{p=[...p,{toolName:C.toolName,args:C.args,isError:!1,status:"running"}],o(p)},onToolEnd:C=>{const x=[...p];for(let k=x.length-1;k>=0;k--){const R=x[k];if(R?.toolName===C.toolName&&R.status==="running"){x[k]={...R,status:"completed",isError:C.isError,result:C.result},p=x,o(x);return}}p=[...x,{toolName:C.toolName,isError:C.isError,result:C.result,status:"completed"}],o(p)},onFallback:C=>{g=C,h?.(C,n),c?.(`Primary model unavailable. Switched to fallback ${C.fallbackModel}.`,"warning")},onDone:C=>{N(),d({messageId:C.messageId,message:C.message,accumulated:{text:m,thinking:f,toolCalls:p,fallbackInfo:g}})},onError:C=>{N(),u(C,s)}},cancelFlushes:N}}let Yg=null,Qg=null;const Mz=["load failed","failed to fetch","networkerror when attempting to fetch resource.","connection aborted","connection closed unexpectedly","network error"];function Az(e){const n=e.trim().toLowerCase();return n?Mz.some(s=>n.includes(s)):!1}function Rz(){const e=i.useRef(Yg),n=i.useRef(Qg),s=i.useRef(new Set);i.useEffect(()=>{if(typeof document>"u")return;let l=document.visibilityState;const c=()=>{const d=Date.now(),u=document.visibilityState;if(u==="hidden"&&(e.current=d,Yg=d),u==="visible"&&(n.current=d,Qg=d,l==="hidden"))for(const h of s.current)h();l=u};return c(),document.addEventListener("visibilitychange",c),()=>document.removeEventListener("visibilitychange",c)},[]);const a=i.useCallback(()=>typeof document<"u"&&document.visibilityState==="hidden",[]),r=i.useCallback((l=5e3)=>{const c=e.current;if(c===null)return!1;const d=Date.now();if(a())return d-c<=l;const u=n.current;return u===null||u<c?!1:d-u<=l},[a]),o=i.useCallback(l=>(s.current.add(l),()=>{s.current.delete(l)}),[]);return i.useMemo(()=>({isHiddenNow:a,wasRecentlyHidden:r,onBecameVisible:o}),[a,o,r])}const _r="__fn_agent__";function Ty(e,n){const s=typeof e=="string"?e.trim():"",a=typeof n=="string"?n.trim():"";return!s||!a?{}:{modelProvider:s,modelId:a}}function Wl(e,n,s){const a=typeof e=="string"?e.trim():"",r=Ty(n,s),o=a||(r.modelProvider&&r.modelId?_r:"");return o?{agentId:o,...r}:null}function Gl(e,n,s){const a=Ty(n,s),r=a.modelProvider??"",o=a.modelId??"";return`${e}::${r}/${o}`}function Xg(e){const n=typeof e=="string"?e.trim():"",s=n.indexOf("/");return!n||s<=0||s>=n.length-1?{}:{modelProvider:n.slice(0,s),modelId:n.slice(s+1)}}function Iz(e){const n=e?.toolCalls;if(!Array.isArray(n))return;const s=n.map(a=>{if(!a||typeof a!="object")return null;const r=a,o=typeof r.toolName=="string"?r.toolName:"";if(!o)return null;const l=r.args;return{toolName:o,...l&&typeof l=="object"?{args:l}:{},isError:!!r.isError,result:r.result,status:"completed"}}).filter(a=>a!==null);return s.length>0?s:void 0}function Tz(e){const n=e?.fallback;if(!n||typeof n!="object")return;const s=n,a=typeof s.primaryModel=="string"?s.primaryModel:"",r=typeof s.fallbackModel=="string"?s.fallbackModel:"",o=s.triggerPoint;if(!(!a||!r||o!=="session-creation"&&o!=="prompt-time"))return{primaryModel:a,fallbackModel:r,triggerPoint:o}}function jr(e){return{id:e.id,sessionId:e.sessionId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput,toolCalls:Iz(e.metadata),fallbackInfo:Tz(e.metadata),createdAt:e.createdAt}}function Pz(e,n){const[s,a]=i.useState(null),[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState([]),[h,m]=i.useState(!1),[f,p]=i.useState(!1),[g,w]=i.useState(""),[v,b]=i.useState(""),[y,N]=i.useState([]),[S,C]=i.useState(""),x=i.useRef(null),k=i.useRef(!1),R=i.useRef(null),z=i.useRef(""),_=i.useRef(f);_.current=f;const A=i.useRef(null),X=i.useRef(""),H=i.useRef(null),M=i.useRef(s);M.current=s;const T=i.useRef(0),F=3,W=i.useRef(!1);i.useEffect(()=>{z.current=S},[S]);const oe=i.useCallback(async()=>{c(!0);try{const Y=await Ph(e);o(Y.sessions)}catch(Y){console.error("[useQuickChat] Failed to refresh sessions:",Y)}finally{c(!1)}},[e]),D=i.useCallback(async Y=>{const ue={agentId:Y.agentId};return Y.modelProvider&&Y.modelId&&(ue.modelProvider=Y.modelProvider,ue.modelId=Y.modelId),(await XC(ue,e)).session},[e]),E=i.useCallback(()=>{z.current="",C("")},[]),P=i.useCallback(()=>{const Y=z.current.trim();Y&&(z.current="",C(""),ie.current(Y))},[]),$=i.useCallback((Y,ue,B)=>{if(x.current||!Y)return!0;k.current=!1,ue&&(w(ue.streamingText),b(ue.streamingThinking),N(ue.toolCalls)),p(!0);const{handlers:xe}=Jg({sessionId:Y,tempUserMessageId:"",setStreamingText:w,setStreamingThinking:b,setStreamingToolCalls:N,cancelStreamingFlushesRef:R,addToast:B?.silent?void 0:n,onFallbackSession:(je,se)=>{const Ue=Xg(je.fallbackModel);o(De=>De.map(dt=>dt.id===se?{...dt,...Ue}:dt)),a(De=>De&&De.id===se?{...De,...Ue}:De)},onDone:()=>{w(""),b(""),N([]),p(!1),_.current=!1,x.current=null,lo(Y,{limit:50},e).then(je=>{u(je.messages.map(jr))}).catch(()=>{}),P()},onError:je=>{w(""),b(""),N([]),p(!1),_.current=!1,x.current=null;const se=typeof je=="string"&&je.trim()?je:"Failed to get response";B?.silent||n?.(se,"error"),lo(Y,{limit:50},e).then(Ue=>{u(Ue.messages.map(jr))}).catch(()=>{}),P()}});return x.current=nE(Y,xe,e,{...typeof ue?.replayFromEventId=="number"?{lastEventId:ue.replayFromEventId}:{}}),!0},[n,e,P]),j=i.useCallback(async(Y,ue,B)=>{const xe=Wl(Y,ue,B);if(!xe)return;const je=Gl(xe.agentId,xe.modelProvider,xe.modelId);c(!0);try{const{session:se}=await QC({agentId:xe.agentId,modelProvider:xe.modelProvider,modelId:xe.modelId},e);if(se)a(se),X.current=je,se.isGenerating&&$(se.id,se.inFlightGeneration);else{const Ue=await D(xe);a(Ue),X.current=je}T.current=0}catch(se){console.error("[useQuickChat] Failed to initialize session:",se),T.current+=1,T.current<=F&&n?.("Failed to initialize chat","error")}finally{c(!1)}},[$,e,n,D]),q=i.useCallback(async()=>{if(s){m(!0);try{const Y=await lo(s.id,{limit:50},e);u(Y.messages.map(jr))}catch(Y){console.error("[useQuickChat] Failed to load messages:",Y)}finally{m(!1)}}},[s,e]);i.useEffect(()=>{s?q():u([])},[s,q]),i.useEffect(()=>{if(!s?.isGenerating||(x.current||$(s.id,s.inFlightGeneration),!_.current||x.current||!s))return;const Y=setInterval(async()=>{if(!_.current||x.current||!s){clearInterval(Y);return}try{if(!(await nd(s.id,e)).session.isGenerating){clearInterval(Y);const B=await lo(s.id,{limit:50},e);u(B.messages.map(jr)),w(""),b(""),N([]),p(!1),_.current=!1,P()}}catch{}},3e3);return()=>clearInterval(Y)},[s,$,e,P]);const le=i.useCallback(async()=>{if(s){m(!0);try{const Y=await lo(s.id,{limit:50},e);u(Y.messages.map(jr))}catch(Y){console.error("[useQuickChat] Failed to reload messages:",Y)}finally{m(!1)}}},[s,e]),fe=i.useCallback(()=>{R.current?.(),R.current=null,z.current="",C(""),w(""),b(""),N([]),p(!1)},[]),Ce=i.useCallback(async(Y,ue,B)=>{const xe=Wl(Y,ue,B);if(!xe)return;const je=Gl(xe.agentId,xe.modelProvider,xe.modelId);H.current=xe;const se=je===X.current&&M.current;if(se||(x.current&&(x.current.close(),x.current=null),fe()),se){await le();return}a(null),u([]),X.current=je,await j(xe.agentId,xe.modelProvider,xe.modelId)},[j,le,fe]),Ae=i.useCallback(async Y=>{const ue=Wl(Y.agentId,Y.modelProvider??void 0,Y.modelId??void 0);ue&&(H.current=ue,X.current=Gl(ue.agentId,ue.modelProvider,ue.modelId),x.current&&(x.current.close(),x.current=null),fe(),a(Y),Y.isGenerating&&$(Y.id,Y.inFlightGeneration))},[$,fe]),re=i.useCallback(async(Y,ue)=>{await Ce(_r,Y,ue)},[Ce]),Z=i.useCallback(async(Y,ue,B)=>{const je=Wl(Y??"",ue,B)??H.current;if(!je)return;H.current=je;const se=Gl(je.agentId,je.modelProvider,je.modelId);W.current=!0,T.current=0,x.current&&(x.current.close(),x.current=null),fe(),u([]),a(null),c(!0);try{const Ue=await D(je);a(Ue),X.current=se;const De=await Ph(e);o(De.sessions)}catch(Ue){console.error("[useQuickChat] Failed to start a fresh session:",Ue),n?.("Failed to start a new chat","error")}finally{W.current=!1,c(!1)}},[n,D,e,fe]),pe=i.useCallback(()=>{s&&(k.current=!0,R.current?.(),R.current=null,x.current?.close(),x.current=null,ZC(s.id,e).catch(()=>{}),p(!1),w(""),b(""),N([]))},[s,e]),ie=i.useRef(()=>Promise.resolve()),ve=Rz(),ne=i.useCallback(async Y=>{try{await oe();const B=(await nd(Y,e)).session;M.current?.id===Y&&a(xe=>!xe||xe.id!==Y?xe:{...xe,...B}),B.isGenerating?(w(""),b(""),N([]),p(!0),_.current=!0,$(Y,B.inFlightGeneration,{silent:!0})):(w(""),b(""),N([]),p(!1),_.current=!1,await le())}catch{}},[$,e,oe,le]),L=i.useCallback((Y,ue)=>{if(!s||!Y.trim()&&(!ue||ue.length===0))return Promise.resolve();if(_.current)return ue&&ue.length>0?Promise.reject(new Error("Cannot send attachments while a response is streaming")):(z.current=Y,C(Y),Promise.resolve());const B=new Promise((xe,je)=>{A.current={resolve:xe,reject:je},k.current=!1,x.current&&(x.current.close(),x.current=null);const se=`temp-${Date.now()}`,Ue={id:se,sessionId:s.id,role:"user",content:Y,createdAt:new Date().toISOString()};u(dt=>[...dt,Ue]),w(""),b(""),N([]),p(!0);const{handlers:De}=Jg({sessionId:s.id,tempUserMessageId:se,setStreamingText:w,setStreamingThinking:b,setStreamingToolCalls:N,cancelStreamingFlushesRef:R,addToast:n,onFallbackSession:(dt,Pe)=>{const ce=Xg(dt.fallbackModel);o(Ee=>Ee.map(Oe=>Oe.id===Pe?{...Oe,...ce}:Oe)),a(Ee=>Ee&&Ee.id===Pe?{...Ee,...ce}:Ee)},onDone:({messageId:dt,message:Pe,accumulated:ce})=>{const Ee=Pe?jr(Pe):{id:dt||`msg-${Date.now()}`,sessionId:s.id,role:"assistant",content:ce.text,thinkingOutput:ce.thinking||void 0,toolCalls:ce.toolCalls.length>0?ce.toolCalls:void 0,fallbackInfo:ce.fallbackInfo,createdAt:new Date().toISOString()};u(Oe=>[...Oe,Ee]),w(""),b(""),N([]),p(!1),_.current=!1,x.current=null,A.current?.resolve(),A.current=null,P()},onError:dt=>{w(""),b(""),N([]),p(!1),_.current=!1,x.current=null,console.error("[useQuickChat] Stream error:",dt);const Pe=typeof dt=="string"&&dt.trim()?dt:"Failed to get response",ce=Az(Pe);ce?(console.info("[useQuickChat] Suppressed tab-suspension stream error:",dt),s?.id&&(w(""),b(""),N([]),p(!0),_.current=!0,ne(s.id)),A.current?.resolve()):(n?.(Pe,"error"),A.current?.reject(new Error(Pe))),A.current=null,k.current||P(),ce||le()}});x.current=tE(s.id,Y,De,ue,e)});return B.catch(()=>{}),B},[s,e,n,le,ne,P]);return ie.current=L,i.useEffect(()=>ve.onBecameVisible(()=>{if(W.current)return;const ue=M.current;!ue||x.current||Promise.resolve(nd(ue.id,e)).then(B=>{if(!(x.current||M.current?.id!==ue.id)){if(B.session.isGenerating){w(""),b(""),N([]),p(!0),_.current=!0,$(ue.id,B.session.inFlightGeneration,{silent:!0});return}_.current&&(w(""),b(""),N([]),p(!1),_.current=!1,P(),le())}}).catch(()=>{})}),[$,e,le,ve,P]),i.useEffect(()=>()=>{x.current&&(x.current.close(),x.current=null)},[]),i.useMemo(()=>({activeSession:s,sessions:r,sessionsLoading:l,messages:d,messagesLoading:h,isStreaming:f,streamingText:g,streamingThinking:v,streamingToolCalls:y,pendingMessage:S,sendMessage:L,stopStreaming:pe,clearPendingMessage:E,switchSession:Ce,selectSession:Ae,startModelChat:re,startFreshSession:Z,refreshSessions:oe,loadMessages:q,reloadMessages:le,skipNextSessionInitRef:W}),[s,r,l,d,h,f,g,v,y,S,L,pe,E,Ce,Ae,re,Z,oe,q,le])}function Py(e,n){const[s,a]=i.useState([]),[r,o]=i.useState(null),[l,c]=i.useState(!1),d=i.useCallback(async p=>{c(!0);try{const g=n?.filterState,w=g&&g!=="all"?{state:g}:void 0,v=n?.showSystemAgents??!1,b=await Yr({...w,...p,includeEphemeral:p?.includeEphemeral??v},e),y=Array.from(new Map(b.map(N=>[N.id,N])).values());a(y)}catch(g){console.error("Failed to load agents:",g)}finally{c(!1)}},[e,n?.filterState,n?.showSystemAgents]),u=i.useCallback(async()=>{try{const p=await h1(e);o(p)}catch(p){console.error("Failed to load agent stats:",p)}},[e]);i.useEffect(()=>{d(),u()},[d,u]),i.useEffect(()=>{const p=e?`?projectId=${encodeURIComponent(e)}`:"",g=()=>{d(),u()};return fi(`/api/events${p}`,{events:{"agent:created":g,"agent:updated":g,"agent:deleted":g,"agent:stateChanged":g,"approval:requested":g,"approval:updated":g,"approval:decided":g}})},[e,d,u]);const h=i.useCallback(async()=>{await Promise.all([d(),u()])},[d,u]),m=n?.showSystemAgents??!1,f=s.filter(p=>p.state!=="active"&&p.state!=="running"?!1:m||!AN(p));return{agents:s,activeAgents:f,stats:r,isLoading:l,loadAgents:d,loadStats:u,refreshAgents:h}}function $z({visible:e,position:n,files:s,selectedIndex:a,onSelect:r,loading:o}){return e?t.jsxs("div",{className:"file-mention-popup",style:{top:n.top,left:n.left},"data-testid":"file-mention-popup",onMouseDown:l=>{l.preventDefault()},children:[o&&t.jsx("div",{className:"file-mention-popup-loading","data-testid":"file-mention-loading",children:t.jsx("span",{className:"spinner"})}),!o&&s.length===0&&t.jsx("div",{className:"file-mention-popup-empty","data-testid":"file-mention-empty",children:"No files found"}),!o&&s.length>0&&t.jsx("ul",{className:"file-mention-popup-list",role:"listbox",children:s.map((l,c)=>{const d=AE(l.path),u=l.name;return t.jsxs("li",{className:`file-mention-popup-item${c===a?" file-mention-popup-item--selected":""}`,onClick:()=>r(l),onMouseEnter:()=>{},role:"option","aria-selected":c===a,"data-testid":`file-mention-item-${c}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(Ib,{size:14})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsx("span",{className:"file-mention-popup-item-name",children:u}),d&&t.jsx("span",{className:"file-mention-popup-item-path",children:d})]})]},l.path)})})]}):null}const Dz=200;function Lz(e={}){const{projectId:n,workspace:s="project"}=e,[a,r]=i.useState(!1),[o,l]=i.useState(""),[c,d]=i.useState(-1),[u,h]=i.useState([]),[m,f]=i.useState(!1),[p,g]=i.useState(0),w=i.useRef(null),v=i.useRef(null);i.useEffect(()=>()=>{w.current&&clearTimeout(w.current),v.current?.abort()},[]);const b=i.useCallback((x,k)=>{if(k<0||k>x.length){r(!1);return}const R=z=>/[a-zA-Z0-9/_.-]/.test(z);for(let z=k-1;z>=0;z--){if(x[z]==="#")if(z===0){const _=x.slice(z+1,k);d(z),l(_),g(0),r(!0);return}else{const _=x[z-1];if(/[\s,.;:!?'"()[\]{}]/.test(_)){const A=x.slice(z+1,k);d(z),l(A),g(0),r(!0);return}r(!1);return}if(!R(x[z])){r(!1);return}}r(!1)},[]),y=i.useCallback(()=>{r(!1),l(""),d(-1),h([]),g(0),f(!1)},[]),N=i.useCallback(async x=>{if(!x.trim()){h([]),f(!1);return}v.current?.abort(),v.current=new AbortController;try{f(!0);const k=await x0(x,s,n);h(k.files),g(0)}catch(k){k.name!=="AbortError"&&h([])}finally{f(!1)}},[s,n]);i.useEffect(()=>{if(a)return w.current&&clearTimeout(w.current),w.current=setTimeout(()=>{N(o)},Dz),()=>{w.current&&clearTimeout(w.current)}},[o,a,N]);const S=i.useCallback((x,k)=>{if(!a||c<0)return k;const R=k.slice(0,c),z=k.slice(c+1),_=z.match(/[\s]|$/),A=_?_.index:z.length,X=z.slice(A);return`${R}#${x.path}${X}`},[a,c]),C=i.useCallback((x,k)=>{if(!a||u.length===0)return!1;switch(x.key){case"ArrowDown":return x.preventDefault(),g(R=>Math.min(R+1,u.length-1)),!0;case"ArrowUp":return x.preventDefault(),g(R=>Math.max(R-1,0)),!0;case"Enter":case"Tab":return u[p]?(x.preventDefault(),!0):!1;case"Escape":return x.preventDefault(),y(),!0;default:return!1}},[a,u,p,y]);return{mentionActive:a,files:u,loading:m,mentionQuery:o,selectedIndex:p,setSelectedIndex:g,detectMention:b,selectFile:S,dismissMention:y,handleKeyDown:C}}function Oz(e){return`${e.name?.trim()||e.id} (${e.role})`}function So(e){const n=e.trim(),s=n.indexOf("/");return!n||s<=0||s>=n.length-1?null:{modelProvider:n.slice(0,s),modelId:n.slice(s+1)}}function Fz(e,n){return n?e?.name?.trim()?e.name.trim():n.modelId.replace(/[-_]/g," ").replace(/\s+/g," ").replace(/^\w/,s=>s.toUpperCase()).trim():null}function zz(e){return Math.max(40,Math.min(e,320))}function Xl(e,n){return e.length<=n?e:`${e.slice(0,n)}…`}function Bz(e){if(!e)return null;const n=Object.entries(e);return n.length===0?null:n.map(([s,a])=>{const r=typeof a=="string"?a:(()=>{try{return JSON.stringify(a)}catch{return String(a)}})();return`${s}=${Xl(r,50)}`}).join(", ")}function Uz(e){if(e===void 0)return null;if(typeof e=="string")return Xl(e,200);try{return Xl(JSON.stringify(e),200)}catch{return Xl(String(e),200)}}function $y(e,n=!1){if(!e||e.length===0)return null;const s=(f,p)=>{const g=f.status==="running",w=f.status==="completed"&&f.isError,v=Bz(f.args),b=Uz(f.result),y=g?v:b?`result: ${b}`:v?`args: ${v}`:null,N=n?null:y,S=g?"running":w?"error":"completed";return t.jsxs("details",{className:`chat-tool-call${g?" chat-tool-call--running":""}${w?" chat-tool-call--error":""}`,open:g,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",title:f.toolName,children:f.toolName}),N&&t.jsx("span",{className:"chat-tool-call-preview",title:N,children:N}),t.jsx("span",{className:"chat-tool-call-status-text",children:S})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[v&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:"args"}),t.jsx("span",{className:"chat-tool-call-value",children:v})]}),b&&t.jsxs("div",{className:`chat-tool-call-row${w?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:"result"}),t.jsx("span",{className:"chat-tool-call-value",children:b})]})]})]},`${f.toolName}-${p}`)},a=`chat-tool-calls${n?" chat-tool-calls--compact":""}`;if(e.length===1)return t.jsxs("div",{className:a,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(oh,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:"Tool calls"})]}),s(e[0],0)]});const r=e.filter(f=>f.status==="running").length,o=e.filter(f=>f.status==="completed"&&f.isError).length,l=r>0,c=Array.from(new Set(e.map(f=>f.toolName))),d=c.slice(0,5),u=Math.max(0,c.length-d.length),h=u>0?`${d.join(", ")}, +${u} more`:d.join(", "),m=l?`(${r} running)`:o>0?`(${o} ${o===1?"error":"errors"})`:null;return t.jsx("div",{className:a,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:`chat-tool-calls-group${n?" chat-tool-calls-group--compact":""}`,"data-testid":"chat-tool-calls-group",open:l,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(oh,{size:12,"aria-hidden":"true"}),t.jsxs("span",{className:"chat-tool-calls-count",children:[e.length," tool calls"]}),t.jsx("span",{className:"chat-tool-calls-names",title:h,children:h}),m&&t.jsx("span",{className:"chat-tool-calls-group-status",children:m})]}),e.map((f,p)=>s(f,p))]})})}const Dy={pre:({children:e,...n})=>t.jsx("pre",{...n,className:"quick-chat-markdown-pre",children:e}),table:({children:e,...n})=>t.jsx("table",{...n,className:"quick-chat-markdown-table",children:e})};function Zg(e){const n=/(^|[\s])\/([^\s]*)$/.exec(e);if(!n)return null;const s=n[1]??"",a=n[2]??"",r=n.index+s.length;return{filter:a,start:r,end:e.length}}function Hz(e,n){const s=e.slice(0,n),a=/(^|[\s])@([\w-]*)$/.exec(s);if(!a)return null;const r=a[2]??"",o=s.length-r.length-1;return{filter:r,start:o,end:n}}const Kl={width:320,height:400},qz=new Set(["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/x-log","text/csv","application/xml","text/markdown"]),Vz=[".png",".jpg",".jpeg",".gif",".webp",".txt",".json",".yaml",".yml",".log",".csv",".xml",".md"];function Wz(e){return e.type.startsWith("image/")}function Gz(e){if(qz.has(e.type))return!0;const n=e.name.toLowerCase();return Vz.some(s=>n.endsWith(s))}const Nr={width:280,height:260},$s=768,Sr=8;function Kz(e,n){const s=i.useCallback(()=>{if(typeof window>"u")return 0;const S=getComputedStyle(document.documentElement).getPropertyValue("--executor-footer-height").trim();return S&&parseFloat(S)||0},[]),a=i.useCallback(()=>typeof window<"u"&&window.innerWidth<=768?{x:4,y:4+s()}:{x:24,y:24+s()},[s]),[r,o]=i.useState(()=>{if(typeof window>"u")return a();const S=`fusion-quick-chat-position-${e||"default"}`;try{const C=localStorage.getItem(S);if(C){const x=JSON.parse(C);if(typeof x.x=="number"&&typeof x.y=="number"&&!isNaN(x.x)&&!isNaN(x.y))return x}}catch{}return a()}),[l,c]=i.useState(!1),d=i.useRef(null),u=i.useRef(r),h=i.useRef(null),m=i.useRef(null),f=n??i.useRef(!1);i.useEffect(()=>{u.current=r},[r]);const p=i.useCallback(S=>{if(typeof window>"u")return S;const C=48,x=window.innerWidth<=768?4:8,k=window.innerWidth<=768?44:0,R=window.innerWidth>768?s():0,z=window.innerWidth-C-x,_=window.innerHeight-C-x-k-R;return{x:Math.max(x,Math.min(z,S.x)),y:Math.max(x,Math.min(_,S.y))}},[s]),g=i.useCallback(S=>{if(typeof window>"u")return;const C=`fusion-quick-chat-position-${e||"default"}`;try{localStorage.setItem(C,JSON.stringify(S))}catch{}},[e]),w=i.useCallback(()=>{if(!d.current)return;const S=m.current,C=h.current;S&&C!==null&&typeof S.releasePointerCapture=="function"&&S.releasePointerCapture(C),d.current=null,h.current=null,m.current=null,c(!1),document.body.style.userSelect="",f.current&&g(u.current),document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",b),document.removeEventListener("pointercancel",y)},[g]),v=i.useCallback(S=>{if(!d.current||h.current!==null&&S.pointerId!==h.current)return;const C=S.clientX-d.current.pointerX,x=S.clientY-d.current.pointerY;if((Math.abs(C)>=5||Math.abs(x)>=5)&&(f.current=!0),!f.current)return;const k=d.current.x-C,R=d.current.y-x,z=p({x:k,y:R});u.current=z,o(z)},[p]),b=i.useCallback(S=>{h.current!==null&&S.pointerId!==h.current||w()},[w]),y=i.useCallback(S=>{h.current!==null&&S.pointerId!==h.current||w()},[w]),N=i.useCallback(S=>{if(S.button!==0&&S.pointerType==="mouse")return;const C=S.currentTarget;S.preventDefault(),typeof C.setPointerCapture=="function"&&C.setPointerCapture(S.pointerId);const x=u.current;d.current={x:x.x,y:x.y,pointerX:S.clientX,pointerY:S.clientY},h.current=S.pointerId,m.current=C,f.current=!1,c(!0),document.body.style.userSelect="none",document.addEventListener("pointermove",v,{passive:!0}),document.addEventListener("pointerup",b),document.addEventListener("pointercancel",y)},[y,v,b]);return i.useEffect(()=>()=>{document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",b),document.removeEventListener("pointercancel",y),document.body.style.userSelect=""},[y,v,b]),{position:r,isDragging:l,handlePointerDown:N}}function Jz(e,n,s){const a=`fusion:quick-chat-size-${e||"default"}`,r=i.useCallback(()=>typeof window<"u"&&window.innerWidth>$s,[]),o=i.useCallback((f,p,g)=>{if(typeof window>"u")return f;const w=Math.max(Nr.width,window.innerWidth-p-Sr),v=Math.max(Nr.height,window.innerHeight-g-Sr);return{width:Math.max(Nr.width,Math.min(w,f.width)),height:Math.max(Nr.height,Math.min(v,f.height))}},[]),l=i.useCallback(()=>{if(typeof window>"u"||window.innerWidth<=$s)return Kl;try{const f=localStorage.getItem(a);if(!f)return Kl;const p=JSON.parse(f);return typeof p.width!="number"||typeof p.height!="number"?Kl:{width:p.width,height:p.height}}catch{return Kl}},[a]),[c,d]=i.useState(l),[u,h]=i.useState({right:0,bottom:0});i.useEffect(()=>{if(!r())return;const f={right:n+u.right,bottom:s+u.bottom};d(p=>o(p,f.right,f.bottom))},[o,r,n,s,u]),i.useEffect(()=>{if(r())try{localStorage.setItem(a,JSON.stringify(c))}catch{}},[r,c,a]);const m=i.useCallback(f=>{if(!r())return;const p=f.currentTarget.dataset.resizeDirection;if(!p)return;f.preventDefault(),f.stopPropagation();const g=f.currentTarget;typeof g.setPointerCapture=="function"&&g.setPointerCapture(f.pointerId);const w={pointerX:f.clientX,pointerY:f.clientY,width:c.width,height:c.height,anchorRight:u.right,anchorBottom:u.bottom};document.body.style.userSelect="none";const v=y=>{const N=y.clientX-w.pointerX,S=y.clientY-w.pointerY;let C=w.width,x=w.height,k=w.anchorRight,R=w.anchorBottom;if(p.includes("w")&&(C=w.width-N),p.includes("e")){const M=N;C=w.width+M,k=w.anchorRight-M}if(p.includes("n")&&(x=w.height-S),p.includes("s")){const M=S;x=w.height+M,R=w.anchorBottom-M}const z=n+k,_=s+R,A=o({width:C,height:x},z,_),X=Math.max(Sr-n,Math.min(window.innerWidth-n-Nr.width-Sr,k)),H=Math.max(Sr-s,Math.min(window.innerHeight-s-Nr.height-Sr,R));d(A),h({right:X,bottom:H})},b=y=>{typeof g.releasePointerCapture=="function"&&g.releasePointerCapture(y.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",b);try{localStorage.setItem(a,JSON.stringify({width:c.width,height:c.height}))}catch{}};document.addEventListener("pointermove",v),document.addEventListener("pointerup",b)},[u.bottom,u.right,o,s,n,r,c.height,c.width,a]);return{panelSize:c,anchorOffset:u,handleResizeStart:m}}const eb=i.memo(function({message:n,forcePlain:s,mentionAgentsByName:a,roomContext:r,onToggleRender:o}){const l=n.role==="user",c=i.useMemo(()=>{if(!l)return null;const u=n.content,h=/@([\w-]+)/g,m=[];let f=0,p=h.exec(u);for(;p;){const[g,w=""]=p,v=p.index;v>f&&m.push(u.slice(f,v));const b=w.replace(/_/g," ").toLowerCase(),y=a.get(b);if(y){const N=!!(r&&!r.memberIds.has(y.id)),S=N?`Not a member of ${r?.roomName}`:void 0;m.push(t.jsxs("span",{className:`chat-mention-chip${N?" chat-mention-chip--non-member":""}`,title:S,"aria-label":S,children:["@",y.name.replace(/\s+/g,"_")]},`${y.id}-${v}`))}else m.push(g);f=v+g.length,p=h.exec(u)}return f<u.length&&m.push(u.slice(f)),m.length===0?u:m},[l,n.content,a,r]),d=i.useMemo(()=>l?null:s?t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--plain",children:n.content}):t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--markdown",children:t.jsx(ti,{remarkPlugins:[ni],components:Dy,children:n.content})}),[l,s,n.content]);return t.jsxs("div",{className:`quick-chat-panel-message ${l?"quick-chat-panel-message--sent":"quick-chat-panel-message--received"}`,"data-testid":`quick-chat-message-${n.id}`,children:[l?t.jsx("p",{children:c}):t.jsxs(t.Fragment,{children:[d,t.jsx("button",{type:"button",className:`quick-chat-message-render-toggle${s?" quick-chat-message-render-toggle--plain":""}`,"data-testid":"quick-chat-message-render-toggle","aria-label":s?"Show rendered markdown":"Show plain text",onClick:()=>o(n.id),children:s?t.jsx(Zu,{size:14}):t.jsx(Gr,{size:14})})]}),$y(n.toolCalls,!0)]})});function Yz({projectId:e,addToast:n,showFAB:s=!0,open:a,onOpenChange:r,favoriteProviders:o=[],favoriteModels:l=[],onToggleFavorite:c,onToggleModelFavorite:d,roomContext:u=null}){const{agents:h}=Py(e),[m,f]=i.useState(!1),p=a!==void 0,g=p?a:m,w=p?te=>{r?.(typeof te=="function"?te(g):te)}:f,{keyboardOpen:v}=la({enabled:g}),b=ii(),y=b==="mobile",[N,S]=i.useState("agent"),[C,x]=i.useState(""),[k,R]=i.useState(!1),[z,_]=i.useState("model"),[A,X]=i.useState(""),[H,M]=i.useState(""),[T,F]=i.useState([]),[W,oe]=i.useState(!1),[D,E]=i.useState(""),[P,$]=i.useState(""),[j,q]=i.useState(""),[le,fe]=i.useState([]),[Ce,Ae]=i.useState(!1),[re,Z]=i.useState(!1),[pe,ie]=i.useState(""),[ve,ne]=i.useState(0),[L,Y]=i.useState(""),[ue,B]=i.useState(!1),[xe,je]=i.useState(0),[se,Ue]=i.useState(-1),[De,dt]=i.useState(()=>new Set),[Pe,ce]=i.useState(!1),[Ee,Oe]=i.useState([]),[ht,Ve]=i.useState(!1),[ge,me]=i.useState(!1),[,$e]=i.useState(!1),[mt,jt]=i.useState({top:0,left:0}),tt=Lz({projectId:e}),bt=i.useCallback(te=>{if(!te||!tt.mentionActive)return;const Fe=te.getBoundingClientRect();jt({top:Fe.top-260,left:Fe.left+8})},[tt.mentionActive]),Ie=i.useRef(!1),Xe=i.useRef(!1),rt=i.useRef(!1),It=i.useRef(""),_t=i.useRef(!1),We=i.useRef(!1),J=i.useRef(C),ke=i.useRef(D),ot=i.useRef(0),ye=i.useRef(null),it=i.useRef(null),He=i.useRef(0),{position:he,isDragging:et,handlePointerDown:vt}=Kz(e,Ie),Ct=he.y+60,{panelSize:Et,anchorOffset:Tt,handleResizeStart:Jt}=Jz(e,he.x,Ct),cn=typeof window<"u"&&window.innerWidth>$s,{activeSession:Vt,messages:hn,isStreaming:dn,streamingText:An,streamingThinking:nn,streamingToolCalls:Dn,sessions:Nn,sessionsLoading:zt,messagesLoading:sn,sendMessage:xn,stopStreaming:Xt,pendingMessage:Yt,clearPendingMessage:rn,switchSession:Zt,selectSession:en,startModelChat:un,startFreshSession:Qt,refreshSessions:pn,skipNextSessionInitRef:Dt}=Pz(e,n),Bt=i.useRef(null),be=i.useRef(null),Re=i.useRef(null),nt=i.useRef(null),ut=i.useRef(null),Ye=i.useRef([]),lt=i.useRef(!1),wt=i.useRef(!1),Q=i.useRef(!1),ae=i.useRef(null),Ke=i.useRef(!1),gt=i.useRef(!1),Wt=i.useRef({isOpen:!1,sessionId:null});i.useEffect(()=>{if(!g||typeof window>"u"||typeof document>"u"||window.innerWidth>$s)return;const te=window.scrollY,Fe=document.documentElement,Ge=document.body,Ft={htmlOverflow:Fe.style.overflow,bodyOverflow:Ge.style.overflow};return window.scrollTo(0,0),Fe.style.overflow="hidden",Ge.style.overflow="hidden",()=>{Fe.style.overflow=Ft.htmlOverflow,Ge.style.overflow=Ft.bodyOverflow,window.scrollTo(0,te)}},[g]),i.useLayoutEffect(()=>{if(!g||typeof window>"u"||!window.visualViewport)return;const te=Bt.current;if(!te)return;const Fe=window.visualViewport,Ge=()=>{Ke.current||(te.style.setProperty("--vv-height",`${Fe.height}px`),te.style.setProperty("--vv-offset-top",`${Fe.offsetTop||0}px`))};return Ge(),Fe.addEventListener("resize",Ge),Fe.addEventListener("scroll",Ge),()=>{Fe.removeEventListener("resize",Ge),Fe.removeEventListener("scroll",Ge)}},[g]);const fn=D||P,Rn=i.useMemo(()=>So(fn),[fn]),wn=i.useMemo(()=>N==="model"&&Vt?.modelProvider&&Vt?.modelId?`${Vt.modelProvider}/${Vt.modelId}`:fn,[Vt?.modelId,Vt?.modelProvider,N,fn]),mn=i.useMemo(()=>So(wn),[wn]),Un=i.useMemo(()=>T.find(te=>`${te.provider}/${te.id}`===wn)??null,[wn,T]),de=i.useMemo(()=>Fz(Un,mn),[Un,mn]),st=i.useMemo(()=>N==="model"?Rn?`${_r}::${Rn.modelProvider}/${Rn.modelId}`:"":C?`${C}::`:"",[N,C,Rn]),kt=!(N==="agent"?!!C:!!Rn)||!Vt,G=i.useMemo(()=>!!C&&Nn.some(te=>!te.modelProvider&&!te.modelId&&te.agentId===C),[C,Nn]);i.useEffect(()=>{J.current=C},[C]),i.useEffect(()=>{ke.current=D},[D]),i.useEffect(()=>{if(h.length===0){x(""),S("model");return}if(_t.current&&G)return;h.some(Fe=>Fe.id===C)||x(h[0]?.id??"")},[h,G,C]),i.useEffect(()=>{!g||Xe.current||(Xe.current=!0,rt.current=!1,oe(!0),Ws().then(te=>{const Fe=te.models??[];if(F(Fe),ke.current||Fe.length===0)return;const Ge=te.defaultProvider,Ft=te.defaultModelId;if(Ge&&Ft){const Mn=`${Ge}/${Ft}`;if(Fe.some(Vn=>`${Vn.provider}/${Vn.id}`===Mn)){$(Mn),ke.current||E(Mn),_t.current||S("model");return}}$("");const tn=Fe[0];tn&&!ke.current&&E(`${tn.provider}/${tn.id}`)}).catch(te=>{console.error("[QuickChatFAB] Failed to load models:",te),F([]),$("")}).finally(()=>{rt.current=!0,oe(!1)}))},[g,h.length,D]),i.useEffect(()=>{!g||!e||(Ae(!0),YC(e).then(te=>{fe(te)}).catch(()=>{fe([])}).finally(()=>{Ae(!1)}))},[g,e]),i.useEffect(()=>{g&&pn()},[g,pn]),i.useEffect(()=>{if(!g||zt||_t.current||Nn.length===0)return;const te=Nn.filter(Ft=>Ft.status!=="archived"),Fe=Ft=>{if(!Ft)return 0;const tn=Date.parse(Ft);return Number.isFinite(tn)?tn:0},Ge=[...te].sort((Ft,tn)=>{const Mn=Math.max(Fe(Ft.lastMessageAt),Fe(Ft.updatedAt));return Math.max(Fe(tn.lastMessageAt),Fe(tn.updatedAt))-Mn})[0];Ge?(Ge.modelProvider&&Ge.modelId?(S("model"),E(`${Ge.modelProvider}/${Ge.modelId}`)):(S("agent"),x(Ge.agentId)),We.current=!0,en(Ge)):We.current=!1,_t.current=!0},[g,en,Nn,zt]),i.useEffect(()=>{if(!g){It.current="";return}if(!_t.current&&Nn.length===0&&Xe.current&&!rt.current)return;if(!st){It.current="";return}if(Dt.current){It.current=st;return}const Fe=st===It.current&&!Vt&&!zt;if(We.current){We.current=!1,It.current=st;return}if(!(st===It.current&&!Fe)){if(It.current=st,N==="model"&&Rn){un(Rn.modelProvider,Rn.modelId);return}N==="agent"&&C&&Zt(C)}},[g,N,Rn,C,st,Vt,zt,un,Zt,Dt]),i.useEffect(()=>{g||(_t.current=!1,We.current=!1,B(!1),Y(""),Ue(-1),Z(!1),ie(""),ne(0),Ye.current.forEach(te=>{te.previewUrl&&URL.revokeObjectURL(te.previewUrl)}),Oe([]))},[g]),i.useEffect(()=>{Ye.current=Ee},[Ee]),i.useEffect(()=>{if(!g){lt.current=!1;return}typeof window>"u"||(lt.current=window.innerWidth<=$s)},[g]),i.useEffect(()=>{if(!g||kt||!lt.current)return;const te=nt.current;if(!te)return;const Fe=document.activeElement,Ge=Fe?Bt.current?.contains(Fe):!1,Ft=Fe===document.body,tn=Fe===ae.current;if(!Ge&&!Ft&&!tn){lt.current=!1;return}if(tn){te.focus({preventScroll:!0}),lt.current=!1;return}const Mn=requestAnimationFrame(()=>{te.focus(),lt.current=!1});return()=>cancelAnimationFrame(Mn)},[g,kt]),i.useEffect(()=>()=>{Ye.current.forEach(te=>{te.previewUrl&&URL.revokeObjectURL(te.previewUrl)})},[]);const ze=i.useCallback(()=>{R(!0),_("model"),X(h[0]?.id??""),M(D||P||"")},[h,P,D]),Ut=i.useMemo(()=>h.find(te=>te.id===C)??null,[h,C]),gn=i.useMemo(()=>{const te=pe.trim().toLowerCase();return(te?le.filter(Ge=>Ge.name.toLowerCase().includes(te)):le).slice(0,10)},[le,pe]),In=i.useMemo(()=>{const te=h.filter(Ft=>Iy(Ft.name,L));if(!u)return te;const Fe=te.filter(Ft=>u.memberIds.has(Ft.id));if(L.trim().length===0)return Fe;const Ge=te.filter(Ft=>!u.memberIds.has(Ft.id));return[...Fe,...Ge]},[h,L,u]),Ne=i.useMemo(()=>{const te=new Map;for(const Fe of h)te.set(Fe.name.toLowerCase(),Fe);return te},[h]);i.useEffect(()=>{ne(0)},[gn]),i.useEffect(()=>{je(0)},[L,ue]),i.useEffect(()=>()=>{ye.current!==null&&(window.clearTimeout(ye.current),ye.current=null),it.current!==null&&(window.clearTimeout(it.current),it.current=null)},[]),i.useEffect(()=>{if(!g)return;const te=Ge=>{const Ft=Ge.target;Bt.current?.contains(Ft)||be.current?.contains(Ft)||Ft.closest(".model-combobox-dropdown--portal")||w(!1)},Fe=Ge=>{Ge.key==="Escape"&&w(!1)};return document.addEventListener("mousedown",te),document.addEventListener("keydown",Fe),()=>{document.removeEventListener("mousedown",te),document.removeEventListener("keydown",Fe)}},[g,w]);const xt=i.useCallback(()=>{const te=Re.current;if(!te)return;const Ge=te.scrollTop+te.clientHeight>=te.scrollHeight-50;me(!Ge),gt.current=!Ge},[]),Mt=i.useCallback(te=>{if(!te.isConnected)return;let Fe=0,Ge=0,Ft=-1;const tn=6,Mn=()=>{if(te.isConnected){if(te.scrollTop=te.scrollHeight,te.scrollHeight===Ft?Ge+=1:(Ge=0,Ft=te.scrollHeight),Fe+=1,Fe>=tn||Ge>=2){me(!1),gt.current=!1;return}window.requestAnimationFrame(Mn)}};Mn()},[]),Gt=i.useCallback(()=>{const te=Re.current;te&&Mt(te)},[Mt]);i.useLayoutEffect(()=>{const te=Vt?.id??null,Fe=Wt.current;if(Wt.current={isOpen:g,sessionId:te},!g||!te)return;const Ge=!Fe.isOpen&&g,Ft=Fe.isOpen&&Fe.sessionId!==te;if(!Ge&&!Ft)return;const tn=Re.current;tn&&Mt(tn)},[g,Vt?.id,Mt]),i.useEffect(()=>{if(!y||!g||!Vt)return;const te=()=>{const Ge=Re.current;Ge&&Mt(Ge)},Fe=()=>{document.visibilityState==="visible"&&te()};return document.addEventListener("visibilitychange",Fe),window.addEventListener("pageshow",te),()=>{document.removeEventListener("visibilitychange",Fe),window.removeEventListener("pageshow",te)}},[y,g,Vt,Mt]),i.useEffect(()=>{g&&(gt.current||Gt())},[hn,An,nn,dn,g,Gt]);const Sn=i.useMemo(()=>{const te=new Map(h.map(Ge=>[Ge.id,Ge.name?.trim()||Ge.id])),Fe=new Map(T.map(Ge=>[`${Ge.provider}/${Ge.id}`,Ge.name?.trim()||""]));return Nn.map((Ge,Ft)=>{const tn=Ge.title?.trim()||`Session ${Ft+1}`;let Mn=null;if(Ge.agentId&&Ge.agentId!==_r)Mn=te.get(Ge.agentId)||Ge.agentId;else if(Ge.modelProvider&&Ge.modelId){const is=`${Ge.modelProvider}/${Ge.modelId}`,Vn=Fe.get(is);Mn=Vn?`${Vn} [${is}]`:is}return{id:Ge.id,label:Mn?`${tn} — ${Mn}`:tn}})},[h,T,Nn]),on=i.useMemo(()=>N==="agent"?Ut?`Message ${Ut.name||Ut.id}`:"Select an agent to start chatting":de?`Message ${de}`:"Select a model to start chatting",[N,Ut,de]),qt=i.useCallback(te=>{const Fe=Nn.find(Ge=>Ge.id===te);Fe&&(_t.current=!0,Fe.modelProvider&&Fe.modelId?(S("model"),E(`${Fe.modelProvider}/${Fe.modelId}`)):(S("agent"),x(Fe.agentId)),en(Fe))},[en,Nn]),Pt=i.useCallback(async()=>{if(!zt){if(_t.current=!0,z==="agent"){if(!A)return;S("agent"),x(A),await Qt(A)}else{const te=So(H||D||P);if(!te)return;S("model"),E(`${te.modelProvider}/${te.modelId}`),await Qt(_r,te.modelProvider,te.modelId)}await pn(),R(!1),_("model")}},[P,A,z,H,pn,D,zt,Qt]),Hn=Yt.length>50?`${Yt.slice(0,50)}…`:Yt,qn=i.useCallback(te=>{if(!te||te.length===0)return;const Fe=[];for(let Ge=0;Ge<te.length;Ge+=1){const Ft=te[Ge];Gz(Ft)&&Fe.push({file:Ft,previewUrl:Wz(Ft)?URL.createObjectURL(Ft):""})}Fe.length>0&&Oe(Ge=>[...Ge,...Fe])},[]),ns=i.useCallback(te=>{Oe(Fe=>{const Ge=Fe[te];return Ge?.previewUrl&&URL.revokeObjectURL(Ge.previewUrl),Fe.filter((Ft,tn)=>tn!==te)})},[]),ss=i.useCallback(te=>{qn(te.clipboardData?.files)},[qn]),ms=i.useCallback(()=>{if(typeof window>"u"||window.innerWidth>$s)return;const te=nt.current;!te||te.disabled||te.focus({preventScroll:!0})},[]),ys=i.useCallback(()=>{typeof window>"u"||window.innerWidth>$s||(Q.current=!0)},[]),hs=i.useCallback(async()=>{const te=j.trim(),Fe=Ye.current;if(!(!te&&Fe.length===0)&&!kt){if(q(""),B(!1),Y(""),Ue(-1),te==="/help"){ce(!0),ms(),Q.current=!1;return}if(te==="/clear"||te==="/new"){Xt(),rn(),Fe.forEach(Ge=>{Ge.previewUrl&&URL.revokeObjectURL(Ge.previewUrl)}),Oe(Ge=>Ge.filter(Ft=>!Fe.includes(Ft)));try{if(N==="model"){const Ge=So(fn);if(!Ge)return;await Qt(_r,Ge.modelProvider,Ge.modelId)}else C&&await Qt(C)}catch{n("Failed to clear conversation","error")}finally{ms(),Q.current=!1}return}try{ce(!1),await xn(te,Fe.map(Ge=>Ge.file)),Fe.forEach(Ge=>{Ge.previewUrl&&URL.revokeObjectURL(Ge.previewUrl)}),Oe(Ge=>Ge.filter(Ft=>!Fe.includes(Ft)))}catch{}finally{ms(),Q.current=!1}}},[n,N,rn,ms,kt,j,fn,C,xn,Qt,Xt]),On=i.useCallback(te=>{te.preventDefault(),He.current+=1,Ve(!0)},[]),ws=i.useCallback(te=>{te.preventDefault(),te.dataTransfer.dropEffect="copy",Ve(!0)},[]),Rs=i.useCallback(te=>{te.preventDefault(),He.current=Math.max(0,He.current-1),He.current===0&&Ve(!1)},[]),Ns=i.useCallback(te=>{te.preventDefault(),He.current=0,Ve(!1),qn(te.dataTransfer?.files)},[qn]),ee=i.useCallback((te,Fe)=>{const Ge=Hz(te,Fe);if(Ge){B(!0),Y(Ge.filter),Ue(Ge.start);return}B(!1),Y(""),Ue(-1)},[]),_e=i.useCallback((te=nt.current)=>{te&&(te.style.height="auto",te.style.height=`${zz(te.scrollHeight)}px`)},[]),ft=i.useCallback(te=>{q(Fe=>{const Ge=Zg(Fe);if(!Ge)return Fe;const Ft=`/skill:${te.name} `,tn=Fe.slice(0,Ge.start)+Ft+Fe.slice(Ge.end);return window.requestAnimationFrame(()=>{nt.current&&(_e(nt.current),nt.current.focus())}),tn}),Z(!1),ie(""),ne(0)},[_e]),Ot=i.useCallback(te=>{const Fe=nt.current;if(!Fe||se<0)return;const Ge=Fe.selectionStart??ot.current,Ft=Fe.selectionEnd??Ge,tn=Math.max(Ge,Ft),Mn=Math.min(se,tn),Vn=`${`@${te.name.replace(/\s+/g,"_")}`} `,as=j.slice(0,Mn)+Vn+j.slice(tn),ps=Mn+Vn.length;q(as),B(!1),Y(""),je(0),Ue(-1),window.requestAnimationFrame(()=>{nt.current&&(_e(nt.current),nt.current.focus(),nt.current.setSelectionRange(ps,ps))})},[se,j,_e]),O=i.useCallback(te=>{const Fe=te.target.value,Ge=te.target.selectionStart??Fe.length;_e(te.target),ot.current=Ge,q(Fe),Pe&&Fe.trim().length>0&&ce(!1),ee(Fe,Ge);const Ft=Zg(Fe);Ft?(Z(!0),ie(Ft.filter)):(Z(!1),ie("")),tt.detectMention(Fe,Ge),$e(tt.mentionActive),tt.mentionActive&&bt(te.target)},[tt,Pe,_e,bt,ee]);i.useLayoutEffect(()=>{_e()},[j,_e]);const qe=i.useCallback(()=>{if(Q.current){window.requestAnimationFrame(()=>{ms()});return}typeof window<"u"&&window.innerWidth<=$s&&Bt.current&&(Ke.current=!0,Bt.current.style.removeProperty("--vv-height"),Bt.current.style.removeProperty("--vv-offset-top"),window.setTimeout(()=>{Ke.current=!1},450)),ye.current!==null&&window.clearTimeout(ye.current),ye.current=window.setTimeout(()=>{B(!1),Y(""),Ue(-1),$e(!1),tt.dismissMention(),ye.current=null},120),it.current!==null&&window.clearTimeout(it.current),it.current=window.setTimeout(()=>{Z(!1),it.current=null},120)},[tt,ms]),Ze=i.useCallback(()=>{Ke.current=!1,ye.current!==null&&(window.clearTimeout(ye.current),ye.current=null),it.current!==null&&(window.clearTimeout(it.current),it.current=null)},[]),Je=i.useCallback(te=>{const Fe=te.currentTarget,Ge=Fe.selectionStart??Fe.value.length;ot.current=Ge,ee(Fe.value,Ge),tt.detectMention(Fe.value,Ge),$e(tt.mentionActive),tt.mentionActive&&bt(Fe)},[ee,tt,bt]),pt=i.useCallback(te=>{te.key!=="Escape"&&Je(te)},[Je]),At=i.useCallback(te=>{dt(Fe=>{const Ge=new Set(Fe);return Ge.has(te)?Ge.delete(te):Ge.add(te),Ge})},[]),Lt=i.useCallback((te,Fe=!1)=>Fe?t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--plain",children:te}):t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--markdown",children:t.jsx(ti,{remarkPlugins:[ni],components:Dy,children:te})}),[]),ln=i.useCallback(te=>{if(ot.current=te.currentTarget.selectionStart??ot.current,tt.mentionActive&&tt.files.length>0){if(tt.handleKeyDown(te,j),te.key==="Enter"||te.key==="Tab"){const Fe=tt.files[tt.selectedIndex];if(Fe){const Ge=tt.selectFile(Fe,j);q(Ge),tt.dismissMention(),$e(!1)}}return}if(ue&&te.key==="ArrowDown"){te.preventDefault(),In.length>0&&je(Fe=>(Fe+1)%In.length);return}if(ue&&te.key==="ArrowUp"){te.preventDefault(),In.length>0&&je(Fe=>Fe===0?In.length-1:Fe-1);return}if(ue&&te.key==="Enter"){te.preventDefault();const Fe=In[xe]??In[0];Fe&&Ot(Fe);return}if(ue&&te.key==="Escape"){te.preventDefault(),te.stopPropagation(),B(!1),Y(""),Ue(-1);return}if(re&&gn.length>0&&te.key==="ArrowDown"){te.preventDefault(),ne(Fe=>(Fe+1)%gn.length);return}if(re&&gn.length>0&&te.key==="ArrowUp"){te.preventDefault(),ne(Fe=>Fe===0?gn.length-1:Fe-1);return}if(re&&(te.key==="Enter"||te.key==="Tab")){te.preventDefault();const Fe=gn[ve]??gn[0];Fe&&ft(Fe);return}if(re&&te.key==="Escape"){te.preventDefault(),Z(!1),ie("");return}te.key!=="Enter"||te.shiftKey||(te.preventDefault(),hs())},[ue,In,xe,Ot,hs,tt,j,re,gn,ve,ft]),kn=i.useCallback(()=>{if(Ie.current){Ie.current=!1;return}if(g){w(!1);return}typeof window<"u"&&window.innerWidth<=$s&&ae.current?.focus({preventScroll:!0}),w(!0)},[g,w]);return t.jsxs(t.Fragment,{children:[t.jsx("input",{ref:ae,type:"text",className:"quick-chat-stealth-input","aria-hidden":"true",tabIndex:-1}),s&&t.jsx("button",{ref:be,type:"button",className:"quick-chat-fab","aria-label":"Open quick chat","data-testid":"quick-chat-fab","data-dragging":et?"true":"false",style:{right:he.x,bottom:he.y},onPointerDown:vt,onClick:kn,children:t.jsx(na,{size:24})}),g&&t.jsxs("div",{className:`quick-chat-panel${y&&v?" quick-chat-panel--keyboard-open":""}`,ref:Bt,"data-testid":"quick-chat-panel",style:{...cn?{right:he.x+Tt.right,bottom:Ct+Tt.bottom,width:Et.width,height:Et.height}:{}},children:[cn&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"n","data-testid":"quick-chat-resize-n",onPointerDown:Jt,role:"separator","aria-orientation":"horizontal","aria-label":"Resize panel from top"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"s","data-testid":"quick-chat-resize-s",onPointerDown:Jt,role:"separator","aria-orientation":"horizontal","aria-label":"Resize panel from bottom"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"e","data-testid":"quick-chat-resize-e",onPointerDown:Jt,role:"separator","aria-orientation":"vertical","aria-label":"Resize panel from right"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"w","data-testid":"quick-chat-resize-w",onPointerDown:Jt,role:"separator","aria-orientation":"vertical","aria-label":"Resize panel from left"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"nw","data-testid":"quick-chat-resize-nw",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from top-left corner"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"ne","data-testid":"quick-chat-resize-ne",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from top-right corner"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"sw","data-testid":"quick-chat-resize-sw",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from bottom-left corner"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"se","data-testid":"quick-chat-resize-se",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from bottom-right corner"})]}),t.jsxs("div",{className:"quick-chat-panel-header",children:[t.jsxs("div",{className:"quick-chat-panel-title-wrap",children:[t.jsx("h3",{children:"Quick Chat"}),N==="model"&&de&&(()=>{const te=Un?.provider??mn?.modelProvider??"";return b==="mobile"&&de.length>12&&te?t.jsx("span",{className:"quick-chat-model-tag quick-chat-model-tag--icon","data-testid":"quick-chat-model-tag",title:de,"aria-label":de,children:t.jsx(Kn,{provider:te,size:"sm"})}):t.jsx("span",{className:"quick-chat-model-tag","data-testid":"quick-chat-model-tag",title:de,children:de})})()]}),t.jsxs("div",{className:"quick-chat-panel-header-actions",children:[t.jsx("button",{type:"button",className:"btn-icon quick-chat-new-chat-btn","data-testid":"quick-chat-new-thread","aria-label":"Start a new chat",onClick:ze,disabled:zt,children:t.jsx(Bn,{size:16})}),t.jsx("button",{type:"button",className:"btn-icon","aria-label":"Close quick chat","data-testid":"quick-chat-close",onClick:()=>w(!1),children:t.jsx(yn,{size:16})})]})]}),t.jsxs("div",{className:"quick-chat-panel-agent-select","data-testid":"quick-chat-session-select",children:[t.jsx("label",{htmlFor:"quick-chat-session-select",className:"visually-hidden",children:"Select session"}),t.jsxs("select",{id:"quick-chat-session-select",value:Vt?.id??"",onChange:te=>qt(te.target.value),"data-testid":"quick-chat-session-dropdown",children:[t.jsx("option",{value:"",disabled:!0,children:zt?"Loading sessions…":"Select a session"}),Sn.map(te=>t.jsx("option",{value:te.id,children:te.label},te.id))]})]}),k&&t.jsxs("div",{className:"quick-chat-new-session-chooser","data-testid":"quick-chat-new-session-chooser",children:[t.jsxs("div",{className:"quick-chat-inline-mode-toggle","data-testid":"quick-chat-inline-mode-toggle",children:[t.jsx("button",{type:"button",className:`quick-chat-mode-btn${z==="model"?" quick-chat-mode-btn--active":""}`,"data-testid":"quick-chat-inline-mode-model",onClick:()=>_("model"),children:"Model"}),t.jsx("button",{type:"button",className:`quick-chat-mode-btn${z==="agent"?" quick-chat-mode-btn--active":""}`,"data-testid":"quick-chat-inline-mode-agent",onClick:()=>_("agent"),children:"Agent"})]}),z==="agent"?t.jsxs("div",{className:"quick-chat-panel-agent-select",children:[t.jsx("label",{htmlFor:"quick-chat-new-agent-select",className:"visually-hidden",children:"Select agent for new chat"}),t.jsx("select",{id:"quick-chat-new-agent-select",value:A,onChange:te=>X(te.target.value),"data-testid":"quick-chat-new-agent-select",children:h.map(te=>t.jsx("option",{value:te.id,children:Oz(te)},te.id))})]}):t.jsx("div",{className:"quick-chat-panel-agent-select","data-testid":"quick-chat-new-model-select",children:t.jsx(Ms,{id:"quick-chat-new-model-select",models:T,value:H,onChange:M,label:"Select model override",placeholder:W?"Loading models…":"Select a model",disabled:W||T.length===0,favoriteProviders:o,favoriteModels:l,onToggleFavorite:c,onToggleModelFavorite:d})}),t.jsxs("div",{className:"quick-chat-new-session-actions",children:[t.jsx("button",{type:"button",className:"btn","data-testid":"quick-chat-new-session-cancel",onClick:()=>{R(!1),_("model")},children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"quick-chat-new-session-submit",onClick:()=>void Pt(),disabled:zt||(z==="agent"?!A:!So(H||D||P)),children:"Create"})]})]}),t.jsx("div",{className:"quick-chat-panel-messages",ref:Re,"data-testid":"quick-chat-messages",onScroll:xt,children:zt?t.jsx("div",{className:"quick-chat-panel-empty",children:"Loading conversation…"}):dn?t.jsxs(t.Fragment,{children:[hn.map(te=>t.jsx(eb,{message:te,forcePlain:te.role!=="user"&&De.has(te.id),mentionAgentsByName:Ne,roomContext:u,onToggleRender:At},te.id)),Pe&&t.jsx("div",{className:"quick-chat-panel-message quick-chat-panel-message--received","data-testid":"quick-chat-help-message",children:Lt("Available commands:\n- `/new` or `/clear` — Clear conversation and start fresh\n- `/skill:{name}` — Use a specific skill\n- `/help` — Show this help")}),t.jsxs("div",{className:"quick-chat-panel-message quick-chat-panel-message--received quick-chat-panel-message--streaming","data-testid":"quick-chat-streaming-message",children:[An?t.jsxs(t.Fragment,{children:[t.jsx("div",{"data-testid":"quick-chat-streaming-text",children:Lt(An,De.has("__streaming__"))}),t.jsx("button",{type:"button",className:`quick-chat-message-render-toggle${De.has("__streaming__")?" quick-chat-message-render-toggle--plain":""}`,"data-testid":"quick-chat-message-render-toggle","aria-label":De.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>At("__streaming__"),children:De.has("__streaming__")?t.jsx(Zu,{size:14}):t.jsx(Gr,{size:14})})]}):t.jsx("p",{className:"quick-chat-panel-waiting","data-testid":"quick-chat-waiting",children:nn?"Thinking…":"Connecting…"}),$y(Dn,!0),nn&&t.jsxs("details",{className:"chat-message-thinking","data-testid":"quick-chat-streaming-thinking",children:[t.jsx("summary",{children:"Thinking"}),t.jsx("pre",{className:"chat-message-thinking-content",children:nn})]})]})]}):sn?t.jsx("div",{className:"quick-chat-panel-empty",children:"Loading conversation…"}):hn.length===0&&!An&&!nn&&!dn&&!Pe?t.jsx("div",{className:"quick-chat-panel-empty",children:"No messages yet. Start the conversation!"}):t.jsxs(t.Fragment,{children:[hn.map(te=>t.jsx(eb,{message:te,forcePlain:te.role!=="user"&&De.has(te.id),mentionAgentsByName:Ne,roomContext:u,onToggleRender:At},te.id)),Pe&&t.jsx("div",{className:"quick-chat-panel-message quick-chat-panel-message--received","data-testid":"quick-chat-help-message",children:Lt("Available commands:\n- `/new` or `/clear` — Clear conversation and start fresh\n- `/skill:{name}` — Use a specific skill\n- `/help` — Show this help")})]})}),ge&&t.jsxs("button",{type:"button",className:"btn btn-sm quick-chat-jump-to-latest","data-testid":"quick-chat-jump-to-latest",onClick:Gt,children:[t.jsx(jn,{size:14}),"Latest"]}),Ee.length>0&&t.jsx("div",{className:"quick-chat-attachment-previews","data-testid":"quick-chat-attachment-previews",children:Ee.map((te,Fe)=>t.jsxs("div",{className:"quick-chat-attachment-preview","data-testid":`quick-chat-attachment-preview-${Fe}`,children:[te.previewUrl?t.jsx("img",{src:te.previewUrl,alt:te.file.name}):t.jsx("span",{className:"quick-chat-attachment-preview-name",children:te.file.name}),t.jsx("button",{type:"button",className:"quick-chat-attachment-remove","data-testid":`quick-chat-attachment-remove-${Fe}`,"aria-label":`Remove ${te.file.name}`,onClick:()=>ns(Fe),children:"×"})]},`${te.file.name}-${Fe}`))}),t.jsx("div",{className:"quick-chat-panel-input",children:t.jsxs("div",{className:`quick-chat-input-wrapper${ht?" quick-chat-input-wrapper--dragover":""}`,onDragEnter:On,onDragOver:ws,onDragLeave:Rs,onDrop:Ns,children:[t.jsx("input",{ref:ut,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,tabIndex:-1,"aria-hidden":"true",className:"quick-chat-attachment-input",onChange:te=>{qn(te.target.files),te.target.value=""}}),t.jsxs("div",{className:"quick-chat-input-row","data-testid":"quick-chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon quick-chat-attach-btn","data-testid":"quick-chat-attach-btn","aria-label":"Attach files",onClick:()=>ut.current?.click(),children:t.jsx($b,{size:16})}),t.jsx("textarea",{ref:nt,rows:1,className:"quick-chat-textarea",value:j,onChange:O,onKeyDown:ln,onKeyUp:pt,onClick:Je,onBlur:qe,onFocus:Ze,onPaste:ss,onTouchStart:te=>{typeof window>"u"||window.innerWidth>$s||document.activeElement!==te.currentTarget&&(te.preventDefault(),te.currentTarget.focus({preventScroll:!0}))},placeholder:on,disabled:kt,"data-testid":"quick-chat-input"}),dn?t.jsx("button",{type:"button",className:"chat-input-stop quick-chat-send-btn",onPointerDown:te=>{typeof window>"u"||window.innerWidth>$s||(te.preventDefault(),te.pointerType&&te.pointerType!=="mouse"&&(wt.current=!0,Xt()))},onTouchStart:te=>{typeof window>"u"||window.innerWidth>$s||(te.preventDefault(),wt.current=!0,Xt())},onMouseDown:te=>{typeof window>"u"||window.innerWidth>$s||te.preventDefault()},onClick:()=>{if(wt.current){wt.current=!1;return}Xt()},"aria-label":"Stop generation","data-testid":"quick-chat-stop",children:t.jsx(Fi,{size:14})}):t.jsx("button",{type:"button",className:"quick-chat-send-btn",onPointerDown:te=>{typeof window>"u"||window.innerWidth>$s||(te.preventDefault(),te.pointerType&&te.pointerType!=="mouse"&&(wt.current=!0,ys(),ms(),hs()))},onTouchStart:te=>{typeof window>"u"||window.innerWidth>$s||(te.preventDefault(),wt.current=!0,ys(),ms(),hs())},onMouseDown:te=>{typeof window>"u"||window.innerWidth>$s||te.preventDefault()},onClick:()=>{if(wt.current){wt.current=!1;return}hs()},disabled:kt||j.trim().length===0&&Ee.length===0,"data-testid":"quick-chat-send",children:t.jsx(qa,{size:16})})]}),t.jsx(_z,{agents:h,filter:L,highlightedIndex:xe,visible:ue,onSelect:Ot,position:"above",roomMemberIds:u?.memberIds,roomName:u?.roomName}),t.jsx($z,{visible:tt.mentionActive&&!ue,position:mt,files:tt.files,selectedIndex:tt.selectedIndex,onSelect:te=>{const Fe=tt.selectFile(te,j);q(Fe),tt.dismissMention(),$e(!1),nt.current?.focus()},loading:tt.loading}),re&&t.jsx("div",{className:"chat-skill-menu","data-testid":"quick-chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ce?t.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):gn.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:pe?"No skills found":"No skills available"}):gn.map((te,Fe)=>t.jsxs("button",{type:"button",role:"option","aria-selected":Fe===ve,className:`chat-skill-menu-item${Fe===ve?" chat-skill-menu-item--highlighted":""}`,onMouseDown:Ge=>Ge.preventDefault(),onMouseEnter:()=>ne(Fe),onClick:()=>ft(te),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:te.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:te.relativePath,children:te.relativePath})]},te.id))}),Yt&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:`Queued: ${Hn}`}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:rn,children:"×"})]})]})})]})]})}function Co(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function tb(e){return e.status==="generating"||e.status==="awaiting_input"}function Eo(e){return e==="complete"||e==="error"}function Qz(e){const[n,s]=i.useState([]),a=i.useRef(new Map),r=i.useRef(new Map),{sessions:o,broadcastUpdate:l,broadcastCompleted:c,requestSync:d}=eo(),u=i.useCallback(()=>{lm(e).then(p=>{const g=p.filter(v=>{const b=Co(v.updatedAt),y=r.current.get(v.id);return y===void 0?!0:b<=y?!1:(r.current.delete(v.id),!0)}),w=new Map;for(const v of g)w.set(v.id,Co(v.updatedAt));a.current=w,s(g)}).catch(p=>{console.warn("[useBackgroundSessions] Failed to fetch AI sessions:",p)})},[e]);i.useEffect(()=>{d(),u()},[u,d]),i.useEffect(()=>{s(p=>{if(o.size===0)return p;let g=!1;const w=new Map(p.map(v=>[v.id,v]));for(const v of o.values()){if(e&&v.projectId&&v.projectId!==e)continue;const b=v.lastEventTimestamp,y=a.current.get(v.sessionId)??0;if(b<y)continue;const N=r.current.get(v.sessionId);if(N!==void 0&&b<=N)continue;if(N!==void 0&&b>N&&!Eo(v.status)&&r.current.delete(v.sessionId),Eo(v.status)){w.delete(v.sessionId)&&(g=!0),a.current.set(v.sessionId,b);continue}const S=w.get(v.sessionId),C=v.type??S?.type,x=v.title??S?.title;if(!S&&(!C||!x))continue;const k={id:v.sessionId,type:C??"planning",status:v.status,title:x??"AI Session",projectId:v.projectId??S?.projectId??e??null,lockedByTab:v.owningTabId??S?.lockedByTab??null,updatedAt:v.updatedAt??S?.updatedAt??new Date(b).toISOString()},R=w.get(v.sessionId);(!R||R.status!==k.status||R.title!==k.title||R.type!==k.type||R.projectId!==k.projectId||R.lockedByTab!==k.lockedByTab||R.updatedAt!==k.updatedAt)&&(w.set(v.sessionId,k),a.current.set(v.sessionId,b),g=!0)}return g?[...w.values()].sort((v,b)=>Co(b.updatedAt)-Co(v.updatedAt)):p})},[e,o]),i.useEffect(()=>{const p=e?`?projectId=${encodeURIComponent(e)}`:"",g=v=>{try{const b=JSON.parse(v.data),y=Co(b.updatedAt)||Date.now();s(N=>{const S=a.current.get(b.id)??0;if(y<S)return N;const C=r.current.get(b.id);if(C!==void 0&&y<=C)return N;if(C!==void 0&&y>C&&!Eo(b.status)&&r.current.delete(b.id),a.current.set(b.id,y),Eo(b.status))return N.filter(k=>k.id!==b.id);const x=N.findIndex(k=>k.id===b.id);if(x>=0){const k=[...N];return k[x]=b,k}return tb(b)?[b,...N]:N}),l({sessionId:b.id,status:b.status,needsInput:b.status==="awaiting_input",type:b.type,title:b.title,projectId:b.projectId,owningTabId:b.lockedByTab,updatedAt:b.updatedAt,timestamp:y}),Eo(b.status)&&c({sessionId:b.id,status:b.status,timestamp:y})}catch{}},w=v=>{try{const b=JSON.parse(v.data),y=Date.now();r.current.set(b,y),a.current.set(b,Math.max(a.current.get(b)??0,y)),c({sessionId:b,status:"complete",timestamp:y}),s(N=>N.filter(S=>S.id!==b))}catch{}};return fi(`/api/events${p}`,{events:{"ai_session:updated":g,"ai_session:deleted":w},onReconnect:()=>{u()}})},[c,l,e,u]);const h=i.useCallback(async p=>{const w=n.find(N=>N.id===p)?.type,v=sr();let b=!1;if(w==="planning")try{await Yb(p,e,v)}catch(N){b=!0,N instanceof Error&&N.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of planning session ${p} despite lock by another tab`)}else if(w==="subtask")try{await Zb(p,e,v)}catch(N){b=!0,N instanceof Error&&N.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of subtask session ${p} despite lock by another tab`)}else if(w==="mission_interview")try{await ix(p,e,v)}catch(N){b=!0,N instanceof Error&&N.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of mission interview session ${p} despite lock by another tab`)}b&&console.warn(`[useBackgroundSessions] Cancellation failed for session ${p}, attempting delete anyway`);const y=Date.now();r.current.set(p,y),a.current.set(p,Math.max(a.current.get(p)??0,y)),c({sessionId:p,status:"complete",timestamp:y});try{await ax(p)}catch{}s(N=>N.filter(S=>S.id!==p))},[c,e,n]),m=i.useMemo(()=>n.filter(p=>tb(p)),[n]),f=i.useMemo(()=>m.filter(p=>p.type==="planning"),[m]);return{sessions:m,generating:m.filter(p=>p.status==="generating").length,needsInput:m.filter(p=>p.status==="awaiting_input").length,planningSessions:f,dismissSession:h,refresh:u}}const vc="fusion:hide-session-banners",Yu="fusion:session-banner-pref-changed";function Xz(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(vc)==="1"}catch{return!1}}function Zz(e){if(typeof window>"u")return()=>{};const n=a=>{a.key===vc&&e()},s=()=>e();return window.addEventListener("storage",n),window.addEventListener(Yu,s),()=>{window.removeEventListener("storage",n),window.removeEventListener(Yu,s)}}function ZB(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(vc,"1"):window.localStorage.removeItem(vc),window.dispatchEvent(new Event(Yu))}catch{}}function e6(){return i.useSyncExternalStore(Zz,Xz,()=>!1)}function ks(e){return{...e,column:Ub(e.column),dependencies:Array.isArray(e.dependencies)?e.dependencies:[],steps:Array.isArray(e.steps)?e.steps:[],log:Array.isArray(e.log)?e.log:[]}}function nb(e,n){return!e&&!n?0:e?n?e.localeCompare(n):1:-1}function t6(e,n){return{...n,columnMovedAt:e.columnMovedAt??n.columnMovedAt,executionStartedAt:e.executionStartedAt??n.executionStartedAt,executionCompletedAt:e.executionCompletedAt??n.executionCompletedAt,firstExecutionAt:e.firstExecutionAt??n.firstExecutionAt,cumulativeActiveMs:n.cumulativeActiveMs??e.cumulativeActiveMs,worktree:n.worktree??e.worktree,modifiedFiles:n.modifiedFiles??e.modifiedFiles,timedExecutionMs:n.timedExecutionMs??e.timedExecutionMs,workflowStepResults:n.workflowStepResults??e.workflowStepResults,tokenUsage:n.tokenUsage??e.tokenUsage,mergeDetails:n.mergeDetails??e.mergeDetails}}function cu(e,n){if(nb(n.updatedAt,e.updatedAt)<0)return e;if(e.column===n.column)return t6(e,n);const a=nb(e.columnMovedAt,n.columnMovedAt);return e.columnMovedAt&&!n.columnMovedAt?{...n,column:e.column,columnMovedAt:e.columnMovedAt}:a>=0?{...n,column:e.column,columnMovedAt:e.columnMovedAt}:n}function n6(e){const n=e?.projectId,s=e?.searchQuery,a=e?.sseEnabled??!0,[r,o]=i.useState([]),[l,c]=i.useState(!1),d=i.useRef(l);d.current=l;const u=i.useRef(r),h=i.useRef(0),m=i.useRef(0),f=i.useRef(s),p=i.useRef(null),g=i.useRef(void 0),w=i.useRef(0),v=i.useRef(n);u.current=r,f.current=s,v.current!==n&&(v.current=n,w.current++);const b=1e3,y=i.useCallback(async D=>{const E=++h.current,P=n,$=D?.searchQueryOverride??f.current,j=D?.includeArchivedOverride??d.current;try{const q=await WN(void 0,void 0,P,$,j);if(h.current!==E||n!==P)return;o(q.map(ks)),g.current=Date.now()}catch{if(h.current!==E||n!==P)return;if(D?.clearOnError){o([]);return}o(q=>q)}},[n]);p.current=y;const N=i.useCallback(async()=>{d.current||(c(!0),d.current=!0,await p.current({includeArchivedOverride:!0}))},[]),S=i.useRef(s);i.useEffect(()=>{if(s===void 0&&S.current===void 0)return;S.current=s;const D=setTimeout(()=>{y({searchQueryOverride:s})},300);return()=>clearTimeout(D)},[s]),i.useEffect(()=>{y({clearOnError:!0});const D=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-m.current<b||(m.current=E,y())};return document.addEventListener("visibilitychange",D),()=>{document.removeEventListener("visibilitychange",D)}},[y]),i.useEffect(()=>{if(a===!1)return;const D=w.current,E=n?`?projectId=${encodeURIComponent(n)}`:"",P=()=>w.current!==D;let $=!0;const j=re=>{if(P())return;const Z=ks(JSON.parse(re.data));if(f.current){p.current({searchQueryOverride:f.current});return}o(pe=>{const ie=pe.findIndex(Y=>Y.id===Z.id);if(ie===-1)return[...pe,Z];const ve=pe[ie],ne=cu(ve,Z);if(ne===ve)return pe;const L=[...pe];return L[ie]=ne,L}),g.current=Date.now()},q=re=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const{task:Z,to:pe}=JSON.parse(re.data),ie=ks(Z),ve={...ie,column:Ub(pe,ie.column)};o(ne=>{const L=ne.findIndex(ue=>ue.id===ve.id);if(L===-1)return[...ne,ve];const Y=[...ne];return Y[L]=ve,Y}),g.current=Date.now()},le=re=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const Z=ks(JSON.parse(re.data));o(pe=>{const ie=pe.findIndex(Y=>Y.id===Z.id);if(ie===-1)return[...pe,Z];const ve=pe[ie],ne=cu(ve,Z);if(ne===ve)return pe;const L=[...pe];return L[ie]=ne,L}),g.current=Date.now()},fe=re=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const Z=ks(JSON.parse(re.data));o(pe=>pe.filter(ie=>ie.id!==Z.id))},Ce=re=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const{task:Z}=JSON.parse(re.data),ie={...ks(Z),column:"done"};o(ve=>{const ne=ve.findIndex(Y=>Y.id===ie.id);if(ne===-1)return[...ve,ie];const L=[...ve];return L[ne]=ie,L})},Ae=fi(`/api/events${E}`,{events:{"task:created":j,"task:moved":q,"task:updated":le,"task:deleted":fe,"task:merged":Ce},onReconnect:()=>{$&&(P()||p.current())}});return()=>{$=!1,Ae()}},[n,a]);const C=i.useCallback(async D=>{const E=ks(await Vb(D,n));return o(P=>P.some($=>$.id===E.id)?P:[...P,E]),E},[n]),x=i.useCallback(async(D,E,P)=>ks(await KN(D,E,n,P)),[n]),k=i.useCallback(async D=>ks(await Wb(D,n)),[n]),R=i.useCallback(async D=>ks(await Gb(D,n)),[n]),z=i.useCallback(async(D,E)=>ks(await JN(D,n,E)),[n]),_=i.useCallback(async D=>YN(D,n),[n]),A=i.useCallback(async D=>ks(await QN(D,n)),[n]),X=i.useCallback(async D=>ks(await XN(D,n)),[n]),H=i.useCallback(async D=>{const E=ks(await ZN(D,n));return o(P=>P.some($=>$.id===E.id)?P:[...P,E]),E},[n]),M=i.useCallback(async(D,E)=>{const P=u.current.find(j=>j.id===D),$=P?{...P,...E,updatedAt:new Date().toISOString()}:void 0;$&&o(j=>j.map(q=>q.id===D?$:q));try{const j=ks(await Ds(D,E,n));return o(q=>q.map(le=>le.id===D?j:le)),j}catch(j){throw P&&o(q=>q.map(le=>le.id===D?P:le)),j}},[n]),T=i.useCallback(async D=>{const E=ks(await eS(D,n));return o(P=>P.map($=>$.id===D?E:$)),E},[n]),F=i.useCallback(async D=>{const E=ks(await tS(D,n));return o(P=>P.map($=>$.id===D?E:$)),E},[n]),W=i.useCallback(async()=>{const E=(await nS(n)).map(ks);return o(P=>P.map($=>E.find(q=>q.id===$.id)||$)),E},[n]),oe=i.useCallback(D=>{if(D.length===0)return;if(f.current){p.current({searchQueryOverride:f.current});return}const E=D.map(ks);o(P=>{let $=P;for(const j of E){const q=$.findIndex(Ce=>Ce.id===j.id);if(q===-1){$===P&&($=[...P]),$.push(j);continue}const le=$[q],fe=cu(le,j);fe!==le&&($===P&&($=[...P]),$[q]=fe)}return $}),g.current=Date.now()},[]);return{tasks:r,createTask:C,moveTask:x,pauseTask:k,unpauseTask:R,deleteTask:z,mergeTask:_,retryTask:A,resetTask:X,duplicateTask:H,updateTask:M,archiveTask:T,unarchiveTask:F,archiveAllDone:W,loadArchivedTasks:N,includeArchived:l,refreshTasks:y,ingestCreatedTasks:oe,lastFetchTimeMs:g.current}}const s6=5e3,i6=1e3;function a6(e){const s=(b1(e)?e.nodeMappings??e.projectNodeMappings??e.pathMappings??[]:[]).filter(a=>!!a?.nodeId&&!!a?.path).map(a=>({nodeId:a.nodeId,nodeName:a.nodeName,path:a.path,available:a.available!==!1}));return s.length>0?s:e.nodeId&&e.path?[{nodeId:e.nodeId,nodeName:e._sourceNodeName,path:e.path,available:!0}]:[]}function sb(e){return e.map(n=>({...n,nodeMappings:a6(n)}))}function r6(){const[e,n]=i.useState([]),[s,a]=i.useState(!0),[r,o]=i.useState(null),l=i.useRef(null),c=i.useRef(0),d=i.useCallback(async()=>{try{o(null);const f=await Eh();n(sb(f))}catch(f){o(f instanceof Error?f.message:"Failed to fetch projects")}},[]);i.useEffect(()=>{let f=!1;async function p(){a(!0);const w=performance.now();try{const v=await Eh(),b=sb(v),y=Math.round(performance.now()-w);console.log(`[useProjects] initial fetchProjectsAcrossNodes took ${y}ms (${b.length} projects)`),f||(n(b),o(null))}catch(v){const b=Math.round(performance.now()-w);console.warn(`[useProjects] initial fetch failed after ${b}ms: ${v instanceof Error?v.message:String(v)}`),f||o(v instanceof Error?v.message:"Failed to fetch projects")}finally{f||a(!1)}}p();const g=()=>{if(document.visibilityState!=="visible")return;const w=Date.now();w-c.current<i6||(c.current=w,d())};return document.addEventListener("visibilitychange",g),()=>{f=!0,document.removeEventListener("visibilitychange",g)}},[d]),i.useEffect(()=>{if(!s)return l.current=setInterval(()=>{d()},s6),()=>{l.current&&(clearInterval(l.current),l.current=null)}},[s,d]);const u=i.useCallback(async f=>{const p=await S1(f);return n(g=>[...g,p]),p},[]),h=i.useCallback(async(f,p)=>{const g=await I1(f,p);return n(w=>w.map(v=>v.id===f?g:v)),g},[]),m=i.useCallback(async f=>{await tx(f),n(p=>p.filter(g=>g.id!==f))},[]);return{projects:e,loading:s,error:r,refresh:d,register:u,update:h,unregister:m}}const o6="kb-dashboard-current-project";function l6(e){return e??"local"}function c6(e,n={}){const{nodeId:s=null}=n,[a,r]=i.useState(null),[o,l]=i.useState(!0),c=i.useRef(!1),d=i.useRef(!1),u=i.useRef(null),h=l6(s);i.useEffect(()=>{let p=!1;async function g(){try{const w=await aa();if(p)return;u.current=w.dashboardCurrentProjectIdByNode??{};const v=u.current[h];if(v){const b=e.find(y=>y.id===v);b&&(r(b),c.current=!0)}if(!v)try{const b=localStorage.getItem(o6);if(b){const y=JSON.parse(b);y?.id&&e.some(S=>S.id===y.id)&&(r(y),c.current=!0,u.current={...u.current,[h]:y.id},await Jn({dashboardCurrentProjectIdByNode:u.current}).catch(()=>{}))}}catch{}}catch{}finally{p||l(!1)}}return g(),()=>{p=!0}},[h,e]),i.useEffect(()=>{if(!o){if(a){if(!e.some(w=>w.id===a.id)&&e.length>0){const w=e.find(v=>v.status==="active");r(w||e[0]||null);return}const g={...u.current,[h]:a.id};u.current=g,Jn({dashboardCurrentProjectIdByNode:g}).catch(()=>{})}else if(e.length>0&&!d.current){const p=e.find(g=>g.status==="active");p&&r(p)}}},[a,e,o,h]);const m=i.useCallback(p=>{if(d.current=!1,r(p),p){const g={...u.current,[h]:p.id};u.current=g,Jn({dashboardCurrentProjectIdByNode:g}).catch(()=>{})}},[h]),f=i.useCallback(()=>{d.current=!0,r(null);const p={...u.current};delete p[h],u.current=p,Jn({dashboardCurrentProjectIdByNode:p}).catch(()=>{})},[h]);return{currentProject:a,setCurrentProject:m,clearCurrentProject:f,loading:o}}const Ly=i.createContext(null);function d6({children:e}){const[n,s]=i.useState([]),a=i.useRef(0),r=i.useRef(new Map),o=i.useCallback(c=>{const d=r.current.get(c);d!==void 0&&(clearTimeout(d),r.current.delete(c)),s(u=>u.filter(h=>h.id!==c))},[]),l=i.useCallback((c,d="info")=>{const u=a.current++;s(m=>[...m,{id:u,message:c,type:d}]);const h=setTimeout(()=>o(u),4e3);r.current.set(u,h)},[o]);return i.useEffect(()=>()=>{r.current.forEach(c=>clearTimeout(c)),r.current.clear()},[]),ka.createElement(Ly.Provider,{value:{toasts:n,addToast:l,removeToast:o}},e)}function u6(){const e=i.useContext(Ly);if(!e)throw new Error("useToast must be used within ToastProvider");return e}const Oy="kb-dashboard-theme-mode",Fy="kb-dashboard-color-theme",zy="kb-dashboard-font-scale-pct",Qu=100,m6=85,h6=125,By=[..._N],Xu="theme-data",_o="theme-data.css";function p6(){const e=document.baseURI||(typeof document.location<"u"?document.location.href:"");return e?e.startsWith("http://")||e.startsWith("https://")?new URL(`/${_o}`,e).toString():e.startsWith("file://")?e.endsWith("/")?e.slice(0,-1)+`/${_o}`:e.replace(/\/[^/]+$/,`/${_o}`):`/${_o}`:`/${_o}`}const Js=typeof window<"u",f6=Js?i.useLayoutEffect:i.useEffect;function Uy(e){return e==="dark"||e==="light"||e==="system"}function ib(){if(!Js)return"dark";try{const e=localStorage.getItem(Oy);if(Uy(e))return e}catch{}return"dark"}function ab(){if(!Js)return"default";try{const e=localStorage.getItem(Fy);if(e&&By.includes(e))return e}catch{}return"default"}function rb(e){if(Js)try{localStorage.setItem(Oy,e)}catch{}}function ob(e){if(Js)try{localStorage.setItem(Fy,e)}catch{}}function Jo(e){return typeof e!="number"||!Number.isFinite(e)?Qu:Math.min(h6,Math.max(m6,Math.round(e)))}function lb(){if(!Js)return Qu;try{const e=Number(localStorage.getItem(zy));return Jo(e)}catch{return Qu}}function cb(e){if(Js)try{localStorage.setItem(zy,String(Jo(e)))}catch{}}function g6(e,n){return e==="system"?n?"dark":"light":e}function b6(e,n,s,a){if(!Js)return;const r=g6(e,a);document.documentElement.setAttribute("data-theme",r),document.documentElement.setAttribute("data-color-theme",n),document.documentElement.style.fontSize=`${Jo(s)}%`}function db(){if(!Js)return;const e=p6(),n=document.getElementById(Xu);if(n){n.href!==e&&(n.href=e),n.parentNode===document.head&&document.head.lastChild!==n&&document.head.appendChild(n);return}const s=document.createElement("link");s.rel="stylesheet",s.href=e,s.id=Xu,document.head.appendChild(s)}function ub(){if(!Js)return;const e=document.getElementById(Xu);e&&e.remove()}function x6(){const[e,n]=i.useState(()=>ib()),[s,a]=i.useState(()=>ab()),[r,o]=i.useState(()=>lb()),[l,c]=i.useState(!0),[d,u]=i.useState(()=>Js?window.matchMedia("(prefers-color-scheme: dark)").matches:!0),h=i.useRef(e),m=i.useRef(s),f=i.useRef(r),p=i.useRef(!1),g=i.useRef(!1),w=i.useRef(!1);i.useEffect(()=>{h.current=e},[e]),i.useEffect(()=>{m.current=s},[s]),i.useEffect(()=>{f.current=r},[r]),i.useEffect(()=>{if(!Js||!l)return;let N=!1;return aa().then(S=>{if(!N&&(Uy(S.themeMode)&&!p.current&&(h.current!==S.themeMode&&(h.current=S.themeMode,n(S.themeMode)),ib()!==S.themeMode&&rb(S.themeMode)),S.colorTheme&&By.includes(S.colorTheme)&&!g.current&&(m.current!==S.colorTheme&&(m.current=S.colorTheme,a(S.colorTheme)),ab()!==S.colorTheme&&ob(S.colorTheme)),!w.current)){const C=Jo(S.dashboardFontScalePct);f.current!==C&&(f.current=C,o(C)),lb()!==C&&cb(C)}}).catch(S=>{console.warn("[useTheme] Failed to hydrate theme from global settings",S)}).finally(()=>{N||c(!1)}),()=>{N=!0}},[l]),i.useEffect(()=>{if(!Js)return;const N=window.matchMedia("(prefers-color-scheme: dark)"),S=C=>{u(C.matches)};return N.addEventListener("change",S),()=>N.removeEventListener("change",S)},[]),f6(()=>{b6(e,s,r,d)},[e,s,r,d]),i.useEffect(()=>{!Js||l||(s!=="default"?db():ub())},[s,l]);const v=i.useCallback(N=>{p.current=!0,h.current=N,n(N),rb(N),Jn({themeMode:N}).catch(S=>{console.warn("[useTheme] Failed to persist themeMode to global settings",S)})},[]),b=i.useCallback(N=>{g.current=!0,m.current=N,a(N),ob(N),N!=="default"?db():ub(),Jn({colorTheme:N}).catch(S=>{console.warn("[useTheme] Failed to persist colorTheme to global settings",S)})},[]),y=i.useCallback(N=>{const S=Jo(N);w.current=!0,f.current=S,o(S),cb(S),Jn({dashboardFontScalePct:S}).catch(C=>{console.warn("[useTheme] Failed to persist dashboardFontScalePct to global settings",C)})},[]);return{themeMode:e,colorTheme:s,dashboardFontScalePct:r,setThemeMode:v,setColorTheme:b,setDashboardFontScalePct:y,isSystemDark:d}}function v6(e){const{planningSessions:n}=e,[s,a]=i.useState(!1),[r,o]=i.useState(!1),[l,c]=i.useState(null),[d,u]=i.useState(void 0),[h,m]=i.useState(!1),[f,p]=i.useState(null),[g,w]=i.useState(void 0),[v,b]=i.useState(null),[y,N]=i.useState("definition"),[S,C]=i.useState(null),[x,k]=i.useState(!1),[R,z]=i.useState(void 0),[_,A]=i.useState(!1),[X,H]=i.useState(!1),[M,T]=i.useState(!1),[F,W]=i.useState(null),[oe,D]=i.useState(!1),[E,P]=i.useState(!1),[$,j]=i.useState(void 0),[q,le]=i.useState(!1),[fe,Ce]=i.useState(!1),[Ae,re]=i.useState("project"),[Z,pe]=i.useState(null),[ie,ve]=i.useState(!1),[ne,L]=i.useState(!1),[Y,ue]=i.useState(!1),[B,xe]=i.useState(!1),[je,se]=i.useState(!1),[Ue,De]=i.useState(!1),[dt,Pe]=i.useState(!1),ce=!!(v||x||s||r||h||E||q||fe||ie||ne||Y||je||B||M||oe||_||X||Ue||dt),Ee=i.useCallback(()=>a(!0),[]),Oe=i.useCallback(()=>a(!1),[]),ht=i.useCallback(()=>o(!0),[]),Ve=i.useCallback(Dt=>{c(Dt),o(!0)},[]),ge=i.useCallback(()=>{const Dt=n[0];Dt&&(u(Dt.id),o(!0))},[n]),me=i.useCallback(Dt=>{u(Dt),o(!0)},[]),$e=i.useCallback(()=>{o(!1),c(null),u(void 0)},[]),mt=i.useCallback(Dt=>{p(Dt),m(!0)},[]),jt=i.useCallback(Dt=>{w(Dt),m(!0)},[]),tt=i.useCallback(()=>{m(!1),p(null),w(void 0)},[]),bt=i.useCallback((Dt,Bt="definition",be)=>{b(Dt),N(Bt),C(be?.origin??null)},[]),Ie=i.useCallback(Dt=>{b(Dt),N("changes"),C(null)},[]),Xe=i.useCallback(Dt=>{b(Bt=>Bt&&{...Bt,...Dt})},[]),rt=i.useCallback(()=>{b(null),C(null)},[]),It=i.useCallback(Dt=>{z(Dt),k(!0)},[]),_t=i.useCallback(()=>{k(!1),z(void 0)},[]),We=i.useCallback(()=>A(!0),[]),J=i.useCallback(()=>A(!1),[]),ke=i.useCallback(()=>H(!0),[]),ot=i.useCallback(()=>H(!1),[]),ye=i.useCallback(Dt=>{W(Dt??null),T(!0)},[]),it=i.useCallback(()=>{T(!1),W(null)},[]),He=i.useCallback(()=>D(!0),[]),he=i.useCallback(()=>D(!1),[]),et=i.useCallback(()=>{P(Dt=>!Dt)},[]),vt=i.useCallback(()=>{P(!1),j(void 0)},[]),Ct=i.useCallback((Dt,Bt)=>{typeof Dt=="string"&&Dt&&re(Dt),pe(typeof Bt=="string"||Bt===null?Bt:null),le(!0)},[]),Et=i.useCallback(()=>{le(!1),pe(null)},[]),Tt=i.useCallback(()=>Ce(!0),[]),Jt=i.useCallback(()=>Ce(!1),[]),cn=i.useCallback(Dt=>{typeof Dt=="string"&&Dt&&re(Dt)},[]),Vt=i.useCallback(()=>ve(!0),[]),hn=i.useCallback(()=>ve(!1),[]),dn=i.useCallback(()=>L(!0),[]),An=i.useCallback(()=>L(!1),[]),nn=i.useCallback(()=>ue(!0),[]),Dn=i.useCallback(()=>ue(!1),[]),Nn=i.useCallback(()=>xe(!0),[]),zt=i.useCallback(()=>xe(!1),[]),sn=i.useCallback(()=>se(!0),[]),xn=i.useCallback(()=>se(!1),[]),Xt=i.useCallback(async(Dt,Bt)=>{se(!1),j(Bt),P(!0)},[]),Yt=i.useCallback(()=>De(!0),[]),rn=i.useCallback(()=>De(!1),[]),Zt=i.useCallback(()=>Pe(!0),[]),en=i.useCallback(()=>Pe(!1),[]),un=i.useCallback((Dt,Bt)=>{Bt(`Created ${Dt.id} from planning mode`,"success"),o(!1),c(null)},[]),Qt=i.useCallback((Dt,Bt)=>{const be=Dt.map(Re=>Re.id).join(", ");Bt(`Created ${be} from planning mode`,"success"),o(!1),c(null)},[]),pn=i.useCallback((Dt,Bt)=>{const be=Dt.map(Re=>Re.id).join(", ");Bt(`Created ${be} from subtask breakdown`,"success"),m(!1),p(null)},[]);return{newTaskModalOpen:s,isPlanningOpen:r,planningInitialPlan:l,planningResumeSessionId:d,isSubtaskOpen:h,subtaskInitialDescription:f,subtaskResumeSessionId:g,detailTask:v,detailTaskInitialTab:y,detailTaskOrigin:S,settingsOpen:x,settingsInitialSection:R,schedulesOpen:_,githubImportOpen:X,usageOpen:M,usageAnchorRect:F,systemStatsOpen:oe,terminalOpen:E,terminalInitialCommand:$,filesOpen:q,todosOpen:fe,fileBrowserWorkspace:Ae,fileBrowserInitialFile:Z,activityLogOpen:ie,gitManagerOpen:ne,workflowStepsOpen:Y,agentsOpen:B,scriptsOpen:je,setupWizardOpen:Ue,modelOnboardingOpen:dt,anyModalOpen:ce,openNewTask:Ee,closeNewTask:Oe,openPlanning:ht,openPlanningWithInitialPlan:Ve,resumePlanning:ge,openPlanningWithSession:me,closePlanning:$e,openSubtaskBreakdown:mt,openSubtaskWithSession:jt,closeSubtask:tt,openDetailTask:bt,openDetailWithChangesTab:Ie,updateDetailTask:Xe,closeDetailTask:rt,openSettings:It,closeSettings:_t,openSchedules:We,closeSchedules:J,openGitHubImport:ke,closeGitHubImport:ot,openUsage:ye,closeUsage:it,openSystemStats:He,closeSystemStats:he,toggleTerminal:et,closeTerminal:vt,openFiles:Ct,closeFiles:Et,openTodos:Tt,closeTodos:Jt,setFileWorkspace:cn,openActivityLog:Vt,closeActivityLog:hn,openGitManager:dn,closeGitManager:An,openWorkflowSteps:nn,closeWorkflowSteps:Dn,openAgents:Nn,closeAgents:zt,openScripts:sn,closeScripts:xn,runScript:Xt,openSetupWizard:Yt,closeSetupWizard:rn,openModelOnboarding:Zt,closeModelOnboarding:en,onPlanningTaskCreated:un,onPlanningTasksCreated:Qt,onSubtaskTasksCreated:pn}}function y6(e){const[n,s]=i.useState(2),[a,r]=i.useState("."),[o,l]=i.useState(!0),[c,d]=i.useState(!1),[u,h]=i.useState(!1),[m,f]=i.useState(void 0),[p,g]=i.useState(7200*1e3),[w,v]=i.useState(!1),[b,y]=i.useState(20),[N,S]=i.useState(!1),[C,x]=i.useState(25),[k,R]=i.useState(!1),[z,_]=i.useState(!1),[A,X]=i.useState({}),[H,M]=i.useState(!1),[T,F]=i.useState(!1),[W,oe]=i.useState(!1),[D,E]=i.useState(!1),[P,$]=i.useState(!0),j=i.useCallback(async()=>{const[re,Z]=await Promise.allSettled([aS(e),Rc(e)]);if(re.status==="fulfilled"&&(s(re.value.maxConcurrent),r(re.value.rootDir)),Z.status==="fulfilled"){const pe=Z.value;l(!!pe.autoMerge),d(!!pe.globalPause),h(!!pe.enginePaused),R(!!pe.prAuthAvailable),f(pe.taskStuckTimeoutMs),g(pe.staleHighFanoutBlockerAgeThresholdMs??7200*1e3),S(pe.showQuickChatFAB===!0),x(pe.maxTotalRetriesBeforeFail??25),v(pe.capacityRiskBannerEnabled===!0),y(pe.capacityRiskTodoThreshold??20),X(pe.experimentalFeatures??{});const ie=pe.experimentalFeatures??{};M(ie.insights===!0),F(ie.memoryView===!0),oe(ie.devServerView===!0||ie.devServer===!0),E(ie.todoView===!0);const ve=pe.autoReloadOnVersionChange!==!1;$(ve),Qc(ve)}_(!0)},[e]);i.useEffect(()=>{_(!1),X({}),M(!1),F(!1),oe(!1),E(!1),j()},[j]);const q=i.useCallback(async()=>{const re=!o;l(re);try{await pl({autoMerge:re},e)}catch{l(!re)}},[o,e]),le=i.useCallback(async()=>{const re=!c;d(re);try{await pl({globalPause:re,globalPauseReason:re?"manual":void 0},e)}catch{d(!re)}},[c,e]),fe=i.useCallback(async()=>{const re=!u;h(re);try{await pl({enginePaused:re},e)}catch{h(!re)}},[u,e]),Ce=i.useCallback(async()=>{const re=!N;S(re);try{await pl({showQuickChatFAB:re},e)}catch{S(!re)}},[N,e]),Ae=i.useCallback(async()=>{const re=!P;$(re),Qc(re);try{await Jn({autoReloadOnVersionChange:re})}catch{$(!re),Qc(!re)}},[P]);return{maxConcurrent:n,rootDir:a,autoMerge:o,globalPaused:c,enginePaused:u,taskStuckTimeoutMs:m,staleHighFanoutBlockerAgeThresholdMs:p,capacityRiskBannerEnabled:w,capacityRiskTodoThreshold:b,showQuickChatFAB:N,maxTotalRetriesBeforeFail:C,prAuthAvailable:k,settingsLoaded:z,experimentalFeatures:A,insightsEnabled:H,memoryEnabled:T,devServerEnabled:W,todosEnabled:D,autoReloadOnVersionChange:P,toggleAutoMerge:q,toggleGlobalPause:le,toggleEnginePause:fe,toggleShowQuickChatFAB:Ce,toggleAutoReloadOnVersionChange:Ae,refresh:j}}function w6(e){const{projectId:n,projects:s,projectsLoading:a,currentProject:r,setCurrentProject:o,addToast:l,openTaskDetail:c,closeTaskDetail:d}=e,u=i.useRef(!1),h=i.useRef(!1),m=i.useRef(null);return i.useEffect(()=>{if(!h.current){const b=window.location.pathname.match(/^\/tasks\/([A-Z]+-\d+)\/?$/);if(b){const y=b[1];if(/^[A-Z]+-\d+$/.test(y)){const N=new URLSearchParams(window.location.search);N.set("task",y);const S=N.toString(),C=window.history.state??{};window.history.replaceState(C,"",S?`/?${S}`:"/"),h.current=!0}}}const p=new URLSearchParams(window.location.search),g=p.get("project"),w=p.get("task");if(!w||a)return;if(g){const b=s.find(y=>y.id===g);if(!b){l(`Project '${g}' not found`,"error");return}r?.id!==b.id&&o(b)}if(u.current)return;u.current=!0,Ja(w,g??n).then(b=>{c(b),m.current=w}).catch(()=>{l(`Task ${w} not found`,"error")})},[n,s,a,r,o,l,c]),{handleDetailClose:i.useCallback(()=>{if(m.current){const p=new URLSearchParams(window.location.search);p.delete("task");const g=p.toString(),w=window.history.state??{};window.history.replaceState(w,"",g?`${window.location.pathname}?${g}`:window.location.pathname),m.current=null}d()},[d])}}function k6(){const[e,n]=i.useState([]),[s,a]=i.useState([]),[r,o]=i.useState([]),l=i.useRef(s),c=i.useRef(r);i.useEffect(()=>{Ws().then(h=>{n(h.models),l.current=h.favoriteProviders,c.current=h.favoriteModels,a(h.favoriteProviders),o(h.favoriteModels)}).catch(()=>{})},[]),i.useEffect(()=>{l.current=s},[s]),i.useEffect(()=>{c.current=r},[r]);const d=i.useCallback(async h=>{const m=l.current,p=m.includes(h)?m.filter(g=>g!==h):[h,...m];l.current=p,a(()=>p);try{await Jn({favoriteProviders:p,favoriteModels:c.current})}catch(g){throw l.current=m,a(()=>m),g}},[]),u=i.useCallback(async h=>{const m=c.current,p=m.includes(h)?m.filter(g=>g!==h):[h,...m];c.current=p,o(()=>p);try{await Jn({favoriteProviders:l.current,favoriteModels:p})}catch(g){throw c.current=m,o(()=>m),g}},[]);return{availableModels:e,favoriteProviders:s,favoriteModels:r,toggleFavoriteProvider:d,toggleFavoriteModel:u}}function j6({projectId:e,setupWizardOpen:n,openModelOnboarding:s,openSettings:a}){const r=i.useRef(!1),o=i.useRef(n);o.current=n,i.useEffect(()=>{if(n||!e||r.current)return;r.current=!0;let l=!1,c=!1;qo().then(({providers:d})=>{const u=d.some(m=>m.authenticated);if(d.length>0&&!u||d.length>0&&u)return aa().then(m=>{const f=!!(m.defaultProvider&&m.defaultModelId);(m.modelOnboardingComplete===!1||m.modelOnboardingComplete===void 0)&&(!u||!f)&&!qr()?l=!0:!u&&!qr()&&(c=!0)})}).then(()=>{if(o.current){r.current=!1;return}l?(ci("onboarding:auto-triggered",{trigger:"first-run"}),s()):c&&(ci("onboarding:auto-triggered",{trigger:"missing-provider"}),a("authentication"))}).catch(()=>{})},[e,n,s,a])}const mb="kb-update-banner-dismissed";function N6(){const[e,n]=i.useState(!0),[s,a]=i.useState(!1),[r,o]=i.useState(null),[l,c]=i.useState(null),[d,u]=i.useState(!1);i.useEffect(()=>{const m=sessionStorage.getItem(mb)==="true";u(m);let f=!1;return rS().then(p=>{f||p.disabled||(a(p.updateAvailable===!0),o(typeof p.latestVersion=="string"?p.latestVersion:null),c(typeof p.currentVersion=="string"?p.currentVersion:null))}).catch(()=>{}).finally(()=>{f||n(!1)}),()=>{f=!0}},[]);const h=i.useCallback(()=>{u(!0),sessionStorage.setItem(mb,"true")},[]);return{updateAvailable:s,latestVersion:r,currentVersion:l,loading:e,dismissed:d,dismiss:h}}const S6=["board","list","graph","agents","missions","chat","documents","research","evals","skills","mailbox","insights","memory","reliability","devserver","dev-server","stash-recovery"];function C6(e){return e!==null&&S6.includes(e)}function du(e){return e!==null&&(C6(e)||Mr(e))}const E6=ol("fusion-plugin-roadmap","roadmaps");function hb(e){return e==="devserver"?"dev-server":e}function pb(e){return e!=="roadmaps"?"board":hx("fusion-plugin-roadmap","roadmaps")?E6:"board"}function _6(e){const{projectsLoading:n,projectsError:s,currentProjectLoading:a,currentProject:r,projectsLength:o,setupWizardOpen:l,openSetupWizard:c,themeMode:d,setThemeMode:u}=e,[h,m]=i.useState(()=>{if(typeof window<"u"){const b=window.localStorage.getItem("kb-dashboard-view-mode");if(b==="overview"||b==="project")return b}return"overview"}),[f,p]=i.useState(()=>{const b=Gn("kb-dashboard-task-view");return b==="roadmaps"?pb(b):du(b)?b:"board"}),g=i.useRef(!1);i.useEffect(()=>{window.localStorage.setItem("kb-dashboard-view-mode",h)},[h]),i.useEffect(()=>{const b=Gn("kb-dashboard-task-view",r?.id);if(b==="roadmaps")p(pb(b));else if(du(b)){const y=!g.current&&b==="devserver";p(y?"devserver":hb(b))}else p("board");r?.id&&(g.current=!0)},[r?.id]),i.useEffect(()=>{cs("kb-dashboard-task-view",f,r?.id)},[r?.id,f]),i.useEffect(()=>{if(typeof window>"u")return;const b=new URLSearchParams(window.location.search).get("view");b&&du(b)&&p(hb(b))},[]),i.useEffect(()=>{n||a||r&&h==="overview"&&m("project")},[n,a,r,h]),i.useEffect(()=>{if(n||a||l||s||o>0||r)return;const b=window.setTimeout(()=>{c()},500);return()=>window.clearTimeout(b)},[n,s,o,a,r,l,c]);const w=i.useCallback(b=>{p(b)},[]),v=i.useCallback(()=>{const b=["dark","light","system"],y=b.indexOf(d),N=b[(y+1)%b.length];u(N)},[d,u]);return{viewMode:h,setViewMode:m,taskView:f,setTaskView:p,handleChangeTaskView:w,handleToggleTheme:v}}const uu=new Map,M6=6e4;function A6(e){const[n,s]=i.useState([]),[a,r]=i.useState(!0),[o,l]=i.useState(null),[c,d]=i.useState(0),u=i.useRef(!1),h=i.useCallback(()=>{const m=e??"default";uu.delete(m),d(f=>f+1)},[e]);return i.useEffect(()=>{const m=e??"default";let f=!1;async function p(){const g=uu.get(m);if(g&&Date.now()<g.expiresAt){if(f)return;s(g.views),r(!1);return}u.current||r(!0),l(null);try{const w=await JC(e);if(f)return;uu.set(m,{views:w,expiresAt:Date.now()+M6}),s(w)}catch(w){if(f)return;l(w instanceof Error?w.message:"Failed to fetch plugin dashboard views")}finally{f||(r(!1),u.current=!0)}}return p(),()=>{f=!0}},[e,c]),i.useMemo(()=>({views:n,loading:a,error:o,refetch:h}),[n,a,o,h])}function R6({taskView:e,context:n}){return t.jsx(PE,{viewId:e,context:n})}let fb=!1;function Vr(e,n){return function(){return i.createElement("span",null,`Bundled plugin view unavailable: ${e}#${n}`)}}async function I6(){const e="@fusion-plugin-examples/dependency-graph/dashboard-view",n="DependencyGraphDashboardView",a=(await Tn(()=>import("./dashboard-view-DOY8-BIx.js"),__vite__mapDeps([26,1,27,6,7,8,28])))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}async function T6(){const e="@fusion-plugin-examples/roadmap/dashboard-view",n="RoadmapDashboardView",a=(await Tn(()=>import("./dashboard-view-BWGH_fAq.js"),__vite__mapDeps([29,1,27,30])))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}async function P6(){const e="@fusion-plugin-examples/cli-printing-press/dashboard-view",n="CliPrintingPressWizardView";try{const a=(await import(e))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}catch{return{default:Vr(e,n)}}}async function $6(){const e="@fusion-plugin-examples/cli-printing-press/manage-view",n="CliPrintingPressManageView";try{const a=(await import(e))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}catch{return{default:Vr(e,n)}}}function Hy(){fb||(fb=!0,vl("fusion-plugin-dependency-graph","graph",i.lazy(I6)),vl("fusion-plugin-roadmap","roadmaps",i.lazy(T6)),vl("fusion-plugin-cli-printing-press","wizard",i.lazy(P6)),vl("fusion-plugin-cli-printing-press","manage",i.lazy($6)))}function D6(e){const{setCurrentProject:n,clearCurrentProject:s,setViewMode:a,currentProject:r,refreshProjects:o,toggleFavoriteProvider:l,toggleFavoriteModel:c,addToast:d,openSettings:u,openSetupWizard:h,closeSetupWizard:m,closeModelOnboarding:f}=e,p=i.useCallback(R=>{n(R),a("project")},[n,a]),g=i.useCallback(()=>{s(),a("overview")},[s,a]),w=i.useCallback(()=>{u()},[u]),v=i.useCallback(()=>{h()},[h]),b=i.useCallback(R=>{m(),n(R),a("project"),d(`Project ${R.name} registered successfully`,"success"),o()},[m,n,a,d,o]),y=i.useCallback(()=>{f()},[f]),N=i.useCallback(async R=>{try{await A1(R.id),d(`Project ${R.name} paused`,"success"),await o()}catch{d(`Failed to pause project ${R.name}`,"error")}},[d,o]),S=i.useCallback(async R=>{try{await R1(R.id),d(`Project ${R.name} resumed`,"success"),await o()}catch{d(`Failed to resume project ${R.name}`,"error")}},[d,o]),C=i.useCallback(async R=>{try{await tx(R.id),d(`Project ${R.name} removed`,"success"),r?.id===R.id&&(s(),a("overview")),await o()}catch{d(`Failed to remove project ${R.name}`,"error")}},[r,s,a,d,o]),x=i.useCallback(async R=>{try{await l(R)}catch{d("Failed to update favorites","error")}},[l,d]),k=i.useCallback(async R=>{try{await c(R)}catch{d("Failed to update model favorites","error")}},[c,d]);return{handleSelectProject:p,handleViewAllProjects:g,handleOpenSettings:w,handleAddProject:v,handleSetupComplete:b,handleModelOnboardingComplete:y,handlePauseProject:N,handleResumeProject:S,handleRemoveProject:C,handleToggleFavorite:x,handleToggleModelFavorite:k}}function L6(e){const{createTask:n,ingestCreatedTasks:s,onPlanningTaskCreated:a,onPlanningTasksCreated:r,onSubtaskTasksCreated:o,addToast:l}=e,c=i.useCallback(async p=>n({...p,column:"triage",source:{sourceType:"dashboard_ui"}}),[n]),d=i.useCallback(async p=>await n({...p,column:"triage",source:{sourceType:"dashboard_ui"}}),[n]),u=i.useCallback(p=>{s([p]),a(p,l)},[l,s,a]),h=i.useCallback(p=>{s(p),r(p,l)},[l,s,r]),m=i.useCallback(p=>{s(p),o(p,l)},[l,s,o]),f=i.useCallback(p=>{l(`Imported ${p.id} from GitHub`,"success")},[l]);return{handleBoardQuickCreate:c,handleModalCreate:d,handlePlanningTaskCreated:u,handlePlanningTasksCreated:h,handleSubtaskTasksCreated:m,handleGitHubImport:f}}function O6(e,n){const{projectId:s,searchQuery:a}=n??{},[r,o]=i.useState([]),[l,c]=i.useState([]),[d,u]=i.useState(null),[h,m]=i.useState(!1),[f,p]=i.useState(null),g=i.useRef(null),w=i.useCallback(async()=>{if(!e){o([]),c([]),u(null),m(!1),p(null);return}g.current?.abort();const b=new AbortController;g.current=b,m(!0),p(null);try{const y=[sE(e),iE(e)];s&&(y.push(aE(e,s,a)),y.push(rE(e,s)));const N=await Promise.allSettled(y);if(b.signal.aborted)return;const S=N[0],C=N[1];if(S.status==="rejected"){p(`Failed to fetch node health: ${S.reason}`),m(!1);return}if(u(S.value),C.status==="rejected"){p(`Failed to fetch projects: ${C.reason}`),m(!1);return}if(o(C.value),s&&N[2]){const x=N[2];if(x.status==="rejected"){p(`Failed to fetch tasks: ${x.reason}`),m(!1);return}x.status==="fulfilled"&&c(x.value)}m(!1)}catch(y){b.signal.aborted||(p(y instanceof Error?y.message:"Unknown error"),m(!1))}},[e,s,a]);i.useEffect(()=>(w(),()=>{g.current?.abort()}),[w]);const v=i.useCallback(()=>{w()},[w]);return{projects:r,tasks:l,health:d,loading:h,error:f,refresh:v}}function F6(e){const[n,s]=i.useState(!1),[a,r]=i.useState(null);return i.useEffect(()=>{if(!e){s(!1),r(null);return}const o=`/api/proxy/${encodeURIComponent(e)}/events`;return fi(o,{events:{"task:created":l=>{r({type:"task:created",data:l.data})},"task:moved":l=>{r({type:"task:moved",data:l.data})},"task:updated":l=>{r({type:"task:updated",data:l.data})},"task:deleted":l=>{r({type:"task:deleted",data:l.data})},"task:merged":l=>{r({type:"task:merged",data:l.data})}},onOpen:()=>s(!0),onError:()=>s(!1)})},[e]),{isConnected:n,lastEvent:a}}const z6="fusion-dashboard-current-node",qy=i.createContext(null);function B6({children:e}){const[n,s]=i.useState(null),[a,r]=i.useState(!0),o=i.useRef(!1),l=i.useRef(void 0);i.useEffect(()=>{let h=!1;async function m(){try{const f=await aa();if(h)return;l.current=f.dashboardCurrentNodeId;const p=f.dashboardCurrentNodeId;if(p&&(o.current=!0),!p)try{const g=localStorage.getItem(z6);if(g){const w=JSON.parse(g);w?.id&&w?.type==="remote"&&(l.current=w.id,await Jn({dashboardCurrentNodeId:w.id}).catch(()=>{}))}}catch{}}catch{}finally{h||r(!1)}}return m(),()=>{h=!0}},[]),i.useEffect(()=>{if(!a)if(n&&n.type==="remote"&&n.id){const h=n.id;l.current!==h&&(l.current=h,Jn({dashboardCurrentNodeId:h}).catch(()=>{}))}else n===null&&l.current!==void 0&&(l.current=void 0,Jn({dashboardCurrentNodeId:void 0}).catch(()=>{}))},[n,a]);const c=i.useCallback(h=>{s(h)},[]),d=i.useCallback(()=>{s(null),l.current=void 0,Jn({dashboardCurrentNodeId:void 0}).catch(()=>{})},[]),u={currentNode:n,currentNodeId:n?.id??null,isRemote:n!==null&&n.type==="remote",setCurrentNode:c,clearCurrentNode:d};return t.jsx(qy.Provider,{value:u,children:e})}function U6(){const e=i.useContext(qy);if(e===null)throw new Error("useNodeContext must be used within a NodeProvider");return e}const H6=["shellKind","shellMode","profileId","serverBaseUrl","serverLabel","shellCanOpenConnectionManager","hostKind","mode","connectionId","serverUrl","canOpenConnectionManager"],q6=["__FUSION_SHELL_HOST_CONTEXT__","__fusionShellHostContext","__FUSION_SHELL_CONTEXT__"];let yc=null,gb=!1;function V6(e){if(typeof e=="boolean")return e;if(typeof e=="string"){if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1}}function W6(e){if(!(typeof e!="string"||e.trim().length===0))try{const n=new URL(e);return n.protocol!=="http:"&&n.protocol!=="https:"?void 0:n.toString().replace(/\/$/,"")}catch{return}}function Vy(e){if(e==="browser"||e==="desktop-shell"||e==="mobile-shell")return e;if(e==="desktop")return"desktop-shell";if(e==="mobile")return"mobile-shell"}function G6(e){return e==="local"||e==="remote"?e:void 0}function Wy(e){const n=G6(e.mode),s=typeof e.connectionId=="string"&&e.connectionId.trim()?e.connectionId:void 0,a=W6(e.serverUrl),r=V6(e.canOpenConnectionManager);return{kind:e.kind,...n?{mode:n}:{},...s?{connectionId:s}:{},...a?{serverUrl:a}:{},...r!==void 0?{canOpenConnectionManager:r}:{}}}function K6(e){for(const n of q6){const s=e[n];if(!s||typeof s!="object")continue;const a=s,r=Vy(a.kind??a.shellKind??a.hostKind);if(r)return r==="browser"?{kind:r}:Wy({kind:r,mode:a.mode??a.shellMode,connectionId:a.connectionId??a.profileId,serverUrl:a.serverUrl??a.serverBaseUrl,canOpenConnectionManager:a.canOpenConnectionManager??a.shellCanOpenConnectionManager})}return null}function J6(e){let n;try{n=new URL(e.location.href)}catch{return null}const s=n.searchParams,a=Vy(s.get("hostKind")??s.get("kind")??s.get("shellKind"));return a?a==="browser"?{kind:a}:Wy({kind:a,mode:s.get("mode")??s.get("shellMode"),connectionId:s.get("connectionId")??s.get("profileId"),serverUrl:s.get("serverUrl")??s.get("serverBaseUrl"),canOpenConnectionManager:s.get("canOpenConnectionManager")??s.get("shellCanOpenConnectionManager")}):null}function Y6(e){try{const n=new URL(e.location.href);let s=!1;for(const r of H6)n.searchParams.has(r)&&(n.searchParams.delete(r),s=!0);if(!s)return;const a=n.pathname+(n.search?n.search:"")+n.hash;e.history.replaceState(e.history.state,"",a)}catch{}}function Q6(e=window){const n=K6(e);if(n)return n;const s=J6(e);return s||(typeof e.fusionAPI<"u"?{kind:"desktop-shell"}:{kind:"browser"})}function Gy(e=window){return!gb&&typeof window<"u"&&(yc=Q6(e),Y6(e),gb=!0),yc??{kind:"browser"}}function X6(){return yc||(typeof window>"u"?{kind:"browser"}:Gy(window))}const Z6={kind:"browser"},Ky=i.createContext({host:Z6,isNativeShell:!1,kind:"browser"});function e3(e){const n=e.kind!=="browser";return{host:e,isNativeShell:n,kind:e.kind,...n?{mode:e.mode,connectionId:e.connectionId,serverUrl:e.serverUrl,canOpenConnectionManager:e.canOpenConnectionManager}:{}}}function t3({children:e}){const n=i.useMemo(()=>e3(X6()),[]);return t.jsx(Ky.Provider,{value:n,children:e})}function n3(){return i.useContext(Ky)}function s3(e,n){const s=new URL(e);return n&&s.searchParams.set("rt",n),s.toString()}function i3({open:e,shellApi:n,shellState:s,onComplete:a}){const[r,o]=i.useState(s.desktopMode??"remote"),[l,c]=i.useState("Remote Server"),[d,u]=i.useState(""),[h,m]=i.useState(""),[f,p]=i.useState(null),[g,w]=i.useState(!1),[v,b]=i.useState(!1),y=s.host==="desktop-shell";i.useEffect(()=>{y&&o(s.desktopMode??"remote")},[y,s.desktopMode]);const N=i.useMemo(()=>y&&r==="local"?!0:d.trim().length>0,[y,r,d]);return e?t.jsx("div",{className:"modal-overlay open",children:t.jsxs("div",{className:"modal native-shell-onboarding-modal",children:[t.jsx("div",{className:"modal-header",children:t.jsx("h2",{children:"Welcome to Fusion"})}),t.jsxs("div",{className:"native-shell-onboarding-body",children:[t.jsx("p",{children:"Fusion helps you plan, run, and review AI-assisted engineering work."}),y&&t.jsxs("div",{className:"native-shell-onboarding-mode-row",children:[t.jsx("button",{type:"button",className:`btn ${r==="local"?"btn-primary":""}`,onClick:()=>o("local"),children:"Local Fusion"}),t.jsx("button",{type:"button",className:`btn ${r==="remote"?"btn-primary":""}`,onClick:()=>o("remote"),children:"Remote Server"})]}),(!y||r==="remote")&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn",onClick:async()=>{p(null),w(!0);try{const S=await n.startQrScan();u(S.serverUrl),m(S.authToken??"")}catch(S){p(S.message)}finally{w(!1)}},disabled:g,children:g?"Scanning…":"Scan QR"}),t.jsx("label",{className:"native-shell-onboarding-label",htmlFor:"native-shell-onboarding-profile-name",children:"Profile name"}),t.jsx("input",{id:"native-shell-onboarding-profile-name",className:"input",value:l,onChange:S=>c(S.target.value)}),t.jsx("label",{className:"native-shell-onboarding-label",htmlFor:"native-shell-onboarding-server-url",children:"Server URL"}),t.jsx("input",{id:"native-shell-onboarding-server-url",className:"input",value:d,onChange:S=>u(S.target.value),placeholder:"https://your-fusion-host"}),t.jsx("label",{className:"native-shell-onboarding-label",htmlFor:"native-shell-onboarding-auth-token",children:"Auth token (optional)"}),t.jsx("input",{id:"native-shell-onboarding-auth-token",className:"input",type:"password",value:h,onChange:S=>m(S.target.value)})]}),f&&t.jsx("p",{className:"form-error",role:"alert",children:f})]}),t.jsx("div",{className:"modal-actions",children:t.jsx("button",{type:"button",className:"btn btn-primary",disabled:!N||v,onClick:async()=>{p(null),b(!0);try{if(y&&r==="local"){await n.setDesktopMode("local"),a();return}const S=await n.saveProfile({name:l.trim()||"Remote Server",serverUrl:d,authToken:h||null});if(y&&await n.setDesktopMode("remote"),await n.setActiveProfile(S.id),typeof window<"u"&&s.host!=="web"){window.location.href=s3(S.serverUrl,S.authToken??null);return}a()}catch(S){p(S.message)}finally{b(!1)}},children:v?"Saving…":"Continue"})})]})}):null}function a3({open:e,shellApi:n,shellState:s,onClose:a}){const r=i.useMemo(()=>s.profiles.find(x=>x.id===s.activeProfileId)??null,[s.activeProfileId,s.profiles]),[o,l]=i.useState(null),[c,d]=i.useState({}),[u,h]=i.useState(null),[m,f]=i.useState(null);if(!e)return null;const p=o==="__new__",g=p?null:s.profiles.find(x=>x.id===o)??r,w=c.name??g?.name??"",v=c.serverUrl??g?.serverUrl??"",b=c.authToken??g?.authToken??"",y=()=>{l(null),d({}),f(null)},N=async()=>{f(null);try{const x=new URL(v.trim());if(!/^https?:$/.test(x.protocol))throw new Error("Server URL must use http or https");const k=await n.saveProfile({id:p?void 0:o??g?.id,name:w||"Remote Server",serverUrl:v,authToken:b||null});await n.setActiveProfile(k.id),l(k.id),d({})}catch(x){f(x.message)}},S=async()=>{f(null);try{const x=await n.startQrScan();l("__new__"),d({name:"",serverUrl:x.serverUrl,authToken:x.authToken??""})}catch(x){f(x.message)}},C=async()=>{u&&(await n.deleteProfile(u.id),h(null),y())};return t.jsx("div",{className:"modal-overlay open",children:t.jsxs("div",{className:"modal native-shell-connection-manager",role:"dialog","aria-label":"Connection Manager",children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h2",{children:"Connection Manager"}),t.jsx("button",{type:"button",className:"modal-close",onClick:a,"aria-label":"Close",children:"×"})]}),s.host==="desktop-shell"&&t.jsxs("div",{className:"native-shell-connection-manager__mode-row",children:[t.jsx("button",{type:"button",className:`btn ${s.desktopMode==="local"?"btn-primary":""}`,onClick:()=>void n.setDesktopMode("local"),children:"Local"}),t.jsx("button",{type:"button",className:`btn ${s.desktopMode!=="local"?"btn-primary":""}`,onClick:()=>void n.setDesktopMode("remote"),children:"Remote"})]}),t.jsx("div",{className:"native-shell-connection-manager__profiles",children:s.profiles.length===0?t.jsxs("div",{className:"card native-shell-connection-manager__empty-state",children:[t.jsx("p",{className:"settings-muted",children:"No remote servers saved yet."}),t.jsxs("div",{className:"native-shell-connection-manager__profile-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{l("__new__"),d({name:"",serverUrl:"",authToken:""}),f(null)},children:"Add server"}),s.host==="mobile-shell"&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void S(),children:"Scan QR"})]})]}):s.profiles.map(x=>t.jsxs("div",{className:"card native-shell-connection-manager__profile",children:[t.jsxs("div",{children:[t.jsx("strong",{children:x.name}),t.jsx("div",{className:"settings-muted",children:x.serverUrl}),x.id===s.activeProfileId&&t.jsx("span",{className:"native-shell-connection-manager__active-pill",children:"Active"})]}),t.jsxs("div",{className:"native-shell-connection-manager__profile-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm","aria-label":`Edit ${x.name}`,onClick:()=>{l(x.id),d(x)},children:"Edit"}),t.jsx("button",{type:"button",className:"btn btn-sm","aria-label":`Use ${x.name}`,onClick:()=>void n.setActiveProfile(x.id),children:"Use"}),t.jsx("button",{type:"button",className:"btn btn-sm btn-danger","aria-label":`Delete ${x.name}`,onClick:()=>h(x),children:"Delete"})]})]},x.id))}),t.jsxs("div",{className:"native-shell-connection-manager__mode-row",children:[t.jsx("button",{type:"button",className:"btn",onClick:()=>{l("__new__"),d({name:"",serverUrl:"",authToken:""}),f(null)},children:"Add connection"}),s.host==="mobile-shell"&&t.jsx("button",{type:"button",className:"btn",onClick:()=>void S(),children:"Scan QR"})]}),t.jsxs("div",{className:"form-group native-shell-connection-manager__editor",children:[t.jsx("label",{htmlFor:"native-shell-connection-manager-name",children:"Name"}),t.jsx("input",{id:"native-shell-connection-manager-name",className:"input",value:w,onChange:x=>d(k=>({...k,name:x.target.value}))}),t.jsx("label",{htmlFor:"native-shell-connection-manager-url",children:"Server URL"}),t.jsx("input",{id:"native-shell-connection-manager-url",className:"input",value:v,onChange:x=>d(k=>({...k,serverUrl:x.target.value}))}),t.jsx("label",{htmlFor:"native-shell-connection-manager-token",children:"Auth token (optional)"}),t.jsx("input",{id:"native-shell-connection-manager-token",className:"input",type:"password",value:b??"",onChange:x=>d(k=>({...k,authToken:x.target.value}))}),m&&t.jsx("p",{className:"form-error",role:"alert",children:m})]}),u&&t.jsxs("div",{className:"native-shell-connection-manager__delete-confirm",role:"alertdialog","aria-label":"Delete server confirmation",children:[t.jsxs("p",{children:["Delete ",t.jsx("strong",{children:u.name}),"? This removes the saved profile."]}),t.jsxs("div",{className:"native-shell-connection-manager__profile-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>h(null),children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>void C(),children:"Delete"})]})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:a,children:"Close"}),t.jsx("button",{type:"button",className:"btn",onClick:y,children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void N(),disabled:!v.trim(),children:"Save"})]})]})})}function r3(e){if(e.hostKind==="desktop-shell"&&e.mode==="local")return{title:"Desktop local mode",actionLabel:"Switch server",dotClassName:"status-dot status-dot--online"};const n=e.profileLabel??e.profileId,s=e.serverOrigin,a=n&&s?`${n} · ${s}`:n??s;return e.mode==="remote"?{title:a??"Connection info unavailable",actionLabel:e.hostKind==="desktop-shell"?"Switch server":"Manage connections",dotClassName:a?"status-dot status-dot--online":"status-dot status-dot--pending"}:{title:a??"Connection info unavailable",actionLabel:"Manage connections",dotClassName:a?"status-dot status-dot--online":"status-dot status-dot--pending"}}function bb({status:e,onError:n}){if(e.hostKind==="browser"||!e.available)return null;const s=r3(e),a=i.useCallback(async()=>{const r=await e.openConnectionManager();!r.ok&&r.reason==="failed"&&n?.(r.error??"Failed to open connection manager")},[n,e]);return t.jsxs("button",{type:"button",className:"btn shell-connection-status",onClick:()=>void a(),"data-testid":"shell-connection-status-button",children:[t.jsx("span",{className:s.dotClassName,"aria-hidden":"true"}),t.jsx("span",{className:"shell-connection-status__kind",children:e.hostKind==="desktop-shell"?"Desktop":"Mobile"}),t.jsx("span",{className:"shell-connection-status__summary",title:s.title,children:s.title}),t.jsx("span",{className:"shell-connection-status__action",children:s.actionLabel})]})}function o3(e){if(e)try{return new URL(e).origin}catch{return}}function l3(e,n){const s=e.profiles.find(a=>a.id===e.activeProfileId)??null;return s||(n.kind==="browser"||!n.connectionId?null:e.profiles.find(a=>a.id===n.connectionId)??null)}async function c3(e){if(!e?.getState)return null;try{return await e.getState()}catch{return null}}async function d3(e,n=window){const s=n.fusionAPI,a=n.fusionShell,r=await c3(a),o=r?l3(r,e):null,l=e.kind==="browser"?void 0:e.mode??r?.desktopMode,c=o?.id??(e.kind==="browser"?void 0:e.connectionId),d=o?.name,u=o3(o?.serverUrl??(e.kind==="browser"?void 0:e.serverUrl)),h=e.kind==="desktop-shell"&&typeof s?.openConnectionManager=="function",m=e.kind==="mobile-shell"&&typeof a?.openConnectionManager=="function",f=h||m;return{hostKind:e.kind,available:f,...l?{mode:l}:{},...c?{profileId:c}:{},...d?{profileLabel:d}:{},...u?{serverOrigin:u}:{},openConnectionManager:async()=>{try{return h?(await s.openConnectionManager?.(),{ok:!0}):m?(await a.openConnectionManager(),{ok:!0}):{ok:!1,reason:"unsupported"}}catch(p){return{ok:!1,reason:"failed",error:p instanceof Error?p.message:String(p)}}}}}function u3({open:e}){const[n,s]=i.useState(""),a=i.useRef(null);i.useEffect(()=>{e&&a.current?.focus()},[e]);const r=i.useCallback(()=>{const l=n.trim();l&&(PN(l),window.location.reload())},[n]),o=i.useCallback(()=>{$N(),window.location.reload()},[]);return e?t.jsx("div",{className:"modal-overlay open auth-token-recovery-overlay",role:"presentation",onKeyDownCapture:l=>{l.key==="Escape"&&(l.preventDefault(),l.stopPropagation())},children:t.jsxs("div",{className:"modal modal-md",role:"dialog","aria-modal":"true","aria-labelledby":"auth-token-recovery-title","aria-describedby":"auth-token-recovery-description",children:[t.jsx("div",{className:"modal-header auth-token-recovery-header",children:t.jsx("h3",{id:"auth-token-recovery-title",children:"Authentication token required"})}),t.jsxs("div",{className:"auth-token-recovery-content",children:[t.jsx("p",{id:"auth-token-recovery-description",children:"This dashboard session can't authenticate with the daemon. Set a replacement token or clear the current token and retry."}),t.jsxs("div",{className:"auth-token-recovery-field",children:[t.jsx("label",{htmlFor:"auth-token-recovery-input",children:"Replacement token"}),t.jsx("input",{ref:a,id:"auth-token-recovery-input",className:"input",type:"password",value:n,onChange:l=>s(l.target.value),placeholder:"Paste token",autoComplete:"off",spellCheck:!1})]})]}),t.jsxs("div",{className:"modal-actions auth-token-recovery-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:o,children:"Clear token and retry"}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:r,disabled:n.trim().length===0,children:"Set token and reload"})]})]})}):null}const m3=200,h3=i.lazy(()=>Tn(()=>import("./AgentsView-DBbdPWV-.js"),__vite__mapDeps([31,1,4,5,32,17,6,7,8,33])).then(e=>({default:e.AgentsView}))),p3=i.lazy(()=>Tn(()=>import("./DocumentsView-Dt27gDYa.js"),__vite__mapDeps([34,1,6,7,8,35])).then(e=>({default:e.DocumentsView}))),f3=i.lazy(()=>Tn(()=>import("./InsightsView-C8bsAlMv.js"),__vite__mapDeps([36,1,24,6,7,8,37])).then(e=>({default:e.InsightsView}))),g3=i.lazy(()=>Tn(()=>import("./ResearchView-YoxEFtNB.js"),__vite__mapDeps([38,1,6,7,8,39])).then(e=>({default:e.ResearchView}))),b3=i.lazy(()=>Tn(()=>import("./EvalsView-HfWTc8Uv.js"),__vite__mapDeps([40,1,6,7,8,41])).then(e=>({default:e.EvalsView}))),x3=i.lazy(()=>Tn(()=>import("./NodesView-w3ms-XX2.js"),__vite__mapDeps([42,1,19,32,6,7,8,43])).then(e=>({default:e.NodesView}))),v3=i.lazy(()=>Tn(()=>import("./ChatView-DYpoWnCc.js"),__vite__mapDeps([44,1,6,7,8,45])).then(e=>({default:e.ChatView}))),y3=i.lazy(()=>Tn(()=>import("./SkillsView-DZIfZoF5.js"),__vite__mapDeps([46,1,6,7,8,47])).then(e=>({default:e.SkillsView}))),w3=i.lazy(()=>Tn(()=>import("./MemoryView-D-HLtRrr.js"),__vite__mapDeps([48,1,22,23,6,7,8,49])).then(e=>({default:e.MemoryView}))),k3=i.lazy(()=>Tn(()=>import("./ReliabilityView-DAuqE-zi.js"),__vite__mapDeps([50,1,51])).then(e=>({default:e.ReliabilityView}))),j3=i.lazy(()=>Tn(()=>import("./DevServerView-DotHOFZt.js"),__vite__mapDeps([52,1,6,7,8,53])).then(e=>({default:e.DevServerView})));i.lazy(()=>Tn(()=>import("./TodoView-C6sLLEQu.js"),__vite__mapDeps([13,1,6,7,8,14])).then(e=>({default:e.TodoView})));const N3=i.lazy(()=>Tn(()=>import("./StashRecoveryView-mKXYsqam.js"),__vite__mapDeps([54,1,6,7,8,55])).then(e=>({default:e.StashRecoveryView})));function S3(){(typeof window<"u"&&window.requestIdleCallback||(n=>setTimeout(n,200)))(()=>{Tn(()=>import("./AgentsView-DBbdPWV-.js"),__vite__mapDeps([31,1,4,5,32,17,6,7,8,33])),Tn(()=>import("./DocumentsView-Dt27gDYa.js"),__vite__mapDeps([34,1,6,7,8,35])),Tn(()=>import("./InsightsView-C8bsAlMv.js"),__vite__mapDeps([36,1,24,6,7,8,37])),Tn(()=>import("./ResearchView-YoxEFtNB.js"),__vite__mapDeps([38,1,6,7,8,39])),Tn(()=>import("./EvalsView-HfWTc8Uv.js"),__vite__mapDeps([40,1,6,7,8,41])),Tn(()=>import("./NodesView-w3ms-XX2.js"),__vite__mapDeps([42,1,19,32,6,7,8,43])),Tn(()=>import("./ChatView-DYpoWnCc.js"),__vite__mapDeps([44,1,6,7,8,45])),Tn(()=>import("./SkillsView-DZIfZoF5.js"),__vite__mapDeps([46,1,6,7,8,47])),Tn(()=>import("./MemoryView-D-HLtRrr.js"),__vite__mapDeps([48,1,22,23,6,7,8,49])),Tn(()=>import("./ReliabilityView-DAuqE-zi.js"),__vite__mapDeps([50,1,51])),Tn(()=>import("./DevServerView-DotHOFZt.js"),__vite__mapDeps([52,1,6,7,8,53])),Tn(()=>import("./TodoView-C6sLLEQu.js"),__vite__mapDeps([13,1,6,7,8,14])),Tn(()=>import("./StashRecoveryView-mKXYsqam.js"),__vite__mapDeps([54,1,6,7,8,55]))})}Hy();const mu="kb-setup-warning-dismissed",xb="kb-dashboard-working-branch-filter",vb="kb-dashboard-base-branch-filter",yb="__fusion:no-branch__",Jy="fusion:approval-banner-dismissed",Jl="kb-capacity-risk-banner-dismissed",C3=.8;function E3(e,n){return e==="awaiting-approval"&&n!=="awaiting-approval"}function wb(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function _3(){if(typeof window>"u")return new Map;try{const e=window.localStorage.getItem(Jy);if(!e)return new Map;const n=JSON.parse(e),s=new Map;for(const[a,r]of Object.entries(n))typeof r=="number"&&Number.isFinite(r)&&s.set(a,r);return s}catch{return new Map}}function kb(e){if(!(typeof window>"u"))try{const n={};for(const[s,a]of e)n[s]=a;window.localStorage.setItem(Jy,JSON.stringify(n))}catch{}}function M3(e,n){const s=new URL(e);return n&&s.searchParams.set("rt",n),s.toString()}function A3(e,n,s){return!n||s||e.host==="web"?!1:e.host==="mobile-shell"?!e.activeProfileId:e.desktopMode==="local"?!1:!e.activeProfileId}function R3(){const{toasts:e,addToast:n,removeToast:s}=u6(),{shellApi:a,state:r,ready:o,openConnectionManagerSignal:l}=Ny(),c=n3();i.useEffect(()=>{S3()},[]);const{projects:d,loading:u,error:h,refresh:m}=r6(),{nodes:f}=Pc(),{currentNode:p,currentNodeId:g,isRemote:w,setCurrentNode:v,clearCurrentNode:b}=U6(),{currentProject:y,setCurrentProject:N,clearCurrentProject:S,loading:C}=c6(d,{nodeId:g}),{hasAiProvider:x,hasGithub:k,loading:R,hasWarnings:z}=yy(y?.id),{updateAvailable:_,latestVersion:A,currentVersion:X,dismissed:H,dismiss:M}=N6();i.useEffect(()=>{if(g&&!p&&f.length>0){const Le=f.find(we=>we.id===g);if(Le){v(Le);return}}g&&f.length>0&&(f.some(we=>we.id===g)||b())},[g,p,f,v,b]);const[T,F]=i.useState(""),[W,oe]=i.useState(""),[D,E]=i.useState("");i.useEffect(()=>{oe(Gn(xb,y?.id)??""),E(Gn(vb,y?.id)??"")},[y?.id]);const P=i.useCallback(Le=>{oe(Le),cs(xb,Le,y?.id)},[y?.id]),$=i.useCallback(Le=>{E(Le),cs(vb,Le,y?.id)},[y?.id]),j=O6(g,{projectId:y?.id,searchQuery:T||void 0});F6(g);const q=w&&j.projects.length>0?j.projects:d,{themeMode:le,colorTheme:fe,dashboardFontScalePct:Ce,setThemeMode:Ae,setColorTheme:re,setDashboardFontScalePct:Z}=x6(),{sessions:pe,generating:ie,needsInput:ve,planningSessions:ne,dismissSession:L}=Qz(y?.id),Y=pe.filter(Le=>Le.status==="awaiting_input"||Le.status==="error"),ue=e6(),B=v6({projectId:y?.id,planningSessions:ne}),je=ii()==="mobile",{pushNav:se,replaceCurrent:Ue}=S4({enabled:!0}),{viewMode:De,setViewMode:dt,taskView:Pe,handleChangeTaskView:ce}=_6({projectsLoading:u,projectsError:h,currentProjectLoading:C,currentProject:y,projectsLength:d.length,setupWizardOpen:B.setupWizardOpen,openSetupWizard:B.openSetupWizard,themeMode:le,setThemeMode:Ae}),{views:Ee}=A6(y?.id),Oe=i.useMemo(()=>{const Le=Ee.find(we=>we.pluginId==="fusion-plugin-dependency-graph"&&we.view.viewId==="graph");return Le?`plugin:${Le.pluginId}:${Le.view.viewId}`:hx("fusion-plugin-dependency-graph","graph")?"plugin:fusion-plugin-dependency-graph:graph":null},[Ee]),ht=i.useCallback(Le=>{Le==="missions"&&(lt(void 0),Q(void 0),Ke(void 0));const we=Pe;ce(Le),we!==Le&&se({type:"view",revert:()=>ce(we)})},[ce,Pe,se]),Ve=Pe==="board"||Pe==="list",{tasks:ge,createTask:me,moveTask:$e,pauseTask:mt,unpauseTask:jt,deleteTask:tt,mergeTask:bt,retryTask:Ie,resetTask:Xe,updateTask:rt,duplicateTask:It,archiveTask:_t,unarchiveTask:We,archiveAllDone:J,loadArchivedTasks:ke,refreshTasks:ot,ingestCreatedTasks:ye,lastFetchTimeMs:it}=n6({...y?{projectId:y.id}:{},searchQuery:T||void 0,sseEnabled:Ve}),He=i.useRef(Pe);i.useEffect(()=>{const Le=He.current;!(Le==="board"||Le==="list")&&(Pe==="board"||Pe==="list")&&ot(),He.current=Pe},[Pe,ot]);const he=w&&j.tasks.length>0?j.tasks:ge,[et,vt]=i.useState(!1),[Ct,Et]=i.useState(0),Tt=i.useRef(performance.now()),Jt=i.useRef(!1),cn=i.useRef(!1),Vt=i.useMemo(()=>u?"projects":C?"project":"tasks",[u,C]);i.useEffect(()=>{if(!u&&!Jt.current){Jt.current=!0;const Le=`projects loaded at ${Math.round(performance.now()-Tt.current)}ms from mount`;console.log(`[App] ${Le}`)}if(!C&&!cn.current){cn.current=!0;const Le=`current-project resolved at ${Math.round(performance.now()-Tt.current)}ms from mount`;console.log(`[App] ${Le}`)}},[u,C]),i.useEffect(()=>{if(et||u||C)return;const Le=performance.now(),we=window.setTimeout(()=>{const Be=`dashboard ready at ${Math.round(performance.now()-Tt.current)}ms from mount (settle delay=${Math.round(performance.now()-Le)}ms)`;console.log(`[App] ${Be}`),vt(!0)},m3);return()=>{window.clearTimeout(we)}},[et,u,C]);const{keyboardOpen:hn}=la({enabled:je}),dn=je&&hn&&!B.anyModalOpen;_i(dn);const[An,nn]=i.useState(0),[Dn,Nn]=i.useState(0),[zt,sn]=i.useState(!1),[xn,Xt]=i.useState(0),[Yt,rn]=i.useState(null),Zt=i.useRef(new Map),en=i.useRef(new Set),un=i.useRef(_3()),Qt=i.useCallback(()=>{rx(y?.id).then(Le=>{nn(Le.unreadCount),Nn(Le.pendingApprovalCount??0)}).catch(Le=>{console.warn("[App] Failed to fetch mailbox unread count:",Le)})},[y?.id]);i.useEffect(()=>{const Le=new Map,we=new Set;for(const Be of ge)Le.set(Be.id,Be.status),Be.status==="awaiting-approval"&&we.add(`task:${Be.id}`);Zt.current=Le,en.current=we},[ge]),i.useEffect(()=>{Qt();const Le=new URLSearchParams;y?.id&&Le.set("projectId",y.id);const we=Le.size>0?`?${Le.toString()}`:"",Be=$t=>{const bn=un.current.get($t.dedupeKey);bn!==void 0&&$t.updatedAtMs<=bn||rn($t)};return fi(`/api/events${we}`,{onReconnect:Qt,events:{"message:sent":Qt,"message:received":Qt,"message:read":Qt,"message:deleted":Qt,"approval:requested":$t=>{Qt();try{const bn=JSON.parse($t.data),rs=bn.id?`approval:${bn.id}`:bn.taskId?`task:${bn.taskId}`:void 0;if(!rs||en.current.has(rs))return;en.current.add(rs),Be({dedupeKey:rs,updatedAtMs:wb(bn.updatedAt??bn.createdAt)})}catch{}},"approval:updated":Qt,"approval:decided":Qt,"task:updated":$t=>{try{const bn=JSON.parse($t.data);if(!bn?.id)return;const rs=`task:${bn.id}`,Qn=Zt.current.get(bn.id);if(Zt.current.set(bn.id,bn.status),bn.status!=="awaiting-approval"){en.current.delete(rs),un.current.delete(rs),kb(un.current);return}if(en.current.has(rs))return;E3(bn.status,Qn)&&(en.current.add(rs),Be({dedupeKey:rs,updatedAtMs:wb(bn.updatedAt)}),Qt())}catch{}}}})},[y?.id,Qt]),i.useEffect(()=>{Pe==="chat"&&sn(!1)},[Pe]),i.useEffect(()=>{let Le=!1;const we=async()=>{try{const $t=await I("/stash-recovery/orphans");Le||Xt($t.count??0)}catch{Le||Xt(0)}};we();const Be=window.setInterval(()=>void we(),3e4);return()=>{Le=!0,window.clearInterval(Be)}},[y?.id]),i.useEffect(()=>{const Le=new URLSearchParams;y?.id&&Le.set("projectId",y.id);const we=Le.size>0?`?${Le.toString()}`:"";return fi(`/api/events${we}`,{events:{"chat:message:added":Be=>{try{const $t=JSON.parse(Be.data);if($t.role!=="assistant"||Pe==="chat"||$t.projectId&&y?.id&&$t.projectId!==y.id)return;sn(!0)}catch{}},"chat:room:message:added":Be=>{try{const $t=JSON.parse(Be.data);if($t.role==="user"||Pe==="chat"||$t.projectId&&y?.id&&$t.projectId!==y.id)return;sn(!0)}catch{}}}})},[y?.id,Pe]);const pn=i.useMemo(()=>Array.from(new Set(he.map(Le=>Le.branch?.trim()).filter(Le=>!!(Le&&Le.length>0)))).sort((Le,we)=>Le.localeCompare(we)),[he]),Dt=i.useMemo(()=>Array.from(new Set(he.map(Le=>Le.baseBranch?.trim()).filter(Le=>!!(Le&&Le.length>0)))).sort((Le,we)=>Le.localeCompare(we)),[he]),Bt=i.useMemo(()=>he.filter(Le=>{const we=Le.branch?.trim()??"",Be=Le.baseBranch?.trim()??"";if(W===yb){if(we.length>0)return!1}else if(W.length>0&&we!==W)return!1;if(D===yb){if(Be.length>0)return!1}else if(D.length>0&&Be!==D)return!1;return!0}),[he,W,D]),[be,Re]=i.useState(!1),[nt,ut]=i.useState(!1),[Ye,lt]=i.useState(void 0),[wt,Q]=i.useState(void 0),[ae,Ke]=i.useState(void 0),[gt,Wt]=i.useState(!1),[fn,Rn]=i.useState(!1),[wn,mn]=i.useState(null),[Un,de]=i.useState(()=>Gn(mu,y?.id)==="true"),[st,ct]=i.useState(()=>Gn(Jl,y?.id)==="true");i.useEffect(()=>{de(Gn(mu,y?.id)==="true")},[y?.id]),i.useEffect(()=>{ct(Gn(Jl,y?.id)==="true")},[y?.id]),i.useEffect(()=>{let Le=!1;return qN().then(we=>{Le||mn(we)}).catch(()=>{Le||mn(null)}),()=>{Le=!0}},[]),i.useEffect(()=>{const Le=()=>{Rn(!0)};return window.addEventListener(ju,Le),()=>{window.removeEventListener(ju,Le)}},[]);const kt=i.useCallback(()=>{cs(mu,"true",y?.id),de(!0)},[y?.id]),G=i.useCallback(()=>{cs(Jl,"true",y?.id),ct(!0)},[y?.id]),{maxConcurrent:ze,autoMerge:Ut,globalPaused:gn,enginePaused:In,taskStuckTimeoutMs:Ne,staleHighFanoutBlockerAgeThresholdMs:xt,capacityRiskBannerEnabled:Mt,capacityRiskTodoThreshold:Gt,showQuickChatFAB:Sn,maxTotalRetriesBeforeFail:on,prAuthAvailable:qt,settingsLoaded:Pt,experimentalFeatures:Hn,insightsEnabled:qn,memoryEnabled:ns,devServerEnabled:ss,todosEnabled:ms,toggleAutoMerge:ys,toggleGlobalPause:hs,toggleEnginePause:On,refresh:ws}=y6(y?.id),{stats:Rs}=Py(y?.id),Ns=i.useMemo(()=>he.filter(Le=>Le.column==="in-progress").length,[he]),ee=i.useMemo(()=>he.filter(Le=>Le.column==="in-review").length,[he]),_e=i.useMemo(()=>vN({todoCount:Rs?.todoTaskCount??0,inProgressCount:Ns,inReviewCount:ee,idleNonEphemeralAgentCount:Rs?.idleNonEphemeralCount??0,threshold:Gt??xN}),[Rs?.todoTaskCount,Rs?.idleNonEphemeralCount,Ns,ee,Gt]),ft=i.useRef(Mt),Ot=i.useRef(Gt),O=i.useRef(y?.id);i.useEffect(()=>{if(O.current!==y?.id){O.current=y?.id,ft.current=Mt,Ot.current=Gt;return}const Le=ft.current,we=Ot.current;(!Le&&Mt||we!==Gt)&&(Qa(Jl,y?.id),ct(!1)),O.current=y?.id,ft.current=Mt,Ot.current=Gt},[Mt,Gt,y?.id]);const qe=Hn.skillsView===!0,Ze=Hn.nodesView===!0,Je=Hn.researchView===!0,pt=Hn.evalsView===!0,At=Hn.agentOnboarding===!0,Lt=!0,ln=i.useCallback(()=>{B.closeSettings(),Et(Le=>Le+1),ws()},[B,ws]);i.useEffect(()=>{if(Pt&&!Mr(Pe)){if(Pe==="graph"&&!Oe){ce("board");return}Pe==="skills"&&!qe&&ce("board"),Pe==="insights"&&!qn&&ce("board"),Pe==="memory"&&!ns&&ce("board"),(Pe==="devserver"||Pe==="dev-server")&&!ss&&ce("board"),Pe==="research"&&!Je&&ce("board"),Pe==="evals"&&!pt&&ce("board")}},[Pe,Pt,qe,qn,ce,Lt,ns,ss,Je,pt,Oe]),i.useEffect(()=>{be&&!Ze&&Re(!1)},[be,Ze]);const{availableModels:kn,favoriteProviders:te,favoriteModels:Fe,toggleFavoriteProvider:Ge,toggleFavoriteModel:Ft}=k6();j6({projectId:y?.id,setupWizardOpen:B.setupWizardOpen,openModelOnboarding:B.openModelOnboarding,openSettings:B.openSettings});const{handleSelectProject:tn,handleViewAllProjects:Mn,handleAddProject:is,handleSetupComplete:Vn,handleModelOnboardingComplete:as,handlePauseProject:ps,handleResumeProject:Ss,handleRemoveProject:Ma,handleToggleFavorite:Wi,handleToggleModelFavorite:ri}=D6({setCurrentProject:N,clearCurrentProject:S,setViewMode:dt,currentProject:y,refreshProjects:m,toggleFavoriteProvider:Ge,toggleFavoriteModel:Ft,addToast:n,openSettings:B.openSettings,openSetupWizard:B.openSetupWizard,closeSetupWizard:B.closeSetupWizard,closeModelOnboarding:B.closeModelOnboarding}),{handleDetailClose:ca}=w6({projectId:y?.id,projects:d,projectsLoading:u,currentProject:y,setCurrentProject:N,addToast:n,openTaskDetail:B.openDetailTask,closeTaskDetail:B.closeDetailTask}),Is=i.useCallback(async({insightId:Le,title:we,description:Be})=>{await me({title:we,description:Be,column:"triage",source:{sourceType:"dashboard_ui",sourceMetadata:{origin:"insights",insightId:Le}}})},[me]),{handleBoardQuickCreate:Mi,handleModalCreate:Aa,handlePlanningTaskCreated:Ai,handlePlanningTasksCreated:to,handleSubtaskTasksCreated:Ra,handleGitHubImport:gi}=L6({createTask:me,ingestCreatedTasks:ye,onPlanningTaskCreated:B.onPlanningTaskCreated,onPlanningTasksCreated:B.onPlanningTasksCreated,onSubtaskTasksCreated:B.onSubtaskTasksCreated,addToast:n}),Ri=i.useCallback((Le,we)=>{we==="changes"?B.openDetailWithChangesTab(Le):B.openDetailTask(Le,we),se({type:"modal",close:B.closeDetailTask})},[B,se]),da=i.useCallback(async Le=>{try{const we=await Ja(Le,y?.id);B.openDetailTask(we,"logs"),se({type:"modal",close:B.closeDetailTask})}catch(we){n(`Failed to open task logs: ${we.message}`,"error")}},[B,y?.id,n,se]),[Ii,Gi]=i.useState([]);i.useEffect(()=>{let Le=!1;return sl(y?.id).then(we=>{Le||Gi(we)}).catch(()=>{Le||Gi([])}),()=>{Le=!0}},[y?.id]);const no=i.useMemo(()=>new Map(Ii.map(Le=>[Le.id,Le.name])),[Ii]);i.useCallback(()=>{Ze&&Re(Le=>!Le)},[Ze]);const ls=i.useCallback(()=>{Ze&&(be?Re(!1):(Re(!0),se({type:"view",revert:()=>Re(!1)})))},[Ze,be,se]),oi=i.useCallback((Le,we,Be)=>{B.openDetailTask(Le,we,Be),se({type:"modal",close:B.closeDetailTask})},[B,se]),Ti=i.useCallback(Le=>{B.openSettings(Le),se({type:"modal",close:ln})},[B,se,ln]),ir=i.useCallback(()=>{B.openNewTask(),se({type:"modal",close:B.closeNewTask})},[B,se]),Ki=i.useCallback(()=>{B.openPlanning(),se({type:"modal",close:B.closePlanning})},[B,se]),ua=i.useCallback(Le=>{B.openPlanningWithInitialPlan(Le),se({type:"modal",close:B.closePlanning})},[B,se]),ma=i.useCallback(()=>{B.resumePlanning(),se({type:"modal",close:B.closePlanning})},[B,se]),bi=i.useCallback(Le=>{B.openSubtaskBreakdown(Le),se({type:"modal",close:B.closeSubtask})},[B,se]),$n=i.useCallback(()=>{B.openGitHubImport(),se({type:"modal",close:B.closeGitHubImport})},[B,se]),Ia=i.useCallback(()=>{B.terminalOpen?B.toggleTerminal():(B.toggleTerminal(),se({type:"modal",close:B.closeTerminal}))},[B,se]),ha=i.useCallback((Le,we)=>{B.openFiles(Le,we),se({type:"modal",close:B.closeFiles})},[B,se]),Ji=i.useCallback((Le,we)=>{B.openFiles(we?.workspace,Le),se({type:"modal",close:B.closeFiles})},[B,se]),ar=i.useCallback(()=>{B.openTodos(),se({type:"modal",close:B.closeTodos})},[B,se]),rr=i.useCallback(()=>{B.openActivityLog(),se({type:"modal",close:B.closeActivityLog})},[B,se]),or=i.useCallback(()=>{B.openGitManager(),se({type:"modal",close:B.closeGitManager})},[B,se]),xi=i.useCallback(()=>{B.openSystemStats(),se({type:"modal",close:B.closeSystemStats})},[B,se]),Ta=i.useCallback(()=>{B.openSchedules(),se({type:"modal",close:B.closeSchedules})},[B,se]),Pa=i.useCallback(()=>{B.openScripts(),se({type:"modal",close:B.closeScripts})},[B,se]),$a=i.useCallback(()=>{B.openWorkflowSteps(),se({type:"modal",close:B.closeWorkflowSteps})},[B,se]),lr=i.useCallback(Le=>{B.openUsage(Le),se({type:"modal",close:B.closeUsage})},[B,se]),Da=i.useCallback(async(Le,we)=>{await B.runScript(Le,we),Ue({type:"modal",close:B.closeTerminal})},[B,Ue]),Qs=i.useCallback(()=>{B.closeSettings(),B.openModelOnboarding(),Ue({type:"modal",close:B.closeModelOnboarding})},[B,Ue]),Yi=i.useCallback(()=>{B.setFileWorkspace("project"),B.openFiles()},[B]),vi=i.useCallback(async()=>{ut(!0);try{await m()}finally{ut(!1)}},[m]),so=i.useCallback(Le=>{Q(Le),lt(void 0),ce("missions")},[ce]),Qi=i.useCallback(Le=>{Le.type==="planning"?B.openPlanningWithSession(Le.id):Le.type==="subtask"?B.openSubtaskWithSession(Le.id):Le.type==="mission_interview"?(Q(void 0),lt(Le.id),Ke(void 0),ce("missions")):(Le.type==="milestone_interview"||Le.type==="slice_interview")&&(lt(void 0),Q(void 0),Ke(Le.id),ce("missions"))},[ce,B]),cr=i.useCallback(()=>{},[]),yi=i.useCallback(()=>{},[]),[dr,ur]=i.useState(!1),[mr,La]=i.useState(!1),[U,Te]=i.useState(null),Qe=A3(r,o,dr);i.useEffect(()=>{!a||l===0||La(!0)},[a,l]),i.useEffect(()=>{let Le=!1;return d3(c.host).then(we=>{Le||Te(we)}),()=>{Le=!0}},[c.host,r.activeProfileId,r.desktopMode,r.host,r.profiles]),i.useEffect(()=>{r.host==="desktop-shell"&&r.desktopMode==="local"&&(r.localServer?.status!=="ready"||!r.localServer.port||window.location.port!==String(r.localServer.port)&&(window.location.href=`http://localhost:${r.localServer.port}`))},[r]),i.useEffect(()=>{if(r.host!=="desktop-shell"||r.desktopMode!=="remote")return;const Le=r.profiles.find(Be=>Be.id===r.activeProfileId);if(!Le||typeof window>"u")return;const we=M3(Le.serverUrl,Le.authToken??null);window.location.href!==we&&(window.location.href=we)},[r]);const Nt=!u&&!C&&d.length===0&&!y&&!!h,vn=()=>{if(Nt)return t.jsx(QF,{errorMessage:h??"Failed to fetch projects",isRetrying:nt,onRetry:vi,onManageConnection:a?()=>{a.openConnectionManager()}:void 0});if(be)return t.jsx("div",{className:"nodes-management-overlay",children:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(x3,{addToast:n,onClose:()=>Re(!1)})})})});if(De==="overview")return t.jsx(Cs,{children:t.jsx(j4,{projects:d,loading:u,onSelectProject:tn,onAddProject:is,onPauseProject:ps,onResumeProject:Ss,onRemoveProject:Ma,nodes:f})});const Le=Pe==="graph"?Oe:Mr(Pe)?Pe:null;return Le?t.jsx(Cs,{children:t.jsx(R6,{taskView:Le,context:{projectId:y?.id,tasks:w&&j.tasks.length>0?j.tasks:ge,workflowSteps:Ii,openTaskDetail:(we,Be)=>oi(we,Be),renderTaskCard:we=>t.jsx(Wo,{task:we,projectId:y?.id,onOpenDetail:Be=>oi(Be),addToast:n,workflowStepNameLookup:no,disableDrag:!0}),addToast:n}})}):Pe==="skills"?!Pt||!qe?null:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(y3,{addToast:n,projectId:y?.id,onClose:()=>ce("board")})})}):Pe==="chat"?t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(v3,{addToast:n,projectId:y?.id,experimentalFeatures:Hn})})}):Pe==="mailbox"?t.jsx(Cs,{children:t.jsx(vD,{projectId:y?.id,addToast:n,onUnreadCountChange:nn})}):Pe==="missions"?t.jsx(Cs,{children:t.jsx(pD,{isInline:!0,isOpen:!0,onClose:()=>{Q(void 0),lt(void 0),Ke(void 0),ce("board")},addToast:n,projectId:y?.id,onSelectTask:we=>{const Be=ge.find($t=>$t.id===we);Be&&oi(Be)},availableTasks:ge.map(we=>({id:we.id,title:we.title})),resumeSessionId:Ye,targetMissionId:wt,milestoneSliceResumeSessionId:ae,onMilestoneSliceResumeFetchError:()=>Ke(void 0)})}):Pe==="agents"&&Lt?t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(h3,{addToast:n,projectId:y?.id,onOpenTaskLogs:da,agentOnboardingEnabled:At})})}):Pe==="documents"?t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(p3,{projectId:y?.id,addToast:n,onOpenDetail:oi})})}):Pe==="stash-recovery"?t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(N3,{})})}):Pe==="insights"?!Pt||!qn?null:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(f3,{projectId:y?.id,addToast:n,onClose:()=>ce("board"),onCreateTask:Is})})}):Pe==="research"?!Pt||!Je?null:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(g3,{projectId:y?.id,addToast:n,onOpenSettings:we=>B.openSettings(we),readinessVersion:Ct})})}):Pe==="evals"?!Pt||!pt?null:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(b3,{projectId:y?.id,onOpenSettings:we=>B.openSettings(we),onOpenTaskDetail:we=>{Ja(we,y?.id).then(Be=>oi(Be)).catch(Be=>n(Be instanceof Error?Be.message:"Failed to open task detail","error"))}})})}):Pe==="memory"?!Pt||!ns?null:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(w3,{addToast:n,projectId:y?.id})})}):Pe==="reliability"?t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(k3,{})})}):Pe==="devserver"||Pe==="dev-server"?!Pt||!ss?null:t.jsx(Cs,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(j3,{addToast:n,projectId:y?.id})})}):Pe==="board"?t.jsxs(Cs,{children:[Mt&&!st?t.jsx(xz,{signal:_e,onDismiss:G}):null,t.jsx(rM,{tasks:Bt,projectId:y?.id,maxConcurrent:ze,onMoveTask:$e,onPauseTask:mt,onOpenDetail:oi,addToast:n,onQuickCreate:Mi,onNewTask:ir,onPlanningMode:ua,onSubtaskBreakdown:bi,autoMerge:Ut,onToggleAutoMerge:ys,globalPaused:gn,onUpdateTask:rt,onRetryTask:Ie,onArchiveTask:_t,onUnarchiveTask:We,onDeleteTask:tt,onArchiveAllDone:J,onLoadArchivedTasks:ke,searchQuery:T,availableModels:kn,onOpenDetailWithTab:Ri,favoriteProviders:te,favoriteModels:Fe,onToggleFavorite:Wi,onToggleModelFavorite:ri,taskStuckTimeoutMs:Ne,staleHighFanoutBlockerAgeThresholdMs:xt,onOpenMission:so,lastFetchTimeMs:it})]}):t.jsx(Cs,{children:t.jsx(u4,{tasks:w&&j.tasks.length>0?j.tasks:ge,projectId:y?.id,onMoveTask:$e,onRetryTask:Ie,onDeleteTask:tt,onPauseTask:mt,onUnpauseTask:jt,onArchiveTask:_t,onMergeTask:bt,onResetTask:Xe,onDuplicateTask:It,onOpenDetail:(we,Be)=>oi(we,void 0,Be),addToast:n,globalPaused:gn,onNewTask:ir,onQuickCreate:Mi,onPlanningMode:ua,onSubtaskBreakdown:bi,availableModels:kn,favoriteProviders:te,favoriteModels:Fe,onToggleFavorite:Wi,onToggleModelFavorite:ri,taskStuckTimeoutMs:Ne,searchQuery:T,lastFetchTimeMs:it,prAuthAvailable:qt})})},Kt=!B.modelOnboardingOpen&&yF(),Cn=!B.modelOnboardingOpen&&!Kt&&qr()&&!Sy();return t.jsx(N4,{value:{pushNav:se,replaceCurrent:Ue},children:t.jsx(zP,{openFile:Ji,children:t.jsx(v_,{value:on*C3,children:et?t.jsxs(t.Fragment,{children:[t.jsx(OE,{shellHost:c.host,onOpenSettings:Ti,onOpenGitHubImport:$n,onOpenPlanning:Ki,onResumePlanning:ma,activePlanningSessionCount:ne.length,onOpenUsage:lr,onOpenActivityLog:rr,onOpenSystemStats:xi,onOpenMailbox:()=>ht("mailbox"),mailboxUnreadCount:An,mailboxPendingApprovalCount:Dn,chatHasUnreadResponse:zt,stashOrphanCount:xn,onOpenSchedules:Ta,onOpenGitManager:or,onOpenNodes:ls,showNodesButton:Ze,onOpenWorkflowSteps:$a,onOpenScripts:Pa,onRunScript:Da,onToggleTerminal:Ia,onOpenFiles:ha,filesOpen:B.filesOpen,onOpenTodos:ar,todosOpen:B.todosOpen,todosEnabled:ms,globalPaused:gn,enginePaused:In,onToggleGlobalPause:hs,onToggleEnginePause:On,view:Pe,onChangeView:De==="project"&&y?ht:void 0,showSkillsTab:qe,showAgentsTab:Lt,searchQuery:T,onSearchChange:F,branchFilter:W,baseBranchFilter:D,branchOptions:pn,baseBranchOptions:Dt,onBranchFilterChange:P,onBaseBranchFilterChange:$,projects:q,currentProject:y,onSelectProject:tn,onViewAllProjects:Mn,projectId:y?.id,mobileNavEnabled:je,availableNodes:f,currentNode:p,onSelectNode:Le=>{Le===null?b():v(Le)},isRemote:w,experimentalFeatures:{insights:qn,memoryView:ns,devServer:ss,devServerView:ss,researchView:Je,evalsView:pt},pluginDashboardViews:Ee,shellConnectionControl:!je&&U?t.jsx(bb,{status:U,onError:Le=>n(Le,"error")}):void 0}),De==="project"&&y&&!be&&Pe!=="missions"&&!B.isPlanningOpen&&!ue&&t.jsx(pz,{sessions:Y,onResumeSession:Qi,onDismissSession:cr,onDismissAll:yi}),De==="project"&&y&&t.jsx(bz,{onOpenSettings:()=>B.openSettings("general")}),De==="project"&&y&&Kt&&t.jsx(Nz,{onResume:B.openModelOnboarding}),De==="project"&&y&&Cn&&t.jsx(Sz,{onOpenModelOnboarding:B.openModelOnboarding,onOpenSettings:Le=>B.openSettings(Le)}),De==="project"&&y&&_&&A&&X&&!H&&t.jsx(kz,{latestVersion:A,currentVersion:X,onDismiss:M}),De==="project"&&y&&wn?.taskIdIntegrity?.status==="anomaly"&&wn.taskIdIntegrity.recommendedAction&&t.jsx(wz,{report:wn.taskIdIntegrity,recommendedAction:wn.taskIdIntegrity.recommendedAction,onRefresh:(Le,we)=>{mn(Be=>Be?{...Be,status:Le.status==="anomaly"||!Be.database.healthy?"degraded":"ok",taskIdIntegrity:{...Le,recommendedAction:we}}:null)}}),De==="project"&&y&&!R&&z&&!Un&&t.jsx(wy,{hasAiProvider:x,hasGithub:k,onDismiss:kt}),De==="project"&&y&&Yt&&t.jsx(jz,{pendingCount:Math.max(Dn,1),onOpenMailbox:()=>ht("mailbox"),onDismiss:()=>{un.current.set(Yt.dedupeKey,Math.max(Date.now(),Yt.updatedAtMs)),kb(un.current),rn(null)}}),t.jsx("div",{className:`project-content${De==="project"&&y&&(!je||!dn)?" project-content--with-footer":""}${je&&!dn?" project-content--with-mobile-nav":""}`,children:vn()}),De==="project"&&y&&!be&&t.jsx(cz,{tasks:w&&j.tasks.length>0?j.tasks:ge,projectId:y.id,taskStuckTimeoutMs:Ne,staleHighFanoutBlockerAgeThresholdMs:xt,backgroundSessions:pe,backgroundGenerating:ie,backgroundNeedsInput:ve,onOpenBackgroundSession:Qi,onDismissBackgroundSession:L,lastFetchTimeMs:it,currentProjectPath:y.path,onOpenProjectDirectory:Yi,keyboardOpen:dn}),t.jsx(Ez,{view:Pe,onChangeView:De==="project"&&y?ht:()=>{},footerVisible:De==="project"&&!!y,modalOpen:B.anyModalOpen,keyboardOpen:dn,onOpenSettings:Ti,onOpenActivityLog:rr,onOpenSystemStats:xi,onOpenMailbox:()=>ht("mailbox"),onOpenNodes:ls,mailboxUnreadCount:An,mailboxPendingApprovalCount:Dn,chatHasUnreadResponse:zt,stashOrphanCount:xn,onOpenGitManager:or,onOpenWorkflowSteps:$a,onOpenSchedules:Ta,onOpenScripts:Pa,onToggleTerminal:Ia,onOpenFiles:ha,onOpenTodos:ar,todosOpen:B.todosOpen,onOpenGitHubImport:$n,onOpenPlanning:Ki,onResumePlanning:ma,activePlanningSessionCount:ne.length,onOpenUsage:()=>lr(null),onViewAllProjects:Mn,onRunScript:Da,projectId:y?.id,showSkillsTab:qe,experimentalFeatures:{insights:qn,memoryView:ns,devServer:ss,devServerView:ss,todoView:ms,researchView:Je,evalsView:pt,nodesView:Ze},pluginDashboardViews:Ee,shellConnectionControl:je&&U?t.jsx(bb,{status:U,onError:Le=>n(Le,"error")}):void 0}),De==="project"&&y&&Pe!=="chat"&&Pe!=="mailbox"&&Pe!=="insights"&&Pe!=="evals"&&Pe!=="devserver"&&Pe!=="dev-server"&&Pe!=="graph"&&!Mr(Pe)&&t.jsx(Yz,{projectId:y.id,addToast:n,showFAB:Sn,open:gt,onOpenChange:Wt,favoriteProviders:te,favoriteModels:Fe,onToggleFavorite:Wi,onToggleModelFavorite:ri}),t.jsx(YF,{projectId:y?.id,tasks:ge,projects:d,currentProject:y,addToast:n,toasts:e,removeToast:s,modalManager:B,projectActions:{handleAddProject:is,handleSetupComplete:Vn,handleModelOnboardingComplete:as},taskHandlers:{handleModalCreate:Aa,handlePlanningTaskCreated:Ai,handlePlanningTasksCreated:to,handleSubtaskTasksCreated:Ra,handleGitHubImport:gi},taskOperations:{moveTask:$e,deleteTask:tt,mergeTask:bt,retryTask:Ie,resetTask:Xe,duplicateTask:It},deepLink:{handleDetailClose:ca},settings:{prAuthAvailable:qt,themeMode:le,colorTheme:fe,dashboardFontScalePct:Ce,setThemeMode:Ae,setColorTheme:re,setDashboardFontScalePct:Z},onSettingsClose:ln,onReopenOnboarding:Qs}),t.jsx(u3,{open:fn}),a&&t.jsxs(t.Fragment,{children:[t.jsx(i3,{open:Qe,shellApi:a,shellState:r,onComplete:()=>ur(!0)}),t.jsx(a3,{open:mr,shellApi:a,shellState:r,onClose:()=>La(!1)})]})]}):t.jsxs(t.Fragment,{children:[t.jsx(ZF,{stage:Vt}),t.jsx(My,{toasts:e,onRemove:s})]})})})})}function I3(){return t.jsx(d6,{children:t.jsx(t3,{children:t.jsx(lF,{children:t.jsx(B6,{children:t.jsx(BE,{children:t.jsx(R3,{})})})})})})}function Yy(e){e.postMessage({type:"SKIP_WAITING"})}function jb(e){e.addEventListener("statechange",()=>{e.state==="installed"&&navigator.serviceWorker.controller&&Yy(e)})}function T3(){if(!("serviceWorker"in navigator))return;const e=!!navigator.serviceWorker.controller;let n=!1;navigator.serviceWorker.addEventListener("controllerchange",()=>{n||!e||(n=!0,sm("service worker activated new version"))}),navigator.serviceWorker.register("/sw.js").then(s=>{console.log("SW registered:",s.scope),s.waiting&&navigator.serviceWorker.controller&&Yy(s.waiting),s.installing&&jb(s.installing),s.addEventListener("updatefound",()=>{const a=s.installing;a&&jb(a)})}).catch(s=>{console.log("SW registration failed:",s)})}UN();pN();Gy();Hy();ow.createRoot(document.getElementById("root")).render(t.jsx(i.StrictMode,{children:t.jsx(fN,{children:t.jsx(I3,{})})}));T3();export{VO as $,Ls as A,es as B,ts as C,AN as D,y8 as E,Na as F,jc as G,bj as H,xu as I,Bn as J,Zl as K,St as L,Zo as M,vj as N,XB as O,Kn as P,JO as Q,bs as R,zi as S,Kr as T,ru as U,ds as V,mi as W,yn as X,zn as Y,us as Z,Tn as _,jn as a,R8 as a$,d1 as a0,LO as a1,OO as a2,u1 as a3,b8 as a4,m1 as a5,M5 as a6,A5 as a7,g0 as a8,Zu as a9,HB as aA,UB as aB,BB as aC,zB as aD,OB as aE,WN as aF,qo as aG,PB as aH,DB as aI,$B as aJ,GB as aK,VB as aL,WB as aM,KB as aN,$8 as aO,QB as aP,Ho as aQ,hu as aR,Uj as aS,Fi as aT,ah as aU,sk as aV,Es as aW,v4 as aX,Hs as aY,Lb as aZ,Ij as a_,Gr as aa,tr as ab,ti as ac,ni as ad,pi as ae,CB as af,RB as ag,AB as ah,sc as ai,IB as aj,EB as ak,TB as al,_B as am,MB as an,fs as ao,Wr as ap,Do as aq,Vs as ar,Zj as as,Ui as at,Ab as au,ia as av,jw as aw,LB as ax,FB as ay,qB as az,Wn as b,X5 as b$,I8 as b0,T8 as b1,P8 as b2,Pc as b3,r6 as b4,Ph as b5,lo as b6,Jg as b7,nE as b8,Qa as b9,Ks as bA,Ib as bB,oh as bC,na as bD,gB as bE,fB as bF,bB as bG,c5 as bH,l5 as bI,o5 as bJ,d5 as bK,v5 as bL,y5 as bM,g5 as bN,h5 as bO,p5 as bP,f5 as bQ,m5 as bR,u5 as bS,r5 as bT,b5 as bU,jL as bV,Y5 as bW,J5 as bX,n8 as bY,K5 as bZ,Q5 as b_,XC as ba,xB as bb,vB as bc,ZC as bd,Rz as be,nd as bf,tE as bg,Az as bh,jB as bi,NB as bj,yB as bk,wB as bl,kB as bm,SB as bn,iy as bo,Lz as bp,la as bq,Iy as br,YC as bs,vs as bt,ja as bu,wc as bv,_z as bw,qa as bx,$b as by,$z as bz,at as c,Q3 as c$,Z5 as c0,e8 as c1,z0 as c2,t8 as c3,om as c4,L0 as c5,O0 as c6,F0 as c7,D0 as c8,G5 as c9,T5 as cA,B5 as cB,O5 as cC,P5 as cD,F5 as cE,$5 as cF,z5 as cG,D5 as cH,L5 as cI,Rw as cJ,_S as cK,RS as cL,U5 as cM,MS as cN,H5 as cO,di as cP,G3 as cQ,qi as cR,e6 as cS,lL as cT,w5 as cU,L8 as cV,qN as cW,K3 as cX,Bg as cY,E8 as cZ,J3 as c_,_c as ca,zj as cb,Pr as cc,z8 as cd,B8 as ce,U8 as cf,H8 as cg,q8 as ch,V8 as ci,W8 as cj,F8 as ck,Vb as cl,Yk as cm,I as cn,oc as co,Wo as cp,$r as cq,S1 as cr,PN as cs,$N as ct,vS as cu,yS as cv,oB as cw,I5 as cx,R5 as cy,lB as cz,C8 as d,v8 as d$,a5 as d0,i5 as d1,HS as d2,IS as d3,Ci as d4,TS as d5,$S as d6,PS as d7,DS as d8,LS as d9,ZB as dA,CN as dB,Mc as dC,U3 as dD,jf as dE,H3 as dF,B3 as dG,q3 as dH,YB as dI,x5 as dJ,G8 as dK,J8 as dL,X8 as dM,Y8 as dN,K8 as dO,Q8 as dP,Z8 as dQ,Su as dR,hh as dS,h8 as dT,f8 as dU,VC as dV,ak as dW,Ka as dX,Os as dY,Fk as dZ,eB as d_,N5 as da,_8 as db,M8 as dc,A8 as dd,ra as de,F3 as df,z3 as dg,O8 as dh,X3 as di,pu as dj,js as dk,yL as dl,QO as dm,ZO as dn,eF as dp,ya as dq,ou as dr,nF as ds,e5 as dt,Y3 as du,t5 as dv,Z3 as dw,n5 as dx,s5 as dy,Ya as dz,N8 as e,Xo as e0,e$ as e1,xa as e2,g8 as e3,p8 as e4,k8 as e5,w8 as e6,Rb as e7,u8 as e8,d8 as e9,aB as eA,iB as eB,rB as eC,sB as eD,dB as eE,D8 as eF,JB as eG,S5 as eH,k5 as eI,j5 as eJ,Ej as eK,E5 as eL,_5 as eM,C5 as eN,i8 as ea,a8 as eb,DO as ec,Fa as ed,x8 as ee,l8 as ef,o8 as eg,b0 as eh,c8 as ei,m8 as ej,tB as ek,BC as el,r8 as em,s8 as en,hi as eo,W5 as ep,q5 as eq,V5 as er,V3 as es,W3 as et,nB as eu,cB as ev,vu as ew,mB as ex,hB as ey,uB as ez,Ja as f,S8 as g,Ws as h,Yr as i,Jn as j,gc as k,pB as l,Ms as m,c1 as n,j8 as o,ii as p,Py as q,FO as r,fi as s,Gn as t,_i as u,ai as v,cs as w,Rc as x,pl as y,Me as z};
|